summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAzat Khuzhin <a3at.mail@gmail.com>2016-11-19 15:54:52 +0300
committerAzat Khuzhin <a3at.mail@gmail.com>2016-12-07 01:24:40 +0300
commit45247e6fd90619d6ec163290f5fe21f5d89c7d5b (patch)
tree00d019af9a606f703f57fcf9303a7ef2131b685e /test
parente6ae069b48d1f1e3c4cb71dba66f7064db5d592c (diff)
downloadlibevent-45247e6fd90619d6ec163290f5fe21f5d89c7d5b.tar.gz
test/https: cover multiple request over the same connection
Introduce two new tests: - http/https_connection # fail - http/https_persist_connection # ok Reported-by: liutao74748@163.com
Diffstat (limited to 'test')
-rw-r--r--test/regress_http.c50
1 files changed, 42 insertions, 8 deletions
diff --git a/test/regress_http.c b/test/regress_http.c
index 613128da..82fe30f7 100644
--- a/test/regress_http.c
+++ b/test/regress_http.c
@@ -1004,12 +1004,21 @@ static void http_request_empty_done(struct evhttp_request *, void *);
static void
http_connection_test_(struct basic_test_data *data, int persistent,
- const char *address, struct evdns_base *dnsbase, int ipv6, int family)
+ const char *address, struct evdns_base *dnsbase, int ipv6, int family,
+ int ssl)
{
ev_uint16_t port = 0;
struct evhttp_connection *evcon = NULL;
struct evhttp_request *req = NULL;
- struct evhttp *http = http_setup(&port, data->base, ipv6);
+ struct evhttp *http;
+
+ int mask = 0;
+ if (ipv6)
+ mask |= HTTP_BIND_IPV6;
+ if (ssl)
+ mask |= HTTP_BIND_SSL;
+
+ http = http_setup(&port, data->base, mask);
test_ok = 0;
if (!http && ipv6) {
@@ -1017,7 +1026,21 @@ http_connection_test_(struct basic_test_data *data, int persistent,
}
tt_assert(http);
- evcon = evhttp_connection_base_new(data->base, dnsbase, address, port);
+ if (ssl) {
+#ifdef EVENT__HAVE_OPENSSL
+ SSL *ssl = SSL_new(get_ssl_ctx());
+ struct bufferevent *bev = bufferevent_openssl_socket_new(
+ data->base, -1, ssl,
+ BUFFEREVENT_SSL_CONNECTING, BEV_OPT_DEFER_CALLBACKS);
+ bufferevent_openssl_set_allow_dirty_shutdown(bev, 1);
+
+ evcon = evhttp_connection_base_bufferevent_new(data->base, dnsbase, bev, address, port);
+#else
+ tt_skip();
+#endif
+ } else {
+ evcon = evhttp_connection_base_new(data->base, dnsbase, address, port);
+ }
tt_assert(evcon);
evhttp_connection_set_family(evcon, family);
@@ -1093,12 +1116,12 @@ http_connection_test_(struct basic_test_data *data, int persistent,
static void
http_connection_test(void *arg)
{
- http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC);
+ http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC, 0);
}
static void
http_persist_connection_test(void *arg)
{
- http_connection_test_(arg, 1, "127.0.0.1", NULL, 0, AF_UNSPEC);
+ http_connection_test_(arg, 1, "127.0.0.1", NULL, 0, AF_UNSPEC, 0);
}
static struct regress_dns_server_table search_table[] = {
@@ -1540,6 +1563,11 @@ http_request_done(struct evhttp_request *req, void *arg)
{
const char *what = arg;
+ if (!req) {
+ fprintf(stderr, "FAILED\n");
+ exit(1);
+ }
+
if (evhttp_request_get_response_code(req) != HTTP_OK) {
fprintf(stderr, "FAILED\n");
exit(1);
@@ -4294,7 +4322,7 @@ http_ipv6_for_domain_test_impl(void *arg, int family)
evdns_base_nameserver_ip_add(dns_base, address);
http_connection_test_(arg, 0 /* not persistent */, "localhost", dns_base,
- 1 /* ipv6 */, family);
+ 1 /* ipv6 */, family, 0);
end:
if (dns_base)
@@ -4372,12 +4400,12 @@ http_get_addr_test(void *arg)
static void
http_set_family_test(void *arg)
{
- http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC);
+ http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC, 0);
}
static void
http_set_family_ipv4_test(void *arg)
{
- http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_INET);
+ http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_INET, 0);
}
static void
http_set_family_ipv6_test(void *arg)
@@ -4505,6 +4533,10 @@ static void https_connection_fail_test(void *arg)
{ return http_connection_fail_test_impl(arg, 1); }
static void https_write_during_read_test(void *arg)
{ return http_write_during_read_test_impl(arg, 1); }
+static void https_connection_test(void *arg)
+{ return http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC, 1); }
+static void https_persist_connection_test(void *arg)
+{ return http_connection_test_(arg, 1, "127.0.0.1", NULL, 0, AF_UNSPEC, 1); }
#endif
struct testcase_t http_testcases[] = {
@@ -4595,6 +4627,8 @@ struct testcase_t http_testcases[] = {
HTTPS(stream_out),
HTTPS(connection_fail),
HTTPS(write_during_read),
+ HTTPS(connection),
+ HTTPS(persist_connection),
#endif
END_OF_TESTCASES