summaryrefslogtreecommitdiffstats
path: root/test/test-log.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-log.py')
-rwxr-xr-xtest/test-log.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/test/test-log.py b/test/test-log.py
new file mode 100755
index 0000000..2ae1155
--- /dev/null
+++ b/test/test-log.py
@@ -0,0 +1,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()