From 559667a342a365fdfd942679b5d1542ad2ea512c Mon Sep 17 00:00:00 2001 From: Simon Dugas Date: Tue, 12 Dec 2023 09:11:57 -0500 Subject: [PATCH] response: add http tunneling test case This test case shows unexpected state transitions when processing http tunnels and the emission of body data. --- test/files/101-connect-tunnel.t | 20 ++++++++++++++++++++ test/test_main.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 test/files/101-connect-tunnel.t diff --git a/test/files/101-connect-tunnel.t b/test/files/101-connect-tunnel.t new file mode 100644 index 00000000..de6f3d0e --- /dev/null +++ b/test/files/101-connect-tunnel.t @@ -0,0 +1,20 @@ +>>> +CONNECT www.ssllabs.com:443 HTTP/1.0 +Host: www.ssllabs.com:443 + +abcdef + +<<< +HTTP/1.1 200 OK +Server: Apache/2.2 + +ABCDEF +ABCDEF + +>>> +abcdef +abcdef + +<<< +ABCDEF +ABCDEF diff --git a/test/test_main.cpp b/test/test_main.cpp index 73b86868..3bc6b7f7 100644 --- a/test/test_main.cpp +++ b/test/test_main.cpp @@ -2145,4 +2145,33 @@ TEST_F(ConnectionParsing, ResponseBodyData) { delete user_data; } + +TEST_F(ConnectionParsing, ConnectTunnel) { + htp_config_register_response_body_data(cfg, callback_RESPONSE_BODY_DATA); + + int rc = test_run(home, "101-connect-tunnel.t", cfg, &connp); + ASSERT_GE(rc, 0); + + ASSERT_EQ(1, htp_list_size(connp->conn->transactions)); + + htp_tx_t *tx = (htp_tx_t *) htp_list_get(connp->conn->transactions, 0); + ASSERT_TRUE(tx != NULL); + + EXPECT_TRUE(htp_tx_is_complete(tx)); + + EXPECT_EQ(0, bstr_cmp_c(tx->request_method, "CONNECT")); + + EXPECT_EQ(200, tx->response_status_number); + EXPECT_EQ(0, tx->request_entity_len); + EXPECT_EQ(0, tx->request_message_len); + EXPECT_EQ(-1, tx->request_content_length); + EXPECT_EQ(0, tx->response_entity_len); + EXPECT_EQ(0, tx->response_message_len); + EXPECT_EQ(-1, tx->response_content_length); + + struct ResponseBodyDataCallback *user_data = (struct ResponseBodyDataCallback *) htp_tx_get_user_data(tx); + ASSERT_TRUE(user_data); + ASSERT_EQ(0, user_data->data.size()); +} + #endif