From: James Coglan Date: Tue, 25 Jun 2024 15:36:47 +0000 (+0100) Subject: resolved: basic tests for link_allocate_scopes() X-Git-Tag: v257-rc1~840^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e204b3711efc71fa3b043aa8149f58759bf5fd30;p=thirdparty%2Fsystemd.git resolved: basic tests for link_allocate_scopes() --- diff --git a/src/resolve/test-resolved-link.c b/src/resolve/test-resolved-link.c index 981c846d117..0cc70c8b9de 100644 --- a/src/resolve/test-resolved-link.c +++ b/src/resolve/test-resolved-link.c @@ -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)