| #![cfg(not(target_os = "unknown"))] |
| |
| use async_std::io; |
| use async_std::net::{TcpListener, TcpStream}; |
| use async_std::prelude::*; |
| use async_std::task; |
| |
| const THE_WINTERS_TALE: &[u8] = b" |
| Each your doing, |
| So singular in each particular, |
| Crowns what you are doing in the present deed, |
| That all your acts are queens. |
| "; |
| |
| #[test] |
| fn connect() -> io::Result<()> { |
| task::block_on(async { |
| let listener = TcpListener::bind("127.0.0.1:0").await?; |
| let addr = listener.local_addr()?; |
| let t = task::spawn(async move { listener.accept().await }); |
| |
| let stream2 = TcpStream::connect(&addr).await?; |
| let stream1 = t.await?.0; |
| |
| assert_eq!(stream1.peer_addr()?, stream2.local_addr()?); |
| assert_eq!(stream2.peer_addr()?, stream1.local_addr()?); |
| |
| Ok(()) |
| }) |
| } |
| |
| #[test] |
| fn incoming_read() -> io::Result<()> { |
| task::block_on(async { |
| let listener = TcpListener::bind("127.0.0.1:0").await?; |
| let addr = listener.local_addr()?; |
| |
| task::spawn(async move { |
| let mut stream = TcpStream::connect(&addr).await?; |
| stream.write_all(THE_WINTERS_TALE).await?; |
| io::Result::Ok(()) |
| }); |
| |
| let mut buf = vec![0; 1024]; |
| let mut incoming = listener.incoming(); |
| let mut stream = incoming.next().await.unwrap()?; |
| |
| let n = stream.read(&mut buf).await?; |
| assert_eq!(&buf[..n], THE_WINTERS_TALE); |
| |
| Ok(()) |
| }) |
| } |
| |
| #[test] |
| fn smoke_std_stream_to_async_listener() -> io::Result<()> { |
| use std::io::Write; |
| |
| task::block_on(async { |
| let listener = TcpListener::bind("127.0.0.1:0").await?; |
| let addr = listener.local_addr()?; |
| |
| let mut std_stream = std::net::TcpStream::connect(&addr)?; |
| std_stream.write_all(THE_WINTERS_TALE)?; |
| |
| let mut buf = vec![0; 1024]; |
| let mut incoming = listener.incoming(); |
| let mut stream = incoming.next().await.unwrap()?; |
| |
| let n = stream.read(&mut buf).await?; |
| assert_eq!(&buf[..n], THE_WINTERS_TALE); |
| |
| Ok(()) |
| }) |
| } |
| |
| #[test] |
| fn smoke_async_stream_to_std_listener() -> io::Result<()> { |
| use std::io::Read; |
| |
| let std_listener = std::net::TcpListener::bind("127.0.0.1:0")?; |
| let addr = std_listener.local_addr()?; |
| |
| task::block_on(async move { |
| let mut stream = TcpStream::connect(&addr).await?; |
| stream.write_all(THE_WINTERS_TALE).await?; |
| io::Result::Ok(()) |
| })?; |
| |
| let mut buf = vec![0; 1024]; |
| let mut incoming = std_listener.incoming(); |
| let mut stream = incoming.next().unwrap()?; |
| |
| let n = stream.read(&mut buf).unwrap(); |
| assert_eq!(&buf[..n], THE_WINTERS_TALE); |
| |
| Ok(()) |
| } |
| |
| #[test] |
| fn cloned_streams() -> io::Result<()> { |
| task::block_on(async { |
| let listener = TcpListener::bind("127.0.0.1:0").await?; |
| let addr = listener.local_addr()?; |
| |
| let mut stream = TcpStream::connect(&addr).await?; |
| let mut cloned_stream = stream.clone(); |
| let mut incoming = listener.incoming(); |
| let mut write_stream = incoming.next().await.unwrap()?; |
| write_stream.write_all(b"Each your doing").await?; |
| |
| let mut buf = [0; 15]; |
| stream.read_exact(&mut buf[..8]).await?; |
| cloned_stream.read_exact(&mut buf[8..]).await?; |
| |
| assert_eq!(&buf[..15], b"Each your doing"); |
| |
| Ok(()) |
| }) |
| } |