Esempio n. 1
0
def test_add_filter():
    filter = AddFilter()

    parser = argparse.ArgumentParser('add')
    filter.add_arguments(parser)
    args = parser.parse_args(
        ['-t', '/data', '--type', 'example_interfaces/msg/String', '-v', 'test/data.yaml',
         '--align-to', '/align'])
    filter.set_args(None, args)

    topic_metadata = TopicMetadata(
        '/align', 'example_interfaces/msg/String', 'cdr')
    topics = filter.filter_topic(topic_metadata)
    assert(len(topics) == 2)
    assert(topics[0].name == '/align')
    assert(topics[0].type == 'example_interfaces/msg/String')
    assert(topics[1].name == '/data')
    assert(topics[1].type == 'example_interfaces/msg/String')

    msg = String()
    msg.data = 'align'
    msgs = filter.filter_msg(('/align', serialize_message(msg), 1))

    assert(len(msgs) == 2)
    (topic0, data0, t0) = msgs[0]
    (topic1, data1, t1) = msgs[1]
    assert(topic0 == '/align')
    assert(topic1 == '/data')
    assert(t0 == t1)
    assert(deserialize_message(data0, String).data == 'align')
    assert(deserialize_message(data1, String).data == 'out')
def create_diagnostics_bag(path):
    writer = SequentialWriter()
    storage_options, converter_options = get_rosbag_options(path)
    writer.open(storage_options, converter_options)

    topic = TopicMetadata('/diagnostics',
                          'diagnostic_msgs/msg/DiagnosticArray', 'cdr')
    writer.create_topic(topic)

    msg = DiagnosticArray()
    writer.write('/diagnostics', serialize_message(msg), 1000)
def create_test_bag(path):
    writer = SequentialWriter()
    storage_options, converter_options = get_rosbag_options(path)
    writer.open(storage_options, converter_options)

    topic = TopicMetadata('/data', 'example_interfaces/msg/String', 'cdr')
    writer.create_topic(topic)

    msg = String()
    msg.data = 'test_start'
    writer.write('/data', serialize_message(msg), 1000)
    msg.data = 'test_end'
    writer.write('/data', serialize_message(msg), CONVERSION_CONSTANT + 2000)
def create_multi_topic_bag(path):
    writer = SequentialWriter()
    storage_options = StorageOptions(uri=path, storage_id='sqlite3')
    converter_options = ConverterOptions(
        input_serialization_format='cdr',
        output_serialization_format='cdr')
    writer.open(storage_options, converter_options)

    topic = TopicMetadata('/range', 'sensor_msgs/msg/Range', 'cdr')
    writer.create_topic(topic)

    topic = TopicMetadata('/diagnostics', 'diagnostic_msgs/msg/KeyValue', 'cdr')
    writer.create_topic(topic)

    msg = Range()
    msg.header.stamp.sec = 0
    msg.header.stamp.nanosec = 90
    msg.range = 10.0
    writer.write('/range', serialize_message(msg), 100)

    msg = KeyValue()
    msg.key = 'cpu'
    msg.value = 'warn'
    writer.write('/diagnostics', serialize_message(msg), 200)
Esempio n. 5
0
def test_rename_filter():
    filter = RenameFilter()

    parser = argparse.ArgumentParser('rename')
    filter.add_arguments(parser)
    args = parser.parse_args(['-t', '/data', '--name', '/renamed'])
    filter.set_args(None, args)

    topic_metadata = TopicMetadata(
        '/data', 'example_interfaces/msg/String', 'cdr')
    assert(filter.filter_topic(topic_metadata).name == '/renamed')

    msg = String()
    msg.data = 'test'

    # timestamp within the bag and cut duration
    bag_msg = ('/data', serialize_message(msg), 1)
    (topic, _, _) = filter.filter_msg(bag_msg)
    assert(topic == '/renamed')
def create_day_time_bag(path):
    writer = SequentialWriter()
    storage_options, converter_options = get_rosbag_options(path)
    writer.open(storage_options, converter_options)

    topic = TopicMetadata('/data', 'example_interfaces/msg/String', 'cdr')
    writer.create_topic(topic)

    HOUR_TO_NS = 60 * 60 * CONVERSION_CONSTANT

    msg = String()
    msg.data = 'msg0'
    writer.write('/data', serialize_message(msg), 13 * HOUR_TO_NS - 1000)
    msg.data = 'msg1'
    writer.write('/data', serialize_message(msg), 13 * HOUR_TO_NS)
    msg.data = 'msg2'
    writer.write('/data', serialize_message(msg), 14 * HOUR_TO_NS)
    msg.data = 'msg2'
    writer.write('/data', serialize_message(msg), 14 * HOUR_TO_NS + 1000)
Esempio n. 7
0
def test_restamp_filter():
    filter = RestampFilter()

    parser = argparse.ArgumentParser('restamp')
    filter.add_arguments(parser)
    args = parser.parse_args([])
    filter.set_args(None, args)

    topic_metadata = TopicMetadata(
        '/data', 'diagnostic_msgs/msg/DiagnosticArray', 'cdr')
    assert(filter.filter_topic(topic_metadata) == topic_metadata)

    ns_stamp = 500 * 1000 * 1000 - 100
    msg = DiagnosticArray()
    msg.header.stamp.sec = 0
    msg.header.stamp.nanosec = ns_stamp

    # timestamp within the bag and cut duration
    bag_msg = ('/data', serialize_message(msg), 500 * 1000 * 1000)
    (_, _, t) = filter.filter_msg(bag_msg)
    assert(t == ns_stamp)
Esempio n. 8
0
def test_reframe_filter():
    filter = ReframeFilter()

    parser = argparse.ArgumentParser('reframe')
    filter.add_arguments(parser)
    args = parser.parse_args(['-t', '/data', '--frame', 'frame1'])
    filter.set_args(None, args)

    topic_metadata = TopicMetadata(
        '/data', 'diagnostic_msgs/msg/DiagnosticArray', 'cdr')
    assert(filter.filter_topic(topic_metadata) == topic_metadata)

    msg = DiagnosticArray()
    msg.header.frame_id = 'frame0'
    msg.header.stamp.sec = 0
    msg.header.stamp.nanosec = 1

    # timestamp within the bag and cut duration
    bag_msg = ('/data', serialize_message(msg), 1)
    (_, data, _) = filter.filter_msg(bag_msg)
    new_msg = deserialize_message(data, DiagnosticArray)
    assert(new_msg.header.frame_id == 'frame1')
Esempio n. 9
0
def test_replace_filter():
    filter = ReplaceFilter()

    parser = argparse.ArgumentParser('replace')
    filter.add_arguments(parser)
    args = parser.parse_args(['-t', '/data', '-v', 'test/data.yaml'])
    filter.set_args(None, args)

    string_msg = String()
    string_msg.data = 'in'
    msg = ('/data', serialize_message(string_msg), 0)

    with pytest.raises(RuntimeError):
        # if topic hasn't been found, filter_msg fails with error
        filter.filter_msg(msg)

    topic_metadata = TopicMetadata(
        '/data', 'example_interfaces/msg/String', 'cdr')
    assert(filter.filter_topic(topic_metadata) == topic_metadata)
    (topic, result_data, t) = filter.filter_msg(msg)
    assert(topic == '/data')
    result_msg = deserialize_message(result_data, String)
    assert(result_msg.data == 'out')
    assert(t == 0)