Exemple #1
0
    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)
Exemple #2
0
    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())
Exemple #3
0
    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())
Exemple #4
0
    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']))
Exemple #5
0
    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])
Exemple #7
0
    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'])
Exemple #8
0
    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])
Exemple #9
0
    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())
Exemple #10
0
    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)
Exemple #11
0
    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])
Exemple #12
0
    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)
Exemple #13
0
 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)
Exemple #14
0
    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)
Exemple #15
0
    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})
Exemple #16
0
    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])
Exemple #17
0
 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])
Exemple #18
0
 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
Exemple #19
0
    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})
Exemple #20
0
 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])
Exemple #23
0
    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])
Exemple #24
0
    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]
                        )
Exemple #25
0
    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())
Exemple #26
0
    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)
Exemple #27
0
 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])
Exemple #28
0
 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)),
             )
Exemple #29
0
    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_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'
         )
Exemple #31
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
Exemple #32
0
    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'])
Exemple #33
0
    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])
Exemple #35
0
 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])
Exemple #36
0
    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)
Exemple #37
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
Exemple #38
0
    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
Exemple #39
0
    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})
Exemple #40
0
    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})
Exemple #41
0
    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])
Exemple #42
0
    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]
Exemple #43
0
    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])
Exemple #44
0
 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')
Exemple #45
0
 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)
Exemple #46
0
 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])
Exemple #47
0
 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
Exemple #48
0
    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)
Exemple #49
0
    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)
Exemple #50
0
    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'])
Exemple #51
0
 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])
Exemple #52
0
 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)
Exemple #53
0
    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])
Exemple #54
0
    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])
Exemple #55
0
    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])
Exemple #56
0
    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])
Exemple #57
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])
Exemple #58
0
    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])
Exemple #59
0
    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)