test-netlink: Gracefully handle the loopback interface being down
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Sun, 18 Aug 2024 11:19:30 +0000 (13:19 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sun, 18 Aug 2024 22:06:08 +0000 (00:06 +0200)
(cherry picked from commit d098b8df6e5c1b4c834272dd1397345483116db6)

src/libsystemd/sd-netlink/test-netlink.c

index cf19c48213965369be92365adf6261617dd255cf..c58cfc07279bdc026496d3b4388de2108d2212e2 100644 (file)
@@ -92,18 +92,24 @@ TEST(message_address) {
         struct in_addr in_data;
         struct ifa_cacheinfo cache;
         const char *label;
+        int r;
 
         assert_se(sd_netlink_open(&rtnl) >= 0);
         ifindex = (int) if_nametoindex("lo");
 
         assert_se(sd_rtnl_message_new_addr(rtnl, &message, RTM_GETADDR, ifindex, AF_INET) >= 0);
         assert_se(sd_netlink_message_set_request_dump(message, true) >= 0);
-        assert_se(sd_netlink_call(rtnl, message, 0, &reply) == 1);
 
-        assert_se(sd_netlink_message_read_in_addr(reply, IFA_LOCAL, &in_data) >= 0);
-        assert_se(sd_netlink_message_read_in_addr(reply, IFA_ADDRESS, &in_data) >= 0);
-        assert_se(sd_netlink_message_read_string(reply, IFA_LABEL, &label) >= 0);
-        assert_se(sd_netlink_message_read_cache_info(reply, IFA_CACHEINFO, &cache) == 0);
+        r = sd_netlink_call(rtnl, message, 0, &reply);
+        assert_se(r >= 0);
+
+        /* If the loopback device is down we won't get any results. */
+        if (r > 0) {
+                assert_se(sd_netlink_message_read_in_addr(reply, IFA_LOCAL, &in_data) >= 0);
+                assert_se(sd_netlink_message_read_in_addr(reply, IFA_ADDRESS, &in_data) >= 0);
+                assert_se(sd_netlink_message_read_string(reply, IFA_LABEL, &label) >= 0);
+                assert_se(sd_netlink_message_read_cache_info(reply, IFA_CACHEINFO, &cache) == 0);
+        }
 }
 
 TEST(message_route) {