@@ -822,6 +822,16 @@ mod tests {
822
822
stream. read_exact ( & mut buf) . timeout ( _10_SEC) . await . unwrap ( ) ;
823
823
}
824
824
825
+ #[ crate :: test( tarantool = "crate" ) ]
826
+ async fn read_clone ( ) {
827
+ let mut stream = TcpStream :: connect_timeout ( "localhost" , listen_port ( ) , _10_SEC) . unwrap ( ) ;
828
+ let cloned = stream. clone ( ) ;
829
+ drop ( cloned) ;
830
+ // Read greeting
831
+ let mut buf = vec ! [ 0 ; 128 ] ;
832
+ stream. read_exact ( & mut buf) . timeout ( _10_SEC) . await . unwrap ( ) ;
833
+ }
834
+
825
835
#[ crate :: test( tarantool = "crate" ) ]
826
836
async fn read_timeout ( ) {
827
837
let mut stream = TcpStream :: connect_timeout ( "localhost" , listen_port ( ) , _10_SEC) . unwrap ( ) ;
@@ -867,6 +877,39 @@ mod tests {
867
877
assert_eq ! ( buf, vec![ 1 , 2 , 3 , 4 , 5 ] )
868
878
}
869
879
880
+ #[ crate :: test( tarantool = "crate" ) ]
881
+ fn write_clone ( ) {
882
+ let ( sender, receiver) = std:: sync:: mpsc:: channel ( ) ;
883
+ let listener = TcpListener :: bind ( "127.0.0.1:0" ) . unwrap ( ) ;
884
+ let addr = listener. local_addr ( ) . unwrap ( ) ;
885
+ // Spawn listener
886
+ thread:: spawn ( move || {
887
+ for stream in listener. incoming ( ) {
888
+ let mut stream = stream. unwrap ( ) ;
889
+ let mut buf = vec ! [ ] ;
890
+ <std:: net:: TcpStream as std:: io:: Read >:: read_to_end ( & mut stream, & mut buf) . unwrap ( ) ;
891
+ sender. send ( buf) . unwrap ( ) ;
892
+ }
893
+ } ) ;
894
+ // Send data
895
+ {
896
+ fiber:: block_on ( async {
897
+ let mut stream =
898
+ TcpStream :: connect_timeout ( "localhost" , addr. port ( ) , _10_SEC) . unwrap ( ) ;
899
+ let cloned = stream. clone ( ) ;
900
+ drop ( cloned) ;
901
+ timeout:: timeout ( _10_SEC, stream. write_all ( & [ 1 , 2 , 3 ] ) )
902
+ . await
903
+ . unwrap ( ) ;
904
+ timeout:: timeout ( _10_SEC, stream. write_all ( & [ 4 , 5 ] ) )
905
+ . await
906
+ . unwrap ( ) ;
907
+ } ) ;
908
+ }
909
+ let buf = receiver. recv_timeout ( Duration :: from_secs ( 5 ) ) . unwrap ( ) ;
910
+ assert_eq ! ( buf, vec![ 1 , 2 , 3 , 4 , 5 ] )
911
+ }
912
+
870
913
#[ crate :: test( tarantool = "crate" ) ]
871
914
fn split ( ) {
872
915
let ( sender, receiver) = std:: sync:: mpsc:: channel ( ) ;
0 commit comments