def test_log_bus_handler(self): log_data = [ (timedelta(microseconds=10), 1, serialize(b'(1,2)')), (timedelta(microseconds=11), 1, serialize(b'(3,4,5)')), (timedelta(microseconds=30), 2, serialize([8, 9])), ] log = iter(log_data) inputs = {1:'raw'} outputs = {2:'can'} bus = LogBusHandler(log, inputs, outputs) bus.listen() with self.assertRaises(AssertionError) as e: bus.publish('can', b'parsed data') self.assertEqual(str(e.exception), "(b'parsed data', [8, 9], datetime.timedelta(0, 0, 30))")
def test_bus_sleep(self): logger = MagicMock() bus = BusHandler(logger, out={}) bus.sleep(0.1) bus = LogBusHandler(logger, inputs={}, outputs={}) bus.sleep(0.1) bus = LogBusHandlerInputsOnly(logger, inputs={}) bus.sleep(0.1)
def replay(args, application=None): log = LogReader(args.logfile, only_stream_id=0) print("original args:", next(log)[-1]) # old arguments config_str = next(log)[-1] config = literal_eval(config_str.decode('ascii')) if args.config is not None: config = config_load(*args.config, application=application) names = logger.lookup_stream_names(args.logfile) if args.debug: print("streams:") for i, name in enumerate(names): print(f" {i+1:2d} {name}") module = args.module assert module in config['robot']['modules'], ( module, list(config['robot']['modules'].keys())) module_config = config['robot']['modules'][module] inputs = {} for edge_from, edge_to in config['robot']['links']: if edge_to.split('.')[0] == module: if edge_from not in names: g_logger.warning('Missing name: %s' % edge_from) names.append(edge_from) inputs[1 + names.index(edge_from)] = edge_to.split('.')[1] outputs = { i + 1: out.split('.')[1] for i, out in enumerate(names) if out.startswith(f"{module}.") } if args.debug: print("inputs:") for i, name in sorted(inputs.items()): print(f" {i:2d} {name}") print("outputs:") for i, name in sorted(outputs.items()): print(f" {i:2d} {name}") if args.force: reader = LogReader(args.logfile, only_stream_id=inputs.keys()) bus = LogBusHandlerInputsOnly(reader, inputs=inputs) else: streams = list(inputs.keys()) + list(outputs.keys()) reader = LogReader(args.logfile, only_stream_id=streams) bus = LogBusHandler(reader, inputs, outputs) driver_name = module_config['driver'] module_class = get_class_by_name(driver_name) module_instance = module_class(module_config.get('init', {}), bus=bus) bus.node = module_instance # needed for slots return module_instance
def replay(args, application=None): log = LogReader(args.logfile, only_stream_id=0) print("original args:", next(log)[-1]) # old arguments config_str = next(log)[-1] config = literal_eval(config_str.decode('ascii')) if args.config is not None: config = config_load(*args.config) names = logger.lookup_stream_names(args.logfile) print("stream names:") for name in names: print(" ", name) module = args.module assert module in config['robot']['modules'], ( module, list(config['robot']['modules'].keys())) module_config = config['robot']['modules'][module] input_names = module_config['in'] output_names = module_config['out'] print("inputs:", input_names) print("outputs:", output_names) inputs = {} for edge_from, edge_to in config['robot']['links']: if edge_to.split('.')[0] == module: if edge_from not in names: logging.warning(f'Missing name: {edge_from}') names.append(edge_from) inputs[1 + names.index(edge_from)] = edge_to.split('.')[1] # start reading log from the beginning again if args.force: log = LogReader(args.logfile, only_stream_id=inputs.keys()) bus = LogBusHandlerInputsOnly(log, inputs=inputs) else: outputs = dict([(1 + names.index('.'.join([module, name])), name) for name in output_names]) streams = list(inputs.keys()) + list(outputs.keys()) log = LogReader(args.logfile, only_stream_id=streams) bus = LogBusHandler(log, inputs=inputs, outputs=outputs) driver_name = module_config['driver'] if driver_name == 'application': assert application is not None module_class = application else: module_class = get_class_by_name(driver_name) module_instance = module_class(module_config['init'], bus=bus) bus.node = module_instance return module_instance
def test_wrong_publish_channel(self): log_data = [ (timedelta(microseconds=10), 1, serialize(b'(1,2)')), (timedelta(microseconds=30), 2, serialize(b'[8,9]')), (timedelta(microseconds=35), 3, serialize(b'[8,9]')), ] log = iter(log_data) inputs = {1: 'raw'} outputs = {2: 'can', 3: 'can2'} bus = LogBusHandler(log, inputs, outputs) bus.listen() with self.assertRaises(AssertionError) as e: bus.publish('can2', [8, 9]) self.assertEqual(e.exception.args[0], ('can2', 'can', timedelta(0, 0, 30))) with self.assertRaises(AssertionError) as e: bus.publish('can3', [1, 2]) self.assertEqual(e.exception.args[0], ('can3', ('can', 'can2')))
def test_wrong_publish_channel(self): log_data = [ (timedelta(microseconds=10), 1, serialize(b'(1,2)')), (timedelta(microseconds=30), 2, serialize(b'[8,9]')), (timedelta(microseconds=35), 3, serialize(b'[8,9]')), ] log = iter(log_data) inputs = {1:'raw'} outputs = {2:'can', 3:'can2'} bus = LogBusHandler(log, inputs, outputs) bus.listen() with self.assertRaises(AssertionError) as e: bus.publish('can2', [8, 9]) self.assertEqual(str(e.exception), "('can2', 'can', datetime.timedelta(0, 0, 30))") with self.assertRaises(AssertionError) as e: bus.publish('can3', [1, 2]) self.assertEqual(str(e.exception), "('can3', dict_values(['can', 'can2']))")
def test_log_bus_handler(self): log_data = [ (timedelta(microseconds=10), 1, serialize(b'(1,2)')), (timedelta(microseconds=11), 1, serialize(b'(3,4,5)')), (timedelta(microseconds=30), 2, serialize([8, 9])), ] log = iter(log_data) inputs = {1: 'raw'} outputs = {2: 'can'} bus = LogBusHandler(log, inputs, outputs) bus.listen() with self.assertRaises(AssertionError) as e: bus.publish('can', b'parsed data') self.assertEqual(e.exception.args[0], (b'parsed data', [8, 9], timedelta(0, 0, 30)))