parent
d47d8808d1
commit
e2b5d1e29a
3 changed files with 70 additions and 8 deletions
@ -0,0 +1,65 @@ |
||||
#!/usr/bin/env python3 |
||||
import os |
||||
import unittest |
||||
|
||||
import cereal.messaging as messaging |
||||
from selfdrive.manager.process_config import managed_processes |
||||
|
||||
LLK_DECIMATION = 10 |
||||
|
||||
|
||||
def gen_llk(): |
||||
msg = messaging.new_message('liveLocationKalman') |
||||
msg.liveLocationKalman.positionGeodetic = {'value': [32.7174, -117.16277, 0], 'std': [0., 0., 0.], 'valid': True} |
||||
msg.liveLocationKalman.calibratedOrientationNED = {'value': [0., 0., 0.], 'std': [0., 0., 0.], 'valid': True} |
||||
msg.liveLocationKalman.status = 'valid' |
||||
return msg |
||||
|
||||
|
||||
class TestMapRenderer(unittest.TestCase): |
||||
@classmethod |
||||
def setUpClass(cls): |
||||
assert "MAPBOX_TOKEN" in os.environ |
||||
|
||||
def setUp(self): |
||||
self.sm = messaging.SubMaster(['mapRenderState']) |
||||
self.pm = messaging.PubMaster(['liveLocationKalman']) |
||||
|
||||
def tearDown(self): |
||||
managed_processes['mapsd'].stop() |
||||
|
||||
def _run_test(self, valid): |
||||
# start + sync up |
||||
managed_processes['mapsd'].start() |
||||
for _ in range(100): |
||||
self.pm.send("liveLocationKalman", gen_llk()) |
||||
self.sm.update(100) |
||||
if self.sm.updated['mapRenderState']: |
||||
break |
||||
assert self.sm.updated['mapRenderState'], "renderer didn't start" |
||||
|
||||
# run test |
||||
for i in range(20*LLK_DECIMATION): |
||||
frame_expected = (i+1) % LLK_DECIMATION == 0 |
||||
prev_frame_id = self.sm['mapRenderState'].frameId |
||||
|
||||
llk = gen_llk() |
||||
self.pm.send("liveLocationKalman", llk) |
||||
self.sm.update(200 if frame_expected else 10) |
||||
assert self.sm.updated['mapRenderState'] == frame_expected, "renderer running at wrong frequency" |
||||
|
||||
if not frame_expected: |
||||
continue |
||||
|
||||
# check output |
||||
assert self.sm.valid['mapRenderState'] == valid |
||||
assert 0. < self.sm['mapRenderState'].renderTime < 0.1 |
||||
assert self.sm['mapRenderState'].frameId == (prev_frame_id + 1) |
||||
assert self.sm['mapRenderState'].locationMonoTime == llk.logMonoTime |
||||
|
||||
def test_with_internet(self): |
||||
self._run_test(True) |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
unittest.main() |
Loading…
Reference in new issue