Update scenario section in tempest.conf 07/62007/1
authorCédric Ollivier <cedric.ollivier@orange.com>
Wed, 5 Sep 2018 13:17:04 +0000 (15:17 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Sat, 8 Sep 2018 07:47:21 +0000 (09:47 +0200)
It's required at least by Barbican tempest plugin.

Change-Id: I46a65ee5fee044917c5375adaa8ebb529efe86ec
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
(cherry picked from commit 9ec639526ed32d4b05168627c5c016fb66b7d008)

functest/opnfv_tests/openstack/tempest/conf_utils.py
functest/opnfv_tests/openstack/tempest/tempest.py
functest/tests/unit/openstack/tempest/test_conf_utils.py

index 56c36a5..7034792 100644 (file)
@@ -19,6 +19,7 @@ import os
 import subprocess
 
 import pkg_resources
+import six
 from six.moves import configparser
 import yaml
 
@@ -209,7 +210,9 @@ def configure_tempest_update_params(
     else:
         auth_version = 'v2'
     if env.get("NEW_USER_ROLE").lower() != "member":
-        rconfig.set('auth', 'tempest_roles', env.get("NEW_USER_ROLE"))
+        rconfig.set(
+            'auth', 'tempest_roles',
+            convert_list_to_ini([env.get("NEW_USER_ROLE")]))
     if not json.loads(env.get("USE_DYNAMIC_CREDENTIALS").lower()):
         rconfig.set('auth', 'use_dynamic_credentials', False)
         account_file = os.path.join(
@@ -261,3 +264,16 @@ def configure_verifier(deployment_dir):
                         % tempest_conf_file)
     else:
         return tempest_conf_file
+
+
+def convert_dict_to_ini(value):
+    "Convert dict to oslo.conf input"
+    assert isinstance(value, dict)
+    return ",".join("{}={}".format(
+        key, val) for (key, val) in six.iteritems(value))
+
+
+def convert_list_to_ini(value):
+    "Convert list to oslo.conf input"
+    assert isinstance(value, list)
+    return ",".join("{}".format(val) for val in value)
index 9b4a482..6692a6e 100644 (file)
@@ -299,6 +299,29 @@ class TempestCommon(singlevm.VmReady2):
         with open(rally_conf, 'wb') as config_file:
             rconfig.write(config_file)
 
+    def update_scenario_section(self):
+        """Update scenario section in tempest.conf"""
+        rconfig = configparser.RawConfigParser()
+        rconfig.read(self.conf_file)
+        filename = getattr(
+            config.CONF, '{}_image'.format(self.case_name), self.filename)
+        if not rconfig.has_section('scenario'):
+            rconfig.add_section('scenario')
+        rconfig.set('scenario', 'img_file', os.path.basename(filename))
+        rconfig.set('scenario', 'img_dir', os.path.dirname(filename))
+        rconfig.set('scenario', 'img_disk_format', getattr(
+            config.CONF, '{}_image_format'.format(self.case_name),
+            self.image_format))
+        extra_properties = self.extra_properties.copy()
+        extra_properties.update(
+            getattr(config.CONF, '{}_extra_properties'.format(
+                self.case_name), {}))
+        rconfig.set(
+            'scenario', 'img_properties',
+            conf_utils.convert_dict_to_ini(extra_properties))
+        with open(self.conf_file, 'wb') as config_file:
+            rconfig.write(config_file)
+
     def configure(self, **kwargs):  # pylint: disable=unused-argument
         """
         Create all openstack resources for tempest-based testcases and write
@@ -321,6 +344,7 @@ class TempestCommon(singlevm.VmReady2):
             image_alt_id=self.image_alt.id,
             flavor_alt_id=self.flavor_alt.id,
             domain_name=self.cloud.auth.get("project_domain_name", "Default"))
+        self.update_scenario_section()
         self.backup_tempest_config(self.conf_file, self.res_dir)
 
     def run(self, **kwargs):
index 7d94b88..7c49337 100644 (file)
@@ -182,6 +182,26 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
                 ['rally', 'verify', 'configure-verifier', '--reconfigure',
                  '--id', str(getattr(config.CONF, 'tempest_verifier_name'))])
 
+    def test_convert_dict_to_ini(self):
+        self.assertEqual(
+            conf_utils.convert_dict_to_ini({}), "")
+        self.assertEqual(
+            conf_utils.convert_dict_to_ini({"a": "b"}), "a=b")
+        value = conf_utils.convert_dict_to_ini({"a": "b", "c": "d"})
+        self.assertTrue(value == "a=b,c=d" or value == "c=d,a=b")
+        with self.assertRaises(AssertionError):
+            conf_utils.convert_list_to_ini("")
+
+    def test_convert_list_to_ini(self):
+        self.assertEqual(
+            conf_utils.convert_list_to_ini([]), "")
+        self.assertEqual(
+            conf_utils.convert_list_to_ini(["a"]), "a")
+        self.assertEqual(
+            conf_utils.convert_list_to_ini(["a", "b"]), "a,b")
+        with self.assertRaises(AssertionError):
+            conf_utils.convert_list_to_ini("")
+
 
 if __name__ == "__main__":
     logging.disable(logging.CRITICAL)