From: James Coglan Date: Wed, 29 May 2024 12:24:17 +0000 (+0100) Subject: resolved: tests for dns_resource_key_match_cname_or_dname(), dns_resource_key_match_soa() X-Git-Tag: v257-rc1~843^2~23 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=25e627704e700c9cd2215ef11953bd98ba4f99c7;p=thirdparty%2Fsystemd.git resolved: tests for dns_resource_key_match_cname_or_dname(), dns_resource_key_match_soa() --- diff --git a/src/resolve/test-dns-rr.c b/src/resolve/test-dns-rr.c index 9ca0c2c6d6c..bac5c5938ce 100644 --- a/src/resolve/test-dns-rr.c +++ b/src/resolve/test-dns-rr.c @@ -475,4 +475,210 @@ TEST(dns_resource_key_match_rr_different_search_domain) { ASSERT_FALSE(dns_resource_key_match_rr(key, rr, "org")); } +/* ================================================================ + * dns_resource_key_match_cname_or_dname() + * ================================================================ */ + +TEST(dns_resource_key_match_cname_or_dname_simple) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_CNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_TRUE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_any_class) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_ANY, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_CNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_TRUE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_bad_type) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_NSEC, "www.example.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_CNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_FALSE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_case_insensitive_cname) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.EXAMPLE.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_CNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_TRUE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_prefix_cname) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_CNAME, "example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_FALSE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_suffix_cname) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "example.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_CNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_FALSE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_search_domain_cname_pass) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_CNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_TRUE(dns_resource_key_match_cname_or_dname(key, cname, "com")); +} + +TEST(dns_resource_key_match_cname_or_dname_search_domain_cname_fail) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_CNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_FALSE(dns_resource_key_match_cname_or_dname(key, cname, "org")); +} + +TEST(dns_resource_key_match_cname_or_dname_case_insensitive_dname) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.EXAMPLE.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_DNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_TRUE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_prefix_dname) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_DNAME, "example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_TRUE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_suffix_dname) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "example.com"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_DNAME, "www.example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_FALSE(dns_resource_key_match_cname_or_dname(key, cname, NULL)); +} + +TEST(dns_resource_key_match_cname_or_dname_search_domain_dname_pass) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_DNAME, "example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_TRUE(dns_resource_key_match_cname_or_dname(key, cname, "com")); +} + +TEST(dns_resource_key_match_cname_or_dname_search_domain_dname_fail) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *cname = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example"); + ASSERT_NOT_NULL(key); + cname = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_DNAME, "example.com"); + ASSERT_NOT_NULL(cname); + + ASSERT_FALSE(dns_resource_key_match_cname_or_dname(key, cname, "org")); +} + +/* ================================================================ + * dns_resource_key_match_soa() + * ================================================================ */ + +TEST(dns_resource_key_match_soa_simple) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *soa = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(key); + soa = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_SOA, "www.example.com"); + ASSERT_NOT_NULL(soa); + + ASSERT_TRUE(dns_resource_key_match_soa(key, soa)); +} + +TEST(dns_resource_key_no_match_soa_any_class) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *soa = NULL; + + key = dns_resource_key_new(DNS_CLASS_ANY, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(key); + soa = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_SOA, "www.example.com"); + ASSERT_NOT_NULL(soa); + + ASSERT_FALSE(dns_resource_key_match_soa(key, soa)); +} + +TEST(dns_resource_key_no_match_soa_bad_type) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *soa = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(key); + soa = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(soa); + + ASSERT_FALSE(dns_resource_key_match_soa(key, soa)); +} + +TEST(dns_resource_key_match_soa_child_domain) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *soa = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com"); + ASSERT_NOT_NULL(key); + soa = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_SOA, "example.com"); + ASSERT_NOT_NULL(soa); + + ASSERT_TRUE(dns_resource_key_match_soa(key, soa)); +} + +TEST(dns_resource_key_no_match_soa_parent_domain) { + _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL, *soa = NULL; + + key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "example.com"); + ASSERT_NOT_NULL(key); + soa = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_SOA, "www.example.com"); + ASSERT_NOT_NULL(soa); + + ASSERT_FALSE(dns_resource_key_match_soa(key, soa)); +} + DEFINE_TEST_MAIN(LOG_DEBUG);