Skip to content

Commit 853266d

Browse files
committed
test(server): add http1_only server test
1 parent b459adb commit 853266d

File tree

1 file changed

+76
-48
lines changed

1 file changed

+76
-48
lines changed

tests/server.rs

+76-48
Original file line numberDiff line numberDiff line change
@@ -33,34 +33,14 @@ use tokio_io::{AsyncRead, AsyncWrite};
3333
use hyper::{Body, Request, Response, StatusCode};
3434
use hyper::client::Client;
3535
use hyper::server::conn::Http;
36+
use hyper::server::Server;
3637
use hyper::service::{service_fn, service_fn_ok, Service};
3738

3839
fn tcp_bind(addr: &SocketAddr) -> ::tokio::io::Result<TcpListener> {
3940
let std_listener = StdTcpListener::bind(addr).unwrap();
4041
TcpListener::from_std(std_listener, &Handle::default())
4142
}
4243

43-
#[test]
44-
fn try_h2() {
45-
let server = serve();
46-
let addr_str = format!("http://{}", server.addr());
47-
48-
let mut rt = Runtime::new().expect("runtime new");
49-
50-
rt.block_on(hyper::rt::lazy(move || {
51-
let client = Client::builder()
52-
.http2_only(true)
53-
.build_http::<hyper::Body>();
54-
let uri = addr_str.parse().expect("server addr should parse");
55-
56-
client.get(uri)
57-
.and_then(|_res| { Ok(()) })
58-
.map(|_| { () })
59-
.map_err(|_e| { () })
60-
})).unwrap();
61-
62-
assert_eq!(server.body(), b"");
63-
}
6444

6545
#[test]
6646
fn get_should_ignore_body() {
@@ -706,7 +686,7 @@ fn http_10_keep_alive() {
706686
fn disable_keep_alive() {
707687
let foo_bar = b"foo bar baz";
708688
let server = serve_with_options(ServeOptions {
709-
keep_alive_disabled: true,
689+
keep_alive: false,
710690
.. Default::default()
711691
});
712692
server.reply()
@@ -1562,6 +1542,48 @@ fn streaming_body() {
15621542
rt.block_on(fut.join(rx)).unwrap();
15631543
}
15641544

1545+
#[test]
1546+
fn try_h2() {
1547+
let server = serve();
1548+
let addr_str = format!("http://{}", server.addr());
1549+
1550+
let mut rt = Runtime::new().expect("runtime new");
1551+
1552+
rt.block_on(hyper::rt::lazy(move || {
1553+
let client = Client::builder()
1554+
.http2_only(true)
1555+
.build_http::<hyper::Body>();
1556+
let uri = addr_str.parse().expect("server addr should parse");
1557+
1558+
client.get(uri)
1559+
.and_then(|_res| { Ok(()) })
1560+
.map(|_| { () })
1561+
.map_err(|_e| { () })
1562+
})).unwrap();
1563+
1564+
assert_eq!(server.body(), b"");
1565+
}
1566+
1567+
#[test]
1568+
fn http1_only() {
1569+
let server = serve_with_options(ServeOptions {
1570+
http1_only: true,
1571+
.. Default::default()
1572+
});
1573+
let addr_str = format!("http://{}", server.addr());
1574+
1575+
let mut rt = Runtime::new().expect("runtime new");
1576+
1577+
rt.block_on(hyper::rt::lazy(move || {
1578+
let client = Client::builder()
1579+
.http2_only(true)
1580+
.build_http::<hyper::Body>();
1581+
let uri = addr_str.parse().expect("server addr should parse");
1582+
1583+
client.get(uri)
1584+
})).unwrap_err();
1585+
}
1586+
15651587
// -------------------------------------------------
15661588
// the Server that is used to run all the tests with
15671589
// -------------------------------------------------
@@ -1738,16 +1760,19 @@ fn serve() -> Serve {
17381760
serve_with_options(Default::default())
17391761
}
17401762

1763+
#[derive(Clone, Copy)]
17411764
struct ServeOptions {
1742-
keep_alive_disabled: bool,
1765+
keep_alive: bool,
1766+
http1_only: bool,
17431767
pipeline: bool,
17441768
timeout: Option<Duration>,
17451769
}
17461770

17471771
impl Default for ServeOptions {
17481772
fn default() -> Self {
17491773
ServeOptions {
1750-
keep_alive_disabled: false,
1774+
keep_alive: true,
1775+
http1_only: false,
17511776
pipeline: false,
17521777
timeout: None,
17531778
}
@@ -1765,44 +1790,47 @@ fn serve_with_options(options: ServeOptions) -> Serve {
17651790

17661791
let addr = ([127, 0, 0, 1], 0).into();
17671792

1768-
let keep_alive = !options.keep_alive_disabled;
1769-
let pipeline = options.pipeline;
1770-
let dur = options.timeout;
1771-
1772-
let thread_name = format!("test-server-{:?}", dur);
1793+
let thread_name = format!(
1794+
"test-server-{}",
1795+
thread::current()
1796+
.name()
1797+
.unwrap_or("<unknown test case name>")
1798+
);
17731799
let thread = thread::Builder::new().name(thread_name).spawn(move || {
1800+
let server = Server::bind(&addr)
1801+
.http1_only(options.http1_only)
1802+
.http1_keepalive(options.keep_alive)
1803+
.http1_pipeline_flush(options.pipeline)
1804+
.serve(move || {
1805+
let ts = TestService {
1806+
tx: Arc::new(Mutex::new(msg_tx.clone())),
1807+
_timeout: options.timeout,
1808+
reply: reply_rx.clone(),
1809+
};
1810+
service_fn(move |req| ts.call(req))
1811+
});
1812+
1813+
/*
17741814
let serve = Http::new()
1775-
.keep_alive(keep_alive)
1776-
.pipeline_flush(pipeline)
1815+
.http1_only(options.http1_only)
1816+
.keep_alive(options.keep_alive)
1817+
.pipeline_flush(options.pipeline)
17771818
.serve_addr(&addr, move || {
17781819
let ts = TestService {
17791820
tx: Arc::new(Mutex::new(msg_tx.clone())),
1780-
_timeout: dur,
1821+
_timeout: options.timeout,
17811822
reply: reply_rx.clone(),
17821823
};
17831824
service_fn(move |req| ts.call(req))
17841825
})
17851826
.expect("bind to address");
1827+
*/
17861828

17871829
addr_tx.send(
1788-
serve
1789-
.incoming_ref()
1790-
.local_addr()
1830+
server.local_addr()
17911831
).expect("server addr tx");
17921832

1793-
// spawn_all() is private for now, so just duplicate it here
1794-
let spawn_all = serve.for_each(|connecting| {
1795-
let fut = connecting
1796-
.map_err(|never| -> hyper::Error { match never {} })
1797-
.flatten()
1798-
.map_err(|e| println!("server error: {}", e));
1799-
tokio::spawn(fut);
1800-
Ok(())
1801-
}).map_err(|e| {
1802-
println!("accept error: {}", e)
1803-
});
1804-
1805-
let fut = spawn_all
1833+
let fut = server
18061834
.select(shutdown_rx)
18071835
.then(|_| Ok::<(), ()>(()));
18081836

0 commit comments

Comments
 (0)