add unittest of config.py 73/29273/3
authorSerenaFeng <feng.xiaowei@zte.com.cn>
Thu, 23 Feb 2017 08:59:09 +0000 (16:59 +0800)
committerAric Gardner <agardner@linuxfoundation.org>
Fri, 24 Feb 2017 21:52:00 +0000 (21:52 +0000)
Change-Id: I96639c47d27ef449d02528efad23e2499daa3def
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
utils/test/testapi/opnfv_testapi/common/config.py
utils/test/testapi/opnfv_testapi/tests/unit/common/__init__.py [new file with mode: 0644]
utils/test/testapi/opnfv_testapi/tests/unit/common/noparam.ini [new file with mode: 0644]
utils/test/testapi/opnfv_testapi/tests/unit/common/nosection.ini [new file with mode: 0644]
utils/test/testapi/opnfv_testapi/tests/unit/common/notboolean.ini [new file with mode: 0644]
utils/test/testapi/opnfv_testapi/tests/unit/common/notint.ini [new file with mode: 0644]
utils/test/testapi/opnfv_testapi/tests/unit/common/test_config.py [new file with mode: 0644]
utils/test/testapi/run_test.sh

index 84a1273..45e134f 100644 (file)
@@ -8,6 +8,7 @@
 # feng.xiaowei@zte.com.cn remove prepare_put_request            5-30-2016
 ##############################################################################
 import ConfigParser
+import os
 
 
 class ParseError(Exception):
@@ -42,13 +43,13 @@ class APIConfig:
         try:
             return self._parser.get(section, param)
         except ConfigParser.NoOptionError:
-            raise ParseError("[%s.%s] parameter not found" % (section, param))
+            raise ParseError("No parameter: [%s.%s]" % (section, param))
 
     def _get_int_parameter(self, section, param):
         try:
             return int(self._get_parameter(section, param))
         except ValueError:
-            raise ParseError("[%s.%s] not an int" % (section, param))
+            raise ParseError("Not int: [%s.%s]" % (section, param))
 
     def _get_bool_parameter(self, section, param):
         result = self._get_parameter(section, param)
@@ -58,7 +59,7 @@ class APIConfig:
             return False
 
         raise ParseError(
-            "[%s.%s : %s] not a boolean" % (section, param, result))
+            "Not boolean: [%s.%s : %s]" % (section, param, result))
 
     @staticmethod
     def parse(config_location=None):
@@ -67,10 +68,11 @@ class APIConfig:
         if config_location is None:
             config_location = obj._default_config_location
 
+        if not os.path.exists(config_location):
+            raise ParseError("%s not found" % config_location)
+
         obj._parser = ConfigParser.SafeConfigParser()
         obj._parser.read(config_location)
-        if not obj._parser:
-            raise ParseError("%s not found" % config_location)
 
         # Linking attributes to keys from file with their sections
         obj.mongo_url = obj._get_parameter("mongo", "url")
@@ -84,15 +86,3 @@ class APIConfig:
         obj.swagger_base_url = obj._get_parameter("swagger", "base_url")
 
         return obj
-
-    def __str__(self):
-        return "mongo_url = %s \n" \
-               "mongo_dbname = %s \n" \
-               "api_port = %s \n" \
-               "api_debug_on = %s \n" \
-               "swagger_base_url = %s \n" % (self.mongo_url,
-                                             self.mongo_dbname,
-                                             self.api_port,
-                                             self.api_debug_on,
-                                             self.api_authenticate_on,
-                                             self.swagger_base_url)
diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/__init__.py b/utils/test/testapi/opnfv_testapi/tests/unit/common/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/noparam.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/noparam.ini
new file mode 100644 (file)
index 0000000..fda2a09
--- /dev/null
@@ -0,0 +1,16 @@
+# to add a new parameter in the config file,
+# the CONF object in config.ini must be updated
+[mongo]
+# URL of the mongo DB
+# Mongo auth url => mongodb://user1:pwd1@host1/?authSource=db1
+url = mongodb://127.0.0.1:27017/
+
+[api]
+# Listening port
+port = 8000
+# With debug_on set to true, error traces will be shown in HTTP responses
+debug = True
+authenticate = False
+
+[swagger]
+base_url = http://localhost:8000
diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/nosection.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/nosection.ini
new file mode 100644 (file)
index 0000000..9988fc0
--- /dev/null
@@ -0,0 +1,11 @@
+# to add a new parameter in the config file,
+# the CONF object in config.ini must be updated
+[api]
+# Listening port
+port = 8000
+# With debug_on set to true, error traces will be shown in HTTP responses
+debug = True
+authenticate = False
+
+[swagger]
+base_url = http://localhost:8000
diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/notboolean.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/notboolean.ini
new file mode 100644 (file)
index 0000000..b3f3276
--- /dev/null
@@ -0,0 +1,17 @@
+# to add a new parameter in the config file,
+# the CONF object in config.ini must be updated
+[mongo]
+# URL of the mongo DB
+# Mongo auth url => mongodb://user1:pwd1@host1/?authSource=db1
+url = mongodb://127.0.0.1:27017/
+dbname = test_results_collection
+
+[api]
+# Listening port
+port = 8000
+# With debug_on set to true, error traces will be shown in HTTP responses
+debug = True
+authenticate = notboolean
+
+[swagger]
+base_url = http://localhost:8000
diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/notint.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/notint.ini
new file mode 100644 (file)
index 0000000..d1b752a
--- /dev/null
@@ -0,0 +1,17 @@
+# to add a new parameter in the config file,
+# the CONF object in config.ini must be updated
+[mongo]
+# URL of the mongo DB
+# Mongo auth url => mongodb://user1:pwd1@host1/?authSource=db1
+url = mongodb://127.0.0.1:27017/
+dbname = test_results_collection
+
+[api]
+# Listening port
+port = notint
+# With debug_on set to true, error traces will be shown in HTTP responses
+debug = True
+authenticate = False
+
+[swagger]
+base_url = http://localhost:8000
diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/test_config.py b/utils/test/testapi/opnfv_testapi/tests/unit/common/test_config.py
new file mode 100644 (file)
index 0000000..aaff6bb
--- /dev/null
@@ -0,0 +1,36 @@
+import ConfigParser
+import os
+
+import pytest
+
+from opnfv_testapi.common import config
+
+
+@pytest.fixture()
+def config_dir():
+    return os.path.dirname(__file__)
+
+
+@pytest.mark.parametrize('exception, config_file, excepted', [
+    (config.ParseError, None, '/etc/opnfv_testapi/config.ini not found'),
+    (ConfigParser.NoSectionError, 'nosection.ini', 'No section:'),
+    (config.ParseError, 'noparam.ini', 'No parameter:'),
+    (config.ParseError, 'notint.ini', 'Not int:'),
+    (config.ParseError, 'notboolean.ini', 'Not boolean:')])
+def pytest_config_exceptions(config_dir, exception, config_file, excepted):
+    file = '{}/{}'.format(config_dir, config_file) if config_file else None
+    with pytest.raises(exception) as error:
+        config.APIConfig().parse(file)
+    assert excepted in str(error.value)
+
+
+def test_config_success():
+    config_dir = os.path.join(os.path.dirname(__file__),
+                              '../../../../etc/config.ini')
+    conf = config.APIConfig().parse(config_dir)
+    assert conf.mongo_url == 'mongodb://127.0.0.1:27017/'
+    assert conf.mongo_dbname == 'test_results_collection'
+    assert conf.api_port == 8000
+    assert conf.api_debug_on is True
+    assert conf.api_authenticate_on is False
+    assert conf.swagger_base_url == 'http://localhost:8000'
index 51db09f..bedb67d 100755 (executable)
@@ -15,6 +15,7 @@ source $SCRIPTDIR/testapi_venv/bin/activate
 pip install -r $SCRIPTDIR/requirements.txt
 pip install coverage
 pip install nose>=1.3.1
+pip install pytest
 
 find . -type f -name "*.pyc" -delete