From 5e8a915a33725c237f7d2b929a42dbe77e072aeb Mon Sep 17 00:00:00 2001 From: Ghadi Elie Rahme Date: Mon, 29 Apr 2024 08:35:54 +0000 Subject: [PATCH 1/2] Add non-filtered interfaces to the API response (LP: #2052834) --- landscape/lib/network.py | 18 +++++++++--------- landscape/lib/tests/test_network.py | 28 ++++++++++++++++++++++------ snap-http | 2 +- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/landscape/lib/network.py b/landscape/lib/network.py index 5234df721..5d7bb9ab2 100644 --- a/landscape/lib/network.py +++ b/landscape/lib/network.py @@ -152,20 +152,15 @@ def get_filtered_if_info(filters=(), extended=False): continue ifaddresses = netifaces.ifaddresses(interface) - if not is_active(ifaddresses): + if ( + not is_active(ifaddresses) + and netifaces.AF_LINK not in ifaddresses + ): continue ifencoded = interface.encode() flags = get_flags(sock, ifencoded) - if not is_up(flags): - continue - ip_addresses = get_ip_addresses(ifaddresses) - if not extended and netifaces.AF_INET not in ip_addresses: - # Skip interfaces with no IPv4 addr unless extended to - # keep backwards compatibility with single-IPv4 addr - # support. - continue ifinfo = {"interface": interface} ifinfo["flags"] = flags @@ -184,6 +179,11 @@ def get_filtered_if_info(filters=(), extended=False): ifaddresses, ) ifinfo["netmask"] = get_netmask(ifaddresses) + elif netifaces.AF_LINK in ifaddresses and not extended: + ifinfo["ip_address"] = "0.0.0.0" + ifinfo["mac_address"] = get_mac_address(ifaddresses) + ifinfo["broadcast_address"] = "0.0.0.0" + ifinfo["netmask"] = "0.0.0.0" results.append(ifinfo) finally: diff --git a/landscape/lib/tests/test_network.py b/landscape/lib/tests/test_network.py index b564e98df..1c410e54c 100644 --- a/landscape/lib/tests/test_network.py +++ b/landscape/lib/tests/test_network.py @@ -46,8 +46,12 @@ def test_get_active_device_info(self, mock_get_network_interface_speed): } for device in device_info: - if device["mac_address"] == "00:00:00:00:00:00": + if ( + device["mac_address"] == "00:00:00:00:00:00" + or device["ip_address"] == "0.0.0.0" + ): continue + print("result is: ", result) self.assertIn(device["interface"], result) block = interface_blocks[device["interface"]] self.assertIn(device["netmask"], block) @@ -146,8 +150,21 @@ def test_skip_ipv6_only_in_non_extended_mode( } device_info = get_active_device_info(extended=False) - - self.assertEqual(device_info, []) + self.assertEqual( + device_info, + [ + { + "interface": "test_iface", + "flags": 4163, + "speed": 100, + "duplex": True, + "ip_address": "0.0.0.0", + "mac_address": "aa:bb:cc:dd:ee:f0", + "broadcast_address": "0.0.0.0", + "netmask": "0.0.0.0", + }, + ], + ) @patch("landscape.lib.network.get_network_interface_speed") @patch("landscape.lib.network.get_flags") @@ -169,7 +186,6 @@ def test_ipv6_only_in_extended_mode( } device_info = get_active_device_info(extended=True) - self.assertEqual( device_info, [ @@ -266,7 +282,7 @@ def test_skip_iface_with_no_ip(self, mock_interfaces, mock_ifaddresses): @patch("landscape.lib.network.get_flags") @patch("landscape.lib.network.netifaces.ifaddresses") @patch("landscape.lib.network.netifaces.interfaces") - def test_skip_iface_down( + def test_iface_down( self, mock_interfaces, mock_ifaddresses, @@ -282,7 +298,7 @@ def test_skip_iface_down( } device_info = get_active_device_info() interfaces = [i["interface"] for i in device_info] - self.assertNotIn("test_iface", interfaces) + self.assertEqual(["test_iface"], interfaces) @patch("landscape.lib.network.get_network_interface_speed") @patch("landscape.lib.network.get_flags") diff --git a/snap-http b/snap-http index dc1cdf396..f3bb53973 160000 --- a/snap-http +++ b/snap-http @@ -1 +1 @@ -Subproject commit dc1cdf396daed1ce302cef6f614e7e088b83e877 +Subproject commit f3bb5397395296c345d85a0ea6e7665cb61d4321 From 02ea8cd5bd501ebc48f353bb79c2fa072a8c2bb0 Mon Sep 17 00:00:00 2001 From: Ghadi Elie Rahme Date: Thu, 30 May 2024 12:56:48 +0000 Subject: [PATCH 2/2] test_network.py: remove print statement and add docstring to test_iface_down --- landscape/lib/tests/test_network.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/landscape/lib/tests/test_network.py b/landscape/lib/tests/test_network.py index 1c410e54c..68696f77f 100644 --- a/landscape/lib/tests/test_network.py +++ b/landscape/lib/tests/test_network.py @@ -51,7 +51,6 @@ def test_get_active_device_info(self, mock_get_network_interface_speed): or device["ip_address"] == "0.0.0.0" ): continue - print("result is: ", result) self.assertIn(device["interface"], result) block = interface_blocks[device["interface"]] self.assertIn(device["netmask"], block) @@ -289,6 +288,9 @@ def test_iface_down( mock_get_flags, mock_get_network_interface_speed, ): + """ + Make sure interfaces in the 'down' state are also reported + """ mock_get_network_interface_speed.return_value = (100, True) mock_get_flags.return_value = 0 mock_interfaces.return_value = ["test_iface"]