Blame tests/unittests/test_log.py

Packit bc9a3a
# This file is part of cloud-init. See LICENSE file for license information.
Packit bc9a3a
Packit bc9a3a
"""Tests for cloudinit.log """
Packit bc9a3a
Packit bc9a3a
from cloudinit.analyze.dump import CLOUD_INIT_ASCTIME_FMT
Packit bc9a3a
from cloudinit import log as ci_logging
Packit bc9a3a
from cloudinit.tests.helpers import CiTestCase
Packit bc9a3a
import datetime
Packit bc9a3a
import logging
Packit bc9a3a
import six
Packit bc9a3a
import time
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
class TestCloudInitLogger(CiTestCase):
Packit bc9a3a
Packit bc9a3a
    def setUp(self):
Packit bc9a3a
        # set up a logger like cloud-init does in setupLogging, but instead
Packit bc9a3a
        # of sys.stderr, we'll plug in a StringIO() object so we can see
Packit bc9a3a
        # what gets logged
Packit bc9a3a
        logging.Formatter.converter = time.gmtime
Packit bc9a3a
        self.ci_logs = six.StringIO()
Packit bc9a3a
        self.ci_root = logging.getLogger()
Packit bc9a3a
        console = logging.StreamHandler(self.ci_logs)
Packit bc9a3a
        console.setFormatter(logging.Formatter(ci_logging.DEF_CON_FORMAT))
Packit bc9a3a
        console.setLevel(ci_logging.DEBUG)
Packit bc9a3a
        self.ci_root.addHandler(console)
Packit bc9a3a
        self.ci_root.setLevel(ci_logging.DEBUG)
Packit bc9a3a
        self.LOG = logging.getLogger('test_cloudinit_logger')
Packit bc9a3a
Packit bc9a3a
    def test_logger_uses_gmtime(self):
Packit bc9a3a
        """Test that log message have timestamp in UTC (gmtime)"""
Packit bc9a3a
Packit bc9a3a
        # Log a message, extract the timestamp from the log entry
Packit bc9a3a
        # convert to datetime, and compare to a utc timestamp before
Packit bc9a3a
        # and after the logged message.
Packit bc9a3a
Packit bc9a3a
        # Due to loss of precision in the LOG timestamp, subtract and add
Packit bc9a3a
        # time to the utc stamps for comparison
Packit bc9a3a
        #
Packit bc9a3a
        # utc_before: 2017-08-23 14:19:42.569299
Packit bc9a3a
        # parsed dt : 2017-08-23 14:19:43.069000
Packit bc9a3a
        # utc_after : 2017-08-23 14:19:43.570064
Packit bc9a3a
Packit bc9a3a
        utc_before = datetime.datetime.utcnow() - datetime.timedelta(0, 0.5)
Packit bc9a3a
        self.LOG.error('Test message')
Packit bc9a3a
        utc_after = datetime.datetime.utcnow() + datetime.timedelta(0, 0.5)
Packit bc9a3a
Packit bc9a3a
        # extract timestamp from log:
Packit bc9a3a
        # 2017-08-23 14:19:43,069 - test_log.py[ERROR]: Test message
Packit bc9a3a
        logstr = self.ci_logs.getvalue().splitlines()[0]
Packit bc9a3a
        timestampstr = logstr.split(' - ')[0]
Packit bc9a3a
        parsed_dt = datetime.datetime.strptime(timestampstr,
Packit bc9a3a
                                               CLOUD_INIT_ASCTIME_FMT)
Packit bc9a3a
Packit bc9a3a
        self.assertLess(utc_before, parsed_dt)
Packit bc9a3a
        self.assertLess(parsed_dt, utc_after)
Packit bc9a3a
        self.assertLess(utc_before, utc_after)
Packit bc9a3a
        self.assertGreater(utc_after, parsed_dt)