summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSergey Matveychuk <sem33@yandex-team.ru>2021-04-07 20:39:18 +0300
committerAzat Khuzhin <azat@libevent.org>2021-05-24 21:03:45 +0300
commit19b3fd0bf03c94e694ac25ad95fe43ac10df73b5 (patch)
tree1efe5d81b55a16c67d93e161a8638680393ead90 /test
parent087bbc572c48d9304d8b6b911e6b0cf966ba3c28 (diff)
downloadlibevent-19b3fd0bf03c94e694ac25ad95fe43ac10df73b5.tar.gz
evdns: add ability to get CNAME
Add new flag (DNS_CNAME_CALLBACK) for evdns_base_resolve_ipv4()/evdns_base_resolve_ipv6(). If set, you will get one more callback with type == DNS_CNAME and CNAME in addrs argument.
Diffstat (limited to 'test')
-rw-r--r--test/regress_dns.c12
-rw-r--r--test/regress_testutils.c5
2 files changed, 14 insertions, 3 deletions
diff --git a/test/regress_dns.c b/test/regress_dns.c
index fff111a8..8cbb2e6d 100644
--- a/test/regress_dns.c
+++ b/test/regress_dns.c
@@ -512,7 +512,7 @@ generic_dns_callback(int result, char type, int count, int ttl, void *addresses,
len = count * 4;
else if (type == DNS_IPv6_AAAA)
len = count * 16;
- else if (type == DNS_PTR)
+ else if (type == DNS_PTR || type == DNS_CNAME)
len = strlen(addresses)+1;
else {
res->addrs_len = len = 0;
@@ -551,6 +551,7 @@ static struct regress_dns_server_table search_table[] = {
{ "hostn.a.example.com", "errsoa", "0", 0, 0 },
{ "hostn.b.example.com", "errsoa", "3", 0, 0 },
{ "hostn.c.example.com", "err", "0", 0, 0 },
+ { "hostc.c.example.com", "CNAME", "cname.c.example.com", 0, 0 },
{ "host", "err", "3", 0, 0 },
{ "host2", "err", "3", 0, 0 },
{ "*", "err", "3", 0, 0 },
@@ -586,7 +587,7 @@ dns_search_test_impl(void *arg, int lower)
ev_uint16_t portnum = 0;
char buf[64];
- struct generic_dns_callback_result r[8];
+ struct generic_dns_callback_result r[9];
size_t i;
for (i = 0; i < ARRAY_SIZE(table); ++i) {
@@ -604,7 +605,7 @@ dns_search_test_impl(void *arg, int lower)
evdns_base_search_add(dns, "b.example.com");
evdns_base_search_add(dns, "c.example.com");
- n_replies_left = ARRAY_SIZE(r);
+ n_replies_left = ARRAY_SIZE(r)+1; /* CNAME gives us 2 callbacks for 1 request */
exit_base = base;
evdns_base_resolve_ipv4(dns, "host", 0, generic_dns_callback, &r[0]);
@@ -615,6 +616,8 @@ dns_search_test_impl(void *arg, int lower)
evdns_base_resolve_ipv4(dns, "hostn.a.example.com", DNS_NO_SEARCH, generic_dns_callback, &r[5]);
evdns_base_resolve_ipv4(dns, "hostn.b.example.com", DNS_NO_SEARCH, generic_dns_callback, &r[6]);
evdns_base_resolve_ipv4(dns, "hostn.c.example.com", DNS_NO_SEARCH, generic_dns_callback, &r[7]);
+ evdns_base_resolve_ipv4(dns, "hostc.c.example.com", DNS_NO_SEARCH | DNS_CNAME_CALLBACK,
+ generic_dns_callback, &r[8]);
event_base_dispatch(base);
@@ -633,6 +636,9 @@ dns_search_test_impl(void *arg, int lower)
tt_int_op(r[6].ttl, ==, 42);
tt_int_op(r[7].result, ==, DNS_ERR_NODATA);
tt_int_op(r[7].ttl, ==, 0);
+ tt_int_op(r[8].type, ==, DNS_CNAME);
+ tt_int_op(r[8].count, ==, 1);
+ tt_str_op(r[8].addrs, ==, "cname.c.example.com");
end:
if (dns)
diff --git a/test/regress_testutils.c b/test/regress_testutils.c
index ece3733b..5a3f6c1e 100644
--- a/test/regress_testutils.c
+++ b/test/regress_testutils.c
@@ -257,6 +257,11 @@ regress_dns_server_cb(struct evdns_server_request *req, void *data)
}
evdns_server_request_add_aaaa_reply(req,
question, 1, &in6.s6_addr, 100);
+ } else if (!strcmp(tab->anstype, "CNAME")) {
+ struct in_addr in;
+ evutil_inet_pton(AF_INET, "11.22.33.44", &in);
+ evdns_server_request_add_a_reply(req, question, 1, &in, 100);
+ evdns_server_request_add_cname_reply(req, question, tab->ans, 100);
} else {
TT_DIE(("Weird table entry with type '%s'", tab->anstype));
}