Tests: logmessaged reduce global state (#29680)

* reduce global state

* use a decorator here too

* use that one

* use base imports

* ipchandler in setup

* move to common dir

* move to helpers

* wip

* fix the decorator
This commit is contained in:
Justin Newberry
2023-08-29 13:36:26 -07:00
committed by GitHub
parent 2d4f5ac8ea
commit 5dc7028f91
5 changed files with 42 additions and 25 deletions
+6 -1
View File
@@ -77,6 +77,9 @@ class UnixDomainSocketHandler(logging.Handler):
self.sock = None
def __del__(self):
self.close()
def close(self):
if self.sock is not None:
self.sock.close()
if self.zctx is not None:
@@ -129,6 +132,8 @@ elif print_level == 'info':
elif print_level == 'warning':
outhandler.setLevel(logging.WARNING)
ipchandler = UnixDomainSocketHandler(SwagFormatter(log))
log.addHandler(outhandler)
# logs are sent through IPC before writing to disk to prevent disk I/O blocking
log.addHandler(UnixDomainSocketHandler(SwagFormatter(log)))
log.addHandler(ipchandler)
+14 -9
View File
@@ -1,21 +1,22 @@
#!/usr/bin/env python3
import glob
import os
import shutil
import time
import unittest
import cereal.messaging as messaging
from openpilot.selfdrive.manager.process_config import managed_processes
from openpilot.system.swaglog import cloudlog, SWAGLOG_DIR
from openpilot.system.swaglog import cloudlog, ipchandler
from selfdrive.test.helpers import temporary_swaglog_dir
class TestLogmessaged(unittest.TestCase):
def _setup(self, temp_dir):
# clear the IPC buffer in case some other tests used cloudlog and filled it
ipchandler.close()
ipchandler.connect()
def setUp(self):
if os.path.exists(SWAGLOG_DIR):
shutil.rmtree(SWAGLOG_DIR)
self.temp_dir = temp_dir
managed_processes['logmessaged'].start()
self.sock = messaging.sub_sock("logMessage", timeout=1000, conflate=False)
self.error_sock = messaging.sub_sock("logMessage", timeout=1000, conflate=False)
@@ -31,9 +32,11 @@ class TestLogmessaged(unittest.TestCase):
managed_processes['logmessaged'].stop(block=True)
def _get_log_files(self):
return list(glob.glob(os.path.join(SWAGLOG_DIR, "swaglog.*")))
return list(glob.glob(os.path.join(self.temp_dir, "swaglog.*")))
def test_simple_log(self):
@temporary_swaglog_dir
def test_simple_log(self, temp_dir):
self._setup(temp_dir)
msgs = [f"abc {i}" for i in range(10)]
for m in msgs:
cloudlog.error(m)
@@ -42,7 +45,9 @@ class TestLogmessaged(unittest.TestCase):
assert len(m) == len(msgs)
assert len(self._get_log_files()) >= 1
def test_big_log(self):
@temporary_swaglog_dir
def test_big_log(self, temp_dir):
self._setup(temp_dir)
n = 10
msg = "a"*3*1024*1024
for _ in range(n):