1 #![warn(rust_2018_idioms)]
2 #![cfg(feature = "full")]
3 
4 use std::io::IoSlice;
5 use tokio::io::{AsyncReadExt, AsyncWriteExt};
6 
7 const HELLO: &[u8] = b"hello world...";
8 
9 #[tokio::test]
write_vectored()10 async fn write_vectored() {
11     let (mut client, mut server) = tokio::io::duplex(64);
12 
13     let ret = client
14         .write_vectored(&[IoSlice::new(HELLO), IoSlice::new(HELLO)])
15         .await
16         .unwrap();
17     assert_eq!(ret, HELLO.len() * 2);
18 
19     client.flush().await.unwrap();
20     drop(client);
21 
22     let mut buf = Vec::with_capacity(HELLO.len() * 2);
23     let bytes_read = server.read_to_end(&mut buf).await.unwrap();
24 
25     assert_eq!(bytes_read, HELLO.len() * 2);
26     assert_eq!(buf, [HELLO, HELLO].concat());
27 }
28 
29 #[tokio::test]
write_vectored_and_shutdown()30 async fn write_vectored_and_shutdown() {
31     let (mut client, mut server) = tokio::io::duplex(64);
32 
33     let ret = client
34         .write_vectored(&[IoSlice::new(HELLO), IoSlice::new(HELLO)])
35         .await
36         .unwrap();
37     assert_eq!(ret, HELLO.len() * 2);
38 
39     client.shutdown().await.unwrap();
40     drop(client);
41 
42     let mut buf = Vec::with_capacity(HELLO.len() * 2);
43     let bytes_read = server.read_to_end(&mut buf).await.unwrap();
44 
45     assert_eq!(bytes_read, HELLO.len() * 2);
46     assert_eq!(buf, [HELLO, HELLO].concat());
47 }
48