aboutsummaryrefslogtreecommitdiffstats
path: root/os_net_config/tests/test_objects.py
diff options
context:
space:
mode:
authorBob Fournier <bfournie@redhat.com>2017-04-04 13:58:43 -0400
committerBob Fournier <bfournie@redhat.com>2017-04-10 10:05:42 -0400
commitb905e0d803e55deee9620a24de4b87c3429b43ab (patch)
tree74a799122f66f3e072bb9a2c934e60718b58aecd /os_net_config/tests/test_objects.py
parent1b83afb07ddec59845ea3ca47fb9b20eefba1c5d (diff)
os_net_config should map nics that are down if nic is in mapping file
Currently os-net_config will map nics from a user-supplied mapping file only if the nic is active (operstate = up). This can cause problems if a nic is in a bond and one of the bond's nics has no carrier. This fix will map the nic from the mapping file if the nic is defined on the system, regardless of the operstate status. The fix implements a new function to return a list of available nics (no check of operstate) for use if a mapping file is supplied. The list of active nics must still be used in the default case when numbering nics (no mapping file supplied). There is also some cleanup to check if a user-supplied mac is in the mapping file before attempting to convert the mac to a nic. Change-Id: Ia5d8c8b49b7ac0b51ee42a754f06e5e53587a5f6 Closes-Bug: 1679787
Diffstat (limited to 'os_net_config/tests/test_objects.py')
-rw-r--r--os_net_config/tests/test_objects.py39
1 files changed, 36 insertions, 3 deletions
diff --git a/os_net_config/tests/test_objects.py b/os_net_config/tests/test_objects.py
index f5daf31..6f18d79 100644
--- a/os_net_config/tests/test_objects.py
+++ b/os_net_config/tests/test_objects.py
@@ -873,6 +873,12 @@ class TestNicMapping(base.TestCase):
return nics
self.stubs.Set(utils, 'ordered_active_nics', dummy_ordered_active_nics)
+ def _stub_available_nics(self, nics):
+ def dummy_ordered_available_nics():
+ return nics
+ self.stubs.Set(utils, 'ordered_available_nics',
+ dummy_ordered_available_nics)
+
def test_mapped_nics_default(self):
self._stub_active_nics(['em1', 'em2'])
expected = {'nic1': 'em1', 'nic2': 'em2'}
@@ -880,43 +886,56 @@ class TestNicMapping(base.TestCase):
def test_mapped_nics_mapped(self):
self._stub_active_nics(['em1', 'em2'])
+ self._stub_available_nics(['em1', 'em2'])
mapping = {'nic1': 'em2', 'nic2': 'em1'}
expected = {'nic1': 'em2', 'nic2': 'em1'}
self.assertEqual(expected, objects._mapped_nics(nic_mapping=mapping))
def test_mapped_nics_mapped_partial(self):
self._stub_active_nics(['em1', 'em2', 'em3', 'em4'])
+ self._stub_available_nics(['em1', 'em2', 'em3', 'em4'])
mapping = {'nic1': 'em2', 'nic2': 'em1'}
expected = {'nic1': 'em2', 'nic2': 'em1', 'nic3': 'em3', 'nic4': 'em4'}
self.assertEqual(expected, objects._mapped_nics(nic_mapping=mapping))
def test_mapped_nics_mapped_partial_reordered(self):
self._stub_active_nics(['em1', 'em2', 'em3', 'em4'])
+ self._stub_available_nics(['em1', 'em2', 'em3', 'em4'])
mapping = {'nic1': 'em1', 'nic2': 'em3'}
expected = {'nic1': 'em1', 'nic2': 'em3', 'nic4': 'em4'}
self.assertEqual(expected, objects._mapped_nics(nic_mapping=mapping))
def test_mapped_nics_mapped_unnumbered(self):
self._stub_active_nics(['em1', 'em2', 'em3', 'em4'])
+ self._stub_available_nics(['em1', 'em2', 'em3', 'em4'])
mapping = {'John': 'em1', 'Paul': 'em2', 'George': 'em3'}
expected = {'John': 'em1', 'Paul': 'em2', 'George': 'em3',
'nic4': 'em4'}
self.assertEqual(expected, objects._mapped_nics(nic_mapping=mapping))
def test_mapped_nics_map_error_notactive(self):
- self._stub_active_nics(['em1', 'em2'])
- mapping = {'nic1': 'em3', 'nic2': 'em1'}
- expected = {'nic2': 'em1'}
+ self._stub_active_nics(['em2'])
+ self._stub_available_nics(['em1', 'em2', 'em3'])
+ mapping = {'nic2': 'em1'}
+ expected = {'nic1': 'em2', 'nic2': 'em1'}
self.assertEqual(expected, objects._mapped_nics(nic_mapping=mapping))
def test_mapped_nics_map_error_duplicate(self):
self._stub_active_nics(['em1', 'em2'])
+ self._stub_available_nics(['em1', 'em2'])
mapping = {'nic1': 'em1', 'nic2': 'em1'}
err = self.assertRaises(objects.InvalidConfigException,
objects._mapped_nics, nic_mapping=mapping)
expected = 'em1 already mapped, check mapping file for duplicates'
self.assertIn(expected, six.text_type(err))
+ def test_mapped_nics_map_invalid_nic(self):
+ self._stub_active_nics(['em1'])
+ self._stub_available_nics(['em1', 'em2'])
+ mapping = {'nic1': 'em1', 'nic2': 'foo'}
+ expected = {'nic1': 'em1'}
+ self.assertEqual(expected, objects._mapped_nics(nic_mapping=mapping))
+
def test_mapped_nics_map_mac(self):
def dummy_interface_mac(name):
mac_map = {'em1': '12:34:56:78:9a:bc',
@@ -924,10 +943,24 @@ class TestNicMapping(base.TestCase):
return mac_map[name]
self.stubs.Set(utils, 'interface_mac', dummy_interface_mac)
self._stub_active_nics(['em1', 'em2'])
+ self._stub_available_nics(['em1', 'em2'])
mapping = {'nic1': '12:34:56:de:f0:12', 'nic2': '12:34:56:78:9a:bc'}
expected = {'nic1': 'em2', 'nic2': 'em1'}
self.assertEqual(expected, objects._mapped_nics(nic_mapping=mapping))
+ def test_mapped_nics_map_invalid_mac(self):
+ def dummy_interface_mac(name):
+ mac_map = {'em1': '12:34:56:78:9a:bc',
+ 'em2': '12:34:56:de:f0:12'}
+ return mac_map[name]
+
+ self.stubs.Set(utils, 'interface_mac', dummy_interface_mac)
+ self._stub_active_nics(['em1', 'em2'])
+ self._stub_available_nics(['em1', 'em2'])
+ mapping = {'nic1': '12:34:56:de:f0:12', 'nic2': 'aa:bb:cc:dd:ee:ff'}
+ expected = {'nic1': 'em2'}
+ self.assertEqual(expected, objects._mapped_nics(nic_mapping=mapping))
+
def test_mapped_nics_no_active(self):
self._stub_active_nics([])
expected = {}