diff options
Diffstat (limited to 'test/regress_http.c')
-rw-r--r-- | test/regress_http.c | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/test/regress_http.c b/test/regress_http.c index d950e644..3f6b71b1 100644 --- a/test/regress_http.c +++ b/test/regress_http.c @@ -4309,6 +4309,93 @@ static void http_simple_test(void *arg) static void http_simple_nonconformant_test(void *arg) { http_simple_test_impl(arg, 0, 0, "/test nonconformant"); } +static int +https_bind_ssl_bevcb(struct evhttp *http, ev_uint16_t port, ev_uint16_t *pport, int mask) +{ + int _port; + struct evhttp_bound_socket *sock = NULL; + sock = evhttp_bind_socket_with_handle(http, "127.0.0.1", port); + +#ifdef EVENT__HAVE_OPENSSL + if (mask & HTTP_OPENSSL) { + init_ssl(); + evhttp_bound_set_bevcb(sock, https_bev, NULL); + } +#endif +#ifdef EVENT__HAVE_MBEDTLS + if (mask & HTTP_MBEDTLS) { + evhttp_bound_set_bevcb(sock, https_mbedtls_bev, NULL); + } +#endif + + _port = regress_get_socket_port(evhttp_bound_socket_get_fd(sock)); + if (_port < 0) + return -1; + + if (pport) + *pport = (ev_uint16_t)_port; + + return 0; +} +static void +https_per_socket_bevcb_impl(void *arg, ev_uint16_t http_port, ev_uint16_t https_port, int mask) +{ + struct bufferevent *bev; + struct basic_test_data *data = arg; + struct evhttp_connection *evcon = NULL; + struct evhttp *http = NULL; + ev_uint16_t new_https_port = 0; + struct evhttp_request *req = NULL; + + http = evhttp_new(data->base); + tt_assert(http); + + evhttp_bind_socket_with_handle(http, "127.0.0.1", http_port); + + tt_assert(https_bind_ssl_bevcb(http, https_port, &new_https_port, mask) == 0); + + evhttp_set_gencb(http, http_basic_cb, http); + + bev = create_bev(data->base, -1, mask, 0); + +#ifdef EVENT__HAVE_OPENSSL + bufferevent_openssl_set_allow_dirty_shutdown(bev, 1); +#endif +#ifdef EVENT__HAVE_MBEDTLS + bufferevent_mbedtls_set_allow_dirty_shutdown(bev, 1); +#endif + + evcon = evhttp_connection_base_bufferevent_new(data->base, NULL, bev, "127.0.0.1", new_https_port); + tt_assert(evcon); + + evhttp_connection_set_timeout(evcon, 1); + /* make sure to use the same address that is used by http */ + evhttp_connection_set_local_address(evcon, "127.0.0.1"); + + req = evhttp_request_new(http_request_done, (void *) BASIC_REQUEST_BODY); + tt_assert(req); + + evhttp_add_header(evhttp_request_get_output_headers(req), "Host", "somehost"); + + if (evhttp_make_request(evcon, req, EVHTTP_REQ_GET, "/test") == -1) { + evhttp_request_free(req); + TT_GRIPE(("make_request_failed")); + goto end; + } + + exit_base = data->base; + event_base_dispatch(data->base); + +end: + if (evcon) + evhttp_connection_free(evcon); + + if (http) + evhttp_free(http); +} +static void https_per_socket_bevcb(void *arg, int ssl) +{ https_per_socket_bevcb_impl(arg, 0, 0, ssl); } + static void http_connection_retry_test_basic(void *arg, const char *addr, struct evdns_base *dns_base, int ssl) { @@ -5758,6 +5845,8 @@ static void https_connection_test(void *arg) { http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC, HTTP_OPENSSL); } static void https_persist_connection_test(void *arg) { http_connection_test_(arg, 1, "127.0.0.1", NULL, 0, AF_UNSPEC, HTTP_OPENSSL); } +static void https_per_socket_bevcb_test(void *arg) +{ https_per_socket_bevcb_impl(arg, 0, 0, HTTP_OPENSSL); } #endif #ifdef EVENT__HAVE_MBEDTLS @@ -5791,6 +5880,8 @@ static void https_mbedtls_connection_test(void *arg) { http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC, HTTP_MBEDTLS); } static void https_mbedtls_persist_connection_test(void *arg) { http_connection_test_(arg, 1, "127.0.0.1", NULL, 0, AF_UNSPEC, HTTP_MBEDTLS); } +static void https_mbedtls_per_socket_bevcb_test(void *arg) +{ https_per_socket_bevcb_impl(arg, 0, 0, HTTP_MBEDTLS); } #endif struct testcase_t http_testcases[] = { @@ -5910,6 +6001,7 @@ struct testcase_t http_testcases[] = { HTTPS(write_during_read), HTTPS(connection), HTTPS(persist_connection), + HTTPS(per_socket_bevcb), #endif #ifdef EVENT__HAVE_MBEDTLS @@ -5929,6 +6021,7 @@ struct testcase_t http_testcases[] = { HTTPS_MBEDTLS(write_during_read), HTTPS_MBEDTLS(connection), HTTPS_MBEDTLS(persist_connection), + HTTPS_MBEDTLS(per_socket_bevcb), #endif END_OF_TESTCASES |