Skip to content

Commit 7d9af50

Browse files
committed
test: add test for tcp clone working fine
1 parent 75e63d3 commit 7d9af50

File tree

1 file changed

+43
-0
lines changed
  • tarantool/src/network/client

1 file changed

+43
-0
lines changed

tarantool/src/network/client/tcp.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,16 @@ mod tests {
822822
stream.read_exact(&mut buf).timeout(_10_SEC).await.unwrap();
823823
}
824824

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+
825835
#[crate::test(tarantool = "crate")]
826836
async fn read_timeout() {
827837
let mut stream = TcpStream::connect_timeout("localhost", listen_port(), _10_SEC).unwrap();
@@ -867,6 +877,39 @@ mod tests {
867877
assert_eq!(buf, vec![1, 2, 3, 4, 5])
868878
}
869879

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+
870913
#[crate::test(tarantool = "crate")]
871914
fn split() {
872915
let (sender, receiver) = std::sync::mpsc::channel();

0 commit comments

Comments
 (0)