diff options
| author | TerryHowe <terrylhowe@gmail.com> | 2015-08-10 12:33:28 -0600 |
|---|---|---|
| committer | Terry Howe <terrylhowe@gmail.com> | 2015-08-26 10:23:53 +0000 |
| commit | 85a03945f0b5da0ec5778a929e08a641f427513a (patch) | |
| tree | 1c3bcb525ed420bce2a993f8244c2a3db40a5df2 /openstackclient/tests | |
| parent | 6c46355734f7a7278b92645e6a465b6e38096daf (diff) | |
| download | python-openstackclient-85a03945f0b5da0ec5778a929e08a641f427513a.tar.gz | |
Create log configuration class
Configuration of logging gets triggered twice. The first time it
uses the CLI options when the application is started and second
it uses the configuration file after that is read. The state of
the logging needs to be saved from the first to the second time,
so I created a class.
Implements: blueprint logging-migration
Change-Id: I7b8d1a3b6fd128e98cafd7c16009c7b694a52146
Diffstat (limited to 'openstackclient/tests')
| -rw-r--r-- | openstackclient/tests/common/test_context.py | 152 | ||||
| -rw-r--r-- | openstackclient/tests/test_shell.py | 94 |
2 files changed, 114 insertions, 132 deletions
diff --git a/openstackclient/tests/common/test_context.py b/openstackclient/tests/common/test_context.py index cc213b13..55e42851 100644 --- a/openstackclient/tests/common/test_context.py +++ b/openstackclient/tests/common/test_context.py @@ -13,7 +13,6 @@ import logging import mock -import os from openstackclient.common import context from openstackclient.tests import utils @@ -21,47 +20,6 @@ from openstackclient.tests import utils class TestContext(utils.TestCase): - TEST_LOG_FILE = "/tmp/test_log_file" - - def setUp(self): - super(TestContext, self).setUp() - - def tearDown(self): - super(TestContext, self).tearDown() - if os.path.exists(self.TEST_LOG_FILE): - os.remove(self.TEST_LOG_FILE) - - def setup_handler_logging_level(self): - handler_type = logging.FileHandler - handler = logging.FileHandler(filename=self.TEST_LOG_FILE) - handler.setLevel(logging.ERROR) - logging.getLogger('').addHandler(handler) - context.setup_handler_logging_level(handler_type, logging.INFO) - self.log.info("test log") - ld = open(self.TEST_LOG_FILE) - line = ld.readlines() - ld.close() - if os.path.exists(self.TEST_LOG_FILE): - os.remove(self.TEST_LOG_FILE) - self.assertGreaterEqual(line.find("test log"), 0) - - @mock.patch("openstackclient.common.context._setup_handler_for_logging") - def test_setup_logging(self, setuph): - setuph.return_value = mock.MagicMock() - shell = mock.MagicMock() - cloud_config = mock.MagicMock() - cloud_config.auth = { - 'project_name': 'heart-o-gold', - 'username': 'zaphod' - } - cloud_config.config = { - 'log_level': 'debug', - 'log_file': self.TEST_LOG_FILE, - 'cloud': 'megadodo' - } - context.setup_logging(shell, cloud_config) - self.assertEqual(True, shell.enable_operation_logging) - def test_log_level_from_options(self): opts = mock.Mock() opts.verbose_level = 0 @@ -132,3 +90,113 @@ class TestFileFormatter(utils.TestCase): self.assertEqual(('%(asctime)s.%(msecs)03d %(process)d %(levelname)s ' '%(name)s [cloudy usernamey projecty] %(message)s'), formatter.fmt) + + +class TestLogConfigurator(utils.TestCase): + def setUp(self): + super(TestLogConfigurator, self).setUp() + self.options = mock.Mock() + self.options.verbose_level = 1 + self.options.log_file = None + self.options.debug = False + self.root_logger = mock.Mock() + self.root_logger.setLevel = mock.Mock() + self.root_logger.addHandler = mock.Mock() + self.requests_log = mock.Mock() + self.requests_log.setLevel = mock.Mock() + self.cliff_log = mock.Mock() + self.cliff_log.setLevel = mock.Mock() + self.stevedore_log = mock.Mock() + self.stevedore_log.setLevel = mock.Mock() + self.iso8601_log = mock.Mock() + self.iso8601_log.setLevel = mock.Mock() + self.loggers = [ + self.root_logger, + self.requests_log, + self.cliff_log, + self.stevedore_log, + self.iso8601_log] + + @mock.patch('logging.StreamHandler') + @mock.patch('logging.getLogger') + @mock.patch('openstackclient.common.context.set_warning_filter') + def test_init(self, warning_filter, getLogger, handle): + getLogger.side_effect = self.loggers + console_logger = mock.Mock() + console_logger.setFormatter = mock.Mock() + console_logger.setLevel = mock.Mock() + handle.return_value = console_logger + + configurator = context.LogConfigurator(self.options) + + getLogger.assert_called_with('iso8601') # last call + warning_filter.assert_called_with(logging.WARNING) + self.root_logger.setLevel.assert_called_with(logging.DEBUG) + self.root_logger.addHandler.assert_called_with(console_logger) + self.requests_log.setLevel.assert_called_with(logging.ERROR) + self.cliff_log.setLevel.assert_called_with(logging.ERROR) + self.stevedore_log.setLevel.assert_called_with(logging.ERROR) + self.iso8601_log.setLevel.assert_called_with(logging.ERROR) + self.assertEqual(False, configurator.dump_trace) + + @mock.patch('logging.getLogger') + @mock.patch('openstackclient.common.context.set_warning_filter') + def test_init_no_debug(self, warning_filter, getLogger): + getLogger.side_effect = self.loggers + self.options.debug = True + + configurator = context.LogConfigurator(self.options) + + warning_filter.assert_called_with(logging.DEBUG) + self.requests_log.setLevel.assert_called_with(logging.DEBUG) + self.assertEqual(True, configurator.dump_trace) + + @mock.patch('logging.FileHandler') + @mock.patch('logging.getLogger') + @mock.patch('openstackclient.common.context.set_warning_filter') + @mock.patch('openstackclient.common.context._FileFormatter') + def test_init_log_file(self, formatter, warning_filter, getLogger, handle): + getLogger.side_effect = self.loggers + self.options.log_file = '/tmp/log_file' + file_logger = mock.Mock() + file_logger.setFormatter = mock.Mock() + file_logger.setLevel = mock.Mock() + handle.return_value = file_logger + mock_formatter = mock.Mock() + formatter.return_value = mock_formatter + + context.LogConfigurator(self.options) + + handle.assert_called_with(filename=self.options.log_file) + self.root_logger.addHandler.assert_called_with(file_logger) + file_logger.setFormatter.assert_called_with(mock_formatter) + file_logger.setLevel.assert_called_with(logging.WARNING) + + @mock.patch('logging.FileHandler') + @mock.patch('logging.getLogger') + @mock.patch('openstackclient.common.context.set_warning_filter') + @mock.patch('openstackclient.common.context._FileFormatter') + def test_configure(self, formatter, warning_filter, getLogger, handle): + getLogger.side_effect = self.loggers + configurator = context.LogConfigurator(self.options) + cloud_config = mock.Mock() + config_log = '/tmp/config_log' + cloud_config.config = { + 'log_file': config_log, + 'verbose_level': 1, + 'log_level': 'info'} + file_logger = mock.Mock() + file_logger.setFormatter = mock.Mock() + file_logger.setLevel = mock.Mock() + handle.return_value = file_logger + mock_formatter = mock.Mock() + formatter.return_value = mock_formatter + + configurator.configure(cloud_config) + + warning_filter.assert_called_with(logging.INFO) + handle.assert_called_with(filename=config_log) + self.root_logger.addHandler.assert_called_with(file_logger) + file_logger.setFormatter.assert_called_with(mock_formatter) + file_logger.setLevel.assert_called_with(logging.INFO) + self.assertEqual(False, configurator.dump_trace) diff --git a/openstackclient/tests/test_shell.py b/openstackclient/tests/test_shell.py index 5b844753..cacd2fb7 100644 --- a/openstackclient/tests/test_shell.py +++ b/openstackclient/tests/test_shell.py @@ -623,12 +623,9 @@ class TestShellCli(TestShell): @mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file") @mock.patch("os_client_config.config.OpenStackConfig._load_config_file") - @mock.patch("openstackclient.common.context._setup_handler_for_logging") - def test_shell_args_cloud_public(self, setup_handler, config_mock, - public_mock): + def test_shell_args_cloud_public(self, config_mock, public_mock): config_mock.return_value = ('file.yaml', copy.deepcopy(CLOUD_2)) public_mock.return_value = ('file.yaml', copy.deepcopy(PUBLIC_1)) - setup_handler.return_value = mock.MagicMock() _shell = make_shell() fake_execute( @@ -666,12 +663,9 @@ class TestShellCli(TestShell): @mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file") @mock.patch("os_client_config.config.OpenStackConfig._load_config_file") - @mock.patch("openstackclient.common.context._setup_handler_for_logging") - def test_shell_args_precedence(self, setup_handler, config_mock, - vendor_mock): + def test_shell_args_precedence(self, config_mock, vendor_mock): config_mock.return_value = ('file.yaml', copy.deepcopy(CLOUD_2)) vendor_mock.return_value = ('file.yaml', copy.deepcopy(PUBLIC_1)) - setup_handler.return_value = mock.MagicMock() _shell = make_shell() # Test command option overriding config file value @@ -723,12 +717,9 @@ class TestShellCliEnv(TestShell): @mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file") @mock.patch("os_client_config.config.OpenStackConfig._load_config_file") - @mock.patch("openstackclient.common.context._setup_handler_for_logging") - def test_shell_args_precedence_1(self, setup_handler, config_mock, - vendor_mock): + def test_shell_args_precedence_1(self, config_mock, vendor_mock): config_mock.return_value = ('file.yaml', copy.deepcopy(CLOUD_2)) vendor_mock.return_value = ('file.yaml', copy.deepcopy(PUBLIC_1)) - setup_handler.return_value = mock.MagicMock() _shell = make_shell() # Test env var @@ -767,12 +758,9 @@ class TestShellCliEnv(TestShell): @mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file") @mock.patch("os_client_config.config.OpenStackConfig._load_config_file") - @mock.patch("openstackclient.common.context._setup_handler_for_logging") - def test_shell_args_precedence_2(self, setup_handler, config_mock, - vendor_mock): + def test_shell_args_precedence_2(self, config_mock, vendor_mock): config_mock.return_value = ('file.yaml', copy.deepcopy(CLOUD_2)) vendor_mock.return_value = ('file.yaml', copy.deepcopy(PUBLIC_1)) - setup_handler.return_value = mock.MagicMock() _shell = make_shell() # Test command option overriding config file value @@ -810,77 +798,3 @@ class TestShellCliEnv(TestShell): 'krikkit', _shell.cloud.config['region_name'], ) - - -class TestShellCliLogging(TestShell): - def setUp(self): - super(TestShellCliLogging, self).setUp() - - def tearDown(self): - super(TestShellCliLogging, self).tearDown() - - @mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file") - @mock.patch("os_client_config.config.OpenStackConfig._load_config_file") - @mock.patch("openstackclient.common.context._setup_handler_for_logging") - def test_shell_args_precedence_1(self, setup_handler, config_mock, - vendor_mock): - config_mock.return_value = ('file.yaml', copy.deepcopy(CLOUD_2)) - vendor_mock.return_value = ('file.yaml', copy.deepcopy(PUBLIC_1)) - setup_handler.return_value = mock.MagicMock() - _shell = make_shell() - - # These come from clouds.yaml - fake_execute( - _shell, - "--os-cloud megacloud list user", - ) - self.assertEqual( - 'megacloud', - _shell.cloud.name, - ) - - self.assertEqual( - '/tmp/test_log_file', - _shell.cloud.config['log_file'], - ) - self.assertEqual( - 'debug', - _shell.cloud.config['log_level'], - ) - - @mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file") - @mock.patch("os_client_config.config.OpenStackConfig._load_config_file") - def test_shell_args_precedence_2(self, config_mock, vendor_mock): - config_mock.return_value = ('file.yaml', copy.deepcopy(CLOUD_1)) - vendor_mock.return_value = ('file.yaml', copy.deepcopy(PUBLIC_1)) - _shell = make_shell() - - # Test operation_log_file not set - fake_execute( - _shell, - "--os-cloud scc list user", - ) - self.assertEqual( - False, - _shell.enable_operation_logging, - ) - - @mock.patch("os_client_config.config.OpenStackConfig._load_vendor_file") - @mock.patch("os_client_config.config.OpenStackConfig._load_config_file") - @mock.patch("openstackclient.common.context._setup_handler_for_logging") - def test_shell_args_precedence_3(self, setup_handler, config_mock, - vendor_mock): - config_mock.return_value = ('file.yaml', copy.deepcopy(CLOUD_2)) - vendor_mock.return_value = ('file.yaml', copy.deepcopy(PUBLIC_1)) - setup_handler.return_value = mock.MagicMock() - _shell = make_shell() - - # Test enable_operation_logging set - fake_execute( - _shell, - "--os-cloud megacloud list user", - ) - self.assertEqual( - True, - _shell.enable_operation_logging, - ) |
