1 from test.support import import_helper, threading_helper
2 syslog = import_helper.import_module("syslog") #skip if not supported
3 from test import support
4 import sys
5 import threading
6 import time
7 import unittest
8
9 # XXX(nnorwitz): This test sucks. I don't know of a platform independent way
10 # to verify that the messages were really logged.
11 # The only purpose of this test is to verify the code doesn't crash or leak.
12
13 class ESC[4;38;5;81mTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
14
15 def tearDown(self):
16 syslog.closelog()
17
18 def test_openlog(self):
19 syslog.openlog('python')
20 # Issue #6697.
21 self.assertRaises(UnicodeEncodeError, syslog.openlog, '\uD800')
22
23 def test_syslog(self):
24 syslog.openlog('python')
25 syslog.syslog('test message from python test_syslog')
26 syslog.syslog(syslog.LOG_ERR, 'test error from python test_syslog')
27
28 def test_syslog_implicit_open(self):
29 syslog.closelog() # Make sure log is closed
30 syslog.syslog('test message from python test_syslog')
31 syslog.syslog(syslog.LOG_ERR, 'test error from python test_syslog')
32
33 def test_closelog(self):
34 syslog.openlog('python')
35 syslog.closelog()
36 syslog.closelog() # idempotent operation
37
38 def test_setlogmask(self):
39 mask = syslog.LOG_UPTO(syslog.LOG_WARNING)
40 oldmask = syslog.setlogmask(mask)
41 self.assertEqual(syslog.setlogmask(0), mask)
42 self.assertEqual(syslog.setlogmask(oldmask), mask)
43
44 def test_log_mask(self):
45 mask = syslog.LOG_UPTO(syslog.LOG_WARNING)
46 self.assertTrue(mask & syslog.LOG_MASK(syslog.LOG_WARNING))
47 self.assertTrue(mask & syslog.LOG_MASK(syslog.LOG_ERR))
48 self.assertFalse(mask & syslog.LOG_MASK(syslog.LOG_INFO))
49
50 def test_openlog_noargs(self):
51 syslog.openlog()
52 syslog.syslog('test message from python test_syslog')
53
54 @threading_helper.requires_working_threading()
55 def test_syslog_threaded(self):
56 start = threading.Event()
57 stop = False
58 def opener():
59 start.wait(10)
60 i = 1
61 while not stop:
62 syslog.openlog(f'python-test-{i}') # new string object
63 i += 1
64 def logger():
65 start.wait(10)
66 while not stop:
67 syslog.syslog('test message from python test_syslog')
68
69 orig_si = sys.getswitchinterval()
70 support.setswitchinterval(1e-9)
71 try:
72 threads = [threading.Thread(target=opener)]
73 threads += [threading.Thread(target=logger) for k in range(10)]
74 with threading_helper.start_threads(threads):
75 start.set()
76 time.sleep(0.1)
77 stop = True
78 finally:
79 sys.setswitchinterval(orig_si)
80
81
82 if __name__ == "__main__":
83 unittest.main()