]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: tests for dns_question_merge()
authorJames Coglan <james@neighbourhood.ie>
Fri, 31 May 2024 10:18:56 +0000 (11:18 +0100)
committerLuca Boccassi <bluca@debian.org>
Tue, 23 Jul 2024 12:09:46 +0000 (13:09 +0100)
src/resolve/test-dns-question.c

index 41d58477fb580c41da15db2f114526dce52d8e79..a621aeeca2bfbed1c5cba50073af2dd563db5653 100644 (file)
@@ -938,4 +938,91 @@ TEST(dns_question_first_name_multi) {
         ASSERT_STREQ(name, "www.example.com");
 }
 
+/* ================================================================
+ * dns_question_merge()
+ * ================================================================ */
+
+TEST(dns_question_merge_empty_first) {
+        _cleanup_(dns_question_unrefp) DnsQuestion *a = NULL, *b = NULL, *ret = NULL;
+        DnsResourceKey *key = NULL;
+
+        a = dns_question_new(0);
+        ASSERT_NOT_NULL(a);
+
+        b = dns_question_new(1);
+        ASSERT_NOT_NULL(b);
+
+        key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
+        ASSERT_NOT_NULL(key);
+        dns_question_add(b, key, 0);
+        dns_resource_key_unref(key);
+
+        ASSERT_OK(dns_question_merge(a, b, &ret));
+        ASSERT_TRUE(ret == b);
+}
+
+TEST(dns_question_merge_empty_second) {
+        _cleanup_(dns_question_unrefp) DnsQuestion *a = NULL, *b = NULL, *ret = NULL;
+        DnsResourceKey *key = NULL;
+
+        a = dns_question_new(1);
+        ASSERT_NOT_NULL(a);
+
+        key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
+        ASSERT_NOT_NULL(key);
+        dns_question_add(a, key, 0);
+        dns_resource_key_unref(key);
+
+        b = dns_question_new(0);
+        ASSERT_NOT_NULL(b);
+
+        ASSERT_OK(dns_question_merge(a, b, &ret));
+        ASSERT_TRUE(ret == a);
+}
+
+TEST(dns_question_merge_multi) {
+        _cleanup_(dns_question_unrefp) DnsQuestion *a = NULL, *b = NULL, *ret = NULL;
+        DnsResourceKey *key = NULL;
+        int i;
+        uint16_t types[3];
+
+        a = dns_question_new(1);
+        ASSERT_NOT_NULL(a);
+
+        key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_A, "www.example.com");
+        ASSERT_NOT_NULL(key);
+        dns_question_add(a, key, 0);
+        dns_resource_key_unref(key);
+
+        b = dns_question_new(2);
+        ASSERT_NOT_NULL(b);
+
+        key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_AAAA, "www.example.com");
+        ASSERT_NOT_NULL(key);
+        dns_question_add(b, key, 0);
+        dns_resource_key_unref(key);
+
+        key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_TXT, "www.example.com");
+        ASSERT_NOT_NULL(key);
+        dns_question_add(b, key, 0);
+        dns_resource_key_unref(key);
+
+        ASSERT_OK(dns_question_merge(a, b, &ret));
+        ASSERT_TRUE(ret != a);
+        ASSERT_TRUE(ret != b);
+
+        ASSERT_EQ(dns_question_size(a), 1u);
+        ASSERT_EQ(dns_question_size(b), 2u);
+        ASSERT_EQ(dns_question_size(ret), 3u);
+
+        i = 0;
+        DNS_QUESTION_FOREACH(key, ret) {
+                types[i++] = key->type;
+        }
+
+        ASSERT_EQ(types[0], DNS_TYPE_A);
+        ASSERT_EQ(types[1], DNS_TYPE_AAAA);
+        ASSERT_EQ(types[2], DNS_TYPE_TXT);
+}
+
 DEFINE_TEST_MAIN(LOG_DEBUG);