aboutsummaryrefslogtreecommitdiffstats
path: root/os_net_config/tests/test_impl_ifcfg.py
diff options
context:
space:
mode:
Diffstat (limited to 'os_net_config/tests/test_impl_ifcfg.py')
-rw-r--r--os_net_config/tests/test_impl_ifcfg.py136
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,