3 # © Copyright 2021-2022, Scott Gasch
5 """logging_utils unittest."""
12 import logging_utils as lutils
13 import string_utils as sutils
14 import unittest_utils as uu
17 class TestLoggingUtils(unittest.TestCase):
18 def test_output_context(self):
19 unique_suffix = sutils.generate_uuid(True)
20 filename = f'/tmp/logging_utils_test.{unique_suffix}'
21 secret_message = f'This is a test, {unique_suffix}.'
23 with tempfile.SpooledTemporaryFile(mode='r+') as tmpfile1:
24 with uu.RecordStdout() as record:
25 with lutils.OutputMultiplexerContext(
26 lutils.OutputMultiplexer.Destination.FILENAMES
27 | lutils.OutputMultiplexer.Destination.FILEHANDLES
28 | lutils.OutputMultiplexer.Destination.LOG_INFO,
29 filenames=[filename, '/dev/null'],
30 handles=[tmpfile1, sys.stdout],
32 mplex.print(secret_message, end='')
34 # Make sure it was written to the filename.
35 with open(filename, 'r') as rf:
36 self.assertEqual(rf.readline(), secret_message)
39 # Make sure it was written to stdout.
40 tmp = record().readline()
41 self.assertEqual(tmp, secret_message)
43 # Make sure it was written to the filehandle.
45 tmp = tmpfile1.readline()
46 self.assertEqual(tmp, secret_message)
48 def test_record_streams(self):
49 with uu.RecordMultipleStreams(sys.stderr, sys.stdout) as record:
50 print("This is a test!")
51 print("This is one too.", file=sys.stderr)
52 self.assertEqual(record().readlines(), ["This is a test!\n", "This is one too.\n"])
55 if __name__ == '__main__':