Skip to content

Commit 34859b8

Browse files
authored
test(driver): read multi on pipe (#760)
* test(driver): read multi on pipe * fix(driver): drop pipe writer immediately
1 parent e42c6f1 commit 34859b8

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

compio-driver/tests/op.rs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
11
use std::{
2-
io::{self, Write},
2+
io::{self, Write as _},
33
net::{TcpListener, TcpStream},
44
time::Duration,
55
};
66

77
use compio_buf::BufResult;
88
use compio_driver::{
99
AsRawFd, Extra, OpCode, OwnedFd, Proactor, PushEntry, SharedFd, TakeBuffer,
10-
op::{
11-
Asyncify, CloseFile, CloseSocket, ReadAt, ReadManagedAt, ReadMultiAt, RecvMulti,
12-
ResultTakeBuffer,
13-
},
10+
op::{Asyncify, CloseFile, CloseSocket, ReadAt, ReadManagedAt, RecvMulti, ResultTakeBuffer},
1411
};
1512
mod pipe2;
1613

1714
#[cfg(unix)]
18-
use compio_driver::op::AcceptMulti;
15+
use compio_driver::op::{AcceptMulti, ReadMulti, Write};
1916

2017
#[cfg(unix)]
2118
#[test]
@@ -271,16 +268,25 @@ fn managed() {
271268
}
272269

273270
#[test]
271+
#[cfg(unix)]
274272
fn read_multi() {
273+
use nix::fcntl::OFlag;
274+
275275
let mut driver = Proactor::new().unwrap();
276276

277-
let fd = open_file(&mut driver);
278-
let fd = SharedFd::new(fd);
279-
driver.attach(fd.as_raw_fd()).unwrap();
277+
let mut flags = OFlag::O_CLOEXEC;
278+
if driver.driver_type().is_polling() {
279+
flags |= OFlag::O_NONBLOCK;
280+
}
281+
282+
let (r, w) = pipe2::pipe2(flags).unwrap();
283+
284+
let op = Write::new(w, b"hello world");
285+
push_and_wait(&mut driver, op).unwrap();
280286

281287
let pool = driver.create_buffer_pool(4, 1024).unwrap();
282288

283-
let op = ReadMultiAt::new(fd.clone(), 0, &pool, 1024).unwrap();
289+
let op = ReadMulti::new(r, &pool, 0).unwrap();
284290
let buffer = push_and_wait_multi(&mut driver, op)
285291
.map(|BufResult(res, (extra, op))| {
286292
if let Some(op) = op {
@@ -296,10 +302,7 @@ fn read_multi() {
296302
.flatten()
297303
.collect::<Vec<_>>();
298304

299-
println!("{}", std::str::from_utf8(&buffer).unwrap());
300-
301-
let op = CloseFile::new(fd.try_unwrap().unwrap());
302-
push_and_wait(&mut driver, op).unwrap();
305+
assert_eq!(buffer, b"hello world");
303306
}
304307

305308
#[test]

0 commit comments

Comments
 (0)