Skip to content

Commit 3227f79

Browse files
committed
update hyper to version 1.0
1 parent fa9cd7b commit 3227f79

File tree

2 files changed

+43
-24
lines changed

2 files changed

+43
-24
lines changed

Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ hex-literal = "0.4"
6767
wasm-bindgen-test = "0.3.19"
6868

6969
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
70-
hyper = { version = "0.14", default-features = false, features = ["server"] }
70+
hyper = { version = "1", default-features = false, features = ["server"] }
71+
hyper-util = { version = "0.1", features = ["full"] }
72+
http-body-util = "0.1"
7173
tokio = { version = "1.0", features = ["full"] }
7274
tokio-stream = { version = "0.1", features = ["net"] }
7375

src/transports/http.rs

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -193,44 +193,52 @@ fn id_of_output(output: &Output) -> Result<RequestId> {
193193
mod tests {
194194
use super::*;
195195
use crate::Error::Rpc;
196+
use bytes::Bytes;
197+
use http_body_util::BodyExt;
198+
use http_body_util::Full;
196199
use jsonrpc_core::ErrorCode;
197200
use std::net::TcpListener;
198201

199202
fn get_available_port() -> Option<u16> {
200203
Some(TcpListener::bind(("127.0.0.1", 0)).ok()?.local_addr().ok()?.port())
201204
}
202205

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>>> {
206207
let expected = r#"{"jsonrpc":"2.0","method":"eth_getAccounts","params":[],"id":0}"#;
207208
let response = r#"{"jsonrpc":"2.0","id":0,"result":"x"}"#;
208209

209210
assert_eq!(req.method(), &hyper::Method::POST);
210211
assert_eq!(req.uri().path(), "/");
211212
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+
216217
assert_eq!(std::str::from_utf8(&*content), Ok(expected));
217218

218-
Ok(hyper::Response::new(response.into()))
219+
Ok(hyper::Response::new(Full::new(Bytes::from(response))))
219220
}
220221

221222
#[tokio::test]
222223
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;
225229
// given
226230
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);
230231
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);
231236
tokio::spawn(async move {
232237
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();
234242
});
235243

236244
// when
@@ -245,9 +253,14 @@ mod tests {
245253

246254
#[tokio::test]
247255
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>>> {
251264
let response = r#"{
252265
"jsonrpc":"2.0",
253266
"error":{
@@ -256,18 +269,22 @@ mod tests {
256269
},
257270
"id":null
258271
}"#;
259-
Ok(hyper::Response::<hyper::Body>::new(response.into()))
272+
Ok(hyper::Response::new(Full::new(Bytes::from(response))))
260273
}
261274

262-
// given
275+
// Given
263276
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);
267277
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);
268282
tokio::spawn(async move {
269283
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();
271288
});
272289

273290
// when

0 commit comments

Comments
 (0)