
monasca_setup.detection.utils.load_oslo_configuration() should ignore options to `from_cmd` that is not oslo.config built-in options. We are only interested in the options --config-file and --config-dir. Change-Id: I72dc53d8ee6dc7b0784e6931a19c461cdb322851 Story: 2001303 Task: 5854
189 lines
5.9 KiB
Python
189 lines
5.9 KiB
Python
# Copyright 2017 FUJITSU LIMITED
|
|
# Copyright 2017 OP5 AB
|
|
#
|
|
# 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 mock
|
|
import os
|
|
|
|
from oslotest import base
|
|
from oslo_config import cfg
|
|
|
|
from monasca_setup.detection import utils
|
|
|
|
|
|
class TestDetectionUtilsOsloConf(base.BaseTestCase):
|
|
PROJECT = 'foo'
|
|
PROG = 'bar'
|
|
|
|
@mock.patch('monasca_setup.detection.utils.cfg.ConfigOpts')
|
|
def test_load_oslo_configuration_no_args(self, config_opts):
|
|
config_opts.return_value = co = mock.Mock()
|
|
opts = [
|
|
{'opt': cfg.StrOpt('region_name')}
|
|
]
|
|
args = ['python', 'foo-api']
|
|
|
|
self._run_load_oslo_test(co, opts, args)
|
|
|
|
@mock.patch('monasca_setup.detection.utils.cfg.ConfigOpts')
|
|
def test_load_oslo_configuration_with_args(self, config_opts):
|
|
config_opts.return_value = co = mock.Mock()
|
|
opts = [
|
|
{'opt': cfg.StrOpt('region_name')}
|
|
]
|
|
args = ['python', 'foo-api', '--config-file', '/foo/bar/file',
|
|
'--config-dir', '/foo/bar']
|
|
|
|
self._run_load_oslo_test(co, opts, args)
|
|
|
|
def test_should_create_new_oslo_conf_for_each_call(self):
|
|
# test ensures that each call for load_oslo_configuration
|
|
# creates new object of oslo_config.ConfigOpts
|
|
cfg_1 = utils.load_oslo_configuration(
|
|
from_cmd=[],
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=[]
|
|
)
|
|
cfg_2 = utils.load_oslo_configuration(
|
|
from_cmd=[],
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=[]
|
|
)
|
|
|
|
self.assertIsNot(cfg_1, cfg_2)
|
|
|
|
def test_distinct_oslo_confs_should_contain_different_opts(self):
|
|
# test ensures that each instance created via load_oslo_configuration
|
|
# contains different values of the same opts
|
|
|
|
file_1, file_2 = self.create_tempfiles([('', ''), ('', '')])
|
|
base_dir = os.path.dirname(file_1)
|
|
os.makedirs(base_dir + '/1')
|
|
os.makedirs(base_dir + '/2')
|
|
|
|
cmd_1 = ['python', 'test', '--config-dir', base_dir + '/1']
|
|
cmd_2 = ['python', 'test', '--config-dir', base_dir + '/2']
|
|
cmd_3 = ['python', 'test', '--config-file', file_1]
|
|
cmd_4 = ['python', 'test', '--config-file', file_2]
|
|
|
|
opts = [
|
|
{'opt': cfg.StrOpt('region_name')}
|
|
]
|
|
|
|
cfg_1 = utils.load_oslo_configuration(
|
|
from_cmd=cmd_1,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
cfg_2 = utils.load_oslo_configuration(
|
|
from_cmd=cmd_2,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
cfg_3 = utils.load_oslo_configuration(
|
|
from_cmd=cmd_3,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
cfg_4 = utils.load_oslo_configuration(
|
|
from_cmd=cmd_4,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
|
|
self.assertIsNot(cfg_1, cfg_2)
|
|
self.assertIsNot(cfg_3, cfg_4)
|
|
self.assertNotEqual(cfg_1, cfg_2)
|
|
self.assertNotEqual(cfg_3, cfg_4)
|
|
|
|
def test_just_keep_built_in_options(self):
|
|
# test ensures that non built-in oslo.config options to
|
|
# load_oslo_configuration is skipped
|
|
|
|
cmd_1 = ['python', 'test']
|
|
cmd_2 = ['python', 'test', '--log-file', '/var/log/test/test.log']
|
|
|
|
opts = [
|
|
{'opt': cfg.StrOpt('region_name')}
|
|
]
|
|
|
|
cfg_1 = utils.load_oslo_configuration(
|
|
from_cmd=cmd_1,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
cfg_2 = utils.load_oslo_configuration(
|
|
from_cmd=cmd_2,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
|
|
self.assertIsNot(cfg_1, cfg_2)
|
|
self.assertEqual(cfg_1, cfg_2)
|
|
|
|
def test_parsing_different_command_styles(self):
|
|
# test ensures that options sent to load_oslo_configuration with
|
|
# different command styles generates the same output
|
|
|
|
cmd_1 = ['python', 'test', '--config-dir', '.']
|
|
cmd_2 = ['python', 'test', '--config-dir=.']
|
|
|
|
opts = [
|
|
{'opt': cfg.StrOpt('region_name')}
|
|
]
|
|
|
|
cfg_1 = utils.load_oslo_configuration(
|
|
from_cmd=cmd_1,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
cfg_2 = utils.load_oslo_configuration(
|
|
from_cmd=cmd_2,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
|
|
self.assertIsNot(cfg_1, cfg_2)
|
|
self.assertEqual(cfg_1, cfg_2)
|
|
|
|
def _run_load_oslo_test(self, config_opts, opts, args):
|
|
actual_args = args[2:]
|
|
|
|
conf = utils.load_oslo_configuration(
|
|
from_cmd=args,
|
|
in_project=self.PROJECT,
|
|
of_prog=self.PROG,
|
|
for_opts=opts
|
|
)
|
|
|
|
self.assertIsNotNone(conf)
|
|
|
|
for opt in opts:
|
|
config_opts.register_opt.assert_called_once_with(**opt)
|
|
config_opts.assert_called_once_with(
|
|
args=actual_args,
|
|
project=self.PROJECT,
|
|
prog=self.PROG
|
|
)
|