From c07b0c66ca170375f36dff079242c187e158cea7 Mon Sep 17 00:00:00 2001 From: James Coglan Date: Fri, 24 May 2024 16:10:13 +0100 Subject: [PATCH] resolved: tests for dns_answer_merge() and dns_answer_extend() --- src/resolve/test-dns-answer.c | 114 ++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/src/resolve/test-dns-answer.c b/src/resolve/test-dns-answer.c index b27f9ba41c0..852172e55e9 100644 --- a/src/resolve/test-dns-answer.c +++ b/src/resolve/test-dns-answer.c @@ -225,4 +225,118 @@ TEST(dns_answer_find_soa_multi) { dns_resource_key_unref(key); } +/* ================================================================ + * dns_answer_merge() + * ================================================================ */ + +TEST(dns_answer_merge_same_object) { + _cleanup_(dns_answer_unrefp) DnsAnswer *a = NULL, *ret = NULL; + + a = dns_answer_new(0); + ASSERT_NOT_NULL(a); + + ASSERT_OK(dns_answer_merge(a, a, &ret)); + ASSERT_TRUE(ret == a); +} + +TEST(dns_answer_merge_a_empty) { + _cleanup_(dns_answer_unrefp) DnsAnswer *a = NULL, *b = NULL, *ret = NULL; + + a = dns_answer_new(0); + ASSERT_NOT_NULL(a); + + b = dns_answer_new(0); + ASSERT_NOT_NULL(b); + + dns_answer_add_soa(b, "example.com", 3600, 1); + + ASSERT_OK(dns_answer_merge(a, b, &ret)); + ASSERT_TRUE(ret != a); + ASSERT_TRUE(ret == b); +} + +TEST(dns_answer_merge_b_empty) { + _cleanup_(dns_answer_unrefp) DnsAnswer *a = NULL, *b = NULL, *ret = NULL; + + a = dns_answer_new(0); + ASSERT_NOT_NULL(a); + + b = dns_answer_new(0); + ASSERT_NOT_NULL(b); + + dns_answer_add_soa(a, "example.com", 3600, 1); + + ASSERT_OK(dns_answer_merge(a, b, &ret)); + ASSERT_TRUE(ret == a); + ASSERT_TRUE(ret != b); +} + +TEST(dns_answer_merge_non_empty) { + _cleanup_(dns_answer_unrefp) DnsAnswer *a = NULL, *b = NULL, *ret = NULL; + _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr_a = NULL, *rr_b = NULL; + + a = dns_answer_new(0); + ASSERT_NOT_NULL(a); + + b = dns_answer_new(0); + ASSERT_NOT_NULL(b); + + rr_a = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "a.example.com"); + ASSERT_NOT_NULL(rr_a); + rr_a->a.in_addr.s_addr = htobe32(0xc0a8017f); + dns_answer_add(a, rr_a, 1, DNS_ANSWER_CACHEABLE, NULL); + + rr_b = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "b.example.com"); + ASSERT_NOT_NULL(rr_b); + rr_b->a.in_addr.s_addr = htobe32(0xc0a80180); + dns_answer_add(b, rr_b, 1, DNS_ANSWER_CACHEABLE, NULL); + + ASSERT_OK(dns_answer_merge(a, b, &ret)); + ASSERT_TRUE(ret != a); + ASSERT_TRUE(ret != b); + + ASSERT_TRUE(dns_answer_match_key(a, rr_a->key, NULL)); + ASSERT_FALSE(dns_answer_match_key(a, rr_b->key, NULL)); + + ASSERT_TRUE(dns_answer_match_key(b, rr_b->key, NULL)); + ASSERT_FALSE(dns_answer_match_key(b, rr_a->key, NULL)); + + ASSERT_TRUE(dns_answer_match_key(ret, rr_a->key, NULL)); + ASSERT_TRUE(dns_answer_match_key(ret, rr_b->key, NULL)); +} + +/* ================================================================ + * dns_answer_extend() + * ================================================================ */ + +TEST(dns_answer_replace_non_empty) { + _cleanup_(dns_answer_unrefp) DnsAnswer *a = NULL, *b = NULL; + _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr_a = NULL, *rr_b = NULL; + + a = dns_answer_new(0); + ASSERT_NOT_NULL(a); + + b = dns_answer_new(0); + ASSERT_NOT_NULL(b); + + rr_a = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "a.example.com"); + ASSERT_NOT_NULL(rr_a); + rr_a->a.in_addr.s_addr = htobe32(0xc0a8017f); + dns_answer_add(a, rr_a, 1, DNS_ANSWER_CACHEABLE, NULL); + + rr_b = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_A, "b.example.com"); + ASSERT_NOT_NULL(rr_b); + rr_b->a.in_addr.s_addr = htobe32(0xc0a80180); + dns_answer_add(b, rr_b, 1, DNS_ANSWER_CACHEABLE, NULL); + + ASSERT_OK(dns_answer_extend(&a, b)); + ASSERT_TRUE(a != b); + + ASSERT_TRUE(dns_answer_match_key(a, rr_a->key, NULL)); + ASSERT_TRUE(dns_answer_match_key(a, rr_b->key, NULL)); + + ASSERT_TRUE(dns_answer_match_key(b, rr_b->key, NULL)); + ASSERT_FALSE(dns_answer_match_key(b, rr_a->key, NULL)); +} + DEFINE_TEST_MAIN(LOG_DEBUG); -- 2.47.3