1
- from test .support import import_helper
1
+ from test .support import import_helper , threading_helper
2
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
3
7
import unittest
4
8
5
9
# XXX(nnorwitz): This test sucks. I don't know of a platform independent way
8
12
9
13
class Test (unittest .TestCase ):
10
14
15
+ def tearDown (self ):
16
+ syslog .closelog ()
17
+
11
18
def test_openlog (self ):
12
19
syslog .openlog ('python' )
13
20
# Issue #6697.
@@ -18,22 +25,59 @@ def test_syslog(self):
18
25
syslog .syslog ('test message from python test_syslog' )
19
26
syslog .syslog (syslog .LOG_ERR , 'test error from python test_syslog' )
20
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
+
21
33
def test_closelog (self ):
22
34
syslog .openlog ('python' )
23
35
syslog .closelog ()
36
+ syslog .closelog () # idempotent operation
24
37
25
38
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 )
27
43
28
44
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 ) )
33
49
34
50
def test_openlog_noargs (self ):
35
51
syslog .openlog ()
36
52
syslog .syslog ('test message from python test_syslog' )
37
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
+
38
82
if __name__ == "__main__" :
39
83
unittest .main ()
0 commit comments