summaryrefslogtreecommitdiffstats
path: root/tokio-io/tests/length_delimited.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tokio-io/tests/length_delimited.rs')
-rw-r--r--tokio-io/tests/length_delimited.rs548
1 files changed, 0 insertions, 548 deletions
diff --git a/tokio-io/tests/length_delimited.rs b/tokio-io/tests/length_delimited.rs
deleted file mode 100644
index d217a178..00000000
--- a/tokio-io/tests/length_delimited.rs
+++ /dev/null
@@ -1,548 +0,0 @@
-// This file is testing deprecated code.
-#![allow(deprecated)]
-
-use futures::Async::*;
-use futures::{Poll, Sink, Stream};
-use std::collections::VecDeque;
-use std::io;
-use tokio_io::codec::length_delimited::*;
-use tokio_io::{AsyncRead, AsyncWrite};
-
-macro_rules! mock {
- ($($x:expr,)*) => {{
- let mut v = VecDeque::new();
- v.extend(vec![$($x),*]);
- Mock { calls: v }
- }};
-}
-
-#[test]
-fn read_empty_io_yields_nothing() {
- let mut io = FramedRead::new(mock!());
-
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_single_frame_one_packet() {
- let mut io = FramedRead::new(mock! {
- Ok(b"\x00\x00\x00\x09abcdefghi"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_single_frame_one_packet_little_endian() {
- let mut io = Builder::new().little_endian().new_read(mock! {
- Ok(b"\x09\x00\x00\x00abcdefghi"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_single_frame_one_packet_native_endian() {
- let data = if cfg!(target_endian = "big") {
- b"\x00\x00\x00\x09abcdefghi"
- } else {
- b"\x09\x00\x00\x00abcdefghi"
- };
- let mut io = Builder::new().native_endian().new_read(mock! {
- Ok(data[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_single_multi_frame_one_packet() {
- let mut data: Vec<u8> = vec![];
- data.extend_from_slice(b"\x00\x00\x00\x09abcdefghi");
- data.extend_from_slice(b"\x00\x00\x00\x03123");
- data.extend_from_slice(b"\x00\x00\x00\x0bhello world");
-
- let mut io = FramedRead::new(mock! {
- Ok(data.into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(Some(b"123"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(Some(b"hello world"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_single_frame_multi_packet() {
- let mut io = FramedRead::new(mock! {
- Ok(b"\x00\x00"[..].into()),
- Ok(b"\x00\x09abc"[..].into()),
- Ok(b"defghi"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_multi_frame_multi_packet() {
- let mut io = FramedRead::new(mock! {
- Ok(b"\x00\x00"[..].into()),
- Ok(b"\x00\x09abc"[..].into()),
- Ok(b"defghi"[..].into()),
- Ok(b"\x00\x00\x00\x0312"[..].into()),
- Ok(b"3\x00\x00\x00\x0bhello world"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(Some(b"123"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(Some(b"hello world"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_single_frame_multi_packet_wait() {
- let mut io = FramedRead::new(mock! {
- Ok(b"\x00\x00"[..].into()),
- Err(would_block()),
- Ok(b"\x00\x09abc"[..].into()),
- Err(would_block()),
- Ok(b"defghi"[..].into()),
- Err(would_block()),
- });
-
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_multi_frame_multi_packet_wait() {
- let mut io = FramedRead::new(mock! {
- Ok(b"\x00\x00"[..].into()),
- Err(would_block()),
- Ok(b"\x00\x09abc"[..].into()),
- Err(would_block()),
- Ok(b"defghi"[..].into()),
- Err(would_block()),
- Ok(b"\x00\x00\x00\x0312"[..].into()),
- Err(would_block()),
- Ok(b"3\x00\x00\x00\x0bhello world"[..].into()),
- Err(would_block()),
- });
-
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), Ready(Some(b"123"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(Some(b"hello world"[..].into())));
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_incomplete_head() {
- let mut io = FramedRead::new(mock! {
- Ok(b"\x00\x00"[..].into()),
- });
-
- assert!(io.poll().is_err());
-}
-
-#[test]
-fn read_incomplete_head_multi() {
- let mut io = FramedRead::new(mock! {
- Err(would_block()),
- Ok(b"\x00"[..].into()),
- Err(would_block()),
- });
-
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), NotReady);
- assert!(io.poll().is_err());
-}
-
-#[test]
-fn read_incomplete_payload() {
- let mut io = FramedRead::new(mock! {
- Ok(b"\x00\x00\x00\x09ab"[..].into()),
- Err(would_block()),
- Ok(b"cd"[..].into()),
- Err(would_block()),
- });
-
- assert_eq!(io.poll().unwrap(), NotReady);
- assert_eq!(io.poll().unwrap(), NotReady);
- assert!(io.poll().is_err());
-}
-
-#[test]
-fn read_max_frame_len() {
- let mut io = Builder::new().max_frame_length(5).new_read(mock! {
- Ok(b"\x00\x00\x00\x09abcdefghi"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap_err().kind(), io::ErrorKind::InvalidData);
-}
-
-#[test]
-fn read_update_max_frame_len_at_rest() {
- let mut io = Builder::new().new_read(mock! {
- Ok(b"\x00\x00\x00\x09abcdefghi"[..].into()),
- Ok(b"\x00\x00\x00\x09abcdefghi"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- io.set_max_frame_length(5);
- assert_eq!(io.poll().unwrap_err().kind(), io::ErrorKind::InvalidData);
-}
-
-#[test]
-fn read_update_max_frame_len_in_flight() {
- let mut io = Builder::new().new_read(mock! {
- Ok(b"\x00\x00\x00\x09abcd"[..].into()),
- Err(would_block()),
- Ok(b"efghi"[..].into()),
- Ok(b"\x00\x00\x00\x09abcdefghi"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), NotReady);
- io.set_max_frame_length(5);
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap_err().kind(), io::ErrorKind::InvalidData);
-}
-
-#[test]
-fn read_one_byte_length_field() {
- let mut io = Builder::new().length_field_length(1).new_read(mock! {
- Ok(b"\x09abcdefghi"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_header_offset() {
- let mut io = Builder::new()
- .length_field_length(2)
- .length_field_offset(4)
- .new_read(mock! {
- Ok(b"zzzz\x00\x09abcdefghi"[..].into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_single_multi_frame_one_packet_skip_none_adjusted() {
- let mut data: Vec<u8> = vec![];
- data.extend_from_slice(b"xx\x00\x09abcdefghi");
- data.extend_from_slice(b"yy\x00\x03123");
- data.extend_from_slice(b"zz\x00\x0bhello world");
-
- let mut io = Builder::new()
- .length_field_length(2)
- .length_field_offset(2)
- .num_skip(0)
- .length_adjustment(4)
- .new_read(mock! {
- Ok(data.into()),
- });
-
- assert_eq!(
- io.poll().unwrap(),
- Ready(Some(b"xx\x00\x09abcdefghi"[..].into()))
- );
- assert_eq!(io.poll().unwrap(), Ready(Some(b"yy\x00\x03123"[..].into())));
- assert_eq!(
- io.poll().unwrap(),
- Ready(Some(b"zz\x00\x0bhello world"[..].into()))
- );
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn read_single_multi_frame_one_packet_length_includes_head() {
- let mut data: Vec<u8> = vec![];
- data.extend_from_slice(b"\x00\x0babcdefghi");
- data.extend_from_slice(b"\x00\x05123");
- data.extend_from_slice(b"\x00\x0dhello world");
-
- let mut io = Builder::new()
- .length_field_length(2)
- .length_adjustment(-2)
- .new_read(mock! {
- Ok(data.into()),
- });
-
- assert_eq!(io.poll().unwrap(), Ready(Some(b"abcdefghi"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(Some(b"123"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(Some(b"hello world"[..].into())));
- assert_eq!(io.poll().unwrap(), Ready(None));
-}
-
-#[test]
-fn write_single_frame_length_adjusted() {
- let mut io = Builder::new().length_adjustment(-2).new_write(mock! {
- Ok(b"\x00\x00\x00\x0b"[..].into()),
- Ok(b"abcdefghi"[..].into()),
- Ok(Flush),
- });
- assert!(io.start_send("abcdefghi").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_nothing_yields_nothing() {
- let mut io: FramedWrite<_, &'static [u8]> = FramedWrite::new(mock!());
- assert!(io.poll_complete().unwrap().is_ready());
-}
-
-#[test]
-fn write_single_frame_one_packet() {
- let mut io = FramedWrite::new(mock! {
- Ok(b"\x00\x00\x00\x09"[..].into()),
- Ok(b"abcdefghi"[..].into()),
- Ok(Flush),
- });
-
- assert!(io.start_send("abcdefghi").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_single_multi_frame_one_packet() {
- let mut io = FramedWrite::new(mock! {
- Ok(b"\x00\x00\x00\x09"[..].into()),
- Ok(b"abcdefghi"[..].into()),
- Ok(b"\x00\x00\x00\x03"[..].into()),
- Ok(b"123"[..].into()),
- Ok(b"\x00\x00\x00\x0b"[..].into()),
- Ok(b"hello world"[..].into()),
- Ok(Flush),
- });
-
- assert!(io.start_send("abcdefghi").unwrap().is_ready());
- assert!(io.start_send("123").unwrap().is_ready());
- assert!(io.start_send("hello world").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_single_multi_frame_multi_packet() {
- let mut io = FramedWrite::new(mock! {
- Ok(b"\x00\x00\x00\x09"[..].into()),
- Ok(b"abcdefghi"[..].into()),
- Ok(Flush),
- Ok(b"\x00\x00\x00\x03"[..].into()),
- Ok(b"123"[..].into()),
- Ok(Flush),
- Ok(b"\x00\x00\x00\x0b"[..].into()),
- Ok(b"hello world"[..].into()),
- Ok(Flush),
- });
-
- assert!(io.start_send("abcdefghi").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- assert!(io.start_send("123").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- assert!(io.start_send("hello world").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_single_frame_would_block() {
- let mut io = FramedWrite::new(mock! {
- Err(would_block()),
- Ok(b"\x00\x00"[..].into()),
- Err(would_block()),
- Ok(b"\x00\x09"[..].into()),
- Ok(b"abcdefghi"[..].into()),
- Ok(Flush),
- });
-
- assert!(io.start_send("abcdefghi").unwrap().is_ready());
- assert!(!io.poll_complete().unwrap().is_ready());
- assert!(!io.poll_complete().unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
-
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_single_frame_little_endian() {
- let mut io = Builder::new().little_endian().new_write(mock! {
- Ok(b"\x09\x00\x00\x00"[..].into()),
- Ok(b"abcdefghi"[..].into()),
- Ok(Flush),
- });
-
- assert!(io.start_send("abcdefghi").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_single_frame_with_short_length_field() {
- let mut io = Builder::new().length_field_length(1).new_write(mock! {
- Ok(b"\x09"[..].into()),
- Ok(b"abcdefghi"[..].into()),
- Ok(Flush),
- });
-
- assert!(io.start_send("abcdefghi").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_max_frame_len() {
- let mut io = Builder::new().max_frame_length(5).new_write(mock! {});
-
- assert_eq!(
- io.start_send("abcdef").unwrap_err().kind(),
- io::ErrorKind::InvalidInput
- );
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_zero() {
- let mut io = Builder::new().new_write(mock! {});
-
- assert!(io.start_send("abcdef").unwrap().is_ready());
- assert_eq!(
- io.poll_complete().unwrap_err().kind(),
- io::ErrorKind::WriteZero
- );
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_update_max_frame_len_at_rest() {
- let mut io = Builder::new().new_write(mock! {
- Ok(b"\x00\x00\x00\x06"[..].into()),
- Ok(b"abcdef"[..].into()),
- Ok(Flush),
- });
-
- assert!(io.start_send("abcdef").unwrap().is_ready());
- assert!(io.poll_complete().unwrap().is_ready());
- io.set_max_frame_length(5);
- assert_eq!(
- io.start_send("abcdef").unwrap_err().kind(),
- io::ErrorKind::InvalidInput
- );
- assert!(io.get_ref().calls.is_empty());
-}
-
-#[test]
-fn write_update_max_frame_len_in_flight() {
- let mut io = Builder::new().new_write(mock! {
- Ok(b"\x00\x00\x00\x06"[..].into()),
- Ok(b"ab"[..].into()),
- Err(would_block()),
- Ok(b"cdef"[..].into()),
- Ok(Flush),
- });
-
- assert!(io.start_send("abcdef").unwrap().is_ready());
- assert!(!io.poll_complete().unwrap().is_ready());
- io.set_max_frame_length(5);
- assert!(io.poll_complete().unwrap().is_ready());
- assert_eq!(
- io.start_send("abcdef").unwrap_err().kind(),
- io::ErrorKind::InvalidInput
- );
- assert!(io.get_ref().calls.is_empty());
-}
-
-// ===== Test utils =====
-
-fn would_block() -> io::Error {
- io::Error::new(io::ErrorKind::WouldBlock, "would block")
-}
-
-struct Mock {
- calls: VecDeque<io::Result<Op>>,
-}
-
-enum Op {
- Data(Vec<u8>),
- Flush,
-}
-
-use self::Op::*;
-
-impl io::Read for Mock {
- fn read(&mut self, dst: &mut [u8]) -> io::Result<usize> {
- match self.calls.pop_front() {
- Some(Ok(Op::Data(data))) => {
- debug_assert!(dst.len() >= data.len());
- dst[..data.len()].copy_from_slice(&data[..]);
- Ok(data.len())
- }
- Some(Ok(_)) => panic!(),
- Some(Err(e)) => Err(e),
- None => Ok(0),
- }
- }
-}
-
-impl AsyncRead for Mock {}
-
-impl io::Write for Mock {
- fn write(&mut self, src: &[u8]) -> io::Result<usize> {
- match self.calls.pop_front() {
- Some(Ok(Op::Data(data))) => {
- let len = data.len();
- assert!(src.len() >= len, "expect={:?}; actual={:?}", data, src);
- assert_eq!(&data[..], &src[..len]);
- Ok(len)
- }
- Some(Ok(_)) => panic!(),
- Some(Err(e)) => Err(e),
- None => Ok(0),
- }
- }
-
- fn flush(&mut self) -> io::Result<()> {
- match self.calls.pop_front() {
- Some(Ok(Op::Flush)) => Ok(()),
- Some(Ok(_)) => panic!(),
- Some(Err(e)) => Err(e),
- None => Ok(()),
- }
- }
-}
-
-impl AsyncWrite for Mock {
- fn shutdown(&mut self) -> Poll<(), io::Error> {
- Ok(Ready(()))
- }
-}
-
-impl<'a> From<&'a [u8]> for Op {
- fn from(src: &'a [u8]) -> Op {
- Op::Data(src.into())
- }
-}
-
-impl From<Vec<u8>> for Op {
- fn from(src: Vec<u8>) -> Op {
- Op::Data(src)
- }
-}