@@ -33,34 +33,14 @@ use tokio_io::{AsyncRead, AsyncWrite};
33
33
use hyper:: { Body , Request , Response , StatusCode } ;
34
34
use hyper:: client:: Client ;
35
35
use hyper:: server:: conn:: Http ;
36
+ use hyper:: server:: Server ;
36
37
use hyper:: service:: { service_fn, service_fn_ok, Service } ;
37
38
38
39
fn tcp_bind ( addr : & SocketAddr ) -> :: tokio:: io:: Result < TcpListener > {
39
40
let std_listener = StdTcpListener :: bind ( addr) . unwrap ( ) ;
40
41
TcpListener :: from_std ( std_listener, & Handle :: default ( ) )
41
42
}
42
43
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
- }
64
44
65
45
#[ test]
66
46
fn get_should_ignore_body ( ) {
@@ -706,7 +686,7 @@ fn http_10_keep_alive() {
706
686
fn disable_keep_alive ( ) {
707
687
let foo_bar = b"foo bar baz" ;
708
688
let server = serve_with_options ( ServeOptions {
709
- keep_alive_disabled : true ,
689
+ keep_alive : false ,
710
690
.. Default :: default ( )
711
691
} ) ;
712
692
server. reply ( )
@@ -1562,6 +1542,48 @@ fn streaming_body() {
1562
1542
rt. block_on ( fut. join ( rx) ) . unwrap ( ) ;
1563
1543
}
1564
1544
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
+
1565
1587
// -------------------------------------------------
1566
1588
// the Server that is used to run all the tests with
1567
1589
// -------------------------------------------------
@@ -1738,16 +1760,19 @@ fn serve() -> Serve {
1738
1760
serve_with_options ( Default :: default ( ) )
1739
1761
}
1740
1762
1763
+ #[ derive( Clone , Copy ) ]
1741
1764
struct ServeOptions {
1742
- keep_alive_disabled : bool ,
1765
+ keep_alive : bool ,
1766
+ http1_only : bool ,
1743
1767
pipeline : bool ,
1744
1768
timeout : Option < Duration > ,
1745
1769
}
1746
1770
1747
1771
impl Default for ServeOptions {
1748
1772
fn default ( ) -> Self {
1749
1773
ServeOptions {
1750
- keep_alive_disabled : false ,
1774
+ keep_alive : true ,
1775
+ http1_only : false ,
1751
1776
pipeline : false ,
1752
1777
timeout : None ,
1753
1778
}
@@ -1765,44 +1790,47 @@ fn serve_with_options(options: ServeOptions) -> Serve {
1765
1790
1766
1791
let addr = ( [ 127 , 0 , 0 , 1 ] , 0 ) . into ( ) ;
1767
1792
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
+ ) ;
1773
1799
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
+ /*
1774
1814
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)
1777
1818
.serve_addr(&addr, move || {
1778
1819
let ts = TestService {
1779
1820
tx: Arc::new(Mutex::new(msg_tx.clone())),
1780
- _timeout : dur ,
1821
+ _timeout: options.timeout ,
1781
1822
reply: reply_rx.clone(),
1782
1823
};
1783
1824
service_fn(move |req| ts.call(req))
1784
1825
})
1785
1826
.expect("bind to address");
1827
+ */
1786
1828
1787
1829
addr_tx. send (
1788
- serve
1789
- . incoming_ref ( )
1790
- . local_addr ( )
1830
+ server. local_addr ( )
1791
1831
) . expect ( "server addr tx" ) ;
1792
1832
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
1806
1834
. select ( shutdown_rx)
1807
1835
. then ( |_| Ok :: < ( ) , ( ) > ( ( ) ) ) ;
1808
1836
0 commit comments