Files
tokio/tokio-udp/tests/udp.rs
T

140 lines
3.9 KiB
Rust
Raw Normal View History

2019-06-27 02:41:36 +08:00
#![feature(async_await)]
2019-05-14 10:27:36 -07:00
#![deny(warnings, rust_2018_idioms)]
2016-08-02 23:56:01 -07:00
2019-06-27 02:41:36 +08:00
use tokio_udp::UdpSocket;
2016-08-02 23:56:01 -07:00
2019-06-27 02:41:36 +08:00
#[tokio::test]
async fn send_recv() -> std::io::Result<()> {
let mut sender = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?;
let mut receiver = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?;
2019-06-27 02:41:36 +08:00
sender.connect(&receiver.local_addr()?)?;
receiver.connect(&sender.local_addr()?)?;
2019-06-27 02:41:36 +08:00
let message = b"hello!";
sender.send(message).await?;
2019-06-27 02:41:36 +08:00
let mut recv_buf = [0u8; 32];
let len = receiver.recv(&mut recv_buf[..]).await?;
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
assert_eq!(&recv_buf[..len], message);
Ok(())
2016-08-17 09:29:05 -07:00
}
2016-08-02 23:56:01 -07:00
2019-06-27 02:41:36 +08:00
#[tokio::test]
async fn send_to_recv_from() -> std::io::Result<()> {
let mut sender = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?;
let mut receiver = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?;
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
let message = b"hello!";
let receiver_addr = receiver.local_addr()?;
sender.send_to(message, &receiver_addr).await?;
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
let mut recv_buf = [0u8; 32];
let (len, addr) = receiver.recv_from(&mut recv_buf[..]).await?;
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
assert_eq!(&recv_buf[..len], message);
assert_eq!(addr, sender.local_addr()?);
Ok(())
2017-09-11 15:56:41 +02:00
}
2019-07-09 05:47:31 +08:00
#[tokio::test]
async fn split() -> std::io::Result<()> {
let socket = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?;
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".parse().unwrap())?;
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".parse().unwrap())?;
let socket1 = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?;
let (s, _) = socket.split();
let (_, r1) = socket1.split();
assert!(s.reunite(r1).is_err());
Ok(())
}
2019-06-27 02:41:36 +08:00
// pub struct ByteCodec;
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// impl Decoder for ByteCodec {
// type Item = Vec<u8>;
// type Error = io::Error;
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<Vec<u8>>, io::Error> {
// let len = buf.len();
// Ok(Some(buf.split_to(len).to_vec()))
// }
// }
2018-02-07 01:41:31 +04:00
2019-06-27 02:41:36 +08:00
// impl Encoder for ByteCodec {
// type Item = Vec<u8>;
// type Error = io::Error;
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// fn encode(&mut self, data: Vec<u8>, buf: &mut BytesMut) -> Result<(), io::Error> {
// buf.reserve(data.len());
// buf.put(data);
// Ok(())
// }
// }
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// #[test]
// fn send_framed() {
// drop(env_logger::try_init());
2018-02-07 01:41:31 +04:00
2019-06-27 02:41:36 +08:00
// let mut a_soc = t!(UdpSocket::bind(&t!("127.0.0.1:0".parse())));
// let mut b_soc = t!(UdpSocket::bind(&t!("127.0.0.1:0".parse())));
// let a_addr = t!(a_soc.local_addr());
// let b_addr = t!(b_soc.local_addr());
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// {
// let a = UdpFramed::new(a_soc, ByteCodec);
// let b = UdpFramed::new(b_soc, ByteCodec);
2018-02-07 01:41:31 +04:00
2019-06-27 02:41:36 +08:00
// let msg = b"4567".to_vec();
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// let send = a.send((msg.clone(), b_addr));
// let recv = b.into_future().map_err(|e| e.0);
// let (sendt, received) = t!(send.join(recv).wait());
2018-02-07 01:41:31 +04:00
2019-06-27 02:41:36 +08:00
// let (data, addr) = received.0.unwrap();
// assert_eq!(msg, data);
// assert_eq!(a_addr, addr);
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// a_soc = sendt.into_inner();
// b_soc = received.1.into_inner();
// }
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// {
// let a = UdpFramed::new(a_soc, ByteCodec);
// let b = UdpFramed::new(b_soc, ByteCodec);
2018-02-07 01:41:31 +04:00
2019-06-27 02:41:36 +08:00
// let msg = b"".to_vec();
2017-09-11 15:56:41 +02:00
2019-06-27 02:41:36 +08:00
// let send = a.send((msg.clone(), b_addr));
// let recv = b.into_future().map_err(|e| e.0);
// let received = t!(send.join(recv).wait()).1;
2018-02-07 01:41:31 +04:00
2019-06-27 02:41:36 +08:00
// let (data, addr) = received.0.unwrap();
// assert_eq!(msg, data);
// assert_eq!(a_addr, addr);
// }
// }