]>
git.proxmox.com Git - rustc.git/blob - vendor/tokio/tests/buffered.rs
1 #![warn(rust_2018_idioms)]
2 #![cfg(feature = "full")]
4 use tokio
::net
::TcpListener
;
5 use tokio_test
::assert_ok
;
7 use std
::io
::prelude
::*;
8 use std
::net
::TcpStream
;
12 async
fn echo_server() {
13 const N
: usize = 1024;
15 let srv
= assert_ok
!(TcpListener
::bind("127.0.0.1:0").await
);
16 let addr
= assert_ok
!(srv
.local_addr());
18 let msg
= "foo bar baz";
20 let t
= thread
::spawn(move || {
21 let mut s
= assert_ok
!(TcpStream
::connect(&addr
));
23 let t2
= thread
::spawn(move || {
24 let mut s
= assert_ok
!(TcpStream
::connect(&addr
));
25 let mut b
= vec
![0; msg
.len() * N
];
26 assert_ok
!(s
.read_exact(&mut b
));
30 let mut expected
= Vec
::<u8>::new();
32 expected
.extend(msg
.as_bytes());
33 let res
= assert_ok
!(s
.write(msg
.as_bytes()));
34 assert_eq
!(res
, msg
.len());
40 let (mut a
, _
) = assert_ok
!(srv
.accept().await
);
41 let (mut b
, _
) = assert_ok
!(srv
.accept().await
);
43 let n
= assert_ok
!(tokio
::io
::copy(&mut a
, &mut b
).await
);
45 let (expected
, t2
) = t
.join().unwrap();
46 let actual
= t2
.join().unwrap();
48 assert
!(expected
== actual
);
49 assert_eq
!(n
, msg
.len() as u64 * 1024);