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