def _get_address_mapping(args): if args.min is not None: services_to_mock = [ 'deviceState', 'can', 'pandaState', 'sensorEvents', 'gpsNMEA', 'roadCameraState', 'roadEncodeIdx', 'modelV2', 'liveLocation', ] elif args.enabled is not None: services_to_mock = args.enabled else: services_to_mock = service_list.keys() address_mapping = { service_name: service_name for service_name in services_to_mock } address_mapping.update(dict(args.address_mapping)) for k in args.disabled: address_mapping.pop(k, None) non_services = set(address_mapping) - set(service_list) if non_services: print("WARNING: Unknown services {}".format(list(non_services))) return address_mapping
class TestServices(unittest.TestCase): @parameterized.expand(service_list.keys()) def test_services(self, s): service = service_list[s] self.assertTrue(service.port > 8000) self.assertTrue(service.frequency <= 100) def test_no_duplicate_port(self): ports = {} for name, service in service_list.items(): self.assertFalse(service.port in ports.keys(), f"duplicate port {service.port}") ports[service.port] = name def test_generated_header(self): with tempfile.NamedTemporaryFile(suffix=".h") as f: ret = os.system( f"python3 {services.__file__} > {f.name} && clang++ {f.name}") self.assertEqual(ret, 0, "generated services header is not valid C")
import os import capnp import multiprocessing import numbers import random import threading import time import unittest from parameterized import parameterized from cereal import log, car import cereal.messaging as messaging from cereal.services import service_list events = [ evt for evt in log.Event.schema.union_fields if evt in service_list.keys() ] def random_sock(): return random.choice(events) def random_socks(num_socks=10): return list(set([random_sock() for _ in range(num_socks)])) def random_bytes(length=1000): return bytes([random.randrange(0xFF) for _ in range(length)])