resolved: refactor DNS answer construction for cache tests

This commit is contained in:
James Coglan
2024-07-23 14:08:31 +01:00
parent 4f4c06f02d
commit bbcd3bc381
+18 -47
View File
@@ -33,12 +33,12 @@ typedef struct PutArgs {
} PutArgs;
static PutArgs mk_put_args(void) {
return (PutArgs) {
PutArgs put_args = {
.cache_mode = DNS_CACHE_MODE_YES,
.protocol = DNS_PROTOCOL_DNS,
.key = NULL,
.rcode = DNS_RCODE_SUCCESS,
.answer = NULL,
.answer = dns_answer_new(0),
.full_packet = NULL,
.query_flags = SD_RESOLVED_AUTHENTICATED | SD_RESOLVED_CONFIDENTIAL,
.dnssec_result = DNSSEC_UNSIGNED,
@@ -47,6 +47,9 @@ static PutArgs mk_put_args(void) {
.owner_address = { .in.s_addr = htobe32(0x01020304) },
.stale_retention_usec = 0
};
ASSERT_NOT_NULL(put_args.answer);
return put_args;
}
static int cache_put(DnsCache *cache, PutArgs *args) {
@@ -80,25 +83,24 @@ static void put_args_unrefp(PutArgs *args) {
dns_packet_unref(args->full_packet);
}
static void answer_add_a(PutArgs *args, DnsResourceKey *key, int addr, int ttl, DnsAnswerFlags flags) {
_cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
rr = dns_resource_record_new(key);
ASSERT_NOT_NULL(rr);
rr->a.in_addr.s_addr = htobe32(addr);
rr->ttl = ttl;
dns_answer_add(args->answer, rr, 1, flags, NULL);
}
TEST(dns_a_success_is_cached) {
_cleanup_(dns_cache_unrefp) DnsCache cache = new_cache();
_cleanup_(put_args_unrefp) PutArgs put_args = mk_put_args();
_cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
DnsAnswerFlags flags;
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SUCCESS;
put_args.answer = dns_answer_new(1);
ASSERT_NOT_NULL(put_args.answer);
rr = dns_resource_record_new(put_args.key);
ASSERT_NOT_NULL(rr);
rr->a.in_addr.s_addr = htobe32(0xc0a8017f);
rr->ttl = 3600;
flags = DNS_ANSWER_CACHEABLE;
dns_answer_add(put_args.answer, rr, 1, flags, NULL);
answer_add_a(&put_args, put_args.key, 0xc0a8017f, 3600, DNS_ANSWER_CACHEABLE);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_FALSE(dns_cache_is_empty(&cache));
@@ -111,8 +113,6 @@ TEST(dns_a_success_empty_answer_is_not_cached) {
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SUCCESS;
put_args.answer = dns_answer_new(0);
ASSERT_NOT_NULL(put_args.answer);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_TRUE(dns_cache_is_empty(&cache));
@@ -125,9 +125,6 @@ TEST(dns_a_nxdomain_is_cached) {
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_NXDOMAIN;
put_args.answer = dns_answer_new(1);
ASSERT_NOT_NULL(put_args.answer);
dns_answer_add_soa(put_args.answer, "example.com", 3600, 0);
ASSERT_OK(cache_put(&cache, &put_args));
@@ -141,8 +138,6 @@ TEST(dns_a_servfail_is_cached) {
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SERVFAIL;
put_args.answer = dns_answer_new(0);
ASSERT_NOT_NULL(put_args.answer);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_FALSE(dns_cache_is_empty(&cache));
@@ -155,8 +150,6 @@ TEST(dns_a_refused_is_not_cached) {
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_REFUSED;
put_args.answer = dns_answer_new(0);
ASSERT_NOT_NULL(put_args.answer);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_TRUE(dns_cache_is_empty(&cache));
@@ -165,22 +158,11 @@ TEST(dns_a_refused_is_not_cached) {
TEST(dns_a_success_zero_ttl_is_not_cached) {
_cleanup_(dns_cache_unrefp) DnsCache cache = new_cache();
_cleanup_(put_args_unrefp) PutArgs put_args = mk_put_args();
_cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
DnsAnswerFlags flags;
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SUCCESS;
put_args.answer = dns_answer_new(1);
ASSERT_NOT_NULL(put_args.answer);
rr = dns_resource_record_new(put_args.key);
ASSERT_NOT_NULL(rr);
rr->a.in_addr.s_addr = htobe32(0xc0a8017f);
rr->ttl = 0;
flags = DNS_ANSWER_CACHEABLE;
dns_answer_add(put_args.answer, rr, 1, flags, NULL);
answer_add_a(&put_args, put_args.key, 0xc0a8017f, 0, DNS_ANSWER_CACHEABLE);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_TRUE(dns_cache_is_empty(&cache));
@@ -189,22 +171,11 @@ TEST(dns_a_success_zero_ttl_is_not_cached) {
TEST(dns_a_success_not_cacheable_is_not_cached) {
_cleanup_(dns_cache_unrefp) DnsCache cache = new_cache();
_cleanup_(put_args_unrefp) PutArgs put_args = mk_put_args();
_cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
DnsAnswerFlags flags;
put_args.key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
ASSERT_NOT_NULL(put_args.key);
put_args.rcode = DNS_RCODE_SUCCESS;
put_args.answer = dns_answer_new(1);
ASSERT_NOT_NULL(put_args.answer);
rr = dns_resource_record_new(put_args.key);
ASSERT_NOT_NULL(rr);
rr->a.in_addr.s_addr = htobe32(0xc0a8017f);
rr->ttl = 3600;
flags = 0;
dns_answer_add(put_args.answer, rr, 1, flags, NULL);
answer_add_a(&put_args, put_args.key, 0xc0a8017f, 3600, 0);
ASSERT_OK(cache_put(&cache, &put_args));
ASSERT_TRUE(dns_cache_is_empty(&cache));