Пример #1
0
 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))")
Пример #2
0
    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)
Пример #3
0
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
Пример #4
0
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
Пример #5
0
    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')))
Пример #6
0
    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']))")
Пример #7
0
 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)))