Allow overriding tempest output dir 41/53241/3
authorCédric Ollivier <cedric.ollivier@orange.com>
Wed, 7 Mar 2018 13:02:08 +0000 (14:02 +0100)
committerCédric Ollivier <cedric.ollivier@orange.com>
Wed, 7 Mar 2018 19:30:28 +0000 (20:30 +0100)
Change-Id: I31a5d2772bab168b3cb4e6b0713d6e95aa5b6fd7
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
functest/opnfv_tests/openstack/patrole/patrole.py
functest/opnfv_tests/openstack/tempest/conf_utils.py
functest/opnfv_tests/openstack/tempest/tempest.py
functest/tests/unit/openstack/tempest/test_conf_utils.py
functest/tests/unit/openstack/tempest/test_tempest.py

index 3637840..226f681 100644 (file)
@@ -13,10 +13,12 @@ import logging
 import os
 import time
 
+from xtesting.core import testcase
+
 from functest.opnfv_tests.openstack.snaps import snaps_utils
 from functest.opnfv_tests.openstack.tempest import conf_utils
 from functest.opnfv_tests.openstack.tempest import tempest
-from xtesting.core import testcase
+from functest.utils import config
 
 
 class Patrole(tempest.TempestCommon):
@@ -28,12 +30,16 @@ class Patrole(tempest.TempestCommon):
             kwargs["case_name"] = 'patrole'
         super(Patrole, self).__init__(**kwargs)
         self.mode = "^patrole_tempest_plugin."
+        self.res_dir = os.path.join(
+            getattr(config.CONF, 'dir_results'), 'patrole')
+        self.raw_list = os.path.join(self.res_dir, 'test_raw_list.txt')
+        self.list = os.path.join(self.res_dir, 'test_list.txt')
 
     def run(self, **kwargs):
         self.start_time = time.time()
         try:
-            if not os.path.exists(conf_utils.TEMPEST_RESULTS_DIR):
-                os.makedirs(conf_utils.TEMPEST_RESULTS_DIR)
+            if not os.path.exists(self.res_dir):
+                os.makedirs(self.res_dir)
             resources = self.resources.create()
             compute_cnt = snaps_utils.get_active_compute_cnt(
                 self.resources.os_creds)
@@ -42,7 +48,8 @@ class Patrole(tempest.TempestCommon):
                 network_name=resources.get("network_name"),
                 image_id=resources.get("image_id"),
                 flavor_id=resources.get("flavor_id"),
-                compute_cnt=compute_cnt)
+                compute_cnt=compute_cnt,
+                role=kwargs.get('role', 'admin'))
             self.generate_test_list(self.verifier_repo_dir)
             self.apply_tempest_blacklist()
             self.run_verifier_tests()
@@ -59,7 +66,7 @@ class Patrole(tempest.TempestCommon):
 
     def configure_tempest_patrole(
             self, deployment_dir, network_name=None, image_id=None,
-            flavor_id=None, compute_cnt=None):
+            flavor_id=None, compute_cnt=None, role='admin'):
         # pylint: disable=too-many-arguments
         """
         Add/update needed parameters into tempest.conf file
@@ -68,12 +75,13 @@ class Patrole(tempest.TempestCommon):
             "Updating selected tempest.conf parameters for Patrole")
         conf_file = conf_utils.configure_verifier(deployment_dir)
         conf_utils.configure_tempest_update_params(
-            conf_file, network_name, image_id, flavor_id, compute_cnt)
-        config = conf_utils.ConfigParser.RawConfigParser()
-        config.read(conf_file)
-        config.set('identity-feature-enabled', 'api_v2', False)
-        config.add_section('rbac')
-        config.set('rbac', 'enable_rbac', True)
-        config.set('rbac', 'rbac_test_role', 'admin')
+            conf_file, self.res_dir, network_name, image_id, flavor_id,
+            compute_cnt)
+        rconfig = conf_utils.ConfigParser.RawConfigParser()
+        rconfig.read(conf_file)
+        rconfig.set('identity-feature-enabled', 'api_v2', False)
+        rconfig.add_section('rbac')
+        rconfig.set('rbac', 'enable_rbac', True)
+        rconfig.set('rbac', 'rbac_test_role', role)
         with open(conf_file, 'wb') as config_file:
-            config.write(config_file)
+            rconfig.write(config_file)
index fbf9c73..6121ab9 100644 (file)
@@ -33,14 +33,10 @@ RALLY_AARCH64_PATCH_PATH = pkg_resources.resource_filename(
 GLANCE_IMAGE_PATH = os.path.join(
     getattr(config.CONF, 'dir_functest_images'),
     getattr(config.CONF, 'openstack_image_file_name'))
-TEMPEST_RESULTS_DIR = os.path.join(
-    getattr(config.CONF, 'dir_results'), 'tempest')
 TEMPEST_CUSTOM = pkg_resources.resource_filename(
     'functest', 'opnfv_tests/openstack/tempest/custom_tests/test_list.txt')
 TEMPEST_BLACKLIST = pkg_resources.resource_filename(
     'functest', 'opnfv_tests/openstack/tempest/custom_tests/blacklist.txt')
-TEMPEST_RAW_LIST = os.path.join(TEMPEST_RESULTS_DIR, 'test_raw_list.txt')
-TEMPEST_LIST = os.path.join(TEMPEST_RESULTS_DIR, 'test_list.txt')
 TEMPEST_CONF_YAML = pkg_resources.resource_filename(
     'functest', 'opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml')
 TEST_ACCOUNTS_FILE = pkg_resources.resource_filename(
@@ -93,8 +89,7 @@ def create_verifier():
         getattr(config.CONF, 'tempest_verifier_name'))
     ft_utils.execute_command(cmd, error_msg=(
         "Verifier %s does not exist."
-        % getattr(config.CONF, 'tempest_verifier_name')),
-                             verbose=False)
+        % getattr(config.CONF, 'tempest_verifier_name')), verbose=False)
     cmd = ("rally verify create-verifier --source {0} "
            "--name {1} --type tempest --system-wide"
            .format(getattr(config.CONF, 'dir_repo_tempest'),
@@ -168,24 +163,25 @@ def get_verifier_deployment_dir(verifier_id, deployment_id):
                         'for-deployment-{}'.format(deployment_id))
 
 
-def backup_tempest_config(conf_file):
+def backup_tempest_config(conf_file, res_dir):
     """
     Copy config file to tempest results directory
     """
-    if not os.path.exists(TEMPEST_RESULTS_DIR):
-        os.makedirs(TEMPEST_RESULTS_DIR)
+    if not os.path.exists(res_dir):
+        os.makedirs(res_dir)
     shutil.copyfile(conf_file,
-                    os.path.join(TEMPEST_RESULTS_DIR, 'tempest.conf'))
+                    os.path.join(res_dir, 'tempest.conf'))
 
 
-def configure_tempest(deployment_dir, network_name=None, image_id=None,
-                      flavor_id=None, compute_cnt=None):
+def configure_tempest(deployment_dir, res_dir, network_name=None,
+                      image_id=None, flavor_id=None, compute_cnt=None):
+    # pylint: disable=too-many-arguments
     """
     Calls rally verify and updates the generated tempest.conf with
     given parameters
     """
     conf_file = configure_verifier(deployment_dir)
-    configure_tempest_update_params(conf_file, network_name, image_id,
+    configure_tempest_update_params(conf_file, res_dir, network_name, image_id,
                                     flavor_id, compute_cnt)
 
 
@@ -226,10 +222,10 @@ def update_tempest_conf_file(conf_file, rconfig):
         rconfig.write(config_file)
 
 
-def configure_tempest_update_params(tempest_conf_file, network_name=None,
-                                    image_id=None, flavor_id=None,
-                                    compute_cnt=1):
-    # pylint: disable=too-many-branches
+def configure_tempest_update_params(tempest_conf_file, res_dir,
+                                    network_name=None, image_id=None,
+                                    flavor_id=None, compute_cnt=1):
+    # pylint: disable=too-many-branches, too-many-arguments
     """
     Add/update needed parameters into tempest.conf file
     """
@@ -290,7 +286,7 @@ def configure_tempest_update_params(tempest_conf_file, network_name=None,
                  'into tempest.conf file')
     update_tempest_conf_file(tempest_conf_file, rconfig)
 
-    backup_tempest_config(tempest_conf_file)
+    backup_tempest_config(tempest_conf_file, res_dir)
 
 
 def configure_verifier(deployment_dir):
index f2b82d8..a0c09ac 100644 (file)
@@ -44,6 +44,9 @@ class TempestCommon(testcase.TestCase):
     # pylint: disable=too-many-instance-attributes
     """TempestCommon testcases implementation class."""
 
+    TEMPEST_RESULTS_DIR = os.path.join(
+        getattr(config.CONF, 'dir_results'), 'tempest')
+
     def __init__(self, **kwargs):
         super(TempestCommon, self).__init__(**kwargs)
         self.resources = TempestResourcesManager(**kwargs)
@@ -56,6 +59,9 @@ class TempestCommon(testcase.TestCase):
         self.deployment_dir = conf_utils.get_verifier_deployment_dir(
             self.verifier_id, self.deployment_id)
         self.verification_id = None
+        self.res_dir = TempestCommon.TEMPEST_RESULTS_DIR
+        self.raw_list = os.path.join(self.res_dir, 'test_raw_list.txt')
+        self.list = os.path.join(self.res_dir, 'test_list.txt')
 
     @staticmethod
     def read_file(filename):
@@ -98,7 +104,7 @@ class TempestCommon(testcase.TestCase):
         if self.mode == 'custom':
             if os.path.isfile(conf_utils.TEMPEST_CUSTOM):
                 shutil.copyfile(
-                    conf_utils.TEMPEST_CUSTOM, conf_utils.TEMPEST_RAW_LIST)
+                    conf_utils.TEMPEST_CUSTOM, self.raw_list)
             else:
                 raise Exception("Tempest test list file %s NOT found."
                                 % conf_utils.TEMPEST_CUSTOM)
@@ -113,14 +119,14 @@ class TempestCommon(testcase.TestCase):
                    "testr list-tests {1} > {2};"
                    "cd -;".format(verifier_repo_dir,
                                   testr_mode,
-                                  conf_utils.TEMPEST_RAW_LIST))
+                                  self.raw_list))
             functest_utils.execute_command(cmd)
 
     def apply_tempest_blacklist(self):
         """Exclude blacklisted test cases."""
         LOGGER.debug("Applying tempest blacklist...")
-        cases_file = self.read_file(conf_utils.TEMPEST_RAW_LIST)
-        result_file = open(conf_utils.TEMPEST_LIST, 'w')
+        cases_file = self.read_file(self.raw_list)
+        result_file = open(self.list, 'w')
         black_tests = []
         try:
             installer_type = env.get('INSTALLER_TYPE')
@@ -155,14 +161,14 @@ class TempestCommon(testcase.TestCase):
     def run_verifier_tests(self):
         """Execute tempest test cases."""
         cmd = ["rally", "verify", "start", "--load-list",
-               conf_utils.TEMPEST_LIST]
+               self.list]
         cmd.extend(self.option)
         LOGGER.info("Starting Tempest test suite: '%s'.", cmd)
 
         f_stdout = open(
-            os.path.join(conf_utils.TEMPEST_RESULTS_DIR, "tempest.log"), 'w+')
+            os.path.join(self.res_dir, "tempest.log"), 'w+')
         f_stderr = open(
-            os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
+            os.path.join(self.res_dir,
                          "tempest-error.log"), 'w+')
 
         proc = subprocess.Popen(
@@ -205,7 +211,7 @@ class TempestCommon(testcase.TestCase):
                     LOGGER.error("No test has been executed")
                     return
 
-            with open(os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
+            with open(os.path.join(self.res_dir,
                                    "tempest.log"), 'r') as logfile:
                 output = logfile.read()
 
@@ -232,7 +238,7 @@ class TempestCommon(testcase.TestCase):
 
     def generate_report(self):
         """Generate verification report."""
-        html_file = os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
+        html_file = os.path.join(self.res_dir,
                                  "tempest-report.html")
         cmd = ["rally", "verify", "report", "--type", "html", "--uuid",
                self.verification_id, "--to", html_file]
@@ -243,13 +249,13 @@ class TempestCommon(testcase.TestCase):
 
         self.start_time = time.time()
         try:
-            if not os.path.exists(conf_utils.TEMPEST_RESULTS_DIR):
-                os.makedirs(conf_utils.TEMPEST_RESULTS_DIR)
+            if not os.path.exists(self.res_dir):
+                os.makedirs(self.res_dir)
             resources = self.resources.create()
             compute_cnt = snaps_utils.get_active_compute_cnt(
                 self.resources.os_creds)
             conf_utils.configure_tempest(
-                self.deployment_dir,
+                self.deployment_dir, self.res_dir,
                 network_name=resources.get("network_name"),
                 image_id=resources.get("image_id"),
                 flavor_id=resources.get("flavor_id"),
index 1d5f29a..1c9a8ae 100644 (file)
@@ -219,7 +219,8 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
                        'conf_utils.os.makedirs') as mock_makedirs, \
             mock.patch('functest.opnfv_tests.openstack.tempest.'
                        'conf_utils.shutil.copyfile') as mock_copyfile:
-            conf_utils.backup_tempest_config('test_conf_file')
+            conf_utils.backup_tempest_config(
+                'test_conf_file', res_dir='test_dir')
             self.assertTrue(mock_makedirs.called)
             self.assertTrue(mock_copyfile.called)
 
@@ -228,7 +229,8 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
                         return_value=True), \
             mock.patch('functest.opnfv_tests.openstack.tempest.'
                        'conf_utils.shutil.copyfile') as mock_copyfile:
-            conf_utils.backup_tempest_config('test_conf_file')
+            conf_utils.backup_tempest_config(
+                'test_conf_file', res_dir='test_dir')
             self.assertTrue(mock_copyfile.called)
 
     def test_conf_tempest_def(self):
@@ -238,7 +240,7 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
             mock.patch('functest.opnfv_tests.openstack.tempest.'
                        'conf_utils.configure_tempest_update_params')\
                 as mock_upd:
-            conf_utils.configure_tempest('test_dep_dir')
+            conf_utils.configure_tempest('test_dep_dir', 'test_dir')
             self.assertTrue(mock_upd.called)
 
     def test_gen_test_accounts_file_def(self):
@@ -265,7 +267,8 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
                        return_value={'validation': {'ssh_timeout': 300}}):
             os.environ['OS_ENDPOINT_TYPE'] = ''
             conf_utils.configure_tempest_update_params(
-                'test_conf_file', image_id=image_id, flavor_id=flavor_id)
+                'test_conf_file', res_dir='test_dir', image_id=image_id,
+                flavor_id=flavor_id)
             mset.assert_any_call(params[0], params[1], params[2])
             self.assertTrue(mread.called)
             self.assertTrue(mwrite.called)
index 8600506..2b9dcff 100644 (file)
@@ -80,14 +80,13 @@ class OSTempestTesting(unittest.TestCase):
             testr_mode = r"'^tempest\.'"
         else:
             testr_mode = 'tempest.api.' + self.tempestcommon.mode
-        conf_utils.TEMPEST_RAW_LIST = 'raw_list'
         verifier_repo_dir = 'test_verifier_repo_dir'
         cmd = ("cd {0};"
                "testr list-tests {1} > {2};"
                "cd -;".format(verifier_repo_dir, testr_mode,
-                              conf_utils.TEMPEST_RAW_LIST))
+                              self.tempestcommon.raw_list))
         self.tempestcommon.generate_test_list('test_verifier_repo_dir')
-        mock_exec.assert_any_call(cmd)
+        mock_exec.assert_called_once_with(cmd)
 
     def test_gen_tl_smoke_mode(self):
         self._test_gen_tl_mode_default('smoke')
@@ -146,7 +145,7 @@ class OSTempestTesting(unittest.TestCase):
                 'subprocess.Popen')
     def test_generate_report(self, mock_popen):
         self.tempestcommon.verification_id = "1234"
-        html_file = os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
+        html_file = os.path.join(tempest.TempestCommon.TEMPEST_RESULTS_DIR,
                                  "tempest-report.html")
         cmd = ["rally", "verify", "report", "--type", "html", "--uuid",
                "1234", "--to", html_file]