]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: tests for search domain marking and unlinking
authorJames Coglan <james@neighbourhood.ie>
Fri, 31 May 2024 14:11:53 +0000 (15:11 +0100)
committerLuca Boccassi <bluca@debian.org>
Tue, 23 Jul 2024 12:22:34 +0000 (13:22 +0100)
src/resolve/test-dns-search-domain.c

index 2c18af7aad2c9bb66f365ddc5e1d2bee0b016487..b0d9a01fae2812d8f2c33ef9085a8987149f7757 100644 (file)
@@ -143,4 +143,120 @@ TEST(dns_search_domain_unlink_link) {
         check_domains(link->search_domains, expected, 2);
 }
 
+/* ================================================================
+ * dns_search_domain_mark_all()
+ * ================================================================ */
+
+TEST(dns_search_domain_mark_all) {
+        Manager manager = {};
+        _cleanup_(dns_search_domain_unrefp) DnsSearchDomain *sd1 = NULL, *sd2 = NULL, *sd3 = NULL;
+
+        dns_search_domain_new(&manager, &sd1, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "local");
+        ASSERT_NOT_NULL(sd1);
+
+        dns_search_domain_new(&manager, &sd2, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "vpn.example.com");
+        ASSERT_NOT_NULL(sd2);
+
+        dns_search_domain_new(&manager, &sd3, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "org");
+        ASSERT_NOT_NULL(sd3);
+
+        ASSERT_FALSE(sd1->marked);
+        ASSERT_FALSE(sd2->marked);
+        ASSERT_FALSE(sd3->marked);
+
+        dns_search_domain_mark_all(sd1);
+
+        ASSERT_TRUE(sd1->marked);
+        ASSERT_TRUE(sd2->marked);
+        ASSERT_TRUE(sd3->marked);
+}
+
+/* ================================================================
+ * dns_search_domain_move_back_and_unmark()
+ * ================================================================ */
+
+TEST(dns_search_domain_move_back_and_unmark) {
+        Manager manager = {};
+        _cleanup_(dns_search_domain_unrefp) DnsSearchDomain *sd1 = NULL, *sd2 = NULL, *sd3 = NULL;
+
+        dns_search_domain_new(&manager, &sd1, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "local");
+        ASSERT_NOT_NULL(sd1);
+
+        dns_search_domain_new(&manager, &sd2, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "vpn.example.com");
+        ASSERT_NOT_NULL(sd2);
+
+        dns_search_domain_new(&manager, &sd3, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "org");
+        ASSERT_NOT_NULL(sd3);
+
+        dns_search_domain_move_back_and_unmark(sd1);
+        check_domains(manager.search_domains, (const char *[]) { "local", "vpn.example.com", "org" }, 3);
+
+        sd1->marked = 1;
+
+        dns_search_domain_move_back_and_unmark(sd1);
+        check_domains(manager.search_domains, (const char *[]) { "vpn.example.com", "org", "local" }, 3);
+
+        sd3->marked = 1;
+
+        dns_search_domain_move_back_and_unmark(sd3);
+        check_domains(manager.search_domains, (const char *[]) { "vpn.example.com", "local", "org" }, 3);
+}
+
+/* ================================================================
+ * dns_search_domain_unlink_marked()
+ * ================================================================ */
+
+TEST(dns_search_domain_unlink_marked) {
+        Manager manager = {};
+        DnsSearchDomain *sd1 = NULL, *sd2 = NULL;
+        _cleanup_(dns_search_domain_unrefp) DnsSearchDomain *sd3 = NULL;
+
+        dns_search_domain_new(&manager, &sd1, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "local");
+        ASSERT_NOT_NULL(sd1);
+
+        dns_search_domain_new(&manager, &sd2, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "vpn.example.com");
+        ASSERT_NOT_NULL(sd2);
+
+        dns_search_domain_new(&manager, &sd3, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "org");
+        ASSERT_NOT_NULL(sd3);
+
+        dns_search_domain_unlink_marked(sd1);
+        ASSERT_EQ(manager.n_search_domains, 3u);
+        check_domains(manager.search_domains, (const char *[]) { "local", "vpn.example.com", "org" }, 3);
+
+        sd2->marked = 1;
+
+        dns_search_domain_unlink_marked(sd1);
+        ASSERT_EQ(manager.n_search_domains, 2u);
+        check_domains(manager.search_domains, (const char *[]) { "local", "org" }, 2);
+
+        sd1->marked = 1;
+
+        dns_search_domain_unlink_marked(sd1);
+        ASSERT_EQ(manager.n_search_domains, 1u);
+        check_domains(manager.search_domains, (const char *[]) { "org" }, 1);
+}
+
+/* ================================================================
+ * dns_search_domain_unlink_all()
+ * ================================================================ */
+
+TEST(dns_search_domain_unlink_all) {
+        Manager manager = {};
+        DnsSearchDomain *sd1 = NULL, *sd2 = NULL, *sd3 = NULL;
+
+        dns_search_domain_new(&manager, &sd1, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "local");
+        ASSERT_NOT_NULL(sd1);
+
+        dns_search_domain_new(&manager, &sd2, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "vpn.example.com");
+        ASSERT_NOT_NULL(sd2);
+
+        dns_search_domain_new(&manager, &sd3, DNS_SEARCH_DOMAIN_SYSTEM, NULL, "org");
+        ASSERT_NOT_NULL(sd3);
+
+        dns_search_domain_unlink_all(sd1);
+
+        ASSERT_EQ(manager.n_search_domains, 0u);
+}
+
 DEFINE_TEST_MAIN(LOG_DEBUG);