|
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)
|