From 76bd2dce23005bde1d2c5815e6ffb124266b20e7 Mon Sep 17 00:00:00 2001 From: James Coglan Date: Fri, 31 May 2024 15:11:53 +0100 Subject: [PATCH] resolved: tests for search domain marking and unlinking --- src/resolve/test-dns-search-domain.c | 116 +++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/src/resolve/test-dns-search-domain.c b/src/resolve/test-dns-search-domain.c index 2c18af7aad..b0d9a01fae 100644 --- a/src/resolve/test-dns-search-domain.c +++ b/src/resolve/test-dns-search-domain.c @@ -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);