Enable tempest multinode tests 91/40891/1
authorJuha Kosonen <juha.kosonen@nokia.com>
Fri, 1 Sep 2017 21:21:56 +0000 (00:21 +0300)
committerJuha Kosonen <juha.kosonen@nokia.com>
Fri, 1 Sep 2017 21:21:56 +0000 (00:21 +0300)
JIRA: FUNCTEST-774

Change-Id: I259a9a37e40dba6a6594941d989e5aa1858e4a04
Signed-off-by: Juha Kosonen <juha.kosonen@nokia.com>
functest/opnfv_tests/openstack/snaps/snaps_utils.py
functest/opnfv_tests/openstack/tempest/conf_utils.py
functest/opnfv_tests/openstack/tempest/tempest.py
functest/tests/unit/openstack/tempest/test_tempest.py

index 309f9db..956b104 100644 (file)
@@ -5,7 +5,7 @@
 #
 # http://www.apache.org/licenses/LICENSE-2.0
 
-from snaps.openstack.utils import neutron_utils
+from snaps.openstack.utils import neutron_utils, nova_utils
 
 
 def get_ext_net_name(os_creds):
@@ -17,3 +17,14 @@ def get_ext_net_name(os_creds):
     neutron = neutron_utils.neutron_client(os_creds)
     ext_nets = neutron_utils.get_external_networks(neutron)
     return ext_nets[0].name
+
+
+def get_active_compute_cnt(os_creds):
+    """
+    Returns the number of active compute servers
+    :param: os_creds: an instance of snaps OSCreds object
+    :return: the number of active compute servers
+    """
+    nova = nova_utils.nova_client(os_creds)
+    computes = nova_utils.get_availability_zone_hosts(nova, zone_name='nova')
+    return len(computes)
index 52fa600..88d96eb 100644 (file)
@@ -135,13 +135,14 @@ def backup_tempest_config(conf_file):
 
 
 def configure_tempest(deployment_dir, image_id=None, flavor_id=None,
-                      mode=None):
+                      compute_cnt=None):
     """
     Calls rally verify and updates the generated tempest.conf with
     given parameters
     """
     conf_file = configure_verifier(deployment_dir)
-    configure_tempest_update_params(conf_file, image_id, flavor_id)
+    configure_tempest_update_params(conf_file, image_id, flavor_id,
+                                    compute_cnt)
 
 
 def configure_tempest_defcore(deployment_dir, image_id, flavor_id,
@@ -197,8 +198,8 @@ def generate_test_accounts_file(tenant_id):
         yaml.dump(accounts_list, f, default_flow_style=False)
 
 
-def configure_tempest_update_params(tempest_conf_file,
-                                    image_id=None, flavor_id=None):
+def configure_tempest_update_params(tempest_conf_file, image_id=None,
+                                    flavor_id=None, compute_cnt=1):
     """
     Add/update needed parameters into tempest.conf file
     """
@@ -221,6 +222,10 @@ def configure_tempest_update_params(tempest_conf_file,
             config.set('compute', 'flavor_ref', flavor_id)
         if FLAVOR_ID_ALT is not None:
             config.set('compute', 'flavor_ref_alt', FLAVOR_ID_ALT)
+    if compute_cnt > 1:
+        # enable multinode tests
+        config.set('compute', 'min_compute_nodes', compute_cnt)
+
     config.set('identity', 'region', 'RegionOne')
     if os_utils.is_keystone_v3():
         auth_version = 'v3'
index b8a4e9a..c204d52 100644 (file)
@@ -20,6 +20,7 @@ import time
 import yaml
 
 from functest.core import testcase
+from functest.opnfv_tests.openstack.snaps import snaps_utils
 from functest.opnfv_tests.openstack.tempest import conf_utils
 from functest.utils.constants import CONST
 import functest.utils.functest_utils as ft_utils
@@ -234,11 +235,13 @@ class TempestCommon(testcase.TestCase):
             if not os.path.exists(conf_utils.TEMPEST_RESULTS_DIR):
                 os.makedirs(conf_utils.TEMPEST_RESULTS_DIR)
             resources = self.resources.create()
+            compute_cnt = snaps_utils.get_active_compute_cnt(
+                self.resources.os_creds)
             conf_utils.configure_tempest(
                 self.DEPLOYMENT_DIR,
                 image_id=resources.get("image_id"),
                 flavor_id=resources.get("flavor_id"),
-                mode=self.MODE)
+                compute_cnt=compute_cnt)
             self.generate_test_list(self.VERIFIER_REPO_DIR)
             self.apply_tempest_blacklist()
             self.run_verifier_tests()
index 54d7d49..6fe103f 100644 (file)
@@ -171,6 +171,19 @@ class OSTempestTesting(unittest.TestCase):
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
                 'TempestResourcesManager.create', return_value={})
+    @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
+                'get_active_compute_cnt', side_effect=Exception)
+    def test_run_get_active_compute_cnt_ko(self, *args):
+        self.assertEqual(self.tempestcommon.run(),
+                         testcase.TestCase.EX_RUN_ERROR)
+
+    @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+                'os.path.exists', return_value=False)
+    @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
+    @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+                'TempestResourcesManager.create', return_value={})
+    @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
+                'get_active_compute_cnt', return_value=2)
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
                 'conf_utils.configure_tempest', side_effect=Exception)
     def test_run_configure_tempest_ko(self, *args):
@@ -182,6 +195,8 @@ class OSTempestTesting(unittest.TestCase):
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
                 'TempestResourcesManager.create', return_value={})
+    @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
+                'get_active_compute_cnt', return_value=2)
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
                 'conf_utils.configure_tempest')
     def _test_run(self, status, *args):