@@ -1006,8 +1006,6 @@ mod dispatch_impl {
1006
1006
assert_eq ! ( err. description( ) , "event loop gone" ) ;
1007
1007
}
1008
1008
1009
-
1010
-
1011
1009
#[ test]
1012
1010
fn client_custom_executor ( ) {
1013
1011
let server = TcpListener :: bind ( "127.0.0.1:0" ) . unwrap ( ) ;
@@ -1046,6 +1044,45 @@ mod dispatch_impl {
1046
1044
assert_eq ! ( closes. load( Ordering :: Relaxed ) , 1 ) ;
1047
1045
}
1048
1046
1047
+ #[ test]
1048
+ fn client_body_mpsc ( ) {
1049
+ use futures:: Sink ;
1050
+ let _ = pretty_env_logger:: try_init ( ) ;
1051
+ let server = TcpListener :: bind ( "127.0.0.1:0" ) . unwrap ( ) ;
1052
+ let addr = server. local_addr ( ) . unwrap ( ) ;
1053
+ let mut core = Core :: new ( ) . unwrap ( ) ;
1054
+ let handle = core. handle ( ) ;
1055
+ let closes = Arc :: new ( AtomicUsize :: new ( 0 ) ) ;
1056
+
1057
+ let ( tx1, rx1) = oneshot:: channel ( ) ;
1058
+
1059
+ thread:: spawn ( move || {
1060
+ let mut sock = server. accept ( ) . unwrap ( ) . 0 ;
1061
+ sock. set_read_timeout ( Some ( Duration :: from_secs ( 5 ) ) ) . unwrap ( ) ;
1062
+ sock. set_write_timeout ( Some ( Duration :: from_secs ( 5 ) ) ) . unwrap ( ) ;
1063
+ let mut buf = [ 0 ; 4096 ] ;
1064
+ sock. read ( & mut buf) . expect ( "read 1" ) ;
1065
+ sock. write_all ( b"HTTP/1.1 200 OK\r \n Content-Length: 0\r \n \r \n " ) . unwrap ( ) ;
1066
+ let _ = tx1. send ( ( ) ) ;
1067
+ } ) ;
1068
+
1069
+ let uri = format ! ( "http://{}/a" , addr) . parse ( ) . unwrap ( ) ;
1070
+
1071
+ let client = Client :: configure ( )
1072
+ . connector ( DebugConnector ( HttpConnector :: new ( 1 , & handle) , closes. clone ( ) ) )
1073
+ . build ( & handle) ;
1074
+ let mut req = Request :: new ( Method :: Post , uri) ;
1075
+ let ( tx, body) = hyper:: Body :: pair ( ) ;
1076
+ req. set_body ( body) ;
1077
+ let res = client. request ( req) . and_then ( move |res| {
1078
+ assert_eq ! ( res. status( ) , hyper:: StatusCode :: Ok ) ;
1079
+ res. body ( ) . concat2 ( )
1080
+ } ) ;
1081
+ let rx = rx1. map_err ( |_| hyper:: Error :: Io ( io:: Error :: new ( io:: ErrorKind :: Other , "thread panicked" ) ) ) ;
1082
+ let send = tx. send_all ( :: futures:: stream:: iter_ok ( vec ! [ "hello" ; 2 ] ) . map ( hyper:: Chunk :: from) . map ( Ok ) ) . then ( |_| Ok ( ( ) ) ) ;
1083
+ core. run ( res. join ( send) . join ( rx) . map ( |r| r. 0 ) ) . unwrap ( ) ;
1084
+ }
1085
+
1049
1086
struct DebugConnector ( HttpConnector , Arc < AtomicUsize > ) ;
1050
1087
1051
1088
impl Service for DebugConnector {
0 commit comments