Skip to content

Commit 4030c3c

Browse files
committed
feat: tests
1 parent 9e64dff commit 4030c3c

2 files changed

Lines changed: 145 additions & 10 deletions

File tree

compio-net/src/udp.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -397,12 +397,9 @@ impl UdpSocket {
397397
&self,
398398
buffer: T,
399399
addr: A,
400-
flags: i32,
401400
) -> BufResult<usize, impl Future<Output = T> + use<A, T>> {
402401
super::first_addr_buf_zerocopy(addr, buffer, |addr, buffer| async move {
403-
self.inner
404-
.send_to_zerocopy(buffer, &addr.into(), flags)
405-
.await
402+
self.inner.send_to_zerocopy(buffer, &addr.into(), 0).await
406403
})
407404
.await
408405
}
@@ -415,11 +412,10 @@ impl UdpSocket {
415412
&self,
416413
buffer: T,
417414
addr: A,
418-
flags: i32,
419415
) -> BufResult<usize, impl Future<Output = T> + use<A, T>> {
420416
super::first_addr_buf_zerocopy(addr, buffer, |addr, buffer| async move {
421417
self.inner
422-
.send_to_zerocopy_vectored(buffer, &addr.into(), flags)
418+
.send_to_zerocopy_vectored(buffer, &addr.into(), 0)
423419
.await
424420
})
425421
.await
@@ -435,11 +431,10 @@ impl UdpSocket {
435431
buffer: T,
436432
control: C,
437433
addr: A,
438-
flags: i32,
439434
) -> BufResult<usize, impl Future<Output = (T, C)> + use<A, T, C>> {
440435
super::first_addr_buf_zerocopy(addr, (buffer, control), |addr, (b, c)| async move {
441436
self.inner
442-
.send_msg_zerocopy(b, c, Some(&addr.into()), flags)
437+
.send_msg_zerocopy(b, c, Some(&addr.into()), 0)
443438
.await
444439
})
445440
.await
@@ -455,11 +450,10 @@ impl UdpSocket {
455450
buffer: T,
456451
control: C,
457452
addr: A,
458-
flags: i32,
459453
) -> BufResult<usize, impl Future<Output = (T, C)> + use<A, T, C>> {
460454
super::first_addr_buf_zerocopy(addr, (buffer, control), |addr, (b, c)| async move {
461455
self.inner
462-
.send_msg_zerocopy_vectored(b, c, Some(&addr.into()), flags)
456+
.send_msg_zerocopy_vectored(b, c, Some(&addr.into()), 0)
463457
.await
464458
})
465459
.await

compio-net/tests/zero_copy.rs

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
use compio_buf::BufResult;
2+
use compio_io::{AsyncReadExt, ancillary::AncillaryBuf};
3+
use compio_net::{TcpListener, TcpStream, UdpSocket};
4+
5+
#[compio_macros::test]
6+
async fn tcp_zerocopy() {
7+
let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
8+
let addr = listener.local_addr().unwrap();
9+
10+
let task = compio_runtime::spawn(async move { listener.accept().await.unwrap() });
11+
12+
let tx = TcpStream::connect(&addr).await.unwrap();
13+
let (mut rx, _) = task.await.unwrap();
14+
15+
let buffer = Vec::from(b"hello world" as &[u8]);
16+
let BufResult(res, fut) = tx.send_zerocopy(buffer, 0).await;
17+
assert_eq!(res.unwrap(), 11);
18+
let buffer = fut.await;
19+
assert_eq!(buffer, b"hello world");
20+
21+
let buf = Vec::with_capacity(11);
22+
let (_, buf) = rx.read_exact(buf).await.unwrap();
23+
assert_eq!(buf, b"hello world");
24+
}
25+
26+
#[compio_macros::test]
27+
async fn tcp_zerocopy_vectored() {
28+
let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
29+
let addr = listener.local_addr().unwrap();
30+
31+
let task = compio_runtime::spawn(async move { listener.accept().await.unwrap() });
32+
33+
let tx = TcpStream::connect(&addr).await.unwrap();
34+
let (mut rx, _) = task.await.unwrap();
35+
36+
let buffer = [
37+
Vec::from(b"hello" as &[u8]),
38+
Vec::from(b" " as &[u8]),
39+
Vec::from(b"world" as &[u8]),
40+
];
41+
let BufResult(res, fut) = tx.send_zerocopy_vectored(buffer, 0).await;
42+
assert_eq!(res.unwrap(), 11);
43+
let buffer = fut.await;
44+
assert_eq!(buffer[0], b"hello");
45+
assert_eq!(buffer[1], b" ");
46+
assert_eq!(buffer[2], b"world");
47+
48+
let buf = Vec::with_capacity(11);
49+
let (_, buf) = rx.read_exact(buf).await.unwrap();
50+
assert_eq!(buf, b"hello world");
51+
}
52+
53+
#[compio_macros::test]
54+
async fn udp_zerocopy() {
55+
let receiver = UdpSocket::bind("127.0.0.1:0").await.unwrap();
56+
let addr = receiver.local_addr().unwrap();
57+
58+
let sender = UdpSocket::bind("127.0.0.1:0").await.unwrap();
59+
60+
let buffer = Vec::from(b"hello world" as &[u8]);
61+
let BufResult(res, fut) = sender.send_to_zerocopy(buffer, addr).await;
62+
assert_eq!(res.unwrap(), 11);
63+
let buffer = fut.await;
64+
assert_eq!(buffer, b"hello world");
65+
66+
let (len, buf) = receiver.recv(Vec::with_capacity(11)).await.unwrap();
67+
assert_eq!(len, 11);
68+
assert_eq!(buf, b"hello world");
69+
}
70+
71+
#[compio_macros::test]
72+
async fn udp_zerocopy_vectored() {
73+
let receiver = UdpSocket::bind("127.0.0.1:0").await.unwrap();
74+
let addr = receiver.local_addr().unwrap();
75+
76+
let sender = UdpSocket::bind("127.0.0.1:0").await.unwrap();
77+
78+
let buffer = [
79+
Vec::from(b"hello" as &[u8]),
80+
Vec::from(b" " as &[u8]),
81+
Vec::from(b"world" as &[u8]),
82+
];
83+
let BufResult(res, fut) = sender.send_to_zerocopy_vectored(buffer, addr).await;
84+
assert_eq!(res.unwrap(), 11);
85+
let buffer = fut.await;
86+
assert_eq!(buffer[0], b"hello");
87+
assert_eq!(buffer[1], b" ");
88+
assert_eq!(buffer[2], b"world");
89+
90+
let (len, buf) = receiver.recv(Vec::with_capacity(11)).await.unwrap();
91+
assert_eq!(len, 11);
92+
assert_eq!(buf, b"hello world");
93+
}
94+
95+
#[compio_macros::test]
96+
async fn udp_msg_zerocopy() {
97+
let receiver = UdpSocket::bind("127.0.0.1:0").await.unwrap();
98+
let addr = receiver.local_addr().unwrap();
99+
100+
let sender = UdpSocket::bind("127.0.0.1:0").await.unwrap();
101+
102+
let buffer = Vec::from(b"hello world" as &[u8]);
103+
104+
let BufResult(res, fut) = sender
105+
.send_msg_zerocopy(buffer, AncillaryBuf::<8>::new(), addr)
106+
.await;
107+
assert_eq!(res.unwrap(), 11);
108+
let (buffer, _) = fut.await;
109+
assert_eq!(buffer, b"hello world");
110+
111+
let (len, buf) = receiver.recv(Vec::with_capacity(11)).await.unwrap();
112+
assert_eq!(len, 11);
113+
assert_eq!(buf, b"hello world");
114+
}
115+
116+
#[compio_macros::test]
117+
async fn udp_msg_zerocopy_vectored() {
118+
let receiver = UdpSocket::bind("127.0.0.1:0").await.unwrap();
119+
let addr = receiver.local_addr().unwrap();
120+
121+
let sender = UdpSocket::bind("127.0.0.1:0").await.unwrap();
122+
123+
let buffer = [
124+
Vec::from(b"hello" as &[u8]),
125+
Vec::from(b" " as &[u8]),
126+
Vec::from(b"world" as &[u8]),
127+
];
128+
129+
let BufResult(res, fut) = sender
130+
.send_msg_zerocopy_vectored(buffer, AncillaryBuf::<8>::new(), addr)
131+
.await;
132+
assert_eq!(res.unwrap(), 11);
133+
let (buffer, _) = fut.await;
134+
assert_eq!(buffer[0], b"hello");
135+
assert_eq!(buffer[1], b" ");
136+
assert_eq!(buffer[2], b"world");
137+
138+
let (len, buf) = receiver.recv(Vec::with_capacity(11)).await.unwrap();
139+
assert_eq!(len, 11);
140+
assert_eq!(buf, b"hello world");
141+
}

0 commit comments

Comments
 (0)