From e2a2a2fd06bfffd30b1acfcd58cf2f5a30512271 Mon Sep 17 00:00:00 2001 From: "bin.sun" Date: Wed, 15 Aug 2018 13:46:11 +0800 Subject: [PATCH] Add type check for zuul conf Some options of zuul web should be initialized as int format, and it may cause TypeError when accessing zuul web dashboard. Change-Id: I4923d3047516c39b7e1005e189924fb4dd6fd1df --- tests/fixtures/zuul.conf | 3 +++ tests/unit/test_default_config.py | 37 +++++++++++++++++++++++++++++++ zuul/lib/config.py | 7 +++++- 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 tests/unit/test_default_config.py diff --git a/tests/fixtures/zuul.conf b/tests/fixtures/zuul.conf index 5d793782ec..d915e38d90 100644 --- a/tests/fixtures/zuul.conf +++ b/tests/fixtures/zuul.conf @@ -30,3 +30,6 @@ server=localhost port=25 default_from=zuul@example.com default_to=you@example.com + +[web] +static_cache_expiry=1200 diff --git a/tests/unit/test_default_config.py b/tests/unit/test_default_config.py new file mode 100644 index 0000000000..afdd12dcf9 --- /dev/null +++ b/tests/unit/test_default_config.py @@ -0,0 +1,37 @@ +# Copyright 2018 EasyStack, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import os + +import configparser + +from tests.base import BaseTestCase +from tests.base import FIXTURE_DIR +from zuul.lib.config import get_default + + +class TestDefaultConfigValue(BaseTestCase): + config_file = 'zuul.conf' + + def setUp(self): + super(TestDefaultConfigValue, self).setUp() + self.config = configparser.ConfigParser() + self.config.read(os.path.join(FIXTURE_DIR, self.config_file)) + + def test_default_config_value(self): + default_value = get_default(self.config, + 'web', + 'static_cache_expiry', + default=3600) + self.assertEqual(1200, default_value) diff --git a/zuul/lib/config.py b/zuul/lib/config.py index 9cdf66e5fb..b13fc3d383 100644 --- a/zuul/lib/config.py +++ b/zuul/lib/config.py @@ -15,7 +15,12 @@ import os def get_default(config, section, option, default=None, expand_user=False): if config.has_option(section, option): - value = config.get(section, option) + # Need to be ensured that we get suitable + # type from config file by default value + if isinstance(default, int): + value = config.getint(section, option) + else: + value = config.get(section, option) else: value = default if expand_user and value: