mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-10 04:50:37 -04:00
test/http: https: retry coverage
This commit is contained in:
parent
a7088ad095
commit
7c2d24ae6b
@ -3382,32 +3382,39 @@ http_connection_retry_done(struct evhttp_request *req, void *arg)
|
|||||||
event_base_loopexit(arg,NULL);
|
event_base_loopexit(arg,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct http_server
|
||||||
|
{
|
||||||
|
ev_uint16_t port;
|
||||||
|
int ssl;
|
||||||
|
};
|
||||||
static struct event_base *http_make_web_server_base=NULL;
|
static struct event_base *http_make_web_server_base=NULL;
|
||||||
static void
|
static void
|
||||||
http_make_web_server(evutil_socket_t fd, short what, void *arg)
|
http_make_web_server(evutil_socket_t fd, short what, void *arg)
|
||||||
{
|
{
|
||||||
ev_uint16_t port = *(ev_uint16_t*)arg;
|
struct http_server *hs = (struct http_server *)arg;
|
||||||
http = http_setup(&port, http_make_web_server_base, 0);
|
http = http_setup(&hs->port, http_make_web_server_base, hs->ssl ? HTTP_BIND_SSL : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_connection_retry_test_impl(void *arg, const char *addr, struct evdns_base *dns_base)
|
http_connection_retry_test_basic(void *arg, const char *addr, struct evdns_base *dns_base, int ssl)
|
||||||
{
|
{
|
||||||
struct basic_test_data *data = arg;
|
struct basic_test_data *data = arg;
|
||||||
ev_uint16_t port = 0;
|
|
||||||
struct evhttp_connection *evcon = NULL;
|
struct evhttp_connection *evcon = NULL;
|
||||||
struct evhttp_request *req = NULL;
|
struct evhttp_request *req = NULL;
|
||||||
struct timeval tv, tv_start, tv_end;
|
struct timeval tv, tv_start, tv_end;
|
||||||
|
struct bufferevent *bev;
|
||||||
|
struct http_server hs = { .port = 0, .ssl = ssl, };
|
||||||
|
|
||||||
exit_base = data->base;
|
exit_base = data->base;
|
||||||
test_ok = 0;
|
test_ok = 0;
|
||||||
|
|
||||||
/* auto detect a port */
|
/* auto detect a port */
|
||||||
http = http_setup(&port, data->base, 0);
|
http = http_setup(&hs.port, data->base, ssl ? HTTP_BIND_SSL : 0);
|
||||||
evhttp_free(http);
|
evhttp_free(http);
|
||||||
http = NULL;
|
http = NULL;
|
||||||
|
|
||||||
evcon = evhttp_connection_base_new(data->base, dns_base, addr, port);
|
bev = create_bev(data->base, -1, ssl);
|
||||||
|
evcon = evhttp_connection_base_bufferevent_new(data->base, dns_base, bev, addr, hs.port);
|
||||||
tt_assert(evcon);
|
tt_assert(evcon);
|
||||||
if (dns_base)
|
if (dns_base)
|
||||||
tt_assert(!evhttp_connection_set_flags(evcon, EVHTTP_CON_REUSE_CONNECTED_ADDR));
|
tt_assert(!evhttp_connection_set_flags(evcon, EVHTTP_CON_REUSE_CONNECTED_ADDR));
|
||||||
@ -3502,7 +3509,7 @@ http_connection_retry_test_impl(void *arg, const char *addr, struct evdns_base *
|
|||||||
evutil_timerclear(&tv);
|
evutil_timerclear(&tv);
|
||||||
tv.tv_usec = 200000;
|
tv.tv_usec = 200000;
|
||||||
http_make_web_server_base = data->base;
|
http_make_web_server_base = data->base;
|
||||||
event_base_once(data->base, -1, EV_TIMEOUT, http_make_web_server, &port, &tv);
|
event_base_once(data->base, -1, EV_TIMEOUT, http_make_web_server, &hs, &tv);
|
||||||
|
|
||||||
evutil_gettimeofday(&tv_start, NULL);
|
evutil_gettimeofday(&tv_start, NULL);
|
||||||
event_base_dispatch(data->base);
|
event_base_dispatch(data->base);
|
||||||
@ -3520,7 +3527,7 @@ http_connection_retry_test_impl(void *arg, const char *addr, struct evdns_base *
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_connection_retry_conn_address_test(void *arg)
|
http_connection_retry_conn_address_test_impl(void *arg, int ssl)
|
||||||
{
|
{
|
||||||
struct basic_test_data *data = arg;
|
struct basic_test_data *data = arg;
|
||||||
ev_uint16_t portnum = 0;
|
ev_uint16_t portnum = 0;
|
||||||
@ -3536,19 +3543,29 @@ http_connection_retry_conn_address_test(void *arg)
|
|||||||
evutil_snprintf(address, sizeof(address), "127.0.0.1:%d", portnum);
|
evutil_snprintf(address, sizeof(address), "127.0.0.1:%d", portnum);
|
||||||
evdns_base_nameserver_ip_add(dns_base, address);
|
evdns_base_nameserver_ip_add(dns_base, address);
|
||||||
|
|
||||||
http_connection_retry_test_impl(arg, "localhost", dns_base);
|
http_connection_retry_test_basic(arg, "localhost", dns_base, ssl);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
if (dns_base)
|
if (dns_base)
|
||||||
evdns_base_free(dns_base, 0);
|
evdns_base_free(dns_base, 0);
|
||||||
/** dnsserver will be cleaned in http_connection_retry_test_impl() */
|
/** dnsserver will be cleaned in http_connection_retry_test_basic() */
|
||||||
}
|
}
|
||||||
|
static void http_connection_retry_conn_address_test(void *arg)
|
||||||
|
{ return http_connection_retry_conn_address_test_impl(arg, 0); }
|
||||||
|
static void https_connection_retry_conn_address_test(void *arg)
|
||||||
|
{ return http_connection_retry_conn_address_test_impl(arg, 1); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_connection_retry_test(void *arg)
|
http_connection_retry_test_impl(void *arg, int ssl)
|
||||||
{
|
{
|
||||||
return http_connection_retry_test_impl(arg, "127.0.0.1", NULL);
|
return http_connection_retry_test_basic(arg, "127.0.0.1", NULL, ssl);
|
||||||
}
|
}
|
||||||
|
static void
|
||||||
|
http_connection_retry_test(void *arg)
|
||||||
|
{ return http_connection_retry_test_impl(arg, 0); }
|
||||||
|
static void
|
||||||
|
https_connection_retry_test(void *arg)
|
||||||
|
{ return http_connection_retry_test_impl(arg, 1); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_primitives(void *ptr)
|
http_primitives(void *ptr)
|
||||||
@ -4206,6 +4223,9 @@ struct testcase_t http_testcases[] = {
|
|||||||
HTTP(request_own),
|
HTTP(request_own),
|
||||||
|
|
||||||
#ifdef EVENT__HAVE_OPENSSL
|
#ifdef EVENT__HAVE_OPENSSL
|
||||||
|
{ "https_connection_retry", https_connection_retry_test, TT_ISOLATED|TT_OFF_BY_DEFAULT, &basic_setup, NULL },
|
||||||
|
{ "https_connection_retry_conn_address", https_connection_retry_conn_address_test,
|
||||||
|
TT_ISOLATED|TT_OFF_BY_DEFAULT, &basic_setup, NULL },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
END_OF_TESTCASES
|
END_OF_TESTCASES
|
||||||
|
@ -407,6 +407,7 @@ const char *finetimetests[] = {
|
|||||||
"+util/monotonic_res_fallback",
|
"+util/monotonic_res_fallback",
|
||||||
"+thread/deferred_cb_skew",
|
"+thread/deferred_cb_skew",
|
||||||
"+http/connection_retry",
|
"+http/connection_retry",
|
||||||
|
"+http/https_connection_retry",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
struct testlist_alias_t testaliases[] = {
|
struct testlist_alias_t testaliases[] = {
|
||||||
@ -437,6 +438,7 @@ main(int argc, const char **argv)
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
tinytest_skip(testgroups, "http/connection_retry");
|
tinytest_skip(testgroups, "http/connection_retry");
|
||||||
|
tinytest_skip(testgroups, "http/https_connection_retry");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EVENT__DISABLE_THREAD_SUPPORT
|
#ifndef EVENT__DISABLE_THREAD_SUPPORT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user