logcatd bugfix + tests (#19689)

* hack to exit cleanly

* move the hack

* add test

* run in ci

* unused

Co-authored-by: Comma Device <device@comma.ai>
pull/19996/head
Adeeb Shihadeh 2021-02-01 15:15:29 -08:00 committed by GitHub
parent 8824966aad
commit 49d4d58201
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 3 deletions

1
Jenkinsfile vendored
View File

@ -153,6 +153,7 @@ pipeline {
["test loggerd", "python selfdrive/loggerd/tests/test_loggerd.py"],
["test encoder", "python selfdrive/loggerd/tests/test_encoder.py"],
["test camerad", "python selfdrive/camerad/test/test_camerad.py"],
["test logcatd", "python selfdrive/logcatd/tests/test_logcatd_android.py"],
//["test updater", "python installer/updater/test_updater.py"],
])
}

View File

@ -18,7 +18,7 @@ int main() {
ExitHandler do_exit;
// setup android logging
struct logger_list *logger_list = android_logger_list_alloc(ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 0, 0);
struct logger_list *logger_list = android_logger_list_alloc(ANDROID_LOG_RDONLY, 0, 0);
assert(logger_list);
struct logger *main_logger = android_logger_open(logger_list, LOG_ID_MAIN);
assert(main_logger);

View File

@ -0,0 +1,46 @@
#!/usr/bin/env python3
import os
import random
import string
import time
import unittest
import cereal.messaging as messaging
from selfdrive.test.helpers import with_processes
class TestLogcatdAndroid(unittest.TestCase):
@with_processes(['logcatd'])
def test_log(self):
sock = messaging.sub_sock("androidLog", conflate=False)
# make sure sockets are ready
time.sleep(1)
messaging.drain_sock(sock)
# write some log messages
sent_msgs = {}
for _ in range(random.randint(5, 50)):
msg = ''.join([random.choice(string.ascii_letters) for _ in range(random.randrange(2, 200))])
sent_msgs[msg] = ''.join([random.choice(string.ascii_letters) for _ in range(random.randrange(2, 20))])
os.system(f"log -t {sent_msgs[msg]} {msg}")
time.sleep(1)
msgs = messaging.drain_sock(sock)
for m in msgs:
self.assertTrue(m.valid)
self.assertLess(time.monotonic() - (m.logMonoTime / 1e9), 30)
recv_msg = m.androidLog.message.strip()
if recv_msg not in sent_msgs:
continue
self.assertEqual(m.androidLog.tag, sent_msgs[recv_msg])
del sent_msgs[recv_msg]
# ensure we received all the logs we sent
self.assertEqual(len(sent_msgs), 0)
if __name__ == "__main__":
unittest.main()

View File

@ -38,12 +38,12 @@ class TestManager(unittest.TestCase):
manager.manager_prepare()
for p in ALL_PROCESSES:
manager.start_managed_process(p)
time.sleep(10)
for p in reversed(ALL_PROCESSES):
exit_code = manager.kill_managed_process(p, retry=False)
if not EON and (p == 'ui'or p == 'loggerd'):
if (not EON and p == 'ui') or (EON and p == 'logcatd'):
# TODO: make Qt UI exit gracefully and fix OMX encoder exiting
continue