| import unittest |
| import threading |
| |
| from test.support import import_helper, threading_helper |
| from test.support.threading_helper import run_concurrently |
| |
| syslog = import_helper.import_module("syslog") |
| |
| NTHREADS = 32 |
| |
| # Similar to Lib/test/test_syslog.py, this test's purpose is to verify that |
| # the code neither crashes nor leaks. |
| |
| |
| @threading_helper.requires_working_threading() |
| class TestSyslog(unittest.TestCase): |
| def test_racing_syslog(self): |
| def worker(): |
| """ |
| The syslog module provides the following functions: |
| openlog(), syslog(), closelog(), and setlogmask(). |
| """ |
| thread_id = threading.get_ident() |
| syslog.openlog(f"thread-id: {thread_id}") |
| try: |
| for _ in range(5): |
| syslog.syslog("logline") |
| syslog.setlogmask(syslog.LOG_MASK(syslog.LOG_INFO)) |
| syslog.syslog(syslog.LOG_INFO, "logline LOG_INFO") |
| syslog.setlogmask(syslog.LOG_MASK(syslog.LOG_ERR)) |
| syslog.syslog(syslog.LOG_ERR, "logline LOG_ERR") |
| syslog.setlogmask(syslog.LOG_UPTO(syslog.LOG_DEBUG)) |
| finally: |
| syslog.closelog() |
| |
| # Run the worker concurrently to exercise all these syslog functions |
| run_concurrently( |
| worker_func=worker, |
| nthreads=NTHREADS, |
| ) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |