diff options
Diffstat (limited to 'third_party/rust/tokio-uds/tests/stream.rs')
-rw-r--r-- | third_party/rust/tokio-uds/tests/stream.rs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/third_party/rust/tokio-uds/tests/stream.rs b/third_party/rust/tokio-uds/tests/stream.rs new file mode 100644 index 0000000000..ebb1835243 --- /dev/null +++ b/third_party/rust/tokio-uds/tests/stream.rs @@ -0,0 +1,55 @@ +#![cfg(unix)] + +extern crate futures; +extern crate tokio; +extern crate tokio_uds; + +extern crate tempfile; + +use tokio_uds::*; + +use tokio::io; +use tokio::runtime::current_thread::Runtime; + +use futures::{Future, Stream}; +use futures::sync::oneshot; +use tempfile::Builder; + +macro_rules! t { + ($e:expr) => (match $e { + Ok(e) => e, + Err(e) => panic!("{} failed with {:?}", stringify!($e), e), + }) +} + +#[test] +fn echo() { + let dir = Builder::new().prefix("tokio-uds-tests").tempdir().unwrap(); + let sock_path = dir.path().join("connect.sock"); + + let mut rt = Runtime::new().unwrap(); + + let server = t!(UnixListener::bind(&sock_path)); + let (tx, rx) = oneshot::channel(); + + rt.spawn({ + server.incoming() + .into_future() + .and_then(move |(sock, _)| { + tx.send(sock.unwrap()).unwrap(); + Ok(()) + }) + .map_err(|e| panic!("err={:?}", e)) + }); + + let client = rt.block_on(UnixStream::connect(&sock_path)).unwrap(); + let server = rt.block_on(rx).unwrap(); + + // Write to the client + rt.block_on(io::write_all(client, b"hello")).unwrap(); + + // Read from the server + let (_, buf) = rt.block_on(io::read_to_end(server, vec![])).unwrap(); + + assert_eq!(buf, b"hello"); +} |