diff options
Diffstat (limited to 'os_net_config/tests/test_impl_ifcfg.py')
-rw-r--r-- | os_net_config/tests/test_impl_ifcfg.py | 136 |
1 files changed, 128 insertions, 8 deletions
diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py index 8a60a8d..d68a96e 100644 --- a/os_net_config/tests/test_impl_ifcfg.py +++ b/os_net_config/tests/test_impl_ifcfg.py @@ -30,6 +30,7 @@ DEVICE=em1 ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no """ _NO_IP = _BASE_IFCFG + "BOOTPROTO=none\n" @@ -39,11 +40,20 @@ IPADDR=192.168.1.2 NETMASK=255.255.255.0 """ +_V4_V6_IFCFG = _BASE_IFCFG + """IPV6INIT=yes +BOOTPROTO=static +IPADDR=192.168.1.2 +NETMASK=255.255.255.0 +IPV6_AUTOCONF=no +IPV6ADDR=2001:abc:a::/64 +""" + _IFCFG_VLAN = """# This file is autogenerated by os-net-config DEVICE=em1.120 ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no VLAN=yes BOOTPROTO=none """ @@ -75,6 +85,11 @@ _ROUTES = """default via 192.168.1.1 dev em1 172.19.0.0/24 via 192.168.1.1 dev em1 """ +_ROUTES_V6 = """default via 2001:db8::1 dev em1 +2001:db8:dead:beef:cafe::/56 via fd00:fd00:2000::1 dev em1 +""" + + _OVS_INTERFACE = _BASE_IFCFG + """DEVICETYPE=ovs TYPE=OVSPort OVS_BRIDGE=br-ctlplane @@ -107,6 +122,7 @@ DEVICE=br-ctlplane ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no DEVICETYPE=ovs TYPE=OVSBridge BOOTPROTO=static @@ -119,6 +135,7 @@ DEVICE=br-ctlplane ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no TYPE=Bridge DELAY=0 BOOTPROTO=static @@ -140,6 +157,7 @@ DEVICE=vlan5 ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no VLAN=yes PHYSDEV=em1 """ @@ -150,6 +168,7 @@ DEVICE=vlan5 ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no """ _VLAN_NO_IP = _BASE_VLAN + "BOOTPROTO=none\n" @@ -165,6 +184,11 @@ OVS_OPTIONS="tag=5" BOOTPROTO=none """ +_VLAN_LINUX_BRIDGE = _BASE_VLAN_OVS + """VLAN=yes +PHYSDEV=em1 +BRIDGE=br-ctlplane +BOOTPROTO=none +""" _OVS_BOND_DHCP = """# This file is autogenerated by os-net-config DEVICE=bond0 @@ -177,7 +201,6 @@ OVSBOOTPROTO=dhcp BOND_IFACES="em1 em2" """ - _LINUX_BOND_DHCP = """# This file is autogenerated by os-net-config DEVICE=bond0 ONBOOT=yes @@ -187,6 +210,42 @@ BOOTPROTO=dhcp """ +_LINUX_BOND_INTERFACE = _BASE_IFCFG + """MASTER=bond0 +SLAVE=yes +BOOTPROTO=none +""" + + +_IVS_UPLINK = """# This file is autogenerated by os-net-config +DEVICE=em1 +ONBOOT=yes +HOTPLUG=no +NM_CONTROLLED=no +PEERDNS=no +DEVICETYPE=ivs +IVS_BRIDGE=ivs +BOOTPROTO=none +""" + +_IVS_INTERFACE = """# This file is autogenerated by os-net-config +DEVICE=storage5 +ONBOOT=yes +HOTPLUG=no +NM_CONTROLLED=no +PEERDNS=no +TYPE=IVSIntPort +DEVICETYPE=ivs +IVS_BRIDGE=ivs +MTU=1500 +BOOTPROTO=static +IPADDR=172.16.2.7 +NETMASK=255.255.255.0 +""" + +_IVS_CONFIG = ('DAEMON_ARGS=\"--hitless --certificate /etc/ivs ' + '--inband-vlan 4092 -u em1 --internal-port=storage5\"') + + class TestIfcfgNetConfig(base.TestCase): def setUp(self): @@ -200,9 +259,18 @@ class TestIfcfgNetConfig(base.TestCase): def get_interface_config(self, name='em1'): return self.provider.interface_data[name] + def get_vlan_config(self, name='vlan1'): + return self.provider.vlan_data[name] + + def get_linux_bond_config(self, name='bond0'): + return self.provider.linuxbond_data[name] + def get_route_config(self, name='em1'): return self.provider.route_data.get(name, '') + def get_route6_config(self, name='em1'): + return self.provider.route6_data.get(name, '') + def test_add_base_interface(self): interface = objects.Interface('em1') self.provider.add_interface(interface) @@ -276,6 +344,20 @@ class TestIfcfgNetConfig(base.TestCase): self.assertEqual(_V4_IFCFG, self.get_interface_config()) self.assertEqual(_ROUTES, self.get_route_config()) + def test_network_with_ipv6_routes(self): + route1 = objects.Route('192.168.1.1', default=True) + route2 = objects.Route('192.168.1.1', '172.19.0.0/24') + route3 = objects.Route('2001:db8::1', default=True) + route4 = objects.Route('fd00:fd00:2000::1', + '2001:db8:dead:beef:cafe::/56') + v4_addr = objects.Address('192.168.1.2/24') + v6_addr = objects.Address('2001:abc:a::/64') + interface = objects.Interface('em1', addresses=[v4_addr, v6_addr], + routes=[route1, route2, route3, route4]) + self.provider.add_interface(interface) + self.assertEqual(_V4_V6_IFCFG, self.get_interface_config()) + self.assertEqual(_ROUTES_V6, self.get_route6_config()) + def test_network_ovs_bridge_with_dhcp(self): interface = objects.Interface('em1') bridge = objects.OvsBridge('br-ctlplane', use_dhcp=True, @@ -348,22 +430,38 @@ class TestIfcfgNetConfig(base.TestCase): self.assertEqual(_OVS_BRIDGE_DHCP_OVS_EXTRA, self.provider.bridge_data['br-ctlplane']) + def test_network_ivs_with_uplink_and_interface(self): + interface = objects.Interface('em1') + v4_addr = objects.Address('172.16.2.7/24') + ivs_interface = objects.IvsInterface(vlan_id=5, + name='storage', + addresses=[v4_addr]) + bridge = objects.IvsBridge(members=[interface, ivs_interface]) + self.provider.add_interface(interface) + self.provider.add_ivs_interface(ivs_interface) + self.provider.add_bridge(bridge) + self.assertEqual(_IVS_UPLINK, self.get_interface_config()) + self.assertEqual(_IVS_INTERFACE, + self.provider.ivsinterface_data[ivs_interface.name]) + data = self.provider.generate_ivs_config(['em1'], ['storage5']) + self.assertEqual(_IVS_CONFIG, data) + def test_add_vlan(self): vlan = objects.Vlan('em1', 5) self.provider.add_vlan(vlan) - self.assertEqual(_VLAN_NO_IP, self.get_interface_config('vlan5')) + self.assertEqual(_VLAN_NO_IP, self.get_vlan_config('vlan5')) def test_add_vlan_ovs(self): vlan = objects.Vlan('em1', 5) vlan.ovs_port = True self.provider.add_vlan(vlan) - self.assertEqual(_VLAN_OVS, self.get_interface_config('vlan5')) + self.assertEqual(_VLAN_OVS, self.get_vlan_config('vlan5')) def test_add_vlan_mtu_1500(self): vlan = objects.Vlan('em1', 5, mtu=1500) self.provider.add_vlan(vlan) expected = _VLAN_NO_IP + 'MTU=1500\n' - self.assertEqual(expected, self.get_interface_config('vlan5')) + self.assertEqual(expected, self.get_vlan_config('vlan5')) def test_add_ovs_bridge_with_vlan(self): vlan = objects.Vlan('em1', 5) @@ -371,7 +469,15 @@ class TestIfcfgNetConfig(base.TestCase): members=[vlan]) self.provider.add_vlan(vlan) self.provider.add_bridge(bridge) - self.assertEqual(_VLAN_OVS_BRIDGE, self.get_interface_config('vlan5')) + self.assertEqual(_VLAN_OVS_BRIDGE, self.get_vlan_config('vlan5')) + + def test_add_linux_bridge_with_vlan(self): + vlan = objects.Vlan('em1', 5) + bridge = objects.LinuxBridge('br-ctlplane', use_dhcp=True, + members=[vlan]) + self.provider.add_vlan(vlan) + self.provider.add_bridge(bridge) + self.assertEqual(_VLAN_LINUX_BRIDGE, self.get_vlan_config('vlan5')) def test_ovs_bond(self): interface1 = objects.Interface('em1') @@ -388,6 +494,7 @@ DEVICE=em2 ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no BOOTPROTO=none """ self.assertEqual(em2_config, self.get_interface_config('em2')) @@ -400,8 +507,12 @@ BOOTPROTO=none bond = objects.LinuxBond('bond0', use_dhcp=True, members=[interface1, interface2]) self.provider.add_linux_bond(bond) + self.provider.add_interface(interface1) + self.provider.add_interface(interface2) self.assertEqual(_LINUX_BOND_DHCP, - self.get_interface_config('bond0')) + self.get_linux_bond_config('bond0')) + self.assertEqual(_LINUX_BOND_INTERFACE, + self.get_interface_config('em1')) def test_interface_defroute(self): interface1 = objects.Interface('em1') @@ -413,6 +524,7 @@ DEVICE=em1 ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no BOOTPROTO=none """ em2_config = """# This file is autogenerated by os-net-config @@ -420,6 +532,7 @@ DEVICE=em2 ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no BOOTPROTO=none DEFROUTE=no """ @@ -434,6 +547,7 @@ DEVICE=em1 ONBOOT=yes HOTPLUG=no NM_CONTROLLED=no +PEERDNS=no BOOTPROTO=none DHCLIENTARGS=--foobar """ @@ -474,6 +588,7 @@ class TestIfcfgNetConfigApply(base.TestCase): super(TestIfcfgNetConfigApply, self).setUp() self.temp_ifcfg_file = tempfile.NamedTemporaryFile() self.temp_route_file = tempfile.NamedTemporaryFile() + self.temp_route6_file = tempfile.NamedTemporaryFile() self.temp_bridge_file = tempfile.NamedTemporaryFile() self.temp_cleanup_file = tempfile.NamedTemporaryFile(delete=False) self.ifup_interface_names = [] @@ -487,6 +602,10 @@ class TestIfcfgNetConfigApply(base.TestCase): return self.temp_route_file.name self.stubs.Set(impl_ifcfg, 'route_config_path', test_routes_path) + def test_routes6_path(name): + return self.temp_route6_file.name + self.stubs.Set(impl_ifcfg, 'route6_config_path', test_routes6_path) + def test_bridge_path(name): return self.temp_bridge_file.name self.stubs.Set(impl_ifcfg, 'bridge_config_path', test_bridge_path) @@ -508,6 +627,7 @@ class TestIfcfgNetConfigApply(base.TestCase): def tearDown(self): self.temp_ifcfg_file.close() self.temp_route_file.close() + self.temp_route6_file.close() self.temp_bridge_file.close() if os.path.exists(self.temp_cleanup_file.name): self.temp_cleanup_file.close() @@ -553,7 +673,7 @@ class TestIfcfgNetConfigApply(base.TestCase): self.assertEqual([], self.ifup_interface_names) def test_bond_active_slave(self): - #setup and apply a bond + # setup and apply a bond interface1 = objects.Interface('em1') interface2 = objects.Interface('em2', primary=True) bond = objects.OvsBond('bond1', use_dhcp=True, @@ -566,7 +686,7 @@ class TestIfcfgNetConfigApply(base.TestCase): self.assertIn(ovs_appctl_cmds, self.ovs_appctl_cmds) def test_bond_active_ordering(self): - #setup and apply a bond + # setup and apply a bond interface1 = objects.Interface('em1') interface2 = objects.Interface('em2') bond = objects.OvsBond('bond1', use_dhcp=True, |