]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: tests for dns_search_domain_new()
authorJames Coglan <james@neighbourhood.ie>
Fri, 31 May 2024 11:56:11 +0000 (12:56 +0100)
committerLuca Boccassi <bluca@debian.org>
Tue, 23 Jul 2024 12:22:33 +0000 (13:22 +0100)
src/resolve/meson.build
src/resolve/test-dns-search-domain.c [new file with mode: 0644]

index 42bd4beb740d9f9bfbbbb694c626a9a4e01cd2bb..f4c868f2d656cc05a160eae45caa050c69f0d4d4 100644 (file)
@@ -197,6 +197,19 @@ executables += [
                 'sources' : files('test-dnssec-complex.c'),
                 'type' : 'manual',
         },
+        test_template + {
+                'sources' : [
+                        files('test-dns-search-domain.c'),
+                        basic_dns_sources,
+                        systemd_resolved_sources,
+                ],
+                'dependencies' : [
+                        lib_openssl_or_gcrypt,
+                        libm,
+                        systemd_resolved_dependencies,
+                ],
+                'include_directories' : resolve_includes,
+        },
         test_template + {
                 'sources' : [
                         files('test-resolved-link.c'),
diff --git a/src/resolve/test-dns-search-domain.c b/src/resolve/test-dns-search-domain.c
new file mode 100644 (file)
index 0000000..d92bee3
--- /dev/null
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "resolved-dns-search-domain.h"
+#include "resolved-link.h"
+#include "resolved-manager.h"
+
+#include "log.h"
+#include "tests.h"
+
+/* ================================================================
+ * dns_search_domain_new()
+ * ================================================================ */
+
+TEST(dns_search_domain_new_system) {
+        Manager manager = {};
+        _cleanup_(dns_search_domain_unrefp) DnsSearchDomain *sd = NULL;
+
+        ASSERT_OK(dns_search_domain_new(&manager, &sd, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "local"));
+        ASSERT_NOT_NULL(sd);
+
+        ASSERT_TRUE(sd->linked);
+        ASSERT_STREQ(DNS_SEARCH_DOMAIN_NAME(sd), "local");
+}
+
+TEST(dns_search_domain_new_system_limit) {
+        Manager manager = {};
+        DnsSearchDomain *sd = NULL;
+
+        for (size_t i = 0; i < MANAGER_SEARCH_DOMAINS_MAX; i++) {
+                ASSERT_OK(dns_search_domain_new(&manager, &sd, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "local"));
+                ASSERT_NOT_NULL(sd);
+                ASSERT_EQ(manager.n_search_domains, i + 1);
+        }
+
+        ASSERT_ERROR(dns_search_domain_new(&manager, &sd, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "local"), E2BIG);
+        ASSERT_NOT_NULL(sd);
+
+        dns_search_domain_unlink_all(manager.search_domains);
+}
+
+TEST(dns_search_domain_new_link) {
+        Manager manager = {};
+        Link *link = NULL;
+        _cleanup_(dns_search_domain_unrefp) DnsSearchDomain *sd = NULL;
+
+        ASSERT_OK(link_new(&manager, &link, 1));
+        ASSERT_NOT_NULL(link);
+
+        ASSERT_OK(dns_search_domain_new(&manager, &sd, DNS_SEARCH_DOMAIN_LINK, link, "local."));
+        ASSERT_NOT_NULL(sd);
+
+        ASSERT_TRUE(sd->linked);
+        ASSERT_STREQ(DNS_SEARCH_DOMAIN_NAME(sd), "local");
+}
+
+TEST(dns_search_domain_new_link_limit) {
+        Manager manager = {};
+        _cleanup_(link_freep) Link *link = NULL;
+        DnsSearchDomain *sd = NULL;
+
+        ASSERT_OK(link_new(&manager, &link, 1));
+        ASSERT_NOT_NULL(link);
+
+        for (size_t i = 0; i < LINK_SEARCH_DOMAINS_MAX; i++) {
+                ASSERT_OK(dns_search_domain_new(&manager, &sd, DNS_SEARCH_DOMAIN_LINK, link, "local"));
+                ASSERT_NOT_NULL(sd);
+                ASSERT_EQ(link->n_search_domains, i + 1);
+        }
+
+        ASSERT_ERROR(dns_search_domain_new(&manager, &sd, DNS_SEARCH_DOMAIN_LINK, link, "local"), E2BIG);
+        ASSERT_NOT_NULL(sd);
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);