Source code for server.tests.test_iptools

import netifaces

from server import IPTools


# noinspection PyAttributeOutsideInit,PyPep8
[docs]class TestIPTools(object): """ Unit tests for IPTools module, mainly checking that it extracts the correct IPs from the netifaces package and that they are correctly formatted. """
[docs] def test_current_ip(self, monkeypatch): def mock_netifaces_ifaddrs(_): if self.first_mock_netifaces: self.first_mock_netifaces = False return {netifaces.AF_LINK: [{'addr': u'00:e0:4c:68:01:cc'}], netifaces.AF_INET: [{'broadcast': u'10.0.0.255', 'netmask': u'255.255.255.0', 'addr': u'10.0.0.25'}], netifaces.AF_INET6: [{'netmask': u'ffff:ffff:ffff:ffff::/64', 'flags': 1024, 'addr': u'fe80::81a:bbbb:5899:f449%en4'}]} else: return {netifaces.AF_LINK: [{'addr': u'00:e0:4c:68:01:cc'}]} self.first_mock_netifaces = True monkeypatch.setattr('netifaces.ifaddresses', mock_netifaces_ifaddrs) ip_list = IPTools.current_ips() assert len(ip_list) == 1 assert ip_list[0] == '10.0.0.25'
[docs] def test_current_ip_for_multiple(self, monkeypatch): def mock_netifaces_ifaddrs(_): self.mock_netifaces_counter += 1 return {netifaces.AF_LINK: [{'addr': u'00:e0:4c:68:01:cc'}], netifaces.AF_INET: [{'broadcast': u'10.0.0.255', 'netmask': u'255.255.255.0', 'addr': u'10.0.0.{}'.format(self.mock_netifaces_counter)}], netifaces.AF_INET6: [{'netmask': u'ffff:ffff:ffff:ffff::/64', 'flags': 1024, 'addr': u'fe80::81a:bbbb:5899:f449%en4'}]} self.mock_netifaces_counter = 1 monkeypatch.setattr('netifaces.ifaddresses', mock_netifaces_ifaddrs) ip_list = IPTools.current_ips() interface_ip_count = [x+2 for x in range(len(netifaces.interfaces()))] zipped = zip(ip_list, interface_ip_count) for ip, count in zipped: assert ip == '10.0.0.{}'.format(count)
[docs] def test_no_best_candidate_ip_no_gateway(self, monkeypatch): def mock_netifaces_ifaddrs(_): self.mock_netifaces_counter += 1 return {netifaces.AF_LINK: [{'addr': u'00:e0:4c:68:01:cc'}], netifaces.AF_INET: [{'broadcast': u'10.0.0.255', 'netmask': u'255.255.255.0', 'addr': u'65.23.23.{}'.format(self.mock_netifaces_counter)}], netifaces.AF_INET6: [{'netmask': u'ffff:ffff:ffff:ffff::/64', 'flags': 1024, 'addr': u'fe80::81a:bbbb:5899:f449%en4'}]} self.mock_netifaces_counter = 1 monkeypatch.setattr('netifaces.ifaddresses', mock_netifaces_ifaddrs) ip_list = IPTools.current_ips() interface_ip_count = [x+2 for x in range(len(netifaces.interfaces()))] zipped = zip(ip_list, interface_ip_count) for ip, count in zipped: assert ip == '65.23.23.{}'.format(count)
[docs] def test_no_best_candidate_no_gateway(self, monkeypatch): def mock_netifaces_gateways(): return {} def mock_netifaces_ifaddrs(_): self.mock_netifaces_counter += 1 return {netifaces.AF_LINK: [{'addr': u'00:e0:4c:68:01:cc'}], netifaces.AF_INET: [{'broadcast': u'10.0.0.255', 'netmask': u'255.255.255.0', 'addr': u'127.0.0.{}'.format(self.mock_netifaces_counter)}], netifaces.AF_INET6: [{'netmask': u'ffff:ffff:ffff:ffff::/64', 'flags': 1024, 'addr': u'fe80::81a:bbbb:5899:f449%en4'}]} self.mock_netifaces_counter = 1 monkeypatch.setattr('netifaces.ifaddresses', mock_netifaces_ifaddrs) monkeypatch.setattr('netifaces.gateways', mock_netifaces_gateways) ip_list = IPTools.current_ips() interface_ip_count = [x + 2 for x in range(len(netifaces.interfaces()))] zipped = zip(ip_list, interface_ip_count) for ip, count in zipped: assert ip == '127.0.0.{}'.format(count)
[docs] def test_gateway_ip(self, monkeypatch): def mock_netifaces_gateways(): return {'default': {2: (u'10.0.0.1', u'en4')}, 2: [(u'10.0.0.1', u'en4', True)], 30: [(u'fe80::%utun0', u'utun0', False)]} monkeypatch.setattr('netifaces.gateways', mock_netifaces_gateways) gateway_ip = IPTools.gateway_ip() assert gateway_ip == '10.0.0.1'
[docs] def test_no_gateway_ip(self, monkeypatch): def mock_netifaces_gateways(): return {} monkeypatch.setattr('netifaces.gateways', mock_netifaces_gateways) gateway_ip = IPTools.gateway_ip() assert not gateway_ip
[docs] def test_current_ips_without_gateway(self, monkeypatch): def mock_netifaces_gateways(): return {} def mock_netifaces_ifaddrs(_): if self.first_mock_netifaces: self.first_mock_netifaces = False return {netifaces.AF_LINK: [{'addr': u'00:e0:4c:68:01:cc'}], netifaces.AF_INET: [{'broadcast': u'10.0.0.255', 'netmask': u'255.255.255.0', 'addr': u'127.0.0.1'}], netifaces.AF_INET6: [{'netmask': u'ffff:ffff:ffff:ffff::/64', 'flags': 1024, 'addr': u'fe80::81a:bbbb:5899:f449%en4'}]} else: self.mock_netifaces_counter += 1 return {netifaces.AF_LINK: [{'addr': u'00:e0:4c:68:01:cc'}], netifaces.AF_INET: [{'broadcast': u'10.0.0.255', 'netmask': u'255.255.255.0', 'addr': u'10.0.0.{}'.format(self.mock_netifaces_counter)}], netifaces.AF_INET6: [{'netmask': u'ffff:ffff:ffff:ffff::/64', 'flags': 1024, 'addr': u'fe80::81a:bbbb:5899:f449%en4'}]} self.first_mock_netifaces = True self.mock_netifaces_counter = 1 monkeypatch.setattr('netifaces.gateways', mock_netifaces_gateways) monkeypatch.setattr('netifaces.ifaddresses', mock_netifaces_ifaddrs) ip_list = IPTools.current_ips() interface_ip_count = [x+2 for x in range(len(netifaces.interfaces()))] assert '127.0.0.1' not in ip_list zipped = zip(ip_list, interface_ip_count) for ip, count in zipped: assert ip == '10.0.0.{}'.format(count)
[docs] def test_get_first_digits_from(self): test_ip = '10.0.0.0' expected = '10.0.0.' assert expected == IPTools.get_first_digits_from(test_ip, 3) expected = '10.0.0' assert expected == IPTools.get_first_digits_from(test_ip, 3, with_dot=False) expected = '10' assert expected == IPTools.get_first_digits_from(test_ip, 1, with_dot=False) expected = '10.0.0.0' assert expected == IPTools.get_first_digits_from(test_ip, 10, with_dot=False)
[docs] def test_get_subnet_from(self): test_ip = '127.0.0.1' expected = '127.0.0.' assert expected == IPTools.get_subnet_from(test_ip) expected = '127.0.0.' assert expected == IPTools.get_subnet_from(test_ip, with_dot=True) expected = '127.0.0' assert expected == IPTools.get_subnet_from(test_ip, with_dot=False) test_ip = '127.0.0.0.0.0.0.0' assert expected == IPTools.get_subnet_from(test_ip, with_dot=False) test_ip = '127.0.' expected = '127.0' assert expected == IPTools.get_subnet_from(test_ip, with_dot=False) expected = '127.0.' assert expected == IPTools.get_subnet_from(test_ip, with_dot=True)