| 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() |