diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/connection-test.c | 56 | ||||
-rw-r--r-- | tests/misc-test.c | 24 |
2 files changed, 80 insertions, 0 deletions
diff --git a/tests/connection-test.c b/tests/connection-test.c index 307a695f..2978e796 100644 --- a/tests/connection-test.c +++ b/tests/connection-test.c @@ -1693,6 +1693,61 @@ do_connection_http_1_1_required_test (void) soup_test_session_abort_unref (session); } +static void +cancel_tunnel_test_request_queued (SoupSession *session, + SoupMessage *msg, + GCancellable *cancellable) +{ + if (soup_message_get_method (msg) != SOUP_METHOD_CONNECT) + return; + + g_signal_connect_swapped (msg, "starting", G_CALLBACK (g_cancellable_cancel), cancellable); +} + +static void +do_cancel_tunnel_msg_on_starting (void) +{ + SoupSession *session; + SoupMessage *msg; + GProxyResolver *resolver; + GCancellable *cancellable; + GBytes *body; + GError *error = NULL; + + SOUP_TEST_SKIP_IF_NO_TLS + SOUP_TEST_SKIP_IF_NO_APACHE; + + session = soup_test_session_new (NULL); + + if (tls_available) { + GTlsDatabase *tlsdb; + + tlsdb = g_tls_backend_get_default_database (g_tls_backend_get_default ()); + soup_session_set_tls_database (session, tlsdb); + g_object_unref (tlsdb); + } + + resolver = g_simple_proxy_resolver_new (HTTP_PROXY, NULL); + soup_session_set_proxy_resolver (session, resolver); + g_object_unref (resolver); + + cancellable = g_cancellable_new (); + g_signal_connect (session, "request-queued", + G_CALLBACK (cancel_tunnel_test_request_queued), + cancellable); + + msg = soup_message_new ("GET", HTTPS_SERVER); + body = soup_session_send_and_read (session, msg, cancellable, &error); + soup_test_assert_message_status (msg, SOUP_STATUS_NONE); + g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED); + g_clear_error (&error); + g_bytes_unref (body); + g_object_unref (msg); + g_object_unref (cancellable); + + soup_test_session_abort_unref (session); +} + int main (int argc, char **argv) { @@ -1719,6 +1774,7 @@ main (int argc, char **argv) g_test_add_func ("/connection/metrics", do_connection_metrics_test); g_test_add_func ("/connection/force-http2", do_connection_force_http2_test); g_test_add_func ("/connection/http2/http-1-1-required", do_connection_http_1_1_required_test); + g_test_add_func ("/connection/cancel-tunnel-msg-on-starting", do_cancel_tunnel_msg_on_starting); ret = g_test_run (); diff --git a/tests/misc-test.c b/tests/misc-test.c index 045161d8..4c14bb87 100644 --- a/tests/misc-test.c +++ b/tests/misc-test.c @@ -430,6 +430,14 @@ ea_message_starting (SoupMessage *msg, } static void +ea_message_queued (SoupSession *session, + SoupMessage *msg, + GCancellable *cancellable) +{ + g_cancellable_cancel (cancellable); +} + +static void do_early_abort_test (void) { SoupSession *session; @@ -488,6 +496,22 @@ do_early_abort_test (void) g_object_unref (cancellable); g_object_unref (msg); soup_test_session_abort_unref (session); + + session = soup_test_session_new (NULL); + msg = soup_message_new_from_uri ("GET", base_uri); + cancellable = g_cancellable_new (); + + g_signal_connect (session, "request-queued", + G_CALLBACK (ea_message_queued), cancellable); + g_assert_null (soup_test_session_async_send (session, msg, cancellable, &error)); + debug_printf (2, " Message 4 completed\n"); + + g_assert_cmpuint (soup_message_get_connection_id (msg), ==, 0); + g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED); + g_clear_error (&error); + g_object_unref (cancellable); + g_object_unref (msg); + soup_test_session_abort_unref (session); } static void |