@@ -193,44 +193,52 @@ fn id_of_output(output: &Output) -> Result<RequestId> {
193
193
mod tests {
194
194
use super :: * ;
195
195
use crate :: Error :: Rpc ;
196
+ use bytes:: Bytes ;
197
+ use http_body_util:: BodyExt ;
198
+ use http_body_util:: Full ;
196
199
use jsonrpc_core:: ErrorCode ;
197
200
use std:: net:: TcpListener ;
198
201
199
202
fn get_available_port ( ) -> Option < u16 > {
200
203
Some ( TcpListener :: bind ( ( "127.0.0.1" , 0 ) ) . ok ( ) ?. local_addr ( ) . ok ( ) ?. port ( ) )
201
204
}
202
205
203
- async fn server ( req : hyper:: Request < hyper:: Body > ) -> hyper:: Result < hyper:: Response < hyper:: Body > > {
204
- use hyper:: body:: HttpBody ;
205
-
206
+ async fn server ( req : hyper:: Request < hyper:: body:: Incoming > ) -> hyper:: Result < hyper:: Response < Full < Bytes > > > {
206
207
let expected = r#"{"jsonrpc":"2.0","method":"eth_getAccounts","params":[],"id":0}"# ;
207
208
let response = r#"{"jsonrpc":"2.0","id":0,"result":"x"}"# ;
208
209
209
210
assert_eq ! ( req. method( ) , & hyper:: Method :: POST ) ;
210
211
assert_eq ! ( req. uri( ) . path( ) , "/" ) ;
211
212
let mut content: Vec < u8 > = vec ! [ ] ;
212
- let mut body = req. into_body ( ) ;
213
- while let Some ( Ok ( chunk ) ) = body. data ( ) . await {
214
- content. extend ( & * chunk ) ;
215
- }
213
+ let body = req. into_body ( ) ;
214
+ let body = body. collect ( ) . await ? . to_bytes ( ) . to_vec ( ) ;
215
+ content. extend ( body ) ;
216
+
216
217
assert_eq ! ( std:: str :: from_utf8( & * content) , Ok ( expected) ) ;
217
218
218
- Ok ( hyper:: Response :: new ( response . into ( ) ) )
219
+ Ok ( hyper:: Response :: new ( Full :: new ( Bytes :: from ( response ) ) ) )
219
220
}
220
221
221
222
#[ tokio:: test]
222
223
async fn should_make_a_request ( ) {
223
- use hyper:: service:: { make_service_fn, service_fn} ;
224
-
224
+ use hyper:: service:: service_fn;
225
+ use hyper_util:: rt:: TokioExecutor ;
226
+ use hyper_util:: rt:: TokioIo ;
227
+ use hyper_util:: server:: conn:: auto;
228
+ use tokio:: net:: TcpListener ;
225
229
// given
226
230
let addr = format ! ( "127.0.0.1:{}" , get_available_port( ) . unwrap( ) ) ;
227
- // start server
228
- let service = make_service_fn ( |_| async { Ok :: < _ , hyper:: Error > ( service_fn ( server) ) } ) ;
229
- let server = hyper:: Server :: bind ( & addr. parse ( ) . unwrap ( ) ) . serve ( service) ;
230
231
let addr_clone = addr. clone ( ) ;
232
+ // start server
233
+ let listener = TcpListener :: bind ( addr. clone ( ) ) . await . unwrap ( ) ;
234
+ let ( stream, _) = listener. accept ( ) . await . unwrap ( ) ;
235
+ let io = TokioIo :: new ( stream) ;
231
236
tokio:: spawn ( async move {
232
237
println ! ( "Listening on http://{}" , addr_clone) ;
233
- server. await . unwrap ( ) ;
238
+ auto:: Builder :: new ( TokioExecutor :: new ( ) )
239
+ . serve_connection ( io, service_fn ( server) )
240
+ . await
241
+ . unwrap ( ) ;
234
242
} ) ;
235
243
236
244
// when
@@ -245,9 +253,14 @@ mod tests {
245
253
246
254
#[ tokio:: test]
247
255
async fn catch_generic_json_error_for_batched_request ( ) {
248
- use hyper:: service:: { make_service_fn, service_fn} ;
249
-
250
- async fn handler ( _req : hyper:: Request < hyper:: Body > ) -> hyper:: Result < hyper:: Response < hyper:: Body > > {
256
+ use http_body_util:: Full ;
257
+ use hyper:: service:: service_fn;
258
+ use hyper_util:: rt:: TokioExecutor ;
259
+ use hyper_util:: rt:: TokioIo ;
260
+ use hyper_util:: server:: conn:: auto;
261
+ use tokio:: net:: TcpListener ;
262
+
263
+ async fn handler ( _req : hyper:: Request < hyper:: body:: Incoming > ) -> hyper:: Result < hyper:: Response < Full < Bytes > > > {
251
264
let response = r#"{
252
265
"jsonrpc":"2.0",
253
266
"error":{
@@ -256,18 +269,22 @@ mod tests {
256
269
},
257
270
"id":null
258
271
}"# ;
259
- Ok ( hyper:: Response :: < hyper :: Body > :: new ( response. into ( ) ) )
272
+ Ok ( hyper:: Response :: new ( Full :: new ( Bytes :: from ( response) ) ) )
260
273
}
261
274
262
- // given
275
+ // Given
263
276
let addr = format ! ( "127.0.0.1:{}" , get_available_port( ) . unwrap( ) ) ;
264
- // start server
265
- let service = make_service_fn ( |_| async { Ok :: < _ , hyper:: Error > ( service_fn ( handler) ) } ) ;
266
- let server = hyper:: Server :: bind ( & addr. parse ( ) . unwrap ( ) ) . serve ( service) ;
267
277
let addr_clone = addr. clone ( ) ;
278
+ // start server
279
+ let listener = TcpListener :: bind ( addr. clone ( ) ) . await . unwrap ( ) ;
280
+ let ( stream, _) = listener. accept ( ) . await . unwrap ( ) ;
281
+ let io = TokioIo :: new ( stream) ;
268
282
tokio:: spawn ( async move {
269
283
println ! ( "Listening on http://{}" , addr_clone) ;
270
- server. await . unwrap ( ) ;
284
+ auto:: Builder :: new ( TokioExecutor :: new ( ) )
285
+ . serve_connection ( io, service_fn ( handler) )
286
+ . await
287
+ . unwrap ( ) ;
271
288
} ) ;
272
289
273
290
// when
0 commit comments