aboutsummaryrefslogtreecommitdiffstats
path: root/os_net_config/tests
diff options
context:
space:
mode:
Diffstat (limited to 'os_net_config/tests')
-rw-r--r--os_net_config/tests/test_impl_ifcfg.py36
-rw-r--r--os_net_config/tests/test_objects.py16
-rw-r--r--os_net_config/tests/test_utils.py130
3 files changed, 179 insertions, 3 deletions
diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py
index 366c408..d770415 100644
--- a/os_net_config/tests/test_impl_ifcfg.py
+++ b/os_net_config/tests/test_impl_ifcfg.py
@@ -34,6 +34,14 @@ NM_CONTROLLED=no
PEERDNS=no
"""
+_BASE_IFCFG_NETWORKMANAGER = """# This file is autogenerated by os-net-config
+DEVICE=em1
+ONBOOT=yes
+HOTPLUG=no
+NM_CONTROLLED=yes
+PEERDNS=no
+"""
+
_HOTPLUG = """# This file is autogenerated by os-net-config
DEVICE=em1
ONBOOT=yes
@@ -153,6 +161,19 @@ OVSBOOTPROTO=dhcp
OVSDHCPINTERFACES="em1"
"""
+_NM_CONTROLLED_INTERFACE = _BASE_IFCFG_NETWORKMANAGER + """MASTER=bond1
+SLAVE=yes
+BOOTPROTO=none
+"""
+
+_NM_CONTROLLED_BOND = """# This file is autogenerated by os-net-config
+DEVICE=bond1
+ONBOOT=yes
+HOTPLUG=no
+NM_CONTROLLED=yes
+PEERDNS=no
+"""
+
_OVS_BRIDGE_DHCP_STANDALONE = _OVS_BRIDGE_DHCP + \
"OVS_EXTRA=\"set bridge br-ctlplane fail_mode=standalone\"\n"
@@ -845,6 +866,20 @@ DNS2=5.6.7.8
"""
self.assertEqual(em1_config, self.get_interface_config('em1'))
+ def test_nm_controlled(self):
+ interface1 = objects.Interface('em1', nm_controlled=True)
+ interface2 = objects.Interface('em2', nm_controlled=True)
+ bond = objects.LinuxBond('bond1', nm_controlled=True,
+ members=[interface1, interface2])
+ self.provider.add_linux_bond(bond)
+ self.provider.add_interface(interface1)
+ self.provider.add_interface(interface2)
+
+ ifcfg_data = self.get_interface_config('em1')
+ self.assertEqual(_NM_CONTROLLED_INTERFACE, ifcfg_data)
+ bond_data = self.get_linux_bond_config('bond1')
+ self.assertEqual(_NM_CONTROLLED_BOND, bond_data)
+
def test_network_ovs_dpdk_bridge_and_port(self):
nic_mapping = {'nic1': 'eth0', 'nic2': 'eth1', 'nic3': 'eth2'}
self.stubbed_mapped_nics = nic_mapping
@@ -924,6 +959,7 @@ class TestIfcfgNetConfigApply(base.TestCase):
def setUp(self):
super(TestIfcfgNetConfigApply, self).setUp()
self.temp_ifcfg_file = tempfile.NamedTemporaryFile()
+ self.temp_bond_file = tempfile.NamedTemporaryFile()
self.temp_route_file = tempfile.NamedTemporaryFile()
self.temp_route6_file = tempfile.NamedTemporaryFile()
self.temp_bridge_file = tempfile.NamedTemporaryFile()
diff --git a/os_net_config/tests/test_objects.py b/os_net_config/tests/test_objects.py
index f5daf31..4ff87c8 100644
--- a/os_net_config/tests/test_objects.py
+++ b/os_net_config/tests/test_objects.py
@@ -988,3 +988,19 @@ class TestOvsDpdkBond(base.TestCase):
self.assertEqual("vfio-pci", dpdk_port1.driver)
iface2 = dpdk_port1.members[0]
self.assertEqual("eth2", iface2.name)
+
+
+class TestVppInterface(base.TestCase):
+ def test_vpp_interface_from_json(self):
+ data = """{
+"type": "vpp_interface",
+"name": "em1",
+"uio_driver": "uio_pci_generic",
+"options": "vlan-strip-offload off"
+}
+"""
+
+ vpp_interface = objects.object_from_json(json.loads(data))
+ self.assertEqual("em1", vpp_interface.name)
+ self.assertEqual("uio_pci_generic", vpp_interface.uio_driver)
+ self.assertEqual("vlan-strip-offload off", vpp_interface.options)
diff --git a/os_net_config/tests/test_utils.py b/os_net_config/tests/test_utils.py
index 1885cbb..5a8b6af 100644
--- a/os_net_config/tests/test_utils.py
+++ b/os_net_config/tests/test_utils.py
@@ -21,6 +21,7 @@ import shutil
import tempfile
import yaml
+from os_net_config import objects
from os_net_config.tests import base
from os_net_config import utils
@@ -38,6 +39,33 @@ supports-register-dump: yes
supports-priv-flags: no
'''
+_VPPCTL_OUTPUT = '''
+ Name Idx State Counter Count
+GigabitEthernet0/9/0 1 down
+local0 0 down
+
+'''
+
+_INITIAL_VPP_CONFIG = '''
+unix {
+ nodaemon
+ log /tmp/vpp.log
+ full-coredump
+}
+
+
+api-trace {
+ on
+}
+
+api-segment {
+ gid vpp
+}
+
+dpdk {
+}
+'''
+
class TestUtils(base.TestCase):
@@ -83,7 +111,7 @@ class TestUtils(base.TestCase):
out = _PCI_OUTPUT
return out, None
self.stubs.Set(processutils, 'execute', test_execute)
- pci = utils._get_pci_address('nic2', False)
+ pci = utils.get_pci_address('nic2', False)
self.assertEqual('0000:00:19.0', pci)
def test_get_pci_address_exception(self):
@@ -91,7 +119,7 @@ class TestUtils(base.TestCase):
if 'ethtool' in name:
raise processutils.ProcessExecutionError
self.stubs.Set(processutils, 'execute', test_execute)
- pci = utils._get_pci_address('nic2', False)
+ pci = utils.get_pci_address('nic2', False)
self.assertEqual(None, pci)
def test_get_pci_address_error(self):
@@ -99,7 +127,7 @@ class TestUtils(base.TestCase):
if 'ethtool' in name:
return None, 'Error'
self.stubs.Set(processutils, 'execute', test_execute)
- pci = utils._get_pci_address('nic2', False)
+ pci = utils.get_pci_address('nic2', False)
self.assertEqual(None, pci)
def test_bind_dpdk_interfaces(self):
@@ -241,3 +269,99 @@ class TestUtils(base.TestCase):
self.assertEqual(utils._is_active_nic('enp129s2'), False)
shutil.rmtree(tmpdir)
+
+ def test_get_vpp_interface_name(self):
+ def test_execute(name, dummy1, dummy2=None, dummy3=None):
+ if 'systemctl' in name:
+ return None, None
+ if 'vppctl' in name:
+ return _VPPCTL_OUTPUT, None
+
+ self.stubs.Set(processutils, 'execute', test_execute)
+
+ self.assertEqual('GigabitEthernet0/9/0',
+ utils._get_vpp_interface_name('0000:00:09.0'))
+ self.assertIsNone(utils._get_vpp_interface_name(None))
+ self.assertIsNone(utils._get_vpp_interface_name('0000:01:09.0'))
+ self.assertRaises(utils.VppException,
+ utils._get_vpp_interface_name, '0000:09.0')
+
+ def test_generate_vpp_config(self):
+ tmpdir = tempfile.mkdtemp()
+ config_path = os.path.join(tmpdir, 'startup.conf')
+ with open(config_path, 'w') as f:
+ f.write(_INITIAL_VPP_CONFIG)
+ vpp_exec_path = os.path.join(tmpdir, 'vpp-exec')
+ utils._VPP_EXEC_FILE = vpp_exec_path
+
+ int1 = objects.VppInterface('em1', options="vlan-strip-offload off")
+ int1.pci_dev = '0000:00:09.0'
+ int2 = objects.VppInterface('em2')
+ int2.pci_dev = '0000:00:09.1'
+ interfaces = [int1, int2]
+ expected_config = '''
+unix {
+ exec %s
+ nodaemon
+ log /tmp/vpp.log
+ full-coredump
+}
+
+
+api-trace {
+ on
+}
+
+api-segment {
+ gid vpp
+}
+
+dpdk {
+ dev 0000:00:09.1
+ uio-driver vfio-pci
+ dev 0000:00:09.0 {vlan-strip-offload off}
+
+}
+''' % vpp_exec_path
+ self.assertEqual(expected_config,
+ utils.generate_vpp_config(config_path, interfaces))
+
+ def test_update_vpp_mapping(self):
+ def test_get_dpdk_map():
+ return [{'name': 'eth1', 'pci_address': '0000:00:09.0',
+ 'mac_address': '01:02:03:04:05:06',
+ 'driver': 'vfio-pci'}]
+
+ self.stubs.Set(utils, '_get_dpdk_map', test_get_dpdk_map)
+
+ def test_execute(name, dummy1, dummy2=None, dummy3=None):
+ return None, None
+ self.stubs.Set(processutils, 'execute', test_execute)
+
+ def test_get_vpp_interface_name(pci_dev):
+ return 'GigabitEthernet0/9/0'
+
+ self.stubs.Set(utils, '_get_vpp_interface_name',
+ test_get_vpp_interface_name)
+
+ int1 = objects.VppInterface('eth1', options="vlan-strip-offload off")
+ int1.pci_dev = '0000:00:09.0'
+ int1.hwaddr = '01:02:03:04:05:06'
+ int2 = objects.VppInterface('eth2')
+ int2.pci_dev = '0000:00:09.1'
+ int2.hwaddr = '01:02:03:04:05:07'
+ interfaces = [int1, int2]
+
+ utils.update_vpp_mapping(interfaces)
+
+ contents = utils.get_file_data(utils._DPDK_MAPPING_FILE)
+
+ dpdk_test = [{'name': 'eth1', 'pci_address': '0000:00:09.0',
+ 'mac_address': '01:02:03:04:05:06',
+ 'driver': 'vfio-pci'},
+ {'name': 'eth2', 'pci_address': '0000:00:09.1',
+ 'mac_address': '01:02:03:04:05:07',
+ 'driver': 'vfio-pci'}]
+ dpdk_map = yaml.load(contents) if contents else []
+ self.assertEqual(2, len(dpdk_map))
+ self.assertListEqual(dpdk_test, dpdk_map)