summaryrefslogtreecommitdiffstats
path: root/tokio/tests/udp.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tokio/tests/udp.rs')
-rw-r--r--tokio/tests/udp.rs72
1 files changed, 72 insertions, 0 deletions
diff --git a/tokio/tests/udp.rs b/tokio/tests/udp.rs
new file mode 100644
index 00000000..a2e4f3a6
--- /dev/null
+++ b/tokio/tests/udp.rs
@@ -0,0 +1,72 @@
+#![warn(rust_2018_idioms)]
+
+use tokio::net::UdpSocket;
+
+#[tokio::test]
+async fn send_recv() -> std::io::Result<()> {
+ let mut sender = UdpSocket::bind("127.0.0.1:0").await?;
+ let mut receiver = UdpSocket::bind("127.0.0.1:0").await?;
+
+ sender.connect(receiver.local_addr()?).await?;
+ receiver.connect(sender.local_addr()?).await?;
+
+ let message = b"hello!";
+ sender.send(message).await?;
+
+ let mut recv_buf = [0u8; 32];
+ let len = receiver.recv(&mut recv_buf[..]).await?;
+
+ assert_eq!(&recv_buf[..len], message);
+ Ok(())
+}
+
+#[tokio::test]
+async fn send_to_recv_from() -> std::io::Result<()> {
+ let mut sender = UdpSocket::bind("127.0.0.1:0").await?;
+ let mut receiver = UdpSocket::bind("127.0.0.1:0").await?;
+
+ let message = b"hello!";
+ let receiver_addr = receiver.local_addr()?;
+ sender.send_to(message, &receiver_addr).await?;
+
+ let mut recv_buf = [0u8; 32];
+ let (len, addr) = receiver.recv_from(&mut recv_buf[..]).await?;
+
+ assert_eq!(&recv_buf[..len], message);
+ assert_eq!(addr, sender.local_addr()?);
+ Ok(())
+}
+
+#[tokio::test]
+async fn split() -> std::io::Result<()> {
+ let socket = UdpSocket::bind("127.0.0.1:0").await?;
+ let (mut r, mut s) = socket.split();
+
+ let msg = b"hello";
+ let addr = s.as_ref().local_addr()?;
+ tokio::spawn(async move {
+ s.send_to(msg, &addr).await.unwrap();
+ });
+ let mut recv_buf = [0u8; 32];
+ let (len, _) = r.recv_from(&mut recv_buf[..]).await?;
+ assert_eq!(&recv_buf[..len], msg);
+ Ok(())
+}
+
+#[tokio::test]
+async fn reunite() -> std::io::Result<()> {
+ let socket = UdpSocket::bind("127.0.0.1:0").await?;
+ let (s, r) = socket.split();
+ assert!(s.reunite(r).is_ok());
+ Ok(())
+}
+
+#[tokio::test]
+async fn reunite_error() -> std::io::Result<()> {
+ let socket = UdpSocket::bind("127.0.0.1:0").await?;
+ let socket1 = UdpSocket::bind("127.0.0.1:0").await?;
+ let (s, _) = socket.split();
+ let (_, r1) = socket1.split();
+ assert!(s.reunite(r1).is_err());
+ Ok(())
+}