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