diff options
author | cssivision <cssivision@gmail.com> | 2020-07-24 13:03:47 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-23 22:03:47 -0700 |
commit | ff7125ec7b4fe009b80cc033edbf338883eb0435 (patch) | |
tree | ead45fdae5a766df7283b7ddf0edd56ba357c193 /tokio/tests/uds_datagram.rs | |
parent | 7a60a0b362337c9986a8d8bf59f458691685bf3e (diff) |
net: introduce split on UnixDatagram (#2557)
Diffstat (limited to 'tokio/tests/uds_datagram.rs')
-rw-r--r-- | tokio/tests/uds_datagram.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tokio/tests/uds_datagram.rs b/tokio/tests/uds_datagram.rs index dd995237..cfb1c649 100644 --- a/tokio/tests/uds_datagram.rs +++ b/tokio/tests/uds_datagram.rs @@ -3,6 +3,7 @@ #![cfg(unix)] use tokio::net::UnixDatagram; +use tokio::try_join; use std::io; @@ -41,3 +42,52 @@ async fn echo() -> io::Result<()> { Ok(()) } + +#[tokio::test] +async fn split() -> std::io::Result<()> { + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("split.sock"); + let socket = UnixDatagram::bind(path.clone())?; + let (mut r, mut s) = socket.into_split(); + + let msg = b"hello"; + let ((), ()) = try_join! { + async { + s.send_to(msg, path).await?; + io::Result::Ok(()) + }, + async { + let mut recv_buf = [0u8; 32]; + let (len, _) = r.recv_from(&mut recv_buf[..]).await?; + assert_eq!(&recv_buf[..len], msg); + Ok(()) + }, + }?; + + Ok(()) +} + +#[tokio::test] +async fn reunite() -> std::io::Result<()> { + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("reunite.sock"); + let socket = UnixDatagram::bind(path)?; + let (s, r) = socket.into_split(); + assert!(s.reunite(r).is_ok()); + Ok(()) +} + +#[tokio::test] +async fn reunite_error() -> std::io::Result<()> { + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("reunit.sock"); + let dir = tempfile::tempdir().unwrap(); + let path1 = dir.path().join("reunit.sock"); + let socket = UnixDatagram::bind(path)?; + let socket1 = UnixDatagram::bind(path1)?; + + let (s, _) = socket.into_split(); + let (_, r1) = socket1.into_split(); + assert!(s.reunite(r1).is_err()); + Ok(()) +} |