1- from test .support import import_helper
1+ from test .support import import_helper , threading_helper
22syslog = import_helper .import_module ("syslog" ) #skip if not supported
3+ from test import support
4+ import sys
5+ import threading
6+ import time
37import unittest
48
59# XXX(nnorwitz): This test sucks. I don't know of a platform independent way
812
913class Test (unittest .TestCase ):
1014
15+ def tearDown (self ):
16+ syslog .closelog ()
17+
1118 def test_openlog (self ):
1219 syslog .openlog ('python' )
1320 # Issue #6697.
@@ -18,22 +25,59 @@ def test_syslog(self):
1825 syslog .syslog ('test message from python test_syslog' )
1926 syslog .syslog (syslog .LOG_ERR , 'test error from python test_syslog' )
2027
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+
2133 def test_closelog (self ):
2234 syslog .openlog ('python' )
2335 syslog .closelog ()
36+ syslog .closelog () # idempotent operation
2437
2538 def test_setlogmask (self ):
26- syslog .setlogmask (syslog .LOG_DEBUG )
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 )
2743
2844 def test_log_mask (self ):
29- syslog .LOG_MASK (syslog .LOG_INFO )
30-
31- def test_log_upto ( self ):
32- syslog .LOG_UPTO (syslog .LOG_INFO )
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 ) )
3349
3450 def test_openlog_noargs (self ):
3551 syslog .openlog ()
3652 syslog .syslog ('test message from python test_syslog' )
3753
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+
3882if __name__ == "__main__" :
3983 unittest .main ()
0 commit comments