def test_remove_bonded_network_while_a_slave_is_missing(self, switch): with dummy_device() as nic1: NETCREATE = { NETWORK1_NAME: { 'bonding': BOND_NAME, 'bridged': False, 'switch': switch, } } BONDCREATE = {BOND_NAME: {'nics': [nic1], 'switch': switch}} with adapter.setupNetworks(NETCREATE, BONDCREATE, NOCHK): with dummy_device() as nic2: BONDEDIT = {BOND_NAME: {'nics': [nic2], 'switch': switch}} adapter.setupNetworks({}, BONDEDIT, NOCHK) adapter.setupNetworks( {NETWORK1_NAME: { 'remove': True }}, {BOND_NAME: { 'remove': True }}, NOCHK, ) adapter.assertNoNetwork(NETWORK1_NAME) adapter.assertNoBond(BOND_NAME)
def test_create_remove_bond(self): with dummy_device() as dev0, dummy_device() as dev1: with ovs_bond(self.ovsdb, TEST_BRIDGE, TEST_BOND, [dev0, dev1]): self.assertEqual([TEST_BOND], self.ovsdb.list_ports(TEST_BRIDGE).execute()) self.assertEqual([], self.ovsdb.list_ports(TEST_BRIDGE).execute())
def test_add_slave_to_bond(self): with dummy_device() as dev0,\ dummy_device() as dev1,\ dummy_device() as dev2: with ovs_bond(self.ovsdb, TEST_BRIDGE, TEST_BOND, [dev0, dev1]): with self.ovsdb.transaction() as t: t.add(*self.ovsdb.attach_bond_slave(TEST_BOND, dev2)) bond_data = self.ovsdb.list_port_info(TEST_BOND).execute() self.assertEqual(1, len(bond_data)) self.assertEqual(3, len(bond_data[0]['interfaces']))
def test_switch_change_setup_includes_a_network_removal( self, sw_src, sw_dst): with dummy_device() as nic: NETSETUP_SOURCE = { NET1_NAME: { 'nic': nic, 'switch': sw_src }, NET2_NAME: { 'nic': nic, 'vlan': VLAN, 'switch': sw_src } } NETSETUP_TARGET = { NET1_NAME: { 'nic': nic, 'switch': sw_dst }, NET2_NAME: { 'remove': True } } with adapter.setupNetworks(NETSETUP_SOURCE, {}, NOCHK): with pytest.raises(SetupNetworksError) as e: adapter.setupNetworks(NETSETUP_TARGET, {}, NOCHK) assert e.value.status == ne.ERR_BAD_PARAMS adapter.assertNetwork(NET1_NAME, NETSETUP_SOURCE[NET1_NAME]) adapter.assertNetwork(NET2_NAME, NETSETUP_SOURCE[NET2_NAME])
def test_set_mirrored_port(self): with dummy_device() as dev0, dummy_device() as dev1: with ovs_port(self.ovsdb, TEST_BRIDGE, dev0),\ ovs_port(self.ovsdb, TEST_BRIDGE, dev1),\ ovs_mirror(self.ovsdb, TEST_BRIDGE, 'm0', dev0): mirror_data = self.ovsdb.list_mirror_info().execute() port_data = self.ovsdb.list_port_info(dev1).execute() mirror_id = mirror_data[0]['_uuid'] port_id = port_data[0]['_uuid'] self.ovsdb.set_mirror_attr(str(mirror_id), 'select-dst-port', str(port_id)).execute() mirror_data = self.ovsdb.list_mirror_info().execute() self.assertEqual(port_id, mirror_data[0]['select_dst_port'])
def test_remove_ip_from_an_iface_used_by_a_vlan_network(self, bonded): with dummy_device() as nic: netcreate = { NETWORK_NAME: { 'bridged': False, 'ipaddr': IPv4_ADDRESS, 'netmask': IPv4_NETMASK }, NETWORK2_NAME: { 'bridged': False, 'vlan': VLAN } } bondcreate = {} if bonded: bondcreate[BOND_NAME] = {'nics': [nic]} netcreate[NETWORK_NAME]['bonding'] = BOND_NAME netcreate[NETWORK2_NAME]['bonding'] = BOND_NAME else: netcreate[NETWORK_NAME]['nic'] = nic netcreate[NETWORK2_NAME]['nic'] = nic with adapter.setupNetworks(netcreate, bondcreate, NOCHK): netremove = {NETWORK_NAME: {'remove': True}} adapter.setupNetworks(netremove, {}, NOCHK) if bonded: adapter.assertDisabledIPv4( adapter.netinfo.bondings[BOND_NAME]) adapter.assertDisabledIPv4(adapter.netinfo.nics[nic])
def test_iface_hwaddr(self): MAC_ADDR = '02:00:00:00:00:01' with dummy_device() as nic: _iface = iface(nic) _iface.set_address(MAC_ADDR) self.assertEqual(MAC_ADDR, _iface.address())
def test_add_non_vlan_network_with_qos(self, switch, bridged, bonded): HOST_QOS_CONFIG = { 'out': { 'ls': { 'm1': rate(rate_in_mbps=4), 'd': _100USEC, 'm2': rate(rate_in_mbps=3), }, 'ul': { 'm2': rate(rate_in_mbps=8) }, } } with dummy_device() as nic: NETCREATE = { NETWORK1_NAME: { 'hostQos': HOST_QOS_CONFIG, 'switch': switch, 'bridged': bridged, } } if bonded: NETCREATE[NETWORK1_NAME]['bonding'] = BOND_NAME BONDBASE = {BOND_NAME: {'nics': [nic], 'switch': switch}} else: NETCREATE[NETWORK1_NAME]['nic'] = nic BONDBASE = {} with adapter.setupNetworks(NETCREATE, BONDBASE, NOCHK): adapter.assertHostQos(NETWORK1_NAME, NETCREATE[NETWORK1_NAME]) adapter.refresh_netinfo() if not bonded: adapter.assertNoQosOnNic(nic)
def test_switch_change_bonded_network_with_dhclient(self, sw_src, sw_dst): with veth_pair() as (server, nic1): with dummy_device() as nic2: NETSETUP_SOURCE = {NET1_NAME: { 'bonding': BOND_NAME, 'bootproto': 'dhcp', 'blockingdhcp': True, 'switch': sw_src}} NETSETUP_TARGET = _change_switch_type(NETSETUP_SOURCE, sw_dst) BONDSETUP_SOURCE = {BOND_NAME: { 'nics': [nic1, nic2], 'switch': sw_src}} BONDSETUP_TARGET = _change_switch_type(BONDSETUP_SOURCE, sw_dst) addrAdd(server, IPv4_ADDRESS, IPv4_PREFIX_LEN) linkSet(server, ['up']) with dnsmasq_run(server, DHCPv4_RANGE_FROM, DHCPv4_RANGE_TO, router=IPv4_ADDRESS): with adapter.setupNetworks( NETSETUP_SOURCE, BONDSETUP_SOURCE, NOCHK): adapter.setupNetworks( NETSETUP_TARGET, BONDSETUP_TARGET, NOCHK) adapter.assertNetwork( NET1_NAME, NETSETUP_TARGET[NET1_NAME]) adapter.assertBond(BOND_NAME, BONDSETUP_TARGET[BOND_NAME])
def test_edit_default_gateway(self, switch, families, preserve_conf): if switch == 'ovs' and IpFamily.IPv6 in families: pytest.xfail('OvS does not support ipv6 gateway' 'see https://bugzilla.redhat.com/1467332') with dummy_device() as nic: network_attrs = { 'nic': nic, 'ipaddr': IPv4_ADDRESS, 'netmask': IPv4_NETMASK, 'gateway': IPv4_GATEWAY, 'ipv6addr': IPv6_ADDRESS + '/' + IPv6_PREFIX_LEN, 'ipv6gateway': IPv6_GATEWAY, 'defaultRoute': True, 'nameservers': [], 'switch': switch, } netcreate = {NETWORK_NAME: network_attrs} with adapter.setupNetworks(netcreate, {}, NOCHK): adapter.assertNetworkIp(NETWORK_NAME, network_attrs) if IpFamily.IPv6 in families: network_attrs['ipv6gateway'] = IPv6_GATEWAY2 if IpFamily.IPv4 in families: network_attrs['gateway'] = IPv4_GATEWAY2 network_attrs['ipaddr'] = IPv4_ADDRESS2 adapter.setupNetworks(netcreate, {}, NOCHK) adapter.assertNetworkIp(NETWORK_NAME, network_attrs)
def test_remove_net_based_on_nic(self, switch): with dummy_device() as nic: NETCREATE = {NETWORK_NAME: {'nic': nic, 'switch': switch}} NETREMOVE = {NETWORK_NAME: {'remove': True}} with adapter.setupNetworks(NETCREATE, {}, NOCHK): adapter.setupNetworks(NETREMOVE, {}, NOCHK) adapter.assertNoNetwork(NETWORK_NAME)
def test_sourceroute_add_remove_and_read(self): with dummy_device() as nic: addrAdd(nic, IPV4_ADDRESS, IPV4_MASK) with create_sourceroute(device=nic, ip=IPV4_ADDRESS, mask=IPV4_MASK, gateway=IPV4_GW): dsroute = DynamicSourceRoute(nic, None, None, None) routes, rules = dsroute.current_srconfig() self.assertEqual(2, len(routes), routes) self.assertEqual(2, len(rules), rules) self.assertEqual('0.0.0.0/0', routes[0].to) self.assertEqual(nic, routes[0].device) self.assertEqual(IPv4_NET, routes[1].to) self.assertEqual(nic, routes[1].device) self.assertEqual(IPv4_NET, rules[0].to) self.assertEqual(IPV4_TABLE, rules[0].table) self.assertEqual(nic, rules[0].iif) self.assertEqual(rules[0].prio, sourceroute.RULE_PRIORITY) self.assertEqual(IPv4_NET, rules[1].src) self.assertEqual(IPV4_TABLE, rules[1].table) self.assertEqual(rules[1].prio, sourceroute.RULE_PRIORITY)
def test_ovs_info_with_sb_nic(self): with dummy_device() as nic: with _setup_ovs_network(self.ovsdb, nic): expected_bridges = { TEST_BRIDGE: { 'stp': False, 'dpdk_enabled': False, 'ports': { nic: { 'level': info.SOUTHBOUND, 'tag': None }, TEST_VLANED_NETWORK: { 'level': info.NORTHBOUND, 'tag': TEST_VLAN, }, TEST_BRIDGE: { 'level': None, 'tag': None }, }, } } ovs_info = info.OvsInfo() obtained_bridges = ovs_info.bridges self.assertEqual(obtained_bridges, expected_bridges) obtained_bridges_by_sb = ovs_info.bridges_by_sb self.assertEqual(obtained_bridges_by_sb, {nic: TEST_BRIDGE})
def test_detach_used_bond_from_bridge(self, switch): with dummy_device() as nic: NETCREATE = { NETWORK1_NAME: {'bonding': BOND_NAME, 'switch': switch}, NETWORK2_NAME: { 'bonding': BOND_NAME, 'vlan': VLAN2, 'switch': switch, }, } BONDCREATE = {BOND_NAME: {'nics': [nic], 'switch': switch}} with adapter.setupNetworks(NETCREATE, BONDCREATE, NOCHK): NETEDIT = { NETWORK1_NAME: { 'bonding': BOND_NAME, 'vlan': VLAN1, 'switch': switch, } } adapter.setupNetworks(NETEDIT, {}, NOCHK) if switch == 'legacy' and not nftestlib.is_nmstate_backend(): # For ifcfg backend, make sure ifcfg content is good. # https://bugzilla.redhat.com/1372798 ifdown(BOND_NAME) ifup(BOND_NAME) # netinfo must be updated explicitly after non-API changes adapter.update_netinfo() adapter.assertBond(BOND_NAME, BONDCREATE[BOND_NAME])
def test_add_two_networks_with_qos_on_shared_nic_in_two_steps( self, switch): HOST_QOS_CONFIG1 = {'out': {'ls': {'m2': rate(rate_in_mbps=1)}}} HOST_QOS_CONFIG2 = {'out': {'ls': {'m2': rate(rate_in_mbps=5)}}} with dummy_device() as nic: NETBASE = { NETWORK1_NAME: { 'nic': nic, 'hostQos': HOST_QOS_CONFIG1, 'switch': switch, } } NETVLAN = { NETWORK2_NAME: { 'nic': nic, 'vlan': VLAN1, 'hostQos': HOST_QOS_CONFIG2, 'switch': switch, } } with adapter.setupNetworks(NETBASE, {}, NOCHK): with adapter.setupNetworks(NETVLAN, {}, NOCHK): adapter.assertHostQos(NETWORK1_NAME, NETBASE[NETWORK1_NAME]) adapter.assertHostQos(NETWORK2_NAME, NETVLAN[NETWORK2_NAME])
def test_add_bridged_net_with_invalid_name_fails(self, net_name): with dummy_device() as nic: NETCREATE = {net_name: {'nic': nic, 'switch': 'legacy'}} with pytest.raises(SetupNetworksError) as err: with adapter.setupNetworks(NETCREATE, {}, NOCHK): pass assert err.value.status == ne.ERR_BAD_BRIDGE
def test_ovs_info_with_sb_nic(self): with dummy_device() as nic: with _setup_ovs_network(self.ovsdb, nic): expected_bridges = { TEST_BRIDGE: { 'stp': False, 'dpdk_enabled': False, 'ports': { nic: { 'level': info.SOUTHBOUND, 'tag': None }, TEST_VLANED_NETWORK: { 'level': info.NORTHBOUND, 'tag': TEST_VLAN }, TEST_BRIDGE: { 'level': None, 'tag': None } } } } ovs_info = info.OvsInfo() obtained_bridges = ovs_info.bridges self.assertEqual(obtained_bridges, expected_bridges) obtained_bridges_by_sb = ovs_info.bridges_by_sb self.assertEqual(obtained_bridges_by_sb, {nic: TEST_BRIDGE})
def test_add_net_ip_missing_addresses_fails(self, switch): with dummy_device() as nic: self._test_invalid_ip_config_fails(switch, nic, ipaddr='1.2.3.4') self._test_invalid_ip_config_fails(switch, nic, gateway='1.2.3.4') self._test_invalid_ip_config_fails(switch, nic, netmask='255.255.255.0')
def test_rollback_target_configuration_failed_connectivity_check( self, sw_src, sw_dst): with dummy_device() as nic: NETSETUP_SOURCE = { NET1_NAME: { 'nic': nic, 'switch': sw_src }, NET2_NAME: { 'nic': nic, 'vlan': VLAN, 'switch': sw_src } } NETSETUP_TARGET = _change_switch_type(NETSETUP_SOURCE, sw_dst) with adapter.setupNetworks(NETSETUP_SOURCE, {}, NOCHK): with pytest.raises(SetupNetworksError) as e: adapter.setupNetworks(NETSETUP_TARGET, {}, { 'connectivityCheck': True, 'connectivityTimeout': 0.1 }) assert e.value.status == ne.ERR_LOST_CONNECTION adapter.assertNetwork(NET1_NAME, NETSETUP_SOURCE[NET1_NAME]) adapter.assertNetwork(NET2_NAME, NETSETUP_SOURCE[NET2_NAME])
def test_detach_used_bond_from_bridge(self, switch): with dummy_device() as nic: NETCREATE = { NETWORK1_NAME: {'bonding': BOND_NAME, 'switch': switch}, NETWORK2_NAME: { 'bonding': BOND_NAME, 'vlan': VLAN2, 'switch': switch, }, } BONDCREATE = {BOND_NAME: {'nics': [nic], 'switch': switch}} with adapter.setupNetworks(NETCREATE, BONDCREATE, NOCHK): NETEDIT = { NETWORK1_NAME: { 'bonding': BOND_NAME, 'vlan': VLAN1, 'switch': switch, } } adapter.setupNetworks(NETEDIT, {}, NOCHK) # For the legacy bridge, add an explicit ifdown/up step. if switch == 'legacy': ifdown(BOND_NAME) ifup(BOND_NAME) # netinfo must be updated explicitly after non-API changes adapter.update_netinfo() adapter.assertBond(BOND_NAME, BONDCREATE[BOND_NAME])
def test_add_vlaned_network_on_existing_bond(self, switch, bridged): if switch == 'ovs': pytest.xfail('Link is not stable when using OVS switch.') with dummy_device() as nic: NETBASE = { NETWORK1_NAME: { 'bonding': BOND_NAME, 'bridged': False, 'switch': switch, } } BONDBASE = {BOND_NAME: {'nics': [nic], 'switch': switch}} with adapter.setupNetworks(NETBASE, BONDBASE, NOCHK): with nftestlib.monitor_stable_link_state(BOND_NAME): NETVLAN = { NETWORK2_NAME: { 'bonding': BOND_NAME, 'bridged': bridged, 'vlan': VLAN1, 'switch': switch, } } with adapter.setupNetworks(NETVLAN, {}, NOCHK): adapter.assertNetwork( NETWORK1_NAME, NETBASE[NETWORK1_NAME] ) adapter.assertNetwork( NETWORK2_NAME, NETVLAN[NETWORK2_NAME] )
def test_sourceroute_add_over_existing_route(self): with dummy_device() as nic: addrAdd(nic, IPV4_ADDRESS, IPV4_MASK) with create_sourceroute(device=nic, ip=IPV4_ADDRESS, mask=IPV4_MASK, gateway=IPV4_GW): sourceroute.add(nic, IPV4_ADDRESS, IPV4_MASK, IPV4_GW)
def test_add_net_based_on_vlan(self, switch): with dummy_device() as nic: NETCREATE = { NETWORK_NAME: {'nic': nic, 'vlan': VLANID, 'switch': switch} } with adapter.setupNetworks(NETCREATE, {}, NOCHK): adapter.assertNetwork(NETWORK_NAME, NETCREATE[NETWORK_NAME])
def test_list_vlans_on_base_device(self): with dummy_device() as nic: with vlan_device(nic, tag=999) as vlan_dev: self.assertEqual( [vlan_dev.devName], list(vlan.get_vlans_on_base_device(nic)), )
def test_add_net_bad_format_addresses_fails(self, switch): with dummy_device() as nic: self._test_invalid_ip_config_fails( switch, nic, ipaddr='1.2.3.4.5', netmask='255.255.0.0' ) self._test_invalid_ip_config_fails( switch, nic, ipaddr='1.2.3', netmask='255.255.0.0' )
def test_add_the_same_nic_to_net_and_bond_in_one_step(self, switch): with dummy_device() as nic: NETCREATE = {NETWORK1_NAME: {'nic': nic, 'switch': switch}} BONDCREATE = {BOND_NAME: {'nics': [nic], 'switch': switch}} with pytest.raises(SetupNetworksError) as e: adapter.setupNetworks(NETCREATE, BONDCREATE, NOCHK) assert e.value.status == ne.ERR_USED_NIC
def test_attach_nic_with_ip_to_ipless_network(self, switch): with dummy_device() as nic: addrAdd(nic, IPv4_ADDRESS, IPv4_PREFIX_LEN) NETCREATE = {NETWORK_NAME: {'nic': nic, 'switch': switch}} with adapter.setupNetworks(NETCREATE, {}, NOCHK): nic_netinfo = adapter.netinfo.nics[nic] adapter.assertDisabledIPv4(nic_netinfo)
def test_switch_change_basic_network(self, sw_src, sw_dst): with dummy_device() as nic: NETSETUP_SOURCE = {NET1_NAME: {'nic': nic, 'switch': sw_src}} NETSETUP_TARGET = _change_switch_type(NETSETUP_SOURCE, sw_dst) with adapter.setupNetworks(NETSETUP_SOURCE, {}, NOCHK): adapter.setupNetworks(NETSETUP_TARGET, {}, NOCHK) adapter.assertNetwork(NET1_NAME, NETSETUP_TARGET[NET1_NAME])
def test_add_net_twice(self, switch, bridged): with dummy_device() as nic: NETCREATE = {NETWORK_NAME: {'nic': nic, 'bridged': bridged, 'switch': switch}} with adapter.setupNetworks(NETCREATE, {}, NOCHK): adapter.setupNetworks(NETCREATE, {}, NOCHK) adapter.assertNetwork(NETWORK_NAME, NETCREATE[NETWORK_NAME])
def test_attach_nic_with_ip_to_ipless_network(self, switch): with dummy_device() as nic: addrAdd(nic, IPv4_ADDRESS, IPv4_PREFIX_LEN) NETCREATE = {NETWORK_NAME: {'nic': nic, 'switch': switch}} with self.setupNetworks(NETCREATE, {}, NOCHK): nic_netinfo = self.netinfo.nics[nic] self.assertDisabledIPv4(nic_netinfo)
def test_add_network_with_nic_that_is_already_used_by_bond(self, switch): with dummy_device() as nic: NETCREATE = {NETWORK1_NAME: {'nic': nic, 'switch': switch}} BONDCREATE = {BOND_NAME: {'nics': [nic], 'switch': switch}} with adapter.setupNetworks({}, BONDCREATE, NOCHK): with pytest.raises(SetupNetworksError) as e: adapter.setupNetworks(NETCREATE, {}, NOCHK) assert e.value.status == ne.ERR_USED_NIC
def testHostSampleReportsNewInterface(self): interfaces_before = set(six.viewkeys( sampling._get_interfaces_and_samples())) with dummy_device() as dummy_name: interfaces_after = set(six.viewkeys( sampling._get_interfaces_and_samples())) interfaces_diff = interfaces_after - interfaces_before self.assertEqual(interfaces_diff, {dummy_name})
def testHostSampleReportsNewInterface(self): interfaces_before = set( sampling._get_interfaces_and_samples().iterkeys()) with dummy_device() as dummy_name: interfaces_after = set( sampling._get_interfaces_and_samples().iterkeys()) interfaces_diff = interfaces_after - interfaces_before self.assertEqual(interfaces_diff, {dummy_name})
def test_switch_change_basic_vlaned_network(self, sw_src, sw_dst): with dummy_device() as nic: NETSETUP_SOURCE = {NET1_NAME: { 'nic': nic, 'vlan': VLAN, 'switch': sw_src}} NETSETUP_TARGET = _change_switch_type(NETSETUP_SOURCE, sw_dst) with adapter.setupNetworks(NETSETUP_SOURCE, {}, NOCHK): adapter.setupNetworks(NETSETUP_TARGET, {}, NOCHK) adapter.assertNetwork(NET1_NAME, NETSETUP_TARGET[NET1_NAME])
def test_reconfigure_bridge_with_vanished_port(self, switch): with dummy_device() as nic1: NETCREATE = { NETWORK_NAME: {'nic': nic1, 'bridged': True, 'switch': switch} } with adapter.setupNetworks(NETCREATE, {}, nftestlib.NOCHK): with dummy_device() as nic2: NETCREATE[NETWORK_NAME]['nic'] = nic2 adapter.setupNetworks(NETCREATE, {}, nftestlib.NOCHK) adapter.refresh_netinfo() assert adapter.netinfo.networks[NETWORK_NAME]['ports'] == [] NETCREATE[NETWORK_NAME]['nic'] = nic1 adapter.setupNetworks(NETCREATE, {}, nftestlib.NOCHK) net_ports = adapter.netinfo.networks[NETWORK_NAME]['ports'] assert net_ports == [nic1]
def test_add_net_with_prefix(self, switch): with dummy_device() as nic: network_attrs = {'nic': nic, 'ipaddr': IPv4_ADDRESS, 'prefix': IPv4_PREFIX_LEN, 'switch': switch} netcreate = {NETWORK_NAME: network_attrs} with adapter.setupNetworks(netcreate, {}, NOCHK): adapter.assertNetworkIp(NETWORK_NAME, netcreate[NETWORK_NAME])
def test_add_net_out_of_range_addresses_fails(self, switch): with dummy_device() as nic: self._test_invalid_ip_config_fails( switch, nic, ipaddr='1.2.3.256', netmask='255.255.0.0') self._test_invalid_ip_config_fails( switch, nic, ipaddr='1.2.3.4', netmask='256.255.0.0') self._test_invalid_ip_config_fails(switch, nic, ipaddr='1.2.3.4', netmask='255.255.0.0', gateway='1.2.3.256')
def test_preserve_host_nameservers(self, switch): original_nameservers = adapter.netinfo.nameservers with dummy_device() as nic: NETCREATE = {NETWORK_NAME: {'nic': nic, 'switch': switch, 'defaultRoute': True, 'ipaddr': IPv4_ADDRESS, 'netmask': IPv4_NETMASK, 'gateway': IPv4_GATEWAY, }} with restore_resolv_conf(), preserve_default_route(): with adapter.setupNetworks(NETCREATE, {}, nftestlib.NOCHK): adapter.assertNameservers(original_nameservers)
def test_add_vlan_network_with_qos(self, switch): HOST_QOS_CONFIG = {'out': {'ls': {'m1': rate(rate_in_mbps=4), 'd': _100USEC, 'm2': rate(rate_in_mbps=3)}, 'ul': {'m2': rate(rate_in_mbps=8)}}} with dummy_device() as nic: NETCREATE = {NETWORK1_NAME: {'nic': nic, 'vlan': VLAN1, 'hostQos': HOST_QOS_CONFIG, 'switch': switch}} with adapter.setupNetworks(NETCREATE, {}, NOCHK): adapter.assertHostQos(NETWORK1_NAME, NETCREATE[NETWORK1_NAME])
def test_set_nameservers_on_non_default_network(self, switch): with dummy_device() as nic: NETCREATE = {NETWORK_NAME: {'nic': nic, 'switch': switch, 'nameservers': NAMESERVERS, 'defaultRoute': False, 'ipaddr': IPv4_ADDRESS, 'netmask': IPv4_NETMASK, 'gateway': IPv4_GATEWAY, }} with pytest.raises(nftestlib.SetupNetworksError) as err: adapter.setupNetworks(NETCREATE, {}, nftestlib.NOCHK) assert err.value.status == ERR_BAD_PARAMS
def test_add_net_with_ipv4_default_gateway(self, switch, preserve_conf): with dummy_device() as nic: network_attrs = {'nic': nic, 'ipaddr': IPv4_ADDRESS, 'netmask': IPv4_NETMASK, 'gateway': IPv4_GATEWAY, 'defaultRoute': True, 'switch': switch} netcreate = {NETWORK_NAME: network_attrs} with adapter.setupNetworks(netcreate, {}, NOCHK): adapter.assertNetworkIp(NETWORK_NAME, network_attrs)
def testHostSampleHandlesDisappearingVlanInterfaces(self): original_getLinks = ipwrapper.getLinks def faultyGetLinks(): all_links = list(original_getLinks()) ipwrapper.linkDel(self.NEW_VLAN) return iter(all_links) with MonkeyPatchScope([(ipwrapper, 'getLinks', faultyGetLinks)]): with dummy_device() as dummy_name, vlan( self.NEW_VLAN, dummy_name, 999): interfaces_and_samples = sampling._get_interfaces_and_samples() self.assertNotIn(self.NEW_VLAN, interfaces_and_samples)
def test_create_remove_port_mirroring(self): with dummy_device() as dev0: with ovs_port(self.ovsdb, TEST_BRIDGE, dev0),\ ovs_mirror(self.ovsdb, TEST_BRIDGE, 'm0', dev0): mirror_data = self.ovsdb.list_mirror_info().execute() port_data = self.ovsdb.list_port_info(dev0).execute() self.assertEqual(1, len(mirror_data)) self.assertEqual(port_data[0]['_uuid'], mirror_data[0]['output_port']) bridge_data = self.ovsdb.list_bridge_info(TEST_BRIDGE).execute() self.assertNotIn(mirror_data[0]['_uuid'], bridge_data[0]['mirrors'])
def test_add_two_networks_with_qos_on_shared_nic(self, switch): HOST_QOS_CONFIG1 = {'out': {'ls': {'m2': rate(rate_in_mbps=1)}}} HOST_QOS_CONFIG2 = {'out': {'ls': {'m2': rate(rate_in_mbps=5)}}} with dummy_device() as nic: NETCREATE = {NETWORK1_NAME: {'nic': nic, 'hostQos': HOST_QOS_CONFIG1, 'switch': switch}, NETWORK2_NAME: {'nic': nic, 'vlan': VLAN1, 'hostQos': HOST_QOS_CONFIG2, 'switch': switch}} with adapter.setupNetworks(NETCREATE, {}, NOCHK): adapter.assertHostQos(NETWORK1_NAME, NETCREATE[NETWORK1_NAME]) adapter.assertHostQos(NETWORK2_NAME, NETCREATE[NETWORK2_NAME])
def test_set_host_nameservers(self, switch): adapter.update_netinfo() original_nameservers = adapter.netinfo.nameservers assert original_nameservers != NAMESERVERS, ( 'Current nameservers must differ from tested ones') with dummy_device() as nic: NETCREATE = {NETWORK_NAME: {'nic': nic, 'switch': switch, 'nameservers': NAMESERVERS, 'defaultRoute': True, 'ipaddr': IPv4_ADDRESS, 'netmask': IPv4_NETMASK, 'gateway': IPv4_GATEWAY, }} with restore_resolv_conf(), preserve_default_route(): with adapter.setupNetworks(NETCREATE, {}, nftestlib.NOCHK): adapter.assertNameservers(NAMESERVERS)
def test_rollback_target_configuration_with_invalid_ip(self, sw_src, sw_dst): with dummy_device() as nic: NETSETUP_SOURCE = {NET1_NAME: { 'nic': nic, 'switch': sw_src}} NETSETUP_TARGET = {NET1_NAME: { 'nic': nic, 'ipaddr': '300.300.300.300', # invalid 'netmask': IPv4_NETMASK, 'switch': sw_dst}} with adapter.setupNetworks(NETSETUP_SOURCE, {}, NOCHK): with pytest.raises(SetupNetworksError) as e: adapter.setupNetworks(NETSETUP_TARGET, {}, NOCHK) assert e.value.status == ne.ERR_BAD_ADDR adapter.assertNetwork(NET1_NAME, NETSETUP_SOURCE[NET1_NAME])
def test_switch_change_with_not_all_existing_networks_specified(self, sw_src, sw_dst): with dummy_device() as nic: NETSETUP_SOURCE = { NET1_NAME: {'nic': nic, 'switch': sw_src}, NET2_NAME: {'nic': nic, 'vlan': VLAN, 'switch': sw_src}} NETSETUP_TARGET = { NET1_NAME: {'nic': nic, 'switch': sw_dst}} with adapter.setupNetworks(NETSETUP_SOURCE, {}, NOCHK): with pytest.raises(SetupNetworksError) as e: adapter.setupNetworks(NETSETUP_TARGET, {}, NOCHK) assert e.value.status == ne.ERR_BAD_PARAMS adapter.assertNetwork(NET1_NAME, NETSETUP_SOURCE[NET1_NAME]) adapter.assertNetwork(NET2_NAME, NETSETUP_SOURCE[NET2_NAME])
def test_switch_change_setup_includes_a_network_removal(self, sw_src, sw_dst): with dummy_device() as nic: NETSETUP_SOURCE = { NET1_NAME: {'nic': nic, 'switch': sw_src}, NET2_NAME: {'nic': nic, 'vlan': VLAN, 'switch': sw_src}} NETSETUP_TARGET = { NET1_NAME: {'nic': nic, 'switch': sw_dst}, NET2_NAME: {'remove': True}} with adapter.setupNetworks(NETSETUP_SOURCE, {}, NOCHK): with pytest.raises(SetupNetworksError) as e: adapter.setupNetworks(NETSETUP_TARGET, {}, NOCHK) assert e.value.status == ne.ERR_BAD_PARAMS adapter.assertNetwork(NET1_NAME, NETSETUP_SOURCE[NET1_NAME]) adapter.assertNetwork(NET2_NAME, NETSETUP_SOURCE[NET2_NAME])
def test_add_vlaned_network_on_existing_bond(self, switch, bridged): if switch == 'ovs': pytest.xfail('Link is not stable when using OVS switch.') with dummy_device() as nic: NETBASE = {NETWORK1_NAME: {'bonding': BOND_NAME, 'bridged': False, 'switch': switch}} BONDBASE = {BOND_NAME: {'nics': [nic], 'switch': switch}} with adapter.setupNetworks(NETBASE, BONDBASE, NOCHK): with nftestlib.monitor_stable_link_state(BOND_NAME): NETVLAN = {NETWORK2_NAME: {'bonding': BOND_NAME, 'bridged': bridged, 'vlan': VLAN1, 'switch': switch}} with adapter.setupNetworks(NETVLAN, {}, NOCHK): adapter.assertNetwork(NETWORK1_NAME, NETBASE[NETWORK1_NAME]) adapter.assertNetwork(NETWORK2_NAME, NETVLAN[NETWORK2_NAME])
def test_rollback_target_configuration_failed_connectivity_check(self, sw_src, sw_dst): with dummy_device() as nic: NETSETUP_SOURCE = { NET1_NAME: { 'nic': nic, 'switch': sw_src}, NET2_NAME: { 'nic': nic, 'vlan': VLAN, 'switch': sw_src}} NETSETUP_TARGET = _change_switch_type(NETSETUP_SOURCE, sw_dst) with adapter.setupNetworks(NETSETUP_SOURCE, {}, NOCHK): with pytest.raises(SetupNetworksError) as e: adapter.setupNetworks( NETSETUP_TARGET, {}, {'connectivityCheck': True, 'connectivityTimeout': 0.1}) assert e.value.status == ne.ERR_LOST_CONNECTION adapter.assertNetwork(NET1_NAME, NETSETUP_SOURCE[NET1_NAME]) adapter.assertNetwork(NET2_NAME, NETSETUP_SOURCE[NET2_NAME])
def test_detach_used_bond_from_bridge(self, switch): with dummy_device() as nic: NETCREATE = { NETWORK1_NAME: {'bonding': BOND_NAME, 'switch': switch}, NETWORK2_NAME: {'bonding': BOND_NAME, 'vlan': VLAN2, 'switch': switch}} BONDCREATE = {BOND_NAME: {'nics': [nic], 'switch': switch}} with adapter.setupNetworks(NETCREATE, BONDCREATE, NOCHK): NETEDIT = { NETWORK1_NAME: {'bonding': BOND_NAME, 'vlan': VLAN1, 'switch': switch}} adapter.setupNetworks(NETEDIT, {}, NOCHK) # For the legacy bridge, add an explicit ifdown/up step. if switch == 'legacy': ifdown(BOND_NAME) ifup(BOND_NAME) # netinfo must be updated explicitly after non-API changes adapter.update_netinfo() adapter.assertBond(BOND_NAME, BONDCREATE[BOND_NAME])