Blame tests/unittests/test_log.py

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