class TestIPAddress(object): IPAddress = address.driver(address.Drivers.IPROUTE2) def test_add_delete_ipv4(self, nic0): self._test_add_delete(IPV4_A_WITH_PREFIXLEN, IPV4_B_WITH_PREFIXLEN, nic0) @ipv6_broken_on_travis_ci def test_add_delete_ipv6(self, nic0): self._test_add_delete(IPV6_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN, nic0) @ipv6_broken_on_travis_ci @pytest.mark.skipif( nm_is_running(), reason='Fails randomly when NM is running. See BZ#1512316', ) def test_add_delete_ipv4_ipv6(self, nic0): self._test_add_delete(IPV4_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN, nic0) def _test_add_delete(self, ip_a, ip_b, nic): ip_a_data = address.IPAddressData(ip_a, device=nic) ip_b_data = address.IPAddressData(ip_b, device=nic) TestIPAddress.IPAddress.add(ip_a_data) self._assert_has_address(nic, ip_a) TestIPAddress.IPAddress.add(ip_b_data) self._assert_has_address(nic, ip_a) self._assert_has_address(nic, ip_b) TestIPAddress.IPAddress.delete(ip_b_data) self._assert_has_address(nic, ip_a) self._assert_has_no_address(nic, ip_b) TestIPAddress.IPAddress.delete(ip_a_data) self._assert_has_no_address(nic, ip_a) self._assert_has_no_address(nic, ip_b) def test_add_with_non_existing_device_ipv4(self): self._test_add_with_non_existing_device(IPV4_A_WITH_PREFIXLEN) def test_add_with_non_existing_device_ipv6(self): self._test_add_with_non_existing_device(IPV6_A_WITH_PREFIXLEN) def _test_add_with_non_existing_device(self, ip): with pytest.raises(address.IPAddressAddError): TestIPAddress.IPAddress.add( address.IPAddressData(ip, device='tim the enchanter')) def test_delete_non_existing_ipv4(self, nic0): self._test_delete_non_existing_ip(IPV4_A_WITH_PREFIXLEN, nic0) def test_delete_non_existing_ipv6(self, nic0): self._test_delete_non_existing_ip(IPV6_A_WITH_PREFIXLEN, nic0) def _test_delete_non_existing_ip(self, ip, nic): with pytest.raises(address.IPAddressDeleteError): TestIPAddress.IPAddress.delete( address.IPAddressData(ip, device=nic)) def test_list_ipv4(self, nic0): self._test_list( ipv4_addresses=[IPV4_A_WITH_PREFIXLEN, IPV4_B_WITH_PREFIXLEN], ipv6_addresses=[], nic=nic0, ) @ipv6_broken_on_travis_ci def test_list_ipv6(self, nic0): self._test_list( ipv4_addresses=[], ipv6_addresses=[IPV6_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN], nic=nic0, ) @ipv6_broken_on_travis_ci def test_list_ipv4_ipv6(self, nic0): self._test_list( ipv4_addresses=[IPV4_A_WITH_PREFIXLEN], ipv6_addresses=[IPV6_B_WITH_PREFIXLEN], nic=nic0, ) def _test_list(self, ipv4_addresses, ipv6_addresses, nic): for addr in itertools.chain.from_iterable( [ipv4_addresses, ipv6_addresses]): TestIPAddress.IPAddress.add(address.IPAddressData(addr, device=nic)) all_addrs = list(TestIPAddress.IPAddress.addresses()) ipv4_addrs = list(TestIPAddress.IPAddress.addresses(family=4)) ipv6_addrs = list(TestIPAddress.IPAddress.addresses(family=6)) for addr in ipv4_addresses: self._assert_address_in(addr, all_addrs) self._assert_address_in(addr, ipv4_addrs) for addr in ipv6_addresses: self._assert_address_in(addr, all_addrs) self._assert_address_in(addr, ipv6_addrs) def _test_list_by_device_ipv4_ipv4(self, nic0, nic1): self._test_list_by_device(IPV4_A_WITH_PREFIXLEN, IPV4_B_WITH_PREFIXLEN, (nic0, nic1)) def _test_list_by_device_ipv4_ipv6(self, nic0, nic1): self._test_list_by_device(IPV4_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN, (nic0, nic1)) def _test_list_by_device_ipv6_ipv4(self, nic0, nic1): self._test_list_by_device(IPV6_A_WITH_PREFIXLEN, IPV4_B_WITH_PREFIXLEN, (nic0, nic1)) def _test_list_by_device_ipv6_ipv6(self, nic0, nic1): self._test_list_by_device(IPV6_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN, (nic0, nic1)) def _test_list_by_device(self, ip_a_with_device, ip_b, nics): TestIPAddress.IPAddress.add( address.IPAddressData(ip_a_with_device, device=nics[0])) TestIPAddress.IPAddress.add(address.IPAddressData(ip_b, device=nics[1])) addresses = list(TestIPAddress.IPAddress.addresses(device=nics[0])) self._assert_address_in(ip_a_with_device, addresses) self._assert_address_not_in(ip_b, addresses) def _assert_has_address(self, device, address_with_prefixlen): addresses = TestIPAddress.IPAddress.addresses(device) self._assert_address_in(address_with_prefixlen, addresses) def _assert_has_no_address(self, device, address_with_prefixlen): addresses = TestIPAddress.IPAddress.addresses(device) self._assert_address_not_in(address_with_prefixlen, addresses) def _assert_address_in(self, address_with_prefixlen, addresses): addresses_list = [addr.address_with_prefixlen for addr in addresses] assert address_with_prefixlen in addresses_list def _assert_address_not_in(self, address_with_prefixlen, addresses): addresses_list = [addr.address_with_prefixlen for addr in addresses] assert address_with_prefixlen not in addresses_list
class IPAddressTest(VdsmTestCase): IPAddress = address.driver(address.Drivers.IPROUTE2) def test_add_delete_ipv4(self): self._test_add_delete(IPV4_A_WITH_PREFIXLEN, IPV4_B_WITH_PREFIXLEN) @broken_on_ci("IPv6 not supported on travis", name="TRAVIS_CI") def test_add_delete_ipv6(self): self._test_add_delete(IPV6_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN) @broken_on_ci("IPv6 not supported on travis", name="TRAVIS_CI") def test_add_delete_ipv4_ipv6(self): self._test_add_delete(IPV4_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN) def _test_add_delete(self, ip_a, ip_b): with dummy_device() as nic: ip_a_data = address.IPAddressData(ip_a, device=nic) ip_b_data = address.IPAddressData(ip_b, device=nic) IPAddressTest.IPAddress.add(ip_a_data) self._assert_has_address(nic, ip_a) IPAddressTest.IPAddress.add(ip_b_data) self._assert_has_address(nic, ip_a) self._assert_has_address(nic, ip_b) IPAddressTest.IPAddress.delete(ip_b_data) self._assert_has_address(nic, ip_a) self._assert_has_no_address(nic, ip_b) IPAddressTest.IPAddress.delete(ip_a_data) self._assert_has_no_address(nic, ip_a) self._assert_has_no_address(nic, ip_b) def test_add_with_non_existing_device_ipv4(self): self._test_add_with_non_existing_device(IPV4_A_WITH_PREFIXLEN) def test_add_with_non_existing_device_ipv6(self): self._test_add_with_non_existing_device(IPV6_A_WITH_PREFIXLEN) def _test_add_with_non_existing_device(self, ip): with self.assertRaises(address.IPAddressAddError): IPAddressTest.IPAddress.add( address.IPAddressData(ip, device='tim the enchanter')) def test_delete_non_existing_ipv4(self): self._test_delete_non_existing_ip(IPV4_A_WITH_PREFIXLEN) def test_delete_non_existing_ipv6(self): self._test_delete_non_existing_ip(IPV6_A_WITH_PREFIXLEN) def _test_delete_non_existing_ip(self, ip): with dummy_device() as nic: with self.assertRaises(address.IPAddressDeleteError): IPAddressTest.IPAddress.delete( address.IPAddressData(ip, device=nic)) def test_list_ipv4(self): self._test_list( ipv4_addresses=[IPV4_A_WITH_PREFIXLEN, IPV4_B_WITH_PREFIXLEN], ipv6_addresses=[]) @broken_on_ci("IPv6 not supported on travis", name="TRAVIS_CI") def test_list_ipv6(self): self._test_list( ipv4_addresses=[], ipv6_addresses=[IPV6_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN]) @broken_on_ci("IPv6 not supported on travis", name="TRAVIS_CI") def test_list_ipv4_ipv6(self): self._test_list(ipv4_addresses=[IPV4_A_WITH_PREFIXLEN], ipv6_addresses=[IPV6_B_WITH_PREFIXLEN]) def _test_list(self, ipv4_addresses, ipv6_addresses): with dummy_device() as nic: for addr in itertools.chain.from_iterable( [ipv4_addresses, ipv6_addresses]): IPAddressTest.IPAddress.add( address.IPAddressData(addr, device=nic)) all_addrs = list(IPAddressTest.IPAddress.addresses()) ipv4_addrs = list(IPAddressTest.IPAddress.addresses(family=4)) ipv6_addrs = list(IPAddressTest.IPAddress.addresses(family=6)) for addr in ipv4_addresses: self._assert_address_in(addr, all_addrs) self._assert_address_in(addr, ipv4_addrs) for addr in ipv6_addresses: self._assert_address_in(addr, all_addrs) self._assert_address_in(addr, ipv6_addrs) def _test_list_by_device_ipv4_ipv4(self): self._test_list_by_device(IPV4_A_WITH_PREFIXLEN, IPV4_B_WITH_PREFIXLEN) def _test_list_by_device_ipv4_ipv6(self): self._test_list_by_device(IPV4_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN) def _test_list_by_device_ipv6_ipv4(self): self._test_list_by_device(IPV6_A_WITH_PREFIXLEN, IPV4_B_WITH_PREFIXLEN) def _test_list_by_device_ipv6_ipv6(self): self._test_list_by_device(IPV6_A_WITH_PREFIXLEN, IPV6_B_WITH_PREFIXLEN) def _test_list_by_device(self, ip_a_with_device, ip_b): with dummy_devices(2) as (nic1, nic2): IPAddressTest.IPAddress.add( address.IPAddressData(ip_a_with_device, device=nic1)) IPAddressTest.IPAddress.add( address.IPAddressData(ip_b, device=nic2)) addresses = list(IPAddressTest.IPAddress.addresses(device=nic1)) self._assert_address_in(ip_a_with_device, addresses) self._assert_address_not_in(ip_b, addresses) def _assert_has_address(self, device, address_with_prefixlen): addresses = IPAddressTest.IPAddress.addresses(device) self._assert_address_in(address_with_prefixlen, addresses) def _assert_has_no_address(self, device, address_with_prefixlen): addresses = IPAddressTest.IPAddress.addresses(device) self._assert_address_not_in(address_with_prefixlen, addresses) def _assert_address_in(self, address_with_prefixlen, addresses): addresses_list = [addr.address_with_prefixlen for addr in addresses] self.assertIn(address_with_prefixlen, addresses_list) def _assert_address_not_in(self, address_with_prefixlen, addresses): addresses_list = [addr.address_with_prefixlen for addr in addresses] self.assertNotIn(address_with_prefixlen, addresses_list)
# Refer to the README and COPYING files for full details of the license # import pytest from vdsm.network import errors as ne from vdsm.network.configurators.ifcfg import ifup, ifdown from vdsm.network.ip import address from vdsm.network.link.bond import Bond from vdsm.network.link.iface import iface from . import netfunctestlib as nftestlib from .netfunctestlib import SetupNetworksError, NOCHK from network.nettestlib import dummy_device, vlan_device IPAddress = address.driver(address.Drivers.IPROUTE2) NETWORK1_NAME = 'test-network1' NETWORK2_NAME = 'test-network2' BOND_NAME = 'bond1' VLAN1 = 10 VLAN2 = 20 @pytest.fixture def nic0(): with dummy_device() as nic: yield nic @pytest.fixture
import six import pytest from vdsm.network import errors as ne from vdsm.network.configurators.ifcfg import ifup, ifdown from vdsm.network.ip import address from vdsm.network.link.bond import Bond from vdsm.network.link.iface import iface from . import netfunctestlib as nftestlib from .netfunctestlib import NetFuncTestAdapter, SetupNetworksError, NOCHK from network.nettestlib import dummy_device, dummy_devices, vlan_device IPAddress = address.driver(address.Drivers.IPROUTE2) NETWORK1_NAME = 'test-network1' NETWORK2_NAME = 'test-network2' BOND_NAME = 'bond1' VLAN1 = 10 VLAN2 = 20 adapter = None @pytest.fixture(scope='module', autouse=True) def create_adapter(target): global adapter adapter = NetFuncTestAdapter(target)