Skip to content

Commit 53a437c

Browse files
committed
chore(tests): fixup re-enabled tests
1 parent 821fa03 commit 53a437c

File tree

3 files changed

+62
-76
lines changed

3 files changed

+62
-76
lines changed

tests/client.rs

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,17 +1478,16 @@ mod dispatch_impl {
14781478
assert_eq!(vec, b"bar=foo");
14791479
}
14801480

1481-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
14821481
#[test]
14831482
fn alpn_h2() {
14841483
use hyper::Response;
14851484
use hyper::server::conn::Http;
14861485
use hyper::service::service_fn;
1487-
use tokio_tcp::TcpListener;
1486+
use tokio_net::tcp::TcpListener;
14881487

14891488
let _ = pretty_env_logger::try_init();
14901489
let mut rt = Runtime::new().unwrap();
1491-
let listener = TcpListener::bind(&"127.0.0.1:0".parse().unwrap()).unwrap();
1490+
let mut listener = TcpListener::bind(&"127.0.0.1:0".parse().unwrap()).unwrap();
14921491
let addr = listener.local_addr().unwrap();
14931492
let mut connector = DebugConnector::new();
14941493
connector.alpn_h2 = true;
@@ -1497,22 +1496,17 @@ mod dispatch_impl {
14971496
let client = Client::builder()
14981497
.build::<_, ::hyper::Body>(connector);
14991498

1500-
let mut incoming = listener.incoming();
1501-
let srv = incoming
1502-
.try_next()
1503-
.map_err(|_| unreachable!())
1504-
.and_then(|item| {
1505-
let socket = item.unwrap();
1506-
Http::new()
1507-
.http2_only(true)
1508-
.serve_connection(socket, service_fn(|req| async move {
1509-
assert_eq!(req.headers().get("host"), None);
1510-
Ok::<_, hyper::Error>(Response::new(Body::empty()))
1511-
}))
1512-
})
1513-
.map_err(|e| panic!("server error: {}", e));
1514-
1515-
rt.block_on(srv).unwrap();
1499+
rt.spawn(async move {
1500+
let (socket, _addr) = listener.accept().await.expect("accept");
1501+
Http::new()
1502+
.http2_only(true)
1503+
.serve_connection(socket, service_fn(|req| async move {
1504+
assert_eq!(req.headers().get("host"), None);
1505+
Ok::<_, hyper::Error>(Response::new(Body::empty()))
1506+
}))
1507+
.await
1508+
.expect("server");
1509+
});
15161510

15171511
assert_eq!(connects.load(Ordering::SeqCst), 0);
15181512

@@ -2097,7 +2091,6 @@ mod conn {
20972091
assert_eq!(vec, b"bar=foo");
20982092
}
20992093

2100-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
21012094
#[test]
21022095
fn http2_detect_conn_eof() {
21032096
use futures_util::future;

tests/server.rs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use std::net::{TcpStream, Shutdown, SocketAddr};
1414
use std::io::{self, Read, Write};
1515
use std::sync::atomic::{AtomicBool, Ordering};
1616
use std::sync::mpsc;
17-
use std::sync::{Arc};
17+
use std::sync::{Arc, Mutex};
1818
use std::net::{TcpListener as StdTcpListener};
1919
use std::pin::Pin;
2020
use std::task::{Context, Poll};
@@ -29,12 +29,10 @@ use futures_util::stream::StreamExt;
2929
use futures_util::try_future::{self, TryFutureExt};
3030
use futures_util::try_stream::TryStreamExt;
3131
use http::header::{HeaderName, HeaderValue};
32+
use tokio_net::driver::Handle;
3233
use tokio_net::tcp::{TcpListener, TcpStream as TkTcpStream};
3334
use tokio::runtime::current_thread::Runtime;
34-
use tokio::reactor::Handle;
35-
use tokio::runtime::current_thread::Runtime;
3635
use tokio_io::{AsyncRead, AsyncWrite};
37-
use tokio_tcp::{TcpListener, TcpStream as TkTcpStream};
3836
use tokio_timer::Delay;
3937

4038
use hyper::{Body, Request, Response, StatusCode, Version};
@@ -306,7 +304,6 @@ mod response_body_lengths {
306304
});
307305
}
308306

309-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
310307
#[test]
311308
fn http2_auto_response_with_known_length() {
312309
use hyper::body::Payload;
@@ -335,7 +332,6 @@ mod response_body_lengths {
335332
}).unwrap();
336333
}
337334

338-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
339335
#[test]
340336
fn http2_auto_response_with_conflicting_lengths() {
341337
use hyper::body::Payload;
@@ -1522,7 +1518,6 @@ fn http1_response_with_http2_version() {
15221518
}).unwrap();
15231519
}
15241520

1525-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
15261521
#[test]
15271522
fn try_h2() {
15281523
let server = serve();
@@ -1545,7 +1540,6 @@ fn try_h2() {
15451540
assert_eq!(server.body(), b"");
15461541
}
15471542

1548-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
15491543
#[test]
15501544
fn http1_only() {
15511545
let server = serve_opts()
@@ -1564,7 +1558,6 @@ fn http1_only() {
15641558
}).unwrap_err();
15651559
}
15661560

1567-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
15681561
#[test]
15691562
fn http2_service_error_sends_reset_reason() {
15701563
use std::error::Error;
@@ -1596,7 +1589,6 @@ fn http2_service_error_sends_reset_reason() {
15961589
assert_eq!(h2_err.reason(), Some(h2::Reason::INADEQUATE_SECURITY));
15971590
}
15981591

1599-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
16001592
#[test]
16011593
fn http2_body_user_error_sends_reset_reason() {
16021594
use std::error::Error;
@@ -1653,7 +1645,6 @@ impl hyper::service::Service for Svc {
16531645
}
16541646
}
16551647

1656-
#[ignore] // Re-enable as soon as HTTP/2.0 is supported again.
16571648
#[test]
16581649
fn http2_service_poll_ready_error_sends_goaway() {
16591650
use std::error::Error;
@@ -1742,7 +1733,7 @@ fn skips_content_length_and_body_for_304_responses() {
17421733
struct Serve {
17431734
addr: SocketAddr,
17441735
msg_rx: mpsc::Receiver<Msg>,
1745-
reply_tx: spmc::Sender<Reply>,
1736+
reply_tx: Mutex<spmc::Sender<Reply>>,
17461737
shutdown_signal: Option<oneshot::Sender<()>>,
17471738
thread: Option<thread::JoinHandle<()>>,
17481739
}
@@ -1785,44 +1776,46 @@ impl Serve {
17851776
type BoxError = Box<dyn std::error::Error + Send + Sync>;
17861777

17871778
struct ReplyBuilder<'a> {
1788-
tx: &'a spmc::Sender<Reply>,
1779+
tx: &'a Mutex<spmc::Sender<Reply>>,
17891780
}
17901781

17911782
impl<'a> ReplyBuilder<'a> {
17921783
fn status(self, status: hyper::StatusCode) -> Self {
1793-
self.tx.send(Reply::Status(status)).unwrap();
1784+
self.tx.lock().unwrap().send(Reply::Status(status)).unwrap();
17941785
self
17951786
}
17961787

17971788
fn version(self, version: hyper::Version) -> Self {
1798-
self.tx.send(Reply::Version(version)).unwrap();
1789+
self.tx.lock().unwrap().send(Reply::Version(version)).unwrap();
17991790
self
18001791
}
18011792

18021793
fn header<V: AsRef<str>>(self, name: &str, value: V) -> Self {
18031794
let name = HeaderName::from_bytes(name.as_bytes()).expect("header name");
18041795
let value = HeaderValue::from_str(value.as_ref()).expect("header value");
1805-
self.tx.send(Reply::Header(name, value)).unwrap();
1796+
self.tx.lock().unwrap().send(Reply::Header(name, value)).unwrap();
18061797
self
18071798
}
18081799

18091800
fn body<T: AsRef<[u8]>>(self, body: T) {
1810-
self.tx.send(Reply::Body(body.as_ref().to_vec().into())).unwrap();
1801+
self.tx.lock().unwrap().send(Reply::Body(body.as_ref().to_vec().into())).unwrap();
18111802
}
18121803

18131804
fn body_stream(self, body: Body) {
1814-
self.tx.send(Reply::Body(body)).unwrap();
1805+
self.tx.lock().unwrap().send(Reply::Body(body)).unwrap();
18151806
}
18161807

18171808
#[allow(dead_code)]
18181809
fn error<E: Into<BoxError>>(self, err: E) {
1819-
self.tx.send(Reply::Error(err.into())).unwrap();
1810+
self.tx.lock().unwrap().send(Reply::Error(err.into())).unwrap();
18201811
}
18211812
}
18221813

18231814
impl<'a> Drop for ReplyBuilder<'a> {
18241815
fn drop(&mut self) {
1825-
let _ = self.tx.send(Reply::End);
1816+
if let Ok(mut tx) = self.tx.lock() {
1817+
let _ = tx.send(Reply::End);
1818+
}
18261819
}
18271820
}
18281821

@@ -2036,7 +2029,7 @@ impl ServeOptions {
20362029

20372030
Serve {
20382031
msg_rx: msg_rx,
2039-
reply_tx: reply_tx,
2032+
reply_tx: Mutex::new(reply_tx),
20402033
addr: addr,
20412034
shutdown_signal: Some(shutdown_tx),
20422035
thread: Some(thread),

tests/support/mod.rs

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
pub extern crate hyper;
22
pub extern crate tokio;
3+
extern crate futures_util;
34

5+
use std::future::Future;
6+
use std::pin::Pin;
47
use std::sync::{Arc, Mutex, atomic::{AtomicUsize, Ordering}};
5-
use std::time::{Duration, Instant};
8+
use std::time::{Duration/*, Instant*/};
69

710
use crate::hyper::{Body, Client, Request, Response, Server, Version};
811
use crate::hyper::client::HttpConnector;
9-
use crate::hyper::service::service_fn;
12+
use crate::hyper::service::{make_service_fn, service_fn};
1013

1114
pub use std::net::SocketAddr;
12-
pub use self::futures::{future, Future, Stream};
13-
pub use self::futures_channel::oneshot;
15+
pub use self::futures_util::{future, try_future, FutureExt as _, StreamExt as _, TryFutureExt as _, TryStreamExt as _};
16+
//pub use self::futures_channel::oneshot;
1417
pub use self::hyper::{HeaderMap, StatusCode};
1518
pub use self::tokio::runtime::current_thread::Runtime;
1619

@@ -324,10 +327,10 @@ pub fn __run_test(cfg: __TestConfig) {
324327
let serve_handles = Arc::new(Mutex::new(
325328
cfg.server_msgs
326329
));
327-
let new_service = move || {
330+
let new_service = make_service_fn(move |_| {
328331
// Move a clone into the service_fn
329332
let serve_handles = serve_handles.clone();
330-
hyper::service::service_fn(move |req: Request<Body>| {
333+
future::ok::<_, hyper::Error>(service_fn(move |req: Request<Body>| {
331334
let (sreq, sres) = serve_handles.lock()
332335
.unwrap()
333336
.remove(0);
@@ -341,7 +344,7 @@ pub fn __run_test(cfg: __TestConfig) {
341344
let sbody = sreq.body;
342345
req.into_body()
343346
.try_concat()
344-
.map(move |body| {
347+
.map_ok(move |body| {
345348
assert_eq!(body.as_ref(), sbody.as_slice(), "client body");
346349

347350
let mut res = Response::builder()
@@ -351,8 +354,8 @@ pub fn __run_test(cfg: __TestConfig) {
351354
*res.headers_mut() = sres.headers;
352355
res
353356
})
354-
})
355-
};
357+
}))
358+
});
356359

357360
let serve = hyper::server::conn::Http::new()
358361
.http2_only(cfg.server_version == 2)
@@ -365,7 +368,7 @@ pub fn __run_test(cfg: __TestConfig) {
365368
let mut addr = serve.incoming_ref().local_addr();
366369
let expected_connections = cfg.connections;
367370
let server = serve
368-
.fold(0, move |cnt, connecting| {
371+
.try_fold(0, move |cnt, connecting| {
369372
let cnt = cnt + 1;
370373
assert!(
371374
cnt <= expected_connections,
@@ -374,14 +377,14 @@ pub fn __run_test(cfg: __TestConfig) {
374377
cnt
375378
);
376379
let fut = connecting
377-
.map_err(|never| -> hyper::Error { match never {} })
378-
.flatten()
379-
.map_err(|e| panic!("server connection error: {}", e));
380+
.then(|res| res.expect("connecting"))
381+
.map(|conn_res| conn_res.expect("server connection error"));
380382
crate::tokio::spawn(fut);
381-
Ok::<_, hyper::Error>(cnt)
383+
future::ok::<_, hyper::Error>(cnt)
382384
})
383-
.map(|_| ())
384-
.map_err(|e| panic!("serve error: {}", e));
385+
.map(|res| {
386+
let _ = res.expect("serve error");
387+
});
385388

386389
rt.spawn(server);
387390

@@ -418,39 +421,37 @@ pub fn __run_test(cfg: __TestConfig) {
418421
}
419422
res.into_body().try_concat()
420423
})
421-
.map(move |body| {
424+
.map_ok(move |body| {
422425
assert_eq!(body.as_ref(), cbody.as_slice(), "server body");
423426
})
424-
.map_err(|e| panic!("client error: {}", e))
427+
.map(|res| res.expect("client error"))
425428
});
426429

427430

428-
let client_futures: Box<dyn Future<Item=(), Error=()> + Send> = if cfg.parallel {
431+
let client_futures: Pin<Box<dyn Future<Output = ()> + Send>> = if cfg.parallel {
429432
let mut client_futures = vec![];
430433
for (creq, cres) in cfg.client_msgs {
431434
client_futures.push(make_request(&client, creq, cres));
432435
}
433436
drop(client);
434-
Box::new(future::join_all(client_futures).map(|_| ()))
437+
Box::pin(future::join_all(client_futures).map(|_| ()))
435438
} else {
436-
let mut client_futures: Box<dyn Future<Item=Client<HttpConnector>, Error=()> + Send> =
437-
Box::new(future::ok(client));
439+
let mut client_futures: Pin<Box<dyn Future<Output=Client<HttpConnector>> + Send>> =
440+
Box::pin(future::ready(client));
438441
for (creq, cres) in cfg.client_msgs {
439442
let mk_request = make_request.clone();
440-
client_futures = Box::new(
443+
client_futures = Box::pin(
441444
client_futures
442-
.and_then(move |client| {
445+
.then(move |client| {
443446
let fut = mk_request(&client, creq, cres);
444447
fut.map(move |()| client)
445448
})
446449
);
447450
}
448-
Box::new(client_futures.map(|_| ()))
451+
Box::pin(client_futures.map(|_| ()))
449452
};
450453

451-
let client_futures = client_futures.map(|_| ());
452-
rt.block_on(client_futures)
453-
.expect("shutdown succeeded");
454+
rt.block_on(client_futures);
454455
}
455456

456457
struct ProxyConfig {
@@ -459,7 +460,7 @@ struct ProxyConfig {
459460
version: usize,
460461
}
461462

462-
fn naive_proxy(cfg: ProxyConfig) -> (SocketAddr, impl Future<Item = (), Error = ()>) {
463+
fn naive_proxy(cfg: ProxyConfig) -> (SocketAddr, impl Future<Output = ()>) {
463464
let client = Client::builder()
464465
.keep_alive_timeout(Duration::from_secs(10))
465466
.http2_only(cfg.version == 2)
@@ -470,19 +471,18 @@ fn naive_proxy(cfg: ProxyConfig) -> (SocketAddr, impl Future<Item = (), Error =
470471
let counter = AtomicUsize::new(0);
471472

472473
let srv = Server::bind(&([127, 0, 0, 1], 0).into())
473-
.serve(move || {
474+
.serve(make_service_fn(move |_| {
474475
let prev = counter.fetch_add(1, Ordering::Relaxed);
475476
assert!(max_connections >= prev + 1, "proxy max connections");
476477
let client = client.clone();
477-
service_fn(move |mut req| {
478+
future::ok::<_, hyper::Error>(service_fn(move |mut req| {
478479
let uri = format!("http://{}{}", dst_addr, req.uri().path())
479480
.parse()
480481
.expect("proxy new uri parse");
481482
*req.uri_mut() = uri;
482483
client.request(req)
483-
})
484-
485-
});
484+
}))
485+
}));
486486
let proxy_addr = srv.local_addr();
487-
(proxy_addr, srv.map_err(|err| panic!("proxy error: {}", err)))
487+
(proxy_addr, srv.map(|res| res.expect("proxy error")))
488488
}

0 commit comments

Comments
 (0)