summaryrefslogtreecommitdiffstats
path: root/tokio/tests/uds_datagram.rs
diff options
context:
space:
mode:
authorcssivision <cssivision@gmail.com>2020-07-24 13:03:47 +0800
committerGitHub <noreply@github.com>2020-07-23 22:03:47 -0700
commitff7125ec7b4fe009b80cc033edbf338883eb0435 (patch)
treeead45fdae5a766df7283b7ddf0edd56ba357c193 /tokio/tests/uds_datagram.rs
parent7a60a0b362337c9986a8d8bf59f458691685bf3e (diff)
net: introduce split on UnixDatagram (#2557)
Diffstat (limited to 'tokio/tests/uds_datagram.rs')
-rw-r--r--tokio/tests/uds_datagram.rs50
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(())
+}