From 5dbeb0703ba5b3da4050ed1bfac00d06428b7dda Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Wed, 26 Jul 2017 12:03:35 -0700 Subject: [PATCH] Start breaking out test files --- tests/client_request.rs | 43 ------------------------------------ tests/stream_states.rs | 48 +++++++++++++++++++++++++++++++++++++++++ tests/support/mod.rs | 46 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 43 deletions(-) create mode 100644 tests/stream_states.rs create mode 100644 tests/support/mod.rs diff --git a/tests/client_request.rs b/tests/client_request.rs index eb60619..438fd2b 100644 --- a/tests/client_request.rs +++ b/tests/client_request.rs @@ -56,49 +56,6 @@ mod client_request { assert!(Stream::wait(h2).next().is_none()); } - #[test] - fn get_with_204_response() { - let _ = ::env_logger::init(); - - let mock = mock_io::Builder::new() - .handshake() - // Write GET / - .write(&[ - 0, 0, 0x10, 1, 5, 0, 0, 0, 1, 0x82, 0x87, 0x41, 0x8B, 0x9D, 0x29, - 0xAC, 0x4B, 0x8F, 0xA8, 0xE9, 0x19, 0x97, 0x21, 0xE9, 0x84, - ]) - .write(SETTINGS_ACK) - // Read response - .read(&[0, 0, 1, 1, 5, 0, 0, 0, 1, 0x89]) - .build(); - - let h2 = client::handshake(mock) - .wait().unwrap(); - - // Send the request - let mut request = request::Head::default(); - request.uri = "https://http2.akamai.com/".parse().unwrap(); - - trace!("sending request"); - let h2 = h2.send_request(1.into(), request, true).wait().unwrap(); - - // Get the response - - trace!("getting response"); - let (resp, h2) = h2.into_future().wait().unwrap(); - - match resp.unwrap() { - Frame::Headers { headers, .. } => { - assert_eq!(headers.status, status::NO_CONTENT); - } - _ => panic!("unexpected frame"), - } - - // No more frames - trace!("ensure no more responses"); - assert!(Stream::wait(h2).next().is_none());; - } - #[test] fn get_with_200_response() { let _ = ::env_logger::init(); diff --git a/tests/stream_states.rs b/tests/stream_states.rs new file mode 100644 index 0000000..3dbe08e --- /dev/null +++ b/tests/stream_states.rs @@ -0,0 +1,48 @@ +#[macro_use] +extern crate log; + +pub mod support; +use support::*; + +#[test] +fn headers_only_bidirectional() { + let _ = env_logger::init(); + + let mock = mock_io::Builder::new() + .handshake() + // Write GET / + .write(&[ + 0, 0, 0x10, 1, 5, 0, 0, 0, 1, 0x82, 0x87, 0x41, 0x8B, 0x9D, 0x29, + 0xAC, 0x4B, 0x8F, 0xA8, 0xE9, 0x19, 0x97, 0x21, 0xE9, 0x84, + ]) + .write(frames::SETTINGS_ACK) + // Read response + .read(&[0, 0, 1, 1, 5, 0, 0, 0, 1, 0x89]) + .build(); + + let h2 = client::handshake(mock) + .wait().unwrap(); + + // Send the request + let mut request = request::Head::default(); + request.uri = "https://http2.akamai.com/".parse().unwrap(); + + info!("sending request"); + let h2 = h2.send_request(1.into(), request, true).wait().unwrap(); + + // Get the response + + info!("getting response"); + let (resp, h2) = h2.into_future().wait().unwrap(); + + match resp.unwrap() { + h2::Frame::Headers { headers, .. } => { + assert_eq!(headers.status, status::NO_CONTENT); + } + _ => panic!("unexpected frame"), + } + + // No more frames + info!("ensure no more responses"); + assert!(Stream::wait(h2).next().is_none());; +} diff --git a/tests/support/mod.rs b/tests/support/mod.rs new file mode 100644 index 0000000..2bb616d --- /dev/null +++ b/tests/support/mod.rs @@ -0,0 +1,46 @@ +//! Utilities to support tests. + +pub extern crate bytes; +pub extern crate h2; +pub extern crate http; +pub extern crate futures; +pub extern crate mock_io; +pub extern crate env_logger; + +pub use self::futures::{ + Future, + Sink, + Stream, +}; + +pub use self::http::{ + request, + response, + status, +}; + +pub use self::h2::{ + client, + server, +}; + +pub trait MockH2 { + fn handshake(&mut self) -> &mut Self; +} + +impl MockH2 for mock_io::Builder { + fn handshake(&mut self) -> &mut Self { + self.write(b"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n") + // Settings frame + .write(frames::SETTINGS) + .read(frames::SETTINGS) + .read(frames::SETTINGS_ACK) + } +} + +pub mod frames { + //! Some useful frames + + pub const SETTINGS: &'static [u8] = &[0, 0, 0, 4, 0, 0, 0, 0, 0]; + pub const SETTINGS_ACK: &'static [u8] = &[0, 0, 0, 4, 1, 0, 0, 0, 0]; +}