summaryrefslogtreecommitdiff
path: root/openstackclient/tests/common/test_context.py
diff options
context:
space:
mode:
authorTerryHowe <terrylhowe@gmail.com>2015-08-10 12:33:28 -0600
committerTerry Howe <terrylhowe@gmail.com>2015-08-26 10:23:53 +0000
commit85a03945f0b5da0ec5778a929e08a641f427513a (patch)
tree1c3bcb525ed420bce2a993f8244c2a3db40a5df2 /openstackclient/tests/common/test_context.py
parent6c46355734f7a7278b92645e6a465b6e38096daf (diff)
downloadpython-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/common/test_context.py')
-rw-r--r--openstackclient/tests/common/test_context.py152
1 files changed, 110 insertions, 42 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)