~thomir-deactivatedaccount/uservice-utils/trunk-add-queue

« back to all changes in this revision

Viewing changes to uservice_utils/tests/test_logging.py

  • Committer: Ubuntu CI Bot
  • Author(s): Thomi Richards
  • Date: 2015-04-02 03:04:50 UTC
  • mfrom: (5.1.2 trunk-add-logging-decorator)
  • Revision ID: ubuntu_ci_bot-20150402030450-93cncccw9wx8ykfw
Add the ExtraLogger class. [r=Celso Providelo]

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
"""Tests for the logging code."""
19
19
 
 
20
import logging
20
21
import os.path
21
22
import subprocess
22
23
import sys
23
24
import tempfile
24
25
from textwrap import dedent
25
26
 
 
27
from fixtures import Fixture
26
28
from testtools import TestCase
27
29
from testtools.matchers import (
28
30
    Contains,
29
31
    Equals,
30
32
    FileContains,
 
33
    IsInstance,
31
34
    Not,
32
35
)
33
36
 
34
37
import uservice_utils
 
38
import uservice_utils.logging as util_logging
 
39
 
35
40
 
36
41
class LoggingConfigurationTests(TestCase):
37
42
 
119
124
            self.expectThat(err, Not(Contains("Will not see")))
120
125
            self.expectThat(err, Contains("Will see"))
121
126
 
 
127
 
 
128
class LoggerClassFixture(Fixture):
 
129
 
 
130
    """A fixture that sets a new logging class for the duration of a test."""
 
131
 
 
132
    def __init__(self, new_class):
 
133
        self._new_class = new_class
 
134
 
 
135
    def setUp(self):
 
136
        super().setUp()
 
137
        old_logger_class = logging.getLoggerClass()
 
138
        logging.setLoggerClass(self._new_class)
 
139
        self.addCleanup(logging.setLoggerClass, old_logger_class)
 
140
 
 
141
 
 
142
class TestingLogFilter(logging.Filter):
 
143
 
 
144
    """A filter that passes everything, but logs everything."""
 
145
    def __init__(self):
 
146
        self.log_records = []
 
147
 
 
148
    def filter(self, record):
 
149
        self.log_records.append(record)
 
150
        return 1  # Log this record.
 
151
 
 
152
 
 
153
class ExtraLoggerTests(TestCase):
 
154
 
 
155
    def test_can_set_logger_class(self):
 
156
        self.useFixture(LoggerClassFixture(util_logging.ExtraLogger))
 
157
        logger = logging.getLogger(__name__)
 
158
        self.assertThat(logger, IsInstance(util_logging.ExtraLogger))
 
159
 
 
160
    def create_log_with_filter(self):
 
161
        self.useFixture(LoggerClassFixture(util_logging.ExtraLogger))
 
162
        logger = logging.getLogger(__name__)
 
163
        logger.setLevel(logging.INFO)
 
164
        filt = TestingLogFilter()
 
165
        logger.addFilter(filt)
 
166
        self.addCleanup(logger.removeFilter, filt)
 
167
        return logger, filt
 
168
 
 
169
    def test_can_set_extra_details(self):
 
170
        logger, filt = self.create_log_with_filter()
 
171
        logger.set_extra_args(dict(foo='bar'))
 
172
        logger.info("Testing")
 
173
 
 
174
        self.assertThat(filt.log_records[0].foo, Equals('bar'))
 
175
 
 
176
    def test_extra_args_can_be_mixed(self):
 
177
        logger, filt = self.create_log_with_filter()
 
178
        logger.set_extra_args(dict(foo='bar'))
 
179
        logger.info("Testing", extra=dict(bar='baz'))
 
180
 
 
181
        self.assertThat(filt.log_records[0].foo, Equals('bar'))
 
182
        self.assertThat(filt.log_records[0].bar, Equals('baz'))
 
183
 
 
184
    def test_log_method_extra_args_take_priority(self):
 
185
        logger, filt = self.create_log_with_filter()
 
186
        logger.set_extra_args(dict(foo='bar'))
 
187
        logger.info("Testing", extra=dict(foo='baz'))
 
188
 
 
189
        self.assertThat(filt.log_records[0].foo, Equals('baz'))