Skip to content
This repository was archived by the owner on May 17, 2026. It is now read-only.

Commit a01a966

Browse files
committed
test(net): tcp client & server
1 parent d839115 commit a01a966

2 files changed

Lines changed: 82 additions & 2 deletions

File tree

Cargo.toml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@ async-io = { workspace = true, optional = true }
4343
futures-util = { workspace = true, optional = true }
4444

4545
[dev-dependencies]
46-
compio = { workspace = true, default-features = false, features = ["fs"] }
46+
compio = { workspace = true, default-features = false, features = [
47+
"fs",
48+
"net",
49+
] }
4750

48-
tokio = { workspace = true, features = ["rt", "macros", "fs", "io-util"] }
51+
tokio = { workspace = true, features = ["rt", "macros", "net", "io-util"] }
4952
futures-executor = { workspace = true }
5053

5154
[features]
@@ -54,3 +57,7 @@ polling = ["compio/polling"]
5457
tokio = ["dep:tokio"]
5558
futures = ["dep:async-io", "dep:futures-util"]
5659
enable_log = ["compio-log/enable_log"]
60+
61+
[[test]]
62+
name = "net"
63+
required-features = ["tokio"]

tests/net.rs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
use compio::runtime::Runtime;
2+
use compio_compat::{RuntimeCompat, TokioAdapter};
3+
4+
#[tokio::test]
5+
async fn compio_client() {
6+
use compio::net::TcpStream;
7+
use tokio::net::TcpListener;
8+
9+
let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
10+
let addr = listener.local_addr().unwrap();
11+
let server = async {
12+
use tokio::io::{AsyncReadExt, AsyncWriteExt};
13+
14+
let (mut stream, _) = listener.accept().await.unwrap();
15+
let mut buffer = [0u8; 12];
16+
stream.read_exact(&mut buffer).await.unwrap();
17+
stream.write_all(&buffer).await.unwrap();
18+
stream.shutdown().await.unwrap();
19+
};
20+
21+
let runtime = RuntimeCompat::<TokioAdapter>::new(Runtime::new().unwrap()).unwrap();
22+
let client = runtime.execute(async {
23+
use compio::io::{AsyncReadExt, AsyncWrite, AsyncWriteExt};
24+
25+
let mut stream = TcpStream::connect(addr).await.unwrap();
26+
stream.write_all(b"hello world!").await.unwrap();
27+
stream.shutdown().await.unwrap();
28+
let buffer = [0u8; 12];
29+
let (_, buffer) = stream.read_exact(buffer).await.unwrap();
30+
assert_eq!(&buffer, b"hello world!");
31+
stream.close().await.unwrap();
32+
});
33+
34+
tokio::join!(server, client);
35+
}
36+
37+
#[tokio::test]
38+
async fn compio_server() {
39+
use compio::net::TcpListener;
40+
use tokio::net::TcpStream;
41+
42+
let runtime = RuntimeCompat::<TokioAdapter>::new(Runtime::new().unwrap()).unwrap();
43+
let listener = runtime
44+
.execute(TcpListener::bind("127.0.0.1:0"))
45+
.await
46+
.unwrap();
47+
let addr = listener.local_addr().unwrap();
48+
let server = runtime.execute(async {
49+
use compio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
50+
51+
let (mut stream, _) = listener.accept().await.unwrap();
52+
let buffer = [0u8; 12];
53+
let (_, buffer) = stream.read_exact(buffer).await.unwrap();
54+
stream.write_all(buffer).await.unwrap();
55+
stream.shutdown().await.unwrap();
56+
stream.read([0u8]).await.unwrap();
57+
stream.close().await.unwrap();
58+
});
59+
60+
let client = async {
61+
use tokio::io::{AsyncReadExt, AsyncWriteExt};
62+
63+
let mut stream = TcpStream::connect(addr).await.unwrap();
64+
stream.write_all(b"hello world!").await.unwrap();
65+
stream.shutdown().await.unwrap();
66+
let mut buffer = [0u8; 12];
67+
stream.read_exact(&mut buffer).await.unwrap();
68+
assert_eq!(&buffer, b"hello world!");
69+
stream.shutdown().await.unwrap();
70+
};
71+
72+
tokio::join!(server, client);
73+
}

0 commit comments

Comments
 (0)