Rename timer; add a test for OutputContext.
[python_utils.git] / tests / logging_utils_test.py
1 #!/usr/bin/env python3
2
3 import contextlib
4 import tempfile
5 import unittest
6
7 import bootstrap
8 import logging_utils as lutils
9 import string_utils as sutils
10
11
12 class TestLoggingUtils(unittest.TestCase):
13
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 tempfile.SpooledTemporaryFile(mode='r+') as tmpfile2:
21                 with contextlib.redirect_stdout(tmpfile1):
22                     with lutils.OutputContext(
23                             lutils.OutputMultiplexer.Destination.FILENAME |
24                             lutils.OutputMultiplexer.Destination.FILEHANDLE |
25                             lutils.OutputMultiplexer.Destination.STDOUT,
26                             filename = filename,
27                             handle = tmpfile2,
28                     ) as mplex:
29                         mplex.print(secret_message, end='')
30                     with open(filename, 'r') as rf:
31                         self.assertEqual(rf.readline(), secret_message)
32                 tmpfile2.seek(0)
33                 tmp = tmpfile2.readline()
34                 self.assertEqual(tmp, secret_message)
35             tmpfile1.seek(0)
36             tmp = tmpfile1.readline()
37             self.assertEqual(tmp, secret_message)
38
39
40 if __name__ == '__main__':
41     unittest.main = bootstrap.initialize(unittest.main)
42     unittest.main()