1 #![warn(rust_2018_idioms)]
2 #![cfg(feature = "full")]
3
4 use tokio::net::UdpSocket;
5
6 #[tokio::test]
send_recv() -> std::io::Result<()>7 async fn send_recv() -> std::io::Result<()> {
8 let mut sender = UdpSocket::bind("127.0.0.1:0").await?;
9 let mut receiver = UdpSocket::bind("127.0.0.1:0").await?;
10
11 sender.connect(receiver.local_addr()?).await?;
12 receiver.connect(sender.local_addr()?).await?;
13
14 let message = b"hello!";
15 sender.send(message).await?;
16
17 let mut recv_buf = [0u8; 32];
18 let len = receiver.recv(&mut recv_buf[..]).await?;
19
20 assert_eq!(&recv_buf[..len], message);
21 Ok(())
22 }
23
24 #[tokio::test]
send_to_recv_from() -> std::io::Result<()>25 async fn send_to_recv_from() -> std::io::Result<()> {
26 let mut sender = UdpSocket::bind("127.0.0.1:0").await?;
27 let mut receiver = UdpSocket::bind("127.0.0.1:0").await?;
28
29 let message = b"hello!";
30 let receiver_addr = receiver.local_addr()?;
31 sender.send_to(message, &receiver_addr).await?;
32
33 let mut recv_buf = [0u8; 32];
34 let (len, addr) = receiver.recv_from(&mut recv_buf[..]).await?;
35
36 assert_eq!(&recv_buf[..len], message);
37 assert_eq!(addr, sender.local_addr()?);
38 Ok(())
39 }
40
41 #[tokio::test]
split() -> std::io::Result<()>42 async fn split() -> std::io::Result<()> {
43 let socket = UdpSocket::bind("127.0.0.1:0").await?;
44 let (mut r, mut s) = socket.split();
45
46 let msg = b"hello";
47 let addr = s.as_ref().local_addr()?;
48 tokio::spawn(async move {
49 s.send_to(msg, &addr).await.unwrap();
50 });
51 let mut recv_buf = [0u8; 32];
52 let (len, _) = r.recv_from(&mut recv_buf[..]).await?;
53 assert_eq!(&recv_buf[..len], msg);
54 Ok(())
55 }
56
57 #[tokio::test]
reunite() -> std::io::Result<()>58 async fn reunite() -> std::io::Result<()> {
59 let socket = UdpSocket::bind("127.0.0.1:0").await?;
60 let (s, r) = socket.split();
61 assert!(s.reunite(r).is_ok());
62 Ok(())
63 }
64
65 #[tokio::test]
reunite_error() -> std::io::Result<()>66 async fn reunite_error() -> std::io::Result<()> {
67 let socket = UdpSocket::bind("127.0.0.1:0").await?;
68 let socket1 = UdpSocket::bind("127.0.0.1:0").await?;
69 let (s, _) = socket.split();
70 let (_, r1) = socket1.split();
71 assert!(s.reunite(r1).is_err());
72 Ok(())
73 }
74