Change settings in flake8 and black.
[python_utils.git] / tests / logging_utils_test.py
1 #!/usr/bin/env python3
2
3 import os
4 import sys
5 import tempfile
6 import unittest
7
8 import logging_utils as lutils
9 import string_utils as sutils
10 import unittest_utils as uu
11
12
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}.'
18
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],
27                 ) as mplex:
28                     mplex.print(secret_message, end='')
29
30                 # Make sure it was written to the filename.
31                 with open(filename, 'r') as rf:
32                     self.assertEqual(rf.readline(), secret_message)
33                 os.unlink(filename)
34
35             # Make sure it was written to stdout.
36             tmp = record().readline()
37             self.assertEqual(tmp, secret_message)
38
39             # Make sure it was written to the filehandle.
40             tmpfile1.seek(0)
41             tmp = tmpfile1.readline()
42             self.assertEqual(tmp, secret_message)
43
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"])
49
50
51 if __name__ == '__main__':
52     unittest.main()