Revert "Add ability to configure allowed vlan ranges in deploy configuration"
[apex.git] / tests / test_apex_network_settings.py
index 45c26ed..955c0cf 100644 (file)
@@ -7,6 +7,12 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
+from apex.common.constants import (
+    EXTERNAL_NETWORK,
+    STORAGE_NETWORK,
+    ADMIN_NETWORK,
+)
+
 from apex.network_settings import (
     NetworkSettings,
     NetworkSettingsException,
@@ -18,6 +24,8 @@ from nose.tools import (
     assert_raises
 )
 
+files_dir = '../config/network/'
+
 
 class TestNetworkSettings(object):
     @classmethod
@@ -35,48 +43,118 @@ class TestNetworkSettings(object):
         """This method is run once after _each_ test method is executed"""
 
     def test_init(self):
-        NetworkSettings('../config/network/network_settings.yaml', True)
+        assert_is_instance(
+            NetworkSettings(files_dir+'network_settings.yaml'),
+            NetworkSettings)
+
+    def test_init_vlans(self):
+        assert_is_instance(
+            NetworkSettings(files_dir+'network_settings_vlans.yaml'),
+            NetworkSettings)
+
+# TODO, v6 test is stuck
+    # def test_init_v6(self):
+    #     assert_is_instance(
+    #         NetworkSettings(files_dir+'network_settings_v6.yaml', True),
+    #         NetworkSettings)
+
+    def test_init_admin_disabled_or_missing(self):
+        ns = NetworkSettings(files_dir+'network_settings.yaml')
+        # remove admin, apex section will re-add it
+        ns['networks'].pop('admin', None)
+        assert_raises(NetworkSettingsException, NetworkSettings, ns)
+        # remove admin and apex
+        ns.pop('apex', None)
+        ns['networks'].pop('admin', None)
+        assert_raises(NetworkSettingsException, NetworkSettings, ns)
+
+    def test_init_collapse_storage(self):
+        ns = NetworkSettings(files_dir+'network_settings.yaml')
+        # remove storage
+        ns['networks'].pop('storage', None)
+        assert_is_instance(NetworkSettings(ns), NetworkSettings)
+
+    def test_init_missing_dns_domain(self):
+        ns = NetworkSettings(files_dir+'network_settings.yaml')
+        # remove storage
+        ns.pop('dns-domain', None)
+        assert_is_instance(NetworkSettings(ns), NetworkSettings)
 
     def test_dump_bash(self):
-        ns = NetworkSettings('../config/network/network_settings.yaml', True)
+        ns = NetworkSettings('../config/network/network_settings.yaml')
         assert_equal(ns.dump_bash(), None)
         assert_equal(ns.dump_bash(path='/dev/null'), None)
 
     def test_get_network_settings(self):
-        ns = NetworkSettings('../config/network/network_settings.yaml', True)
-        assert_is_instance(ns.get_network_settings(), dict)
+        ns = NetworkSettings('../config/network/network_settings.yaml')
+        assert_is_instance(ns, NetworkSettings)
         for role in ['controller', 'compute']:
             nic_index = 1
-            for network in ['admin_network', 'private_network',
-                            'public_network', 'storage_network']:
-                nic = 'nic' + str(nic_index)
-                assert_equal(ns.nics[role][network], nic)
-                nic_index += 1
-
-    def test_get_network_settings_unspecified_nics(self):
-        ns = NetworkSettings(
-            '../tests/config/network_settings_nics_not_specified.yaml',
-            True)
-        assert_is_instance(ns.get_network_settings(), dict)
-        for role in ['controller', 'compute']:
-            nic_index = 1
-            for network in ['admin_network', 'private_network',
-                            'public_network', 'storage_network']:
+            print(ns.nics)
+            for network in ns.enabled_network_list:
                 nic = 'nic' + str(nic_index)
                 assert_equal(ns.nics[role][network], nic)
                 nic_index += 1
 
     def test_get_enabled_networks(self):
-        ns = NetworkSettings('../config/network/network_settings.yaml', True)
-        assert_is_instance(ns.get_enabled_networks(), list)
-
-    def test_negative_network_settings(self):
-        assert_raises(NetworkSettingsException, NetworkSettings,
-                      '../tests/config/network_settings_duplicate_nic.yaml',
-                      True)
-        assert_raises(NetworkSettingsException, NetworkSettings,
-                      '../tests/config/network_settings_nic1_reserved.yaml',
-                      True)
-        assert_raises(NetworkSettingsException, NetworkSettings,
-                      '../tests/config/network_settings_missing_required_nic'
-                      '.yaml', True)
+        ns = NetworkSettings('../config/network/network_settings.yaml')
+        assert_is_instance(ns.enabled_network_list, list)
+
+    def test_invalid_nic_members(self):
+        ns = NetworkSettings(files_dir+'network_settings.yaml')
+        storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
+        # set duplicate nic
+        storage_net_nicmap['compute']['members'][0] = 'nic1'
+        assert_raises(NetworkSettingsException, NetworkSettings, ns)
+        # remove nic members
+        storage_net_nicmap['compute']['members'] = []
+        assert_raises(NetworkSettingsException, NetworkSettings, ns)
+
+    def test_missing_vlan(self):
+        ns = NetworkSettings(files_dir+'network_settings.yaml')
+        storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
+        # remove vlan from storage net
+        storage_net_nicmap['compute'].pop('vlan', None)
+        assert_is_instance(NetworkSettings(ns), NetworkSettings)
+
+# TODO
+# need to manipulate interfaces some how
+# maybe for ip_utils to return something to pass this
+#    def test_admin_auto_detect(self):
+#        ns = NetworkSettings(files_dir+'network_settings.yaml')
+#        # remove cidr to force autodetection
+#        ns['networks'][ADMIN_NETWORK].pop('cidr', None)
+#        assert_is_instance(NetworkSettings(ns), NetworkSettings)
+
+    def test_admin_fail_auto_detect(self):
+        ns = NetworkSettings(files_dir+'network_settings.yaml')
+        # remove cidr and installer_vm to fail autodetect
+        ns['networks'][ADMIN_NETWORK].pop('cidr', None)
+        ns['networks'][ADMIN_NETWORK].pop('installer_vm', None)
+        assert_raises(NetworkSettingsException, NetworkSettings, ns)
+
+    def test_exception(self):
+        e = NetworkSettingsException("test")
+        print(e)
+        assert_is_instance(e, NetworkSettingsException)
+
+    def test_config_ip(self):
+        ns = NetworkSettings(files_dir+'network_settings.yaml')
+        # set the provisioner ip to None to force _gen_ip to generate one
+        ns['networks'][ADMIN_NETWORK]['installer_vm']['ip'] = None
+        ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'] = None
+        # Now rebuild network settings object and check for repopulated values
+        ns = NetworkSettings(ns)
+        assert_equal(ns['networks'][ADMIN_NETWORK]['installer_vm']['ip'],
+                     '192.0.2.1')
+        assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'],
+                     '192.168.37.1')
+
+    def test_config_gateway(self):
+        ns = NetworkSettings(files_dir+'network_settings.yaml')
+        # set the gateway ip to None to force _config_gateway to generate one
+        ns['networks'][EXTERNAL_NETWORK][0]['gateway'] = None
+        # Now rebuild network settings object and check for a repopulated value
+        ns = NetworkSettings(ns)
+        assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['gateway'],
+                     '192.168.37.1')