8 import logging_utils as lutils
9 import string_utils as sutils
10 import unittest_utils as uu
13 class TestLoggingUtils(unittest.TestCase):
14 def test_output_context(self):
15 unique_suffix = sutils.generate_uuid(True)
16 filename = f'/tmp/logging_utils_test.{unique_suffix}'
17 secret_message = f'This is a test, {unique_suffix}.'
19 with tempfile.SpooledTemporaryFile(mode='r+') as tmpfile1:
20 with uu.RecordStdout() as record:
21 with lutils.OutputMultiplexerContext(
22 lutils.OutputMultiplexer.Destination.FILENAMES
23 | lutils.OutputMultiplexer.Destination.FILEHANDLES
24 | lutils.OutputMultiplexer.Destination.LOG_INFO,
25 filenames=[filename, '/dev/null'],
26 handles=[tmpfile1, sys.stdout],
28 mplex.print(secret_message, end='')
30 # Make sure it was written to the filename.
31 with open(filename, 'r') as rf:
32 self.assertEqual(rf.readline(), secret_message)
35 # Make sure it was written to stdout.
36 tmp = record().readline()
37 self.assertEqual(tmp, secret_message)
39 # Make sure it was written to the filehandle.
41 tmp = tmpfile1.readline()
42 self.assertEqual(tmp, secret_message)
44 def test_record_streams(self):
45 with uu.RecordMultipleStreams(sys.stderr, sys.stdout) as record:
46 print("This is a test!")
47 print("This is one too.", file=sys.stderr)
48 self.assertEqual(record().readlines(), ["This is a test!\n", "This is one too.\n"])
51 if __name__ == '__main__':