--- /dev/null
+/* 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);