]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: basic tests for link_allocate_scopes()
authorJames Coglan <james@neighbourhood.ie>
Tue, 25 Jun 2024 15:36:47 +0000 (16:36 +0100)
committerJames Coglan <james@neighbourhood.ie>
Mon, 22 Jul 2024 12:20:14 +0000 (13:20 +0100)
src/resolve/test-resolved-link.c

index 981c846d117368da3dccbf236d3ae332c1f68c10..0cc70c8b9de26eb30208ad1e051ef955e6256123 100644 (file)
@@ -10,6 +10,8 @@
 #include "log.h"
 #include "tests.h"
 
+DEFINE_TRIVIAL_CLEANUP_FUNC(LinkAddress*, link_address_free);
+
 /* ================================================================
  * link_new()
  * ================================================================ */
@@ -51,8 +53,8 @@ TEST(link_process_rtnl) {
 
 TEST(link_relevant) {
         Manager manager = {};
-        LinkAddress *address = NULL;
         _cleanup_(link_freep) Link *link = NULL;
+        _cleanup_(link_address_freep) LinkAddress *address = NULL;
 
         ASSERT_OK(link_new(&manager, &link, 1));
         ASSERT_NOT_NULL(link);
@@ -93,8 +95,6 @@ TEST(link_relevant) {
 
         link->networkd_operstate = LINK_OPERSTATE_DEGRADED_CARRIER;
         ASSERT_TRUE(link_relevant(link, AF_INET, false));
-
-        link_address_free(address);
 }
 
 /* ================================================================
@@ -103,8 +103,8 @@ TEST(link_relevant) {
 
 TEST(link_find_address) {
         Manager manager = {};
-        LinkAddress *v4addr = NULL, *v6addr = NULL, *ret_addr = NULL;
         _cleanup_(link_freep) Link *link = NULL;
+        _cleanup_(link_address_freep) LinkAddress *v4addr = NULL, *v6addr = NULL, *ret_addr = NULL;
 
         union in_addr_union ipv4 = { .in.s_addr = htobe32(0xc0a84301) };
         union in_addr_union ipv6 = { .in6.s6_addr = { 0xf2, 0x34, 0x32, 0x2e, 0xb8, 0x25, 0x38, 0x35, 0x2f, 0xd7, 0xdb, 0x7b, 0x28, 0x7e, 0x60, 0xbb } };
@@ -125,9 +125,106 @@ TEST(link_find_address) {
 
         ret_addr = link_find_address(link, AF_INET6, &ipv4);
         ASSERT_NULL(ret_addr);
+}
+
+/* ================================================================
+ * link_allocate_scopes()
+ * ================================================================ */
+
+TEST(link_allocate_scopes_resets_manager_dns_server) {
+        Manager manager = {};
+        _cleanup_(link_freep) Link *link = NULL;
+        _cleanup_(link_address_freep) LinkAddress *address = NULL;
+        int ifindex = 1;
+
+        union in_addr_union server_addr;
+        _cleanup_free_ char *server_name;
+        uint16_t server_port;
+        _cleanup_(dns_server_unrefp) DnsServer *server;
+
+        ASSERT_OK(link_new(&manager, &link, ifindex));
+        ASSERT_NOT_NULL(link);
+        link->flags = IFF_UP | IFF_LOWER_UP;
+        link->operstate = IF_OPER_UP;
+
+        union in_addr_union ipv4 = { .in.s_addr = htobe32(0xc0a84301) };
+        ASSERT_OK(link_address_new(link, &address, AF_INET, &ipv4, &ipv4));
+        ASSERT_NOT_NULL(address);
+
+        server_addr.in.s_addr = htobe32(0x7f000001);
+        server_name = strdup("localhost");
+        server_port = 53;
+
+        ASSERT_OK(dns_server_new(&manager, &server, DNS_SERVER_SYSTEM,
+                        NULL, AF_INET, &server_addr, server_port, ifindex,
+                        server_name, RESOLVE_CONFIG_SOURCE_DBUS));
+
+        ASSERT_NOT_NULL(server);
+
+        link->unicast_relevant = false;
+        manager.dns_servers->verified_feature_level = DNS_SERVER_FEATURE_LEVEL_EDNS0;
+        manager.dns_servers->possible_feature_level = DNS_SERVER_FEATURE_LEVEL_DO;
+        manager.dns_servers->received_udp_fragment_max = 1024u;
+
+        link_allocate_scopes(link);
+
+        ASSERT_TRUE(link->unicast_relevant);
+        ASSERT_EQ(manager.dns_servers->verified_feature_level, _DNS_SERVER_FEATURE_LEVEL_INVALID);
+        ASSERT_EQ(manager.dns_servers->possible_feature_level, DNS_SERVER_FEATURE_LEVEL_BEST);
+        ASSERT_EQ(manager.dns_servers->received_udp_fragment_max, DNS_PACKET_UNICAST_SIZE_MAX);
+
+        ASSERT_FALSE(manager.dns_servers->packet_bad_opt);
+        ASSERT_FALSE(manager.dns_servers->packet_rrsig_missing);
+        ASSERT_FALSE(manager.dns_servers->packet_do_off);
+        ASSERT_FALSE(manager.dns_servers->warned_downgrade);
+}
+
+TEST(link_allocate_scopes_resets_link_dns_server) {
+        Manager manager = {};
+        DnsServer *server;
+        _cleanup_(link_freep) Link *link = NULL;
+        _cleanup_(link_address_freep) LinkAddress *address = NULL;
+        int ifindex = 1;
+
+        union in_addr_union server_addr;
+        _cleanup_free_ char *server_name;
+        uint16_t server_port;
+
+        ASSERT_OK(link_new(&manager, &link, ifindex));
+        ASSERT_NOT_NULL(link);
+        link->flags = IFF_UP | IFF_LOWER_UP;
+        link->operstate = IF_OPER_UP;
+
+        union in_addr_union ipv4 = { .in.s_addr = htobe32(0xc0a84301) };
+        ASSERT_OK(link_address_new(link, &address, AF_INET, &ipv4, &ipv4));
+        ASSERT_NOT_NULL(address);
+
+        server_addr.in.s_addr = htobe32(0x7f000001);
+        server_name = strdup("localhost");
+        server_port = 53;
+
+        ASSERT_OK(dns_server_new(&manager, &server, DNS_SERVER_LINK,
+                        link, AF_INET, &server_addr, server_port, ifindex,
+                        server_name, RESOLVE_CONFIG_SOURCE_DBUS));
+
+        ASSERT_NOT_NULL(server);
+
+        link->unicast_relevant = true;
+        link->dns_servers->verified_feature_level = DNS_SERVER_FEATURE_LEVEL_EDNS0;
+        link->dns_servers->possible_feature_level = DNS_SERVER_FEATURE_LEVEL_DO;
+        link->dns_servers->received_udp_fragment_max = 1024u;
+
+        link_allocate_scopes(link);
+
+        ASSERT_TRUE(link->unicast_relevant);
+        ASSERT_EQ(link->dns_servers->verified_feature_level, _DNS_SERVER_FEATURE_LEVEL_INVALID);
+        ASSERT_EQ(link->dns_servers->possible_feature_level, DNS_SERVER_FEATURE_LEVEL_BEST);
+        ASSERT_EQ(link->dns_servers->received_udp_fragment_max, DNS_PACKET_UNICAST_SIZE_MAX);
 
-        link_address_free(v4addr);
-        link_address_free(v6addr);
+        ASSERT_FALSE(link->dns_servers->packet_bad_opt);
+        ASSERT_FALSE(link->dns_servers->packet_rrsig_missing);
+        ASSERT_FALSE(link->dns_servers->packet_do_off);
+        ASSERT_FALSE(link->dns_servers->warned_downgrade);
 }
 
 DEFINE_TEST_MAIN(LOG_DEBUG)