From a04daa829c481fab9a734ca2e22fe69ca0d492fc Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Thu, 23 Feb 2017 16:59:09 +0800 Subject: add unittest of config.py Change-Id: I96639c47d27ef449d02528efad23e2499daa3def Signed-off-by: SerenaFeng --- testapi/opnfv_testapi/common/config.py | 24 +++++---------- .../opnfv_testapi/tests/unit/common/__init__.py | 0 .../opnfv_testapi/tests/unit/common/noparam.ini | 16 ++++++++++ .../opnfv_testapi/tests/unit/common/nosection.ini | 11 +++++++ .../opnfv_testapi/tests/unit/common/notboolean.ini | 17 ++++++++++ testapi/opnfv_testapi/tests/unit/common/notint.ini | 17 ++++++++++ .../opnfv_testapi/tests/unit/common/test_config.py | 36 ++++++++++++++++++++++ testapi/run_test.sh | 1 + 8 files changed, 105 insertions(+), 17 deletions(-) create mode 100644 testapi/opnfv_testapi/tests/unit/common/__init__.py create mode 100644 testapi/opnfv_testapi/tests/unit/common/noparam.ini create mode 100644 testapi/opnfv_testapi/tests/unit/common/nosection.ini create mode 100644 testapi/opnfv_testapi/tests/unit/common/notboolean.ini create mode 100644 testapi/opnfv_testapi/tests/unit/common/notint.ini create mode 100644 testapi/opnfv_testapi/tests/unit/common/test_config.py diff --git a/testapi/opnfv_testapi/common/config.py b/testapi/opnfv_testapi/common/config.py index 84a1273..45e134f 100644 --- a/testapi/opnfv_testapi/common/config.py +++ b/testapi/opnfv_testapi/common/config.py @@ -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/testapi/opnfv_testapi/tests/unit/common/__init__.py b/testapi/opnfv_testapi/tests/unit/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/testapi/opnfv_testapi/tests/unit/common/noparam.ini b/testapi/opnfv_testapi/tests/unit/common/noparam.ini new file mode 100644 index 0000000..fda2a09 --- /dev/null +++ b/testapi/opnfv_testapi/tests/unit/common/noparam.ini @@ -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/testapi/opnfv_testapi/tests/unit/common/nosection.ini b/testapi/opnfv_testapi/tests/unit/common/nosection.ini new file mode 100644 index 0000000..9988fc0 --- /dev/null +++ b/testapi/opnfv_testapi/tests/unit/common/nosection.ini @@ -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/testapi/opnfv_testapi/tests/unit/common/notboolean.ini b/testapi/opnfv_testapi/tests/unit/common/notboolean.ini new file mode 100644 index 0000000..b3f3276 --- /dev/null +++ b/testapi/opnfv_testapi/tests/unit/common/notboolean.ini @@ -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/testapi/opnfv_testapi/tests/unit/common/notint.ini b/testapi/opnfv_testapi/tests/unit/common/notint.ini new file mode 100644 index 0000000..d1b752a --- /dev/null +++ b/testapi/opnfv_testapi/tests/unit/common/notint.ini @@ -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/testapi/opnfv_testapi/tests/unit/common/test_config.py b/testapi/opnfv_testapi/tests/unit/common/test_config.py new file mode 100644 index 0000000..aaff6bb --- /dev/null +++ b/testapi/opnfv_testapi/tests/unit/common/test_config.py @@ -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' diff --git a/testapi/run_test.sh b/testapi/run_test.sh index 51db09f..bedb67d 100755 --- a/testapi/run_test.sh +++ b/testapi/run_test.sh @@ -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 -- cgit 1.2.3-korg