Skip to content

Commit

Permalink
[3.10] Add more syslog tests (pythonGH-97953).
Browse files Browse the repository at this point in the history
(cherry picked from commit cae7d1d)

Co-authored-by: Serhiy Storchaka <[email protected]>
  • Loading branch information
serhiy-storchaka committed Oct 8, 2022
1 parent 15a11a6 commit 5867ece
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 7 deletions.
21 changes: 21 additions & 0 deletions Lib/test/audit-tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,27 @@ def hook(event, *args):
raise RuntimeError("Expected sqlite3.load_extension to fail")


def test_syslog():
import syslog

def hook(event, args):
if event.startswith("syslog."):
print(event, *args)

sys.addaudithook(hook)
syslog.openlog('python')
syslog.syslog('test')
syslog.setlogmask(syslog.LOG_DEBUG)
syslog.closelog()
# implicit open
syslog.syslog('test2')
# open with default ident
syslog.openlog(logoption=syslog.LOG_NDELAY, facility=syslog.LOG_LOCAL0)
sys.argv = None
syslog.openlog()
syslog.closelog()


if __name__ == "__main__":
from test.support import suppress_msvcrt_asserts

Expand Down
26 changes: 26 additions & 0 deletions Lib/test/test_audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@


class AuditTest(unittest.TestCase):
maxDiff = None

def do_test(self, *args):
with subprocess.Popen(
[sys.executable, "-X utf8", AUDIT_TESTS_PY, *args],
Expand Down Expand Up @@ -170,5 +172,29 @@ def test_sqlite3(self):
self.assertEqual(actual, expected)


def test_syslog(self):
syslog = import_helper.import_module("syslog")

returncode, events, stderr = self.run_python("test_syslog")
if returncode:
self.fail(stderr)

if support.verbose:
print('Events:', *events, sep='\n ')

self.assertSequenceEqual(
events,
[('syslog.openlog', ' ', f'python 0 {syslog.LOG_USER}'),
('syslog.syslog', ' ', f'{syslog.LOG_INFO} test'),
('syslog.setlogmask', ' ', f'{syslog.LOG_DEBUG}'),
('syslog.closelog', '', ''),
('syslog.syslog', ' ', f'{syslog.LOG_INFO} test2'),
('syslog.openlog', ' ', f'audit-tests.py 0 {syslog.LOG_USER}'),
('syslog.openlog', ' ', f'audit-tests.py {syslog.LOG_NDELAY} {syslog.LOG_LOCAL0}'),
('syslog.openlog', ' ', f'None 0 {syslog.LOG_USER}'),
('syslog.closelog', '', '')]
)


if __name__ == "__main__":
unittest.main()
55 changes: 49 additions & 6 deletions Lib/test/test_syslog.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
from test.support import import_helper
from test.support import import_helper, threading_helper
syslog = import_helper.import_module("syslog") #skip if not supported
from test import support
import sys
import threading
import time
import unittest

# XXX(nnorwitz): This test sucks. I don't know of a platform independent way
Expand All @@ -8,6 +12,9 @@

class Test(unittest.TestCase):

def tearDown(self):
syslog.closelog()

def test_openlog(self):
syslog.openlog('python')
# Issue #6697.
Expand All @@ -18,22 +25,58 @@ def test_syslog(self):
syslog.syslog('test message from python test_syslog')
syslog.syslog(syslog.LOG_ERR, 'test error from python test_syslog')

def test_syslog_implicit_open(self):
syslog.closelog() # Make sure log is closed
syslog.syslog('test message from python test_syslog')
syslog.syslog(syslog.LOG_ERR, 'test error from python test_syslog')

def test_closelog(self):
syslog.openlog('python')
syslog.closelog()
syslog.closelog() # idempotent operation

def test_setlogmask(self):
syslog.setlogmask(syslog.LOG_DEBUG)
mask = syslog.LOG_UPTO(syslog.LOG_WARNING)
oldmask = syslog.setlogmask(mask)
self.assertEqual(syslog.setlogmask(0), mask)
self.assertEqual(syslog.setlogmask(oldmask), mask)

def test_log_mask(self):
syslog.LOG_MASK(syslog.LOG_INFO)

def test_log_upto(self):
syslog.LOG_UPTO(syslog.LOG_INFO)
mask = syslog.LOG_UPTO(syslog.LOG_WARNING)
self.assertTrue(mask & syslog.LOG_MASK(syslog.LOG_WARNING))
self.assertTrue(mask & syslog.LOG_MASK(syslog.LOG_ERR))
self.assertFalse(mask & syslog.LOG_MASK(syslog.LOG_INFO))

def test_openlog_noargs(self):
syslog.openlog()
syslog.syslog('test message from python test_syslog')

def test_syslog_threaded(self):
start = threading.Event()
stop = False
def opener():
start.wait(10)
i = 1
while not stop:
syslog.openlog(f'python-test-{i}') # new string object
i += 1
def logger():
start.wait(10)
while not stop:
syslog.syslog('test message from python test_syslog')

orig_si = sys.getswitchinterval()
support.setswitchinterval(1e-9)
try:
threads = [threading.Thread(target=opener)]
threads += [threading.Thread(target=logger) for k in range(10)]
with threading_helper.start_threads(threads):
start.set()
time.sleep(0.1)
stop = True
finally:
sys.setswitchinterval(orig_si)


if __name__ == "__main__":
unittest.main()
2 changes: 1 addition & 1 deletion Modules/syslogmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ syslog_setlogmask(PyObject *self, PyObject *args)

if (!PyArg_ParseTuple(args, "l;mask for priority", &maskpri))
return NULL;
if (PySys_Audit("syslog.setlogmask", "(O)", args ? args : Py_None) < 0) {
if (PySys_Audit("syslog.setlogmask", "l", maskpri) < 0) {
return NULL;
}
omaskpri = setlogmask(maskpri);
Expand Down

0 comments on commit 5867ece

Please sign in to comment.