resolved: tests for dns_answer_order_by_scope()

This commit is contained in:
James Coglan
2024-07-23 13:14:54 +01:00
committed by Luca Boccassi
parent 8105438cd2
commit c9f0cbe2fe
+70
View File
@@ -974,4 +974,74 @@ TEST(dns_answer_dump) {
check_dump_contents(f, expected, 4);
}
/* ================================================================
* dns_answer_order_by_scope()
* ================================================================ */
/* link-local addresses are a9fe0100 (169.254.1.0) to a9fefeff (169.254.254.255) */
static DnsAnswer* prepare_link_local_answer(void) {
DnsAnswer *answer = dns_answer_new(0);
DnsResourceRecord *rr = NULL;
ASSERT_NOT_NULL(answer);
rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "a.example.com");
ASSERT_NOT_NULL(rr);
rr->ttl = 3600;
rr->a.in_addr.s_addr = htobe32(0xa9fe0100);
dns_answer_add(answer, rr, 1, DNS_ANSWER_CACHEABLE, NULL);
dns_resource_record_unref(rr);
rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "b.example.com");
ASSERT_NOT_NULL(rr);
rr->ttl = 3600;
rr->a.in_addr.s_addr = htobe32(0xc0a80404);
dns_answer_add(answer, rr, 2, DNS_ANSWER_CACHEABLE, NULL);
dns_resource_record_unref(rr);
rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "c.example.com");
ASSERT_NOT_NULL(rr);
rr->ttl = 3600;
rr->a.in_addr.s_addr = htobe32(0xa9fefeff);
dns_answer_add(answer, rr, 3, DNS_ANSWER_CACHEABLE, NULL);
dns_resource_record_unref(rr);
return answer;
}
TEST(dns_answer_order_by_scope_prefer_link_local) {
_cleanup_(dns_answer_unrefp) DnsAnswer *answer = prepare_link_local_answer();
dns_answer_order_by_scope(answer, 1);
_cleanup_(unlink_tempfilep) char p[] = "/tmp/dns-answer-order-by-scope-1-XXXXXX";
_cleanup_fclose_ FILE *f = NULL;
fmkostemp_safe(p, "r+", &f);
dns_answer_dump(answer, f);
const char *expected[] = {
"\ta.example.com IN A 169.254.1.0\t; ttl=3600 ifindex=1 cacheable",
"\tc.example.com IN A 169.254.254.255\t; ttl=3600 ifindex=3 cacheable",
"\tb.example.com IN A 192.168.4.4\t; ttl=3600 ifindex=2 cacheable"
};
check_dump_contents(f, expected, 3);
}
TEST(dns_answer_order_by_scope_prefer_other) {
_cleanup_(dns_answer_unrefp) DnsAnswer *answer = prepare_link_local_answer();
dns_answer_order_by_scope(answer, 0);
_cleanup_(unlink_tempfilep) char p[] = "/tmp/dns-answer-order-by-scope-2-XXXXXX";
_cleanup_fclose_ FILE *f = NULL;
fmkostemp_safe(p, "r+", &f);
dns_answer_dump(answer, f);
const char *expected[] = {
"\tb.example.com IN A 192.168.4.4\t; ttl=3600 ifindex=2 cacheable",
"\ta.example.com IN A 169.254.1.0\t; ttl=3600 ifindex=1 cacheable",
"\tc.example.com IN A 169.254.254.255\t; ttl=3600 ifindex=3 cacheable"
};
check_dump_contents(f, expected, 3);
}
DEFINE_TEST_MAIN(LOG_DEBUG);