]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: refactor DNS answer construction for cache tests
authorJames Coglan <james@neighbourhood.ie>
Tue, 21 May 2024 13:49:40 +0000 (14:49 +0100)
committerJames Coglan <james@neighbourhood.ie>
Tue, 23 Jul 2024 13:08:31 +0000 (14:08 +0100)
src/resolve/test-dns-cache.c

index d708afef7b6333a2a86720472f59ee95750f05e3..51559ffa3302e7437edc7dc2b966c6fcc894b91c 100644 (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));