Create message mocking tools (#31249)
* add mocking tools
* fix map renderer
* use for power draw
* fix those
* whitespace
* rename to services
* fix the rate
* remove
old-commit-hash: 086c509fde
chrysler-long2
parent
c999573836
commit
05204fbde3
6 changed files with 79 additions and 36 deletions
@ -0,0 +1,51 @@ |
||||
""" |
||||
Utilities for generating mock messages for testing. |
||||
example in common/tests/test_mock.py |
||||
""" |
||||
|
||||
|
||||
import functools |
||||
import threading |
||||
from typing import List, Union |
||||
from cereal.messaging import PubMaster |
||||
from cereal.services import SERVICE_LIST |
||||
from openpilot.common.mock.generators import generate_liveLocationKalman |
||||
from openpilot.common.realtime import Ratekeeper |
||||
|
||||
|
||||
MOCK_GENERATOR = { |
||||
"liveLocationKalman": generate_liveLocationKalman |
||||
} |
||||
|
||||
|
||||
def generate_messages_loop(services: List[str], done: threading.Event): |
||||
pm = PubMaster(services) |
||||
rk = Ratekeeper(100) |
||||
i = 0 |
||||
while not done.is_set(): |
||||
for s in services: |
||||
should_send = i % (100/SERVICE_LIST[s].frequency) == 0 |
||||
if should_send: |
||||
message = MOCK_GENERATOR[s]() |
||||
pm.send(s, message) |
||||
i += 1 |
||||
rk.keep_time() |
||||
|
||||
|
||||
def mock_messages(services: Union[List[str], str]): |
||||
if isinstance(services, str): |
||||
services = [services] |
||||
|
||||
def decorator(func): |
||||
@functools.wraps(func) |
||||
def wrapper(*args, **kwargs): |
||||
done = threading.Event() |
||||
t = threading.Thread(target=generate_messages_loop, args=(services, done)) |
||||
t.start() |
||||
try: |
||||
return func(*args, **kwargs) |
||||
finally: |
||||
done.set() |
||||
t.join() |
||||
return wrapper |
||||
return decorator |
@ -0,0 +1,20 @@ |
||||
from cereal import messaging |
||||
|
||||
|
||||
LOCATION1 = (32.7174, -117.16277) |
||||
LOCATION2 = (32.7558, -117.2037) |
||||
|
||||
LLK_DECIMATION = 10 |
||||
RENDER_FRAMES = 15 |
||||
DEFAULT_ITERATIONS = RENDER_FRAMES * LLK_DECIMATION |
||||
|
||||
|
||||
def generate_liveLocationKalman(location=LOCATION1): |
||||
msg = messaging.new_message('liveLocationKalman') |
||||
msg.liveLocationKalman.positionGeodetic = {'value': [*location, 0], 'std': [0., 0., 0.], 'valid': True} |
||||
msg.liveLocationKalman.positionECEF = {'value': [0., 0., 0.], 'std': [0., 0., 0.], 'valid': True} |
||||
msg.liveLocationKalman.calibratedOrientationNED = {'value': [0., 0., 0.], 'std': [0., 0., 0.], 'valid': True} |
||||
msg.liveLocationKalman.velocityCalibrated = {'value': [0., 0., 0.], 'std': [0., 0., 0.], 'valid': True} |
||||
msg.liveLocationKalman.status = 'valid' |
||||
msg.liveLocationKalman.gpsOK = True |
||||
return msg |
Loading…
Reference in new issue