Change test_tcp to use Poll API. (#712)
diff --git a/test/test_tcp.rs b/test/test_tcp.rs
index 330b2cc..2a95b2c 100644
--- a/test/test_tcp.rs
+++ b/test/test_tcp.rs
@@ -1,6 +1,3 @@
-extern crate mio;
-extern crate env_logger;
-
use std::cmp;
use std::io::prelude::*;
use std::io;
@@ -14,26 +11,11 @@
use {TryRead, TryWrite};
use mio::{Token, Ready, PollOpt, Poll, Events};
use iovec::IoVec;
-use mio::deprecated::{EventLoop, Handler};
use mio::net::{TcpListener, TcpStream};
#[test]
fn accept() {
- struct H { hit: bool, listener: TcpListener }
-
- impl Handler for H {
- type Timeout = ();
- type Message = ();
-
- fn ready(&mut self, event_loop: &mut EventLoop<Self>, token: Token,
- events: Ready) {
- self.hit = true;
- assert_eq!(token, Token(1));
- assert!(events.is_readable());
- assert!(self.listener.accept().is_ok());
- event_loop.shutdown();
- }
- }
+ struct H { hit: bool, listener: TcpListener, shutdown: bool }
let l = TcpListener::bind(&"127.0.0.1:0".parse().unwrap()).unwrap();
let addr = l.local_addr().unwrap();
@@ -42,12 +24,24 @@
net::TcpStream::connect(&addr).unwrap();
});
- let mut e = EventLoop::new().unwrap();
+ let poll = Poll::new().unwrap();
- e.register(&l, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
+ poll.register(&l, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
- let mut h = H { hit: false, listener: l };
- e.run(&mut h).unwrap();
+ let mut events = Events::with_capacity(128);
+
+ let mut h = H { hit: false, listener: l, shutdown: false };
+ while !h.shutdown {
+ poll.poll(&mut events, None).unwrap();
+
+ for event in &events {
+ h.hit = true;
+ assert_eq!(event.token(), Token(1));
+ assert!(event.readiness().is_readable());
+ assert!(h.listener.accept().is_ok());
+ h.shutdown = true;
+ }
+ }
assert!(h.hit);
assert!(h.listener.accept().unwrap_err().kind() == io::ErrorKind::WouldBlock);
t.join().unwrap();
@@ -55,24 +49,7 @@
#[test]
fn connect() {
- struct H { hit: u32 }
-
- impl Handler for H {
- type Timeout = ();
- type Message = ();
-
- fn ready(&mut self, event_loop: &mut EventLoop<Self>, token: Token,
- events: Ready) {
- assert_eq!(token, Token(1));
- match self.hit {
- 0 => assert!(events.is_writable()),
- 1 => assert!(events.is_readable()),
- _ => panic!(),
- }
- self.hit += 1;
- event_loop.shutdown();
- }
- }
+ struct H { hit: u32, shutdown: bool }
let l = net::TcpListener::bind("127.0.0.1:0").unwrap();
let addr = l.local_addr().unwrap();
@@ -86,17 +63,46 @@
tx2.send(()).unwrap();
});
- let mut e = EventLoop::new().unwrap();
+ let poll = Poll::new().unwrap();
let s = TcpStream::connect(&addr).unwrap();
- e.register(&s, Token(1), Ready::readable() | Ready::writable(), PollOpt::edge()).unwrap();
+ poll.register(&s, Token(1), Ready::readable() | Ready::writable(), PollOpt::edge()).unwrap();
- let mut h = H { hit: 0 };
- e.run(&mut h).unwrap();
+ let mut events = Events::with_capacity(128);
+
+ let mut h = H { hit: 0, shutdown: false };
+ while !h.shutdown {
+ poll.poll(&mut events, None).unwrap();
+
+ for event in &events {
+ assert_eq!(event.token(), Token(1));
+ match h.hit {
+ 0 => assert!(event.readiness().is_writable()),
+ 1 => assert!(event.readiness().is_readable()),
+ _ => panic!(),
+ }
+ h.hit += 1;
+ h.shutdown = true;
+ }
+ }
assert_eq!(h.hit, 1);
tx.send(()).unwrap();
rx2.recv().unwrap();
- e.run(&mut h).unwrap();
+ h.shutdown = false;
+ while !h.shutdown {
+ poll.poll(&mut events, None).unwrap();
+
+ for event in &events {
+ assert_eq!(event.token(), Token(1));
+ match h.hit {
+ 0 => assert!(event.readiness().is_writable()),
+ 1 => assert!(event.readiness().is_readable()),
+ _ => panic!(),
+ }
+ h.hit += 1;
+ h.shutdown = true;
+ }
+ }
assert_eq!(h.hit, 2);
t.join().unwrap();
}
@@ -104,29 +110,7 @@
#[test]
fn read() {
const N: usize = 16 * 1024 * 1024;
- struct H { amt: usize, socket: TcpStream }
-
- impl Handler for H {
- type Timeout = ();
- type Message = ();
-
- fn ready(&mut self, event_loop: &mut EventLoop<Self>, token: Token,
- _events: Ready) {
- assert_eq!(token, Token(1));
- let mut b = [0; 1024];
- loop {
- if let Some(amt) = self.socket.try_read(&mut b).unwrap() {
- self.amt += amt;
- } else {
- break
- }
- if self.amt >= N {
- event_loop.shutdown();
- break
- }
- }
- }
- }
+ struct H { amt: usize, socket: TcpStream, shutdown: bool }
let l = net::TcpListener::bind("127.0.0.1:0").unwrap();
let addr = l.local_addr().unwrap();
@@ -140,13 +124,33 @@
}
});
- let mut e = EventLoop::new().unwrap();
+ let poll = Poll::new().unwrap();
let s = TcpStream::connect(&addr).unwrap();
- e.register(&s, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
+ poll.register(&s, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
- let mut h = H { amt: 0, socket: s };
- e.run(&mut h).unwrap();
+ let mut events = Events::with_capacity(128);
+
+ let mut h = H { amt: 0, socket: s, shutdown: false };
+ while !h.shutdown {
+ poll.poll(&mut events, None).unwrap();
+
+ for event in &events {
+ assert_eq!(event.token(), Token(1));
+ let mut b = [0; 1024];
+ loop {
+ if let Some(amt) = h.socket.try_read(&mut b).unwrap() {
+ h.amt += amt;
+ } else {
+ break
+ }
+ if h.amt >= N {
+ h.shutdown = true;
+ break
+ }
+ }
+ }
+ }
t.join().unwrap();
}
@@ -225,29 +229,7 @@
#[test]
fn write() {
const N: usize = 16 * 1024 * 1024;
- struct H { amt: usize, socket: TcpStream }
-
- impl Handler for H {
- type Timeout = ();
- type Message = ();
-
- fn ready(&mut self, event_loop: &mut EventLoop<Self>, token: Token,
- _events: Ready) {
- assert_eq!(token, Token(1));
- let b = [0; 1024];
- loop {
- if let Some(amt) = self.socket.try_write(&b).unwrap() {
- self.amt += amt;
- } else {
- break
- }
- if self.amt >= N {
- event_loop.shutdown();
- break
- }
- }
- }
- }
+ struct H { amt: usize, socket: TcpStream, shutdown: bool }
let l = net::TcpListener::bind("127.0.0.1:0").unwrap();
let addr = l.local_addr().unwrap();
@@ -261,13 +243,33 @@
}
});
- let mut e = EventLoop::new().unwrap();
+ let poll = Poll::new().unwrap();
let s = TcpStream::connect(&addr).unwrap();
- e.register(&s, Token(1), Ready::writable(), PollOpt::edge()).unwrap();
+ poll.register(&s, Token(1), Ready::writable(), PollOpt::edge()).unwrap();
- let mut h = H { amt: 0, socket: s };
- e.run(&mut h).unwrap();
+ let mut events = Events::with_capacity(128);
+
+ let mut h = H { amt: 0, socket: s, shutdown: false };
+ while !h.shutdown {
+ poll.poll(&mut events, None).unwrap();
+
+ for event in &events {
+ assert_eq!(event.token(), Token(1));
+ let b = [0; 1024];
+ loop {
+ if let Some(amt) = h.socket.try_write(&b).unwrap() {
+ h.amt += amt;
+ } else {
+ break
+ }
+ if h.amt >= N {
+ h.shutdown = true;
+ break
+ }
+ }
+ }
+ }
t.join().unwrap();
}
@@ -327,59 +329,51 @@
#[test]
fn connect_then_close() {
- struct H { listener: TcpListener }
+ struct H { listener: TcpListener, shutdown: bool }
- impl Handler for H {
- type Timeout = ();
- type Message = ();
-
- fn ready(&mut self, event_loop: &mut EventLoop<Self>, token: Token,
- _events: Ready) {
- if token == Token(1) {
- let s = self.listener.accept().unwrap().0;
- event_loop.register(&s, Token(3), Ready::readable() | Ready::writable(),
- PollOpt::edge()).unwrap();
- drop(s);
- } else if token == Token(2) {
- event_loop.shutdown();
- }
- }
- }
-
- let mut e = EventLoop::new().unwrap();
+ let poll = Poll::new().unwrap();
let l = TcpListener::bind(&"127.0.0.1:0".parse().unwrap()).unwrap();
let s = TcpStream::connect(&l.local_addr().unwrap()).unwrap();
- e.register(&l, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
- e.register(&s, Token(2), Ready::readable(), PollOpt::edge()).unwrap();
+ poll.register(&l, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
+ poll.register(&s, Token(2), Ready::readable(), PollOpt::edge()).unwrap();
- let mut h = H { listener: l };
- e.run(&mut h).unwrap();
+ let mut events = Events::with_capacity(128);
+
+ let mut h = H { listener: l, shutdown: false };
+ while !h.shutdown {
+ poll.poll(&mut events, None).unwrap();
+
+ for event in &events {
+ if event.token() == Token(1) {
+ let s = h.listener.accept().unwrap().0;
+ poll.register(&s, Token(3), Ready::readable() | Ready::writable(),
+ PollOpt::edge()).unwrap();
+ drop(s);
+ } else if event.token() == Token(2) {
+ h.shutdown = true;
+ }
+ }
+ }
}
#[test]
fn listen_then_close() {
- struct H;
-
- impl Handler for H {
- type Timeout = ();
- type Message = ();
-
- fn ready(&mut self, _: &mut EventLoop<Self>, token: Token, _: Ready) {
- if token == Token(1) {
- panic!("recieved ready() on a closed TcpListener")
- }
- }
- }
-
- let mut e = EventLoop::new().unwrap();
+ let poll = Poll::new().unwrap();
let l = TcpListener::bind(&"127.0.0.1:0".parse().unwrap()).unwrap();
- e.register(&l, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
+ poll.register(&l, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
drop(l);
- let mut h = H;
- e.run_once(&mut h, Some(Duration::from_millis(100))).unwrap();
+ let mut events = Events::with_capacity(128);
+
+ poll.poll(&mut events, Some(Duration::from_millis(100))).unwrap();
+
+ for event in &events {
+ if event.token() == Token(1) {
+ panic!("recieved ready() on a closed TcpListener")
+ }
+ }
}
fn assert_send<T: Send>() {