mirror of https://github.com/smol-rs/polling
39 lines
1.0 KiB
Rust
39 lines
1.0 KiB
Rust
use polling::{Event, Poller};
|
|
use std::io::{self, Write};
|
|
use std::net::{TcpListener, TcpStream};
|
|
use std::time::Duration;
|
|
|
|
#[test]
|
|
fn basic_io() {
|
|
let poller = Poller::new().unwrap();
|
|
let (read, mut write) = tcp_pair().unwrap();
|
|
poller.add(&read, Event::readable(1)).unwrap();
|
|
|
|
// Nothing should be available at first.
|
|
let mut events = vec![];
|
|
assert_eq!(
|
|
poller
|
|
.wait(&mut events, Some(Duration::from_secs(0)))
|
|
.unwrap(),
|
|
0
|
|
);
|
|
assert!(events.is_empty());
|
|
|
|
// After a write, the event should be available now.
|
|
write.write_all(&[1]).unwrap();
|
|
assert_eq!(
|
|
poller
|
|
.wait(&mut events, Some(Duration::from_secs(1)))
|
|
.unwrap(),
|
|
1
|
|
);
|
|
assert_eq!(&*events, &[Event::readable(1)]);
|
|
}
|
|
|
|
fn tcp_pair() -> io::Result<(TcpStream, TcpStream)> {
|
|
let listener = TcpListener::bind("127.0.0.1:0")?;
|
|
let a = TcpStream::connect(listener.local_addr()?)?;
|
|
let (b, _) = listener.accept()?;
|
|
Ok((a, b))
|
|
}
|