From 6d6c2aa390a54b3f201f2f00177b8a99d4f8c2a1 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 21 Oct 2016 17:01:43 -0700 Subject: [PATCH] Fix tests --- tests/line-frames.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/tests/line-frames.rs b/tests/line-frames.rs index 721301e4a..bdf495289 100644 --- a/tests/line-frames.rs +++ b/tests/line-frames.rs @@ -41,10 +41,11 @@ impl Serialize for LineSerialize { pub struct EchoFramed { inner: T, + eof: bool, } impl Future for EchoFramed - where T: FramedIo, + where T: FramedIo>, { type Item = (); type Error = (); @@ -56,9 +57,15 @@ impl Future for EchoFramed } // 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 Future for EchoFramed // 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(()) });