summaryrefslogtreecommitdiffstats
path: root/tests/line-frames.rs
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-10-21 17:01:43 -0700
committerAlex Crichton <alex@alexcrichton.com>2016-10-21 17:01:43 -0700
commit6d6c2aa390a54b3f201f2f00177b8a99d4f8c2a1 (patch)
tree1542c25fde0f4d23ccb06709a9d3c8fad43e9dee /tests/line-frames.rs
parent2c5e4ebba881ad8ce25fb6abb924cf4cbe299832 (diff)
Fix tests
Diffstat (limited to 'tests/line-frames.rs')
-rw-r--r--tests/line-frames.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/tests/line-frames.rs b/tests/line-frames.rs
index 721301e4..bdf49528 100644
--- a/tests/line-frames.rs
+++ b/tests/line-frames.rs
@@ -41,10 +41,11 @@ impl Serialize for LineSerialize {
pub struct EchoFramed<T> {
inner: T,
+ eof: bool,
}
impl<T, U> Future for EchoFramed<T>
- where T: FramedIo<In = U, Out = U>,
+ where T: FramedIo<In = U, Out = Option<U>>,
{
type Item = ();
type Error = ();
@@ -56,9 +57,15 @@ impl<T, U> Future for EchoFramed<T>
}
// Wait until we can simultaneously read and write a message
- while self.inner.poll_read().is_ready() && self.inner.poll_write().is_ready() {
+ while !self.eof &&
+ self.inner.poll_read().is_ready() &&
+ self.inner.poll_write().is_ready() {
let frame = match self.inner.read() {
- Ok(Async::Ready(frame)) => frame,
+ Ok(Async::Ready(Some(frame))) => frame,
+ Ok(Async::Ready(None)) => {
+ self.eof = true;
+ break
+ }
Ok(Async::NotReady) => break,
Err(e) => panic!("error in read: {}", e),
};
@@ -72,9 +79,11 @@ impl<T, U> Future for EchoFramed<T>
// If we wrote some frames try to flush again. Ignore whether this is
// ready to finish or not as we're going to continue to return NotReady
- drop(self.inner.flush().expect("flush error"));
-
- Ok(Async::NotReady)
+ if self.inner.flush().expect("flush error").is_ready() && self.eof {
+ Ok(().into())
+ } else {
+ Ok(Async::NotReady)
+ }
}
}
@@ -89,7 +98,7 @@ fn echo() {
let addr = listener.local_addr().unwrap();
let srv = listener.incoming().for_each(move |(socket, _)| {
let framed = EasyFramed::new(socket, LineParser, LineSerialize);
- handle.spawn(EchoFramed { inner: framed });
+ handle.spawn(EchoFramed { inner: framed, eof: false });
Ok(())
});