From ff7125ec7b4fe009b80cc033edbf338883eb0435 Mon Sep 17 00:00:00 2001 From: cssivision Date: Fri, 24 Jul 2020 13:03:47 +0800 Subject: net: introduce split on UnixDatagram (#2557) --- tokio/tests/uds_datagram.rs | 50 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'tokio/tests/uds_datagram.rs') 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(()) +} -- cgit v1.2.3