Files
deb-murano/murano/tests/unit/dsl/test_logger.py
Alexey Khivin 11a96c94c8 Logging API for MuranoPL
Add new API calls that will provide logging and can be
consumed by MuranoPL workflows. It will improve debuggability.
Application author can use logs to improve application quality.

Implements: blueprint logging-api-for-muranopl
Change-Id: I747cf7f5fca20960f2304605e1c7241f465f5dc1
2015-08-30 00:11:40 +03:00

140 lines
5.1 KiB
Python

# Copyright (c) 2015 Mirantis, 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.
from mock import ANY
from mock import MagicMock
from mock.mock import call
from murano.engine.system import logger
from murano.tests.unit.dsl.foundation import object_model as om
from murano.tests.unit.dsl.foundation import test_case
class TestLogger(test_case.DslTestCase):
FORMAT_CALLS = [
call(ANY, 'str', (), {}),
call(ANY, 'str', (1,), {}),
call(ANY, 'str {0}', ('message',), {}),
call(ANY, 'str {message}', (), {'message': 'message'}),
call(ANY, 'str {message}{0}', (), {})]
LOG_CALLS = FORMAT_CALLS
def setUp(self):
super(TestLogger, self).setUp()
self._runner = self.new_runner(om.Object('TestLogger'))
self.class_loader.import_class(logger.Logger)
def test_create(self):
cls = self.class_loader.get_class('io.murano.system.Logger')
logger_instance = self._runner.testCreate()
self.assertTrue(
cls.is_compatible(logger_instance),
'Function should return io.murano.system.Logger instance')
def _create_logger_mock(self):
logger_instance = self._runner.testCreate()
logger_ext = logger_instance.extension
underlying_logger_mock = MagicMock()
logger_ext._underlying_logger = underlying_logger_mock
logger_ext._underlying_logger.return_value = None
format_mock = MagicMock(return_value='format_mock')
# do not verify number of conversions to string
format_mock.__str__ = MagicMock(return_value='format_mock')
format_mock.__unicode__ = MagicMock(return_value='format_mock')
logger_ext._format_without_exceptions = format_mock
return logger_instance, format_mock, underlying_logger_mock
def test_trace(self):
logger_instance, format_mock, underlying_logger_mock \
= self._create_logger_mock()
log_method = MagicMock()
underlying_logger_mock.trace = log_method
self._runner.testTrace(logger_instance)
format_mock.assert_has_calls(self.FORMAT_CALLS, any_order=False)
self.assertEqual(log_method.call_count, len(self.LOG_CALLS))
def test_debug(self):
logger_instance, format_mock, underlying_logger_mock \
= self._create_logger_mock()
log_method = MagicMock()
underlying_logger_mock.debug = log_method
self._runner.testDebug(logger_instance)
format_mock.assert_has_calls(self.FORMAT_CALLS, any_order=False)
self.assertEqual(log_method.call_count, len(self.LOG_CALLS))
def test_info(self):
logger_instance, format_mock, underlying_logger_mock \
= self._create_logger_mock()
log_method = MagicMock()
underlying_logger_mock.info = log_method
self._runner.testInfo(logger_instance)
format_mock.assert_has_calls(self.FORMAT_CALLS, any_order=False)
self.assertEqual(log_method.call_count, len(self.LOG_CALLS))
def test_warning(self):
logger_instance, format_mock, underlying_logger_mock \
= self._create_logger_mock()
log_method = MagicMock()
underlying_logger_mock.warning = log_method
self._runner.testWarning(logger_instance)
format_mock.assert_has_calls(self.FORMAT_CALLS, any_order=False)
self.assertEqual(log_method.call_count, len(self.LOG_CALLS))
def test_error(self):
logger_instance, format_mock, underlying_logger_mock \
= self._create_logger_mock()
log_method = MagicMock()
underlying_logger_mock.error = log_method
self._runner.testError(logger_instance)
format_mock.assert_has_calls(self.FORMAT_CALLS, any_order=False)
self.assertEqual(log_method.call_count, len(self.FORMAT_CALLS))
def test_critical(self):
logger_instance, format_mock, underlying_logger_mock \
= self._create_logger_mock()
log_method = MagicMock()
underlying_logger_mock.critical = log_method
self._runner.testCritical(logger_instance)
format_mock.assert_has_calls(self.FORMAT_CALLS, any_order=False)
self.assertEqual(log_method.call_count, len(self.LOG_CALLS))
def test_exception(self):
logger_instance, format_mock, underlying_logger_mock = \
self._create_logger_mock()
log_method = MagicMock()
underlying_logger_mock.error = log_method
self._runner.testException(logger_instance)
format_mock.assert_has_calls(self.FORMAT_CALLS, any_order=False)
self.assertEqual(log_method.call_count, len(self.LOG_CALLS))