env variable support for test DB url 57/30657/1
authorMorgan Richomme <morgan.richomme@orange.com>
Tue, 14 Mar 2017 15:57:05 +0000 (16:57 +0100)
committerMorgan Richomme <morgan.richomme@orange.com>
Thu, 16 Mar 2017 07:29:12 +0000 (07:29 +0000)
So far DB url was retrieved from configuration file
If you want to use the CI chain (jenkins, testapi, test DB,
functest, ..) then you have a problem

calling functest will systematically point to the configuration
from the repo
Supporting env variable allow to avoid post processing in the
configuration file and as a consequence offer the possibility
to create a local DB to host local results

Change-Id: Ie64b8b265827d7f5724c7066a8c173de8cf012e2
Signed-off-by: Morgan Richomme <morgan.richomme@orange.com>
(cherry picked from commit 0c194ede4dd9eb46b61af49e85527fcc368a8fca)

functest/tests/unit/utils/test_functest_utils.py
functest/utils/functest_utils.py

index bb83601..8bfdb5e 100644 (file)
@@ -56,6 +56,7 @@ class FunctestUtilsTesting(unittest.TestCase):
         self.testcase_dict = {'name': 'testname', 'criteria': self.criteria}
         self.parameter = 'general.openstack.image_name'
         self.config_yaml = 'test_config_yaml-'
+        self.db_url_env = 'http://foo/testdb'
         self.file_yaml = {'general': {'openstack': {'image_name':
                                                     'test_image_name'}}}
 
@@ -196,8 +197,17 @@ class FunctestUtilsTesting(unittest.TestCase):
             self.assertEqual(functest_utils.get_build_tag(),
                              self.build_tag)
 
+    def test_get_db_url_env_var(self):
+        with mock.patch.dict(os.environ,
+                             {'TEST_DB_URL': self.db_url_env,
+                              'CONFIG_FUNCTEST_YAML':
+                              "./functest/ci/config_functest.yaml"},
+                             clear=True):
+            self.assertEqual(functest_utils.get_db_url(),
+                             self.db_url_env)
+
     @mock.patch('functest.utils.functest_utils.get_functest_config')
-    def test_get_db_url(self, mock_get_functest_config):
+    def test_get_db_url_default(self, mock_get_functest_config):
         mock_get_functest_config.return_value = self.db_url
         self.assertEqual(functest_utils.get_db_url(), self.db_url)
         mock_get_functest_config.assert_called_once_with('results.test_db_url')
index dbed811..e5e755d 100644 (file)
@@ -151,7 +151,15 @@ def get_db_url():
     """
     Returns DB URL
     """
-    return get_functest_config('results.test_db_url')
+    # TODO use CONST mechanism
+    try:
+        # if TEST_DB_URL declared in env variable, use it!
+        db_url = os.environ['TEST_DB_URL']
+    except KeyError:
+        logger.info("DB URL not declared as env variable,"
+                    "use local configuration")
+        db_url = get_functest_config('results.test_db_url')
+    return db_url
 
 
 def logger_test_results(project, case_name, status, details):