示例#1
0
 def test_no_extra_netifaces_calls(self, mock_interfaces, mock_ifaddresses):
     """
     Make sure filtered out interfaces aren't used in netiface calls due to
     their impact on sysinfo/login time with a large amount of interfaces.
     """
     mock_interfaces.return_value = ["eth0:foo"]
     get_active_device_info()
     assert not mock_ifaddresses.called
示例#2
0
    def test_ipv6_skip_link_local(self, mock_interfaces, mock_ifaddresses,
                                  mock_get_flags,
                                  mock_get_network_interface_speed):
        mock_get_network_interface_speed.return_value = (100, True)
        mock_get_flags.return_value = 4163
        mock_interfaces.return_value = ["test_iface"]
        mock_ifaddresses.return_value = {
            AF_LINK: [{
                "addr": "aa:bb:cc:dd:ee:f1"
            }],
            AF_INET6: [{
                "addr": "fe80::1"
            }, {
                "addr": "2001::1"
            }]
        }

        device_info = get_active_device_info(extended=True)

        self.assertEqual(device_info, [{
            'interface': 'test_iface',
            'flags': 4163,
            'speed': 100,
            'duplex': True,
            'ip_addresses': {
                AF_INET6: [{
                    "addr": "2001::1"
                }]
            }
        }])
 def test_skip_alias(self, mock_get_active_interfaces):
     """Interface aliases are not reported by L{get_active_device_info}."""
     mock_get_active_interfaces.side_effect = lambda: (list(
         get_active_interfaces()) + [("eth0:foo", {})])
     device_info = get_active_device_info()
     interfaces = [i["interface"] for i in device_info]
     self.assertNotIn("eth0:foo", interfaces)
示例#4
0
 def test_skip_iface_with_no_addr(self, mock_interfaces, mock_ifaddresses):
     mock_interfaces.return_value = _interfaces() + ["test_iface"]
     mock_ifaddresses.side_effect = lambda iface: (_ifaddresses(iface)
                                                   if iface in _interfaces(
                                                   ) else {})
     device_info = get_active_device_info()
     interfaces = [i["interface"] for i in device_info]
     self.assertNotIn("test_iface", interfaces)
 def test_skip_vlan(self, mock_get_active_interfaces):
     """VLAN interfaces are not reported by L{get_active_device_info}."""
     mock_get_active_interfaces.side_effect = lambda: (list(
         get_active_interfaces()) + [("eth0.1", {})])
     device_info = get_active_device_info()
     self.assertTrue(mock_get_active_interfaces.called)
     interfaces = [i["interface"] for i in device_info]
     self.assertNotIn("eth0.1", interfaces)
示例#6
0
 def test_skip_vlan(self, mock_get_active_interfaces):
     """VLAN interfaces are not reported by L{get_active_device_info}."""
     mock_get_active_interfaces.side_effect = lambda sock: (list(
         get_active_interfaces(sock)) + [b"eth0.1"])
     device_info = get_active_device_info()
     mock_get_active_interfaces.assert_called_with(ANY)
     interfaces = [i["interface"] for i in device_info]
     self.assertNotIn("eth0.1", interfaces)
示例#7
0
    def test_extended_info(self, mock_interfaces, mock_ifaddresses,
                           mock_get_flags, mock_get_network_interface_speed):
        mock_get_network_interface_speed.return_value = (100, True)
        mock_get_flags.return_value = 4163
        mock_interfaces.return_value = ["test_iface"]
        mock_ifaddresses.return_value = {
            AF_LINK: [{
                "addr": "aa:bb:cc:dd:ee:f0"
            }, {
                "addr": "aa:bb:cc:dd:ee:f1"
            }],
            AF_INET: [{
                "addr": "192.168.0.50",
                "netmask": "255.255.255.0"
            }, {
                "addr": "192.168.1.50",
                "netmask": "255.255.255.0"
            }],
            AF_INET6: [{
                "addr": "2001::1"
            }, {
                "addr": "2002::2"
            }]
        }

        device_info = get_active_device_info(extended=True)

        self.assertEqual(device_info, [{
            'interface': 'test_iface',
            'ip_address': '192.168.0.50',
            'mac_address': 'aa:bb:cc:dd:ee:f0',
            'broadcast_address': '0.0.0.0',
            'netmask': '255.255.255.0',
            'ip_addresses': {
                AF_INET: [{
                    'addr': '192.168.0.50',
                    'netmask': '255.255.255.0'
                }, {
                    'addr': '192.168.1.50',
                    'netmask': '255.255.255.0'
                }],
                AF_INET6: [{
                    "addr": "2001::1"
                }, {
                    "addr": "2002::2"
                }]
            },
            'flags': 4163,
            'speed': 100,
            'duplex': True
        }])
示例#8
0
 def test_default_only_interface(self, mock_interfaces, mock_ifaddresses,
                                 mock_get_flags,
                                 mock_get_network_interface_speed,
                                 mock_get_default_interfaces):
     default_iface = "test_iface"
     mock_get_default_interfaces.return_value = [default_iface]
     mock_get_network_interface_speed.return_value = (100, True)
     mock_get_flags.return_value = 4163
     mock_interfaces.return_value = [default_iface]
     mock_ifaddresses.return_value = {AF_INET: [{"addr": "192.168.0.50"}]}
     device_info = get_active_device_info(extended=False, default_only=True)
     interfaces = [i["interface"] for i in device_info]
     self.assertIn(default_iface, interfaces)
     self.assertEqual(len(interfaces), 1)
示例#9
0
 def test_skip_iface_down(self, mock_interfaces, mock_ifaddresses,
                          mock_get_flags, mock_get_network_interface_speed):
     mock_get_network_interface_speed.return_value = (100, True)
     mock_get_flags.return_value = 0
     mock_interfaces.return_value = ["test_iface"]
     mock_ifaddresses.return_value = {
         AF_LINK: [{
             "addr": "aa:bb:cc:dd:ee:f0"
         }],
         AF_INET: [{
             "addr": "192.168.1.50",
             "netmask": "255.255.255.0"
         }]
     }
     device_info = get_active_device_info()
     interfaces = [i["interface"] for i in device_info]
     self.assertNotIn("test_iface", interfaces)
示例#10
0
 def test_no_macaddr_no_netmask_no_broadcast(
         self, mock_interfaces, mock_ifaddresses, mock_get_flags,
         mock_get_network_interface_speed):
     mock_get_network_interface_speed.return_value = (100, True)
     mock_get_flags.return_value = 4163
     mock_interfaces.return_value = ["test_iface"]
     mock_ifaddresses.return_value = {AF_INET: [{"addr": "192.168.0.50"}]}
     device_info = get_active_device_info(extended=False)
     self.assertEqual(device_info, [{
         'interface': 'test_iface',
         'ip_address': '192.168.0.50',
         'broadcast_address': '0.0.0.0',
         'mac_address': '',
         'netmask': '',
         'flags': 4163,
         'speed': 100,
         'duplex': True
     }])
示例#11
0
    def test_skip_ipv6_only_in_non_extended_mode(
            self, mock_interfaces, mock_ifaddresses, mock_get_flags,
            mock_get_network_interface_speed):
        mock_get_network_interface_speed.return_value = (100, True)
        mock_get_flags.return_value = 4163
        mock_interfaces.return_value = ["test_iface"]
        mock_ifaddresses.return_value = {
            AF_LINK: [{
                "addr": "aa:bb:cc:dd:ee:f0"
            }],
            AF_INET6: [{
                "addr": "2001::1"
            }]
        }

        device_info = get_active_device_info(extended=False)

        self.assertEqual(device_info, [])
示例#12
0
    def test_get_active_device_info(self, mock_get_network_interface_speed):
        """
        Device info returns a sequence of information about active
        network devices, compare and verify the output against
        that returned by ifconfig.
        """
        mock_get_network_interface_speed.return_value = (100, True)

        device_info = get_active_device_info(extended=False)
        process = Popen(["/sbin/ifconfig"], stdout=PIPE, env={"LC_ALL": "C"})
        result = process.communicate()[0].decode("ascii")
        interface_blocks = dict([
            (block.split()[0].strip(":"), block.upper())
            for block in filter(None, result.split("\n\n"))
        ])

        for device in device_info:
            if device["mac_address"] == "00:00:00:00:00:00":
                continue
            self.assertIn(device["interface"], result)
            block = interface_blocks[device["interface"]]
            self.assertIn(device["netmask"], block)
            self.assertIn(device["ip_address"], block)
            self.assertIn(device["mac_address"].upper(), block)
            self.assertIn(device["broadcast_address"], block)
            flags = device["flags"]
            if flags & 1:
                self.assertIn("UP", block)
            if flags & 2:
                self.assertIn("BROADCAST", block)
            if flags & 64:
                self.assertIn("RUNNING", block)
            if flags & 4096:
                self.assertIn("MULTICAST", block)
            self.assertEqual(100, device["speed"])
            self.assertEqual(True, device["duplex"])

        self.assertTrue(mock_get_network_interface_speed.call_count >= 1)
        mock_get_network_interface_speed.assert_called_with(ANY, ANY)
示例#13
0
 def test_skip_vlan(self, mock_interfaces):
     """VLAN interfaces are not reported by L{get_active_device_info}."""
     mock_interfaces.side_effect = lambda: (_interfaces() + ["eth0.1"])
     device_info = get_active_device_info()
     interfaces = [i["interface"] for i in device_info]
     self.assertNotIn("eth0.1", interfaces)
示例#14
0
 def test_skip_loopback(self):
     """The C{lo} interface is not reported by L{get_active_device_info}."""
     device_info = get_active_device_info()
     interfaces = [i["interface"] for i in device_info]
     self.assertNotIn("lo", interfaces)
示例#15
0
 def _get_local_ips(self):
     """Return a list of IP addresses for local devices."""
     return [device["ip_address"] for device in get_active_device_info()]