From 9108fcb7bb1fa10ffce2fd787278802ee3f3354c Mon Sep 17 00:00:00 2001 From: Saravanan KR Date: Sat, 30 Jul 2016 15:22:57 +0530 Subject: Add support for OVS DPDK Bond Add functionality to os-net-config to allow DPDK bonding of interfaces, and implement support for parameters to be passed by TripleO Heat Templates. Implements: blueprint tripleo-ovs-dpdk Depends-On: Id4a23ced28b92a642c180a35c55080e5f4e2e05d Change-Id: If1c91402d2d393140dc1b4a678e68a1bcdbe81e4 --- os_net_config/tests/test_cli.py | 17 +++++++++++++ os_net_config/tests/test_impl_ifcfg.py | 24 ++++++++++++++++++ os_net_config/tests/test_objects.py | 46 ++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) (limited to 'os_net_config/tests') diff --git a/os_net_config/tests/test_cli.py b/os_net_config/tests/test_cli.py index 939b12e..c5c825f 100644 --- a/os_net_config/tests/test_cli.py +++ b/os_net_config/tests/test_cli.py @@ -147,6 +147,23 @@ class TestCli(base.TestCase): '-c %s --detailed-exit-codes' % interface_yaml, exitcodes=(0,)) + def test_ovs_dpdk_bond_noop_output(self): + ivs_yaml = os.path.join(SAMPLE_BASE, 'ovs_dpdk_bond.yaml') + ivs_json = os.path.join(SAMPLE_BASE, 'ovs_dpdk_bond.json') + stdout_yaml, stderr = self.run_cli('ARG0 --provider=ifcfg --noop ' + '-c %s' % ivs_yaml) + self.assertEqual('', stderr) + stdout_json, stderr = self.run_cli('ARG0 --provider=ifcfg --noop ' + '-c %s' % ivs_json) + self.assertEqual('', stderr) + sanity_devices = ['DEVICE=br-link', + 'TYPE=OVSUserBridge', + 'DEVICE=dpdkbond0', + 'TYPE=OVSDPDKBond'] + for dev in sanity_devices: + self.assertIn(dev, stdout_yaml) + self.assertEqual(stdout_yaml, stdout_json) + def test_nfvswitch_noop_output(self): nfvswitch_yaml = os.path.join(SAMPLE_BASE, 'nfvswitch.yaml') nfvswitch_json = os.path.join(SAMPLE_BASE, 'nfvswitch.json') diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py index ad27d83..74dd1f9 100644 --- a/os_net_config/tests/test_impl_ifcfg.py +++ b/os_net_config/tests/test_impl_ifcfg.py @@ -788,6 +788,30 @@ OVS_BRIDGE=br-link self.provider.bridge_data['br-link']) self.assertEqual(dpdk0_config, self.get_interface_config('dpdk0')) + def test_network_ovs_dpdk_bond(self): + iface0 = objects.Interface(name='eth1') + dpdk0 = objects.OvsDpdkPort(name='dpdk0', members=[iface0]) + iface1 = objects.Interface(name='eth2') + dpdk1 = objects.OvsDpdkPort(name='dpdk1', members=[iface1]) + bond = objects.OvsDpdkBond('dpdkbond0', members=[dpdk0, dpdk1]) + bridge = objects.OvsUserBridge('br-link', members=[bond]) + self.provider.add_bond(bond) + self.provider.add_bridge(bridge) + + dpdk_bond_config = """# This file is autogenerated by os-net-config +DEVICE=dpdkbond0 +ONBOOT=yes +HOTPLUG=no +NM_CONTROLLED=no +PEERDNS=no +DEVICETYPE=ovs +TYPE=OVSDPDKBond +OVS_BRIDGE=br-link +BOND_IFACES="dpdk0 dpdk1" +""" + self.assertEqual(dpdk_bond_config, + self.get_interface_config('dpdkbond0')) + class TestIfcfgNetConfigApply(base.TestCase): diff --git a/os_net_config/tests/test_objects.py b/os_net_config/tests/test_objects.py index 7e8441c..92d43b9 100644 --- a/os_net_config/tests/test_objects.py +++ b/os_net_config/tests/test_objects.py @@ -830,3 +830,49 @@ class TestNicMapping(base.TestCase): expected = {} # This only emits a warning, so it should still work self.assertEqual(expected, objects._mapped_nics()) + + +class TestOvsDpdkBond(base.TestCase): + + def test_from_json_dhcp(self): + data = """{ +"type": "ovs_dpdk_bond", +"name": "dpdkbond0", +"use_dhcp": true, +"members": [ + { + "type": "ovs_dpdk_port", + "name": "dpdk0", + "members": [ + { + "type": "interface", + "name": "eth1" + } + ] + }, + { + "type": "ovs_dpdk_port", + "name": "dpdk1", + "members": [ + { + "type": "interface", + "name": "eth2" + } + ] + } +] +} +""" + bond = objects.object_from_json(json.loads(data)) + self.assertEqual("dpdkbond0", bond.name) + self.assertTrue(bond.use_dhcp) + dpdk_port0 = bond.members[0] + self.assertEqual("dpdk0", dpdk_port0.name) + self.assertEqual("vfio-pci", dpdk_port0.driver) + iface1 = dpdk_port0.members[0] + self.assertEqual("eth1", iface1.name) + dpdk_port1 = bond.members[1] + self.assertEqual("dpdk1", dpdk_port1.name) + self.assertEqual("vfio-pci", dpdk_port1.driver) + iface2 = dpdk_port1.members[0] + self.assertEqual("eth2", iface2.name) -- cgit 1.2.3-korg