From 5041a4d42801efb10aa1f0b002bf583ff79a8373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kornel=20Lesin=CC=81ski?= Date: Mon, 9 Mar 2020 17:35:32 +0000 Subject: [PATCH] Test CONNECT is accepted --- tests/h2-support/src/frames.rs | 19 +++++++++++++++++++ tests/h2-tests/tests/server.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/tests/h2-support/src/frames.rs b/tests/h2-support/src/frames.rs index 0e1c569..b9393b2 100644 --- a/tests/h2-support/src/frames.rs +++ b/tests/h2-support/src/frames.rs @@ -113,6 +113,25 @@ impl Mock { Mock(frame) } + pub fn method(self, method: M) -> Self + where + M: TryInto, + M::Error: fmt::Debug, + { + let method = method.try_into().unwrap(); + let (id, _, fields) = self.into_parts(); + let frame = frame::Headers::new( + id, + frame::Pseudo { + scheme: None, + method: Some(method), + ..Default::default() + }, + fields, + ); + Mock(frame) + } + pub fn response(self, status: S) -> Self where S: TryInto, diff --git a/tests/h2-tests/tests/server.rs b/tests/h2-tests/tests/server.rs index 5af5881..17a2801 100644 --- a/tests/h2-tests/tests/server.rs +++ b/tests/h2-tests/tests/server.rs @@ -105,6 +105,37 @@ async fn serve_request() { join(client, srv).await; } +#[tokio::test] +async fn serve_connect() { + let _ = env_logger::try_init(); + let (io, mut client) = mock::new(); + + let client = async move { + let settings = client.assert_server_handshake().await; + assert_default_settings!(settings); + client + .send_frame(frames::headers(1).method("CONNECT").eos()) + .await; + client + .recv_frame(frames::headers(1).response(200).eos()) + .await; + }; + + let srv = async move { + let mut srv = server::handshake(io).await.expect("handshake"); + let (req, mut stream) = srv.next().await.unwrap().unwrap(); + + assert_eq!(req.method(), &http::Method::CONNECT); + + let rsp = http::Response::builder().status(200).body(()).unwrap(); + stream.send_response(rsp, true).unwrap(); + + assert!(srv.next().await.is_none()); + }; + + join(client, srv).await; +} + #[tokio::test] async fn push_request() { let _ = env_logger::try_init();