1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#!/usr/bin/python3
import logging
import unittest
from pyfakefs.fake_filesystem_unittest import TestCase
from staslib import log
class StaslibLogTest(TestCase):
'''Test for log.py module'''
def setUp(self):
self.setUpPyfakefs()
def test_log_with_systemd_journal(self):
'''Check that we can set the handler to systemd.journal.JournalHandler'''
try:
# We can't proceed with this test if the
# module systemd.journal is not installed.
import systemd.journal # pylint: disable=import-outside-toplevel
except ModuleNotFoundError:
return
log.init(syslog=True)
logger = logging.getLogger()
handler = logger.handlers[-1]
self.assertIsInstance(handler, systemd.journal.JournalHandler)
self.assertEqual(log.level(), 'INFO')
log.set_level_from_tron(tron=True)
self.assertEqual(log.level(), 'DEBUG')
log.set_level_from_tron(tron=False)
self.assertEqual(log.level(), 'INFO')
logger.removeHandler(handler)
handler.close()
def test_log_with_syslog_handler(self):
'''Check that we can set the handler to logging.handlers.SysLogHandler'''
try:
# The log.py module uses systemd.journal.JournalHandler() as the
# default logging handler (if present). Therefore, in order to force
# log.py to use SysLogHandler as the handler, we need to mock
# systemd.journal.JournalHandler() with an invalid class.
import systemd.journal # pylint: disable=import-outside-toplevel
except ModuleNotFoundError:
original_handler = None
else:
class MockJournalHandler:
def __new__(cls, *args, **kwargs):
raise ModuleNotFoundError
original_handler = systemd.journal.JournalHandler
systemd.journal.JournalHandler = MockJournalHandler
log.init(syslog=True)
logger = logging.getLogger()
handler = logger.handlers[-1]
self.assertIsInstance(handler, logging.handlers.SysLogHandler)
self.assertEqual(log.level(), 'INFO')
log.set_level_from_tron(tron=True)
self.assertEqual(log.level(), 'DEBUG')
log.set_level_from_tron(tron=False)
self.assertEqual(log.level(), 'INFO')
logger.removeHandler(handler)
handler.close()
if original_handler is not None:
# Restore original systemd.journal.JournalHandler()
systemd.journal.JournalHandler = original_handler
def test_log_with_stdout(self):
'''Check that we can set the handler to logging.StreamHandler (i.e. stdout)'''
log.init(syslog=False)
logger = logging.getLogger()
handler = logger.handlers[-1]
self.assertIsInstance(handler, logging.StreamHandler)
self.assertEqual(log.level(), 'DEBUG')
log.set_level_from_tron(tron=True)
self.assertEqual(log.level(), 'DEBUG')
log.set_level_from_tron(tron=False)
self.assertEqual(log.level(), 'INFO')
logger.removeHandler(handler)
handler.close()
if __name__ == '__main__':
unittest.main()
|