| #![warn(rust_2018_idioms)] |
| #![cfg(feature = "full")] |
| |
| use std::io::IoSlice; |
| use tokio::io::{AsyncReadExt, AsyncWriteExt}; |
| |
| const HELLO: &[u8] = b"hello world..."; |
| |
| #[tokio::test] |
| async fn write_vectored() { |
| let (mut client, mut server) = tokio::io::duplex(64); |
| |
| let ret = client |
| .write_vectored(&[IoSlice::new(HELLO), IoSlice::new(HELLO)]) |
| .await |
| .unwrap(); |
| assert_eq!(ret, HELLO.len() * 2); |
| |
| client.flush().await.unwrap(); |
| drop(client); |
| |
| let mut buf = Vec::with_capacity(HELLO.len() * 2); |
| let bytes_read = server.read_to_end(&mut buf).await.unwrap(); |
| |
| assert_eq!(bytes_read, HELLO.len() * 2); |
| assert_eq!(buf, [HELLO, HELLO].concat()); |
| } |
| |
| #[tokio::test] |
| async fn write_vectored_and_shutdown() { |
| let (mut client, mut server) = tokio::io::duplex(64); |
| |
| let ret = client |
| .write_vectored(&[IoSlice::new(HELLO), IoSlice::new(HELLO)]) |
| .await |
| .unwrap(); |
| assert_eq!(ret, HELLO.len() * 2); |
| |
| client.shutdown().await.unwrap(); |
| drop(client); |
| |
| let mut buf = Vec::with_capacity(HELLO.len() * 2); |
| let bytes_read = server.read_to_end(&mut buf).await.unwrap(); |
| |
| assert_eq!(bytes_read, HELLO.len() * 2); |
| assert_eq!(buf, [HELLO, HELLO].concat()); |
| } |