mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-13 14:26:30 -04:00
evdns: add regress for EVDNS_BASE_DISABLE_WHEN_INACTIVE base flag
This commit is contained in:
parent
a60632a1ec
commit
ad0493eebf
@ -443,6 +443,7 @@ end:
|
|||||||
|
|
||||||
static int n_replies_left;
|
static int n_replies_left;
|
||||||
static struct event_base *exit_base;
|
static struct event_base *exit_base;
|
||||||
|
static struct evdns_server_port *exit_port;
|
||||||
|
|
||||||
struct generic_dns_callback_result {
|
struct generic_dns_callback_result {
|
||||||
int result;
|
int result;
|
||||||
@ -483,8 +484,14 @@ generic_dns_callback(int result, char type, int count, int ttl, void *addresses,
|
|||||||
res->addrs = res->addrs_buf;
|
res->addrs = res->addrs_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (--n_replies_left == 0)
|
--n_replies_left;
|
||||||
event_base_loopexit(exit_base, NULL);
|
if (n_replies_left == 0) {
|
||||||
|
if (exit_port) {
|
||||||
|
evdns_close_server_port(exit_port);
|
||||||
|
exit_port = NULL;
|
||||||
|
} else
|
||||||
|
event_base_loopexit(exit_base, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct regress_dns_server_table search_table[] = {
|
static struct regress_dns_server_table search_table[] = {
|
||||||
@ -819,21 +826,29 @@ dumb_bytes_fn(char *p, size_t n)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dns_inflight_test(void *arg)
|
dns_inflight_test_impl(void *arg, int flags)
|
||||||
{
|
{
|
||||||
struct basic_test_data *data = arg;
|
struct basic_test_data *data = arg;
|
||||||
struct event_base *base = data->base;
|
struct event_base *base = data->base;
|
||||||
struct evdns_base *dns = NULL;
|
struct evdns_base *dns = NULL;
|
||||||
|
struct evdns_server_port *dns_port = NULL;
|
||||||
ev_uint16_t portnum = 0;
|
ev_uint16_t portnum = 0;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
int disable_when_inactive = flags & EVDNS_BASE_DISABLE_WHEN_INACTIVE;
|
||||||
|
|
||||||
struct generic_dns_callback_result r[20];
|
struct generic_dns_callback_result r[20];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
tt_assert(regress_dnsserver(base, &portnum, reissue_table));
|
dns_port = regress_get_dnsserver(base, &portnum, NULL,
|
||||||
|
regress_dns_server_cb, reissue_table);
|
||||||
|
tt_assert(dns_port);
|
||||||
|
if (disable_when_inactive) {
|
||||||
|
exit_port = dns_port;
|
||||||
|
}
|
||||||
|
|
||||||
evutil_snprintf(buf, sizeof(buf), "127.0.0.1:%d", (int)portnum);
|
evutil_snprintf(buf, sizeof(buf), "127.0.0.1:%d", (int)portnum);
|
||||||
|
|
||||||
dns = evdns_base_new(base, 0);
|
dns = evdns_base_new(base, flags);
|
||||||
tt_assert(!evdns_base_nameserver_ip_add(dns, buf));
|
tt_assert(!evdns_base_nameserver_ip_add(dns, buf));
|
||||||
tt_assert(! evdns_base_set_option(dns, "max-inflight:", "3"));
|
tt_assert(! evdns_base_set_option(dns, "max-inflight:", "3"));
|
||||||
tt_assert(! evdns_base_set_option(dns, "randomize-case:", "0"));
|
tt_assert(! evdns_base_set_option(dns, "randomize-case:", "0"));
|
||||||
@ -844,6 +859,8 @@ dns_inflight_test(void *arg)
|
|||||||
n_replies_left = 20;
|
n_replies_left = 20;
|
||||||
exit_base = base;
|
exit_base = base;
|
||||||
|
|
||||||
|
if (disable_when_inactive)
|
||||||
|
alarm(10);
|
||||||
event_base_dispatch(base);
|
event_base_dispatch(base);
|
||||||
|
|
||||||
for (i=0;i<20;++i) {
|
for (i=0;i<20;++i) {
|
||||||
@ -855,7 +872,20 @@ dns_inflight_test(void *arg)
|
|||||||
end:
|
end:
|
||||||
if (dns)
|
if (dns)
|
||||||
evdns_base_free(dns, 0);
|
evdns_base_free(dns, 0);
|
||||||
regress_clean_dnsserver();
|
if (exit_port)
|
||||||
|
evdns_close_server_port(exit_port);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dns_inflight_test(void *arg)
|
||||||
|
{
|
||||||
|
dns_inflight_test_impl(arg, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dns_disable_when_inactive_test(void *arg)
|
||||||
|
{
|
||||||
|
dns_inflight_test_impl(arg, EVDNS_BASE_DISABLE_WHEN_INACTIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* === Test for bufferevent_socket_connect_hostname */
|
/* === Test for bufferevent_socket_connect_hostname */
|
||||||
@ -1898,6 +1928,8 @@ struct testcase_t dns_testcases[] = {
|
|||||||
{ "inflight", dns_inflight_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
|
{ "inflight", dns_inflight_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
|
||||||
{ "bufferevent_connect_hostname", test_bufferevent_connect_hostname,
|
{ "bufferevent_connect_hostname", test_bufferevent_connect_hostname,
|
||||||
TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
|
TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
|
||||||
|
{ "disable_when_inactive", dns_disable_when_inactive_test,
|
||||||
|
TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
|
||||||
|
|
||||||
{ "getaddrinfo_async", test_getaddrinfo_async,
|
{ "getaddrinfo_async", test_getaddrinfo_async,
|
||||||
TT_FORK|TT_NEED_BASE, &basic_setup, (char*)"" },
|
TT_FORK|TT_NEED_BASE, &basic_setup, (char*)"" },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user