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

index dc748410e966460308851d43b3ce770e0832cb83..56094ad0093d59b606f13ea2a49d42eaa067b2be 100644 (file)
@@ -1,5 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <net/if.h>
+#include <linux/if.h>
+
 #include "netlink-internal.h"
 #include "resolved-link.h"
 #include "resolved-manager.h"
@@ -42,4 +45,56 @@ TEST(link_process_rtnl) {
         ASSERT_OK(link_process_rtnl(link, msg));
 }
 
+/* ================================================================
+ * link_relevant()
+ * ================================================================ */
+
+TEST(link_relevant) {
+        Manager manager = {};
+        LinkAddress *address = NULL;
+        _cleanup_(link_freep) Link *link = NULL;
+
+        ASSERT_OK(link_new(&manager, &link, 1));
+        ASSERT_NOT_NULL(link);
+
+        link->flags = IFF_LOOPBACK;
+        ASSERT_FALSE(link_relevant(link, AF_INET, true));
+        ASSERT_FALSE(link_relevant(link, AF_INET, false));
+
+        link->flags = IFF_UP;
+        ASSERT_FALSE(link_relevant(link, AF_INET, true));
+        ASSERT_FALSE(link_relevant(link, AF_INET, false));
+
+        link->flags = IFF_UP | IFF_LOWER_UP;
+        ASSERT_FALSE(link_relevant(link, AF_INET, true));
+        ASSERT_FALSE(link_relevant(link, AF_INET, false));
+
+        link->flags = IFF_UP | IFF_LOWER_UP | IFF_MULTICAST;
+        link->operstate = IF_OPER_UP;
+
+        ASSERT_FALSE(link_relevant(link, AF_INET, true));
+        ASSERT_FALSE(link_relevant(link, AF_INET, false));
+
+        union in_addr_union ip = { .in.s_addr = htobe32(0xc0a84301) };
+        union in_addr_union bcast = { .in.s_addr = htobe32(0xc0a843ff) };
+
+        ASSERT_OK(link_address_new(link, &address, AF_INET, &ip, &bcast));
+        ASSERT_NOT_NULL(address);
+
+        ASSERT_TRUE(link_relevant(link, AF_INET, true));
+        ASSERT_TRUE(link_relevant(link, AF_INET, false));
+
+        link->flags = IFF_UP | IFF_LOWER_UP;
+        ASSERT_FALSE(link_relevant(link, AF_INET, true));
+        ASSERT_TRUE(link_relevant(link, AF_INET, false));
+
+        link->is_managed = true;
+        ASSERT_FALSE(link_relevant(link, AF_INET, false));
+
+        link->networkd_operstate = LINK_OPERSTATE_DEGRADED_CARRIER;
+        ASSERT_TRUE(link_relevant(link, AF_INET, false));
+
+        link_address_free(address);
+}
+
 DEFINE_TEST_MAIN(LOG_DEBUG)