Exemple #1
0
 def test_int_two_signals(self):
     msg = CANMessage(1, 'Name', 2)
     sig0 = CANSignal('Signal0', 0, 8)
     sig0.raw_value = 159
     msg.add_signal(sig0)
     sig1 = CANSignal('Signal1', 8, 8)
     sig1.raw_value = 96
     msg.add_signal(sig1)
     assert int(msg) == int(sig0.bits) + (int(sig1.bits) << 8)
Exemple #2
0
 def test_value_dict(self):
     sig = CANSignal('Signal', 0, 8)
     sig.value_dict = {0: 'Value0'}
     sig.raw_value = 0
     assert sig.value == sig.value_dict[sig.raw_value]
     sig.raw_value = 1
     assert sig.value == sig.raw_value
Exemple #3
0
 def test_signal_multiplexer_settings_check(self, old_sig_is_m,
                                            old_sig_m_id, new_sig_is_m,
                                            new_sig_m_id, expected_result):
     msg = CANMessage(1, 'Message', 2)
     msg.add_signal(
         CANSignal('OldSignal',
                   0,
                   8,
                   multiplexer_id=old_sig_m_id,
                   is_multiplexer=old_sig_is_m))
     assert msg._check_if_multiplexer_settings_are_valid(
         CANSignal('OldSignal',
                   0,
                   8,
                   multiplexer_id=new_sig_m_id,
                   is_multiplexer=new_sig_is_m)) == expected_result
Exemple #4
0
 def test_signal_fit_check(self, msg_size, new_sig_def, existing_sigs_def,
                           expected_result):
     msg = CANMessage(1, 'Message', msg_size)
     for i, sig_def in enumerate(existing_sigs_def):
         msg.add_signal(
             CANSignal('Signal{}'.format(i),
                       sig_def[0],
                       sig_def[1],
                       is_multiplexer=sig_def[2],
                       multiplexer_id=sig_def[3]))
     assert msg._check_if_signal_fits(
         CANSignal('NewSignal',
                   new_sig_def[0],
                   new_sig_def[1],
                   is_multiplexer=new_sig_def[2],
                   multiplexer_id=new_sig_def[3])) == expected_result
Exemple #5
0
 def test_parse_signal(self, line, signal_name, start_bit, length, little_endian, signed, factor, offset, value_min,\
                       value_max, unit, is_multiplexer, multiplexer_id, nodes, add_multiplexer):
     parser = DBCParser()
     parser._can_network.add_node(CANNode('Sender'))
     for node in nodes:
         parser._can_network.add_node(CANNode(node))
     msg = CANMessage(2, 'CANMessage', 8)
     if add_multiplexer:
         msg.add_signal(CANSignal('MultiplexerSignal', 8, 8, is_multiplexer=True))
     parser._can_network.nodes['Sender'].add_message(msg)
     parser._mode = ('MESSAGE', msg)
     parser._parse_line(line)
     sig = msg.signals[signal_name]
     assert sig.name == signal_name
     assert sig.start_bit == start_bit
     assert sig.length == length
     assert sig.little_endian == little_endian
     assert sig.signed == signed
     assert sig.factor == factor
     assert sig.value_min == value_min
     assert sig.value_max == value_max
     assert sig.unit == unit
     assert sig.is_multiplexer == is_multiplexer
     assert sig.multiplexer_id == multiplexer_id
     for node in nodes:
         assert parser._can_network.nodes[node] in sig.receiver
Exemple #6
0
 def test_value_setter_min_max(self):
     sig = CANSignal('Signal', 0, 8)
     sig.value_min = 4
     sig.value_max = 8
     sig.value = 3.9
     assert sig.value == 4
     sig.value = 8.1
     assert sig.value == 8
Exemple #7
0
 def test_get_none_signal_with_message(self):
     cn = CANNetwork()
     node = CANNode('TestNode')
     msg = CANMessage(1234, 'Message', 8)
     node.add_message(msg)
     sig = CANSignal('Signal', 0, 8)
     cn.add_node(node)
     assert cn.get_signal(can_id=1234, name='Signal') == None
Exemple #8
0
 def test_raw_value_setter_signing_exception(self):
     sig = CANSignal('Signal', 0, 8)
     sig.signed = False
     sig.raw_value = 0
     sig.raw_value = 10
     with pytest.raises(AttributeError):
         sig.raw_value = -1
     sig.signed = True
     sig.raw_value = -1
Exemple #9
0
 def test_parse_signal_desc(self, line, can_id, signal_name, expected_desc):
     parser = DBCParser()
     node = CANNode('Node')
     msg = CANMessage(can_id, 'Message', 8)
     sig = CANSignal(signal_name, 0, 8)
     msg.add_signal(sig)
     node.add_message(msg)
     parser._can_network.add_node(node)
     parser._parse_line(line)
     assert sig.description == expected_desc
Exemple #10
0
 def test_get_consumed_messages(self):
     cn = CANNetwork()
     cn.add_node(CANNode('SendingNode'))
     cn.add_node(CANNode('ReceivingNode'))
     cn.nodes['SendingNode'].add_message(CANMessage(1, 'Message', 1))
     sig = CANSignal('Signal', 0, 8)
     sig.add_receiver(cn.nodes['ReceivingNode'])
     cn.nodes['SendingNode'].messages[1].add_signal(sig)
     assert cn.nodes['SendingNode'].messages[1] in cn.get_consumed_messages(
         cn.nodes['ReceivingNode'])
Exemple #11
0
    def test_parse_val(self, line, msg_id, signal_name, expected_dict, val_table_name):
        parser = DBCParser()
        if val_table_name:
            parser._can_network.add_value_dict(val_table_name, expected_dict)

        node = CANNode('Node')
        parser._can_network.add_node(node)
        msg = CANMessage(msg_id, 'Message', 1)
        node.add_message(msg)
        sig = CANSignal(signal_name, 0, 8)
        msg.add_signal(sig)

        parser._parse_line(line)

        assert sig.value_dict == expected_dict
Exemple #12
0
 def test_raw_value_setter_exceed_length(self):
     sig = CANSignal('Signal', 0, 3)
     sig.raw_value = 7
     assert sig.raw_value == 7
     with pytest.raises(AttributeError):
         sig.raw_value = 8
     sig.signed = True
     sig.raw_value = 3
     assert sig.raw_value == 3
     sig.raw_value = -3
     assert sig.raw_value == -3
     with pytest.raises(AttributeError):
         sig.raw_value = 4
     assert sig.raw_value == -3
     with pytest.raises(AttributeError):
         sig.raw_value = -4
     assert sig.raw_value == -3
Exemple #13
0
    def _parse_signal(self, signal_str):
        """Parses a signal string and updates the CANBus

        Args:
            signal_str: String with signal informations
        Raises:
            RuntimeError: If signal definition is not in a message block
        """
        if self._mode[0] != 'MESSAGE':
            raise RuntimeError('Signal description not in message block')

        pattern = 'SG_\s+(?P<name>\S+)\s*(?P<is_multipexer>M)?(?P<multiplexer_id>m\d+)?\s*:\s*'
        pattern += '(?P<start_bit>\d+)\|(?P<length>\d+)\@(?P<endianness>[0|1])(?P<sign>[\+|\-])\s*'
        pattern += '\(\s*(?P<factor>\S+)\s*,\s*(?P<offset>\S+)\s*\)\s*'
        pattern += '\[\s*(?P<min_value>\S+)\s*\|\s*(?P<max_value>\S+)\s*\]\s*"(?P<unit>\S*)"\s+(?P<receivers>.+)'
        reg = re.search(pattern, signal_str)

        little_endian = True if reg.group(
            'endianness').strip() == '1' else False
        signed = True if reg.group('sign').strip() == '-' else False
        receivers = [
            receiver.strip() for receiver in re.sub(
                '\s+', ' ', reg.group('receivers')).strip().split(' ')
        ]
        is_multiplexer = True if reg.group('is_multipexer') else False
        multiplexer_id = int(reg.group('multiplexer_id').strip()
                             [1:]) if reg.group('multiplexer_id') else None

        signal = CANSignal(name=reg.group('name').strip(),
                           start_bit=int(reg.group('start_bit')),
                           length=int(reg.group('length')),
                           little_endian=little_endian,
                           signed=signed,
                           factor=float(reg.group('factor')),
                           offset=float(reg.group('offset')),
                           value_min=float(reg.group('min_value')),
                           value_max=float(reg.group('max_value')),
                           unit=reg.group('unit').strip(),
                           is_multiplexer=is_multiplexer,
                           multiplexer_id=multiplexer_id)
        for node_name in receivers:
            node = self._can_network.nodes[node_name]
            signal.add_receiver(node)
        self._mode[1].add_signal(signal)
Exemple #14
0
    def test_parse_attribute(self, line, expected_value, attr_definition, cfg_dict):
        parser = DBCParser()
        parser._can_network.attributes.add_definition(attr_definition)

        if attr_definition.obj_type == CANNetwork:
            can_object = parser._can_network
        if attr_definition.obj_type in [CANNode, CANMessage, CANSignal]:
            cfg_dict['NODE'] = CANNode(cfg_dict['NODE'])
            parser._can_network.add_node(cfg_dict['NODE'])
            can_object = cfg_dict['NODE']
        if attr_definition.obj_type in [CANMessage, CANSignal]:
            cfg_dict['MESSAGE'] = CANMessage(cfg_dict['MESSAGE'], 'Message', 1)
            cfg_dict['NODE'].add_message(cfg_dict['MESSAGE'])
            can_object = cfg_dict['MESSAGE']
        if attr_definition.obj_type in [CANSignal]:
            cfg_dict['SIGNAL'] = CANSignal(cfg_dict['SIGNAL'], 0, 8)
            cfg_dict['MESSAGE'].add_signal(cfg_dict['SIGNAL'])
            can_object = cfg_dict['SIGNAL']

        parser._parse_line(line)
        assert can_object.attributes[attr_definition.name].value == expected_value
Exemple #15
0
 def test_add_signal_with_message(self):
     sig = CANSignal('Signal', 0, 8)
     sig.message = CANMessage(1, 'Name', 8)
     msg = CANMessage(2, 'Name', 8)
     with pytest.raises(RuntimeError):
         msg.add_signal(sig)
Exemple #16
0
 def test_int(self):
     msg = CANMessage(1, 'Name', 1)
     sig = CANSignal('Signal', 0, 8)
     sig.raw_value = 100
     msg.add_signal(sig)
     assert int(msg) == 100
Exemple #17
0
 def test_int_splitted(self):
     msg = CANMessage(1, 'Name', 2)
     sig = CANSignal('Signal', 4, 8)
     sig.raw_value = 100
     msg.add_signal(sig)
     assert int(msg) == int(sig.bits) << 4
Exemple #18
0
 def test_signal_multiplexer_settings_check_fail(self):
     msg = CANMessage(1, 'Message', 1)
     with pytest.raises(RuntimeError):
         msg.add_signal(CANSignal('Signal', 0, 8, multiplexer_id=1))
Exemple #19
0
 def test_signal_fit_check_fail(self):
     msg = CANMessage(1, 'Message', 1)
     with pytest.raises(RuntimeError):
         msg.add_signal(CANSignal('Signal', 0, 10))
Exemple #20
0
 def test_add_receiver(self):
     node = CANNode('TestNode')
     sig = CANSignal('Signal', 0, 8)
     sig.add_receiver(node)
     assert len(sig.receiver) == 1
Exemple #21
0
 def test_bits_setter(self):
     sig = CANSignal('Signal', 0, 8)
     ba = BitArray(size=8, value=200)
     sig.bits = ba
     assert sig.raw_value == 200
Exemple #22
0
 def test_value_setter_raw_value(self):
     sig = CANSignal('Signal', 0, 8)
     sig.value = 10
     assert sig.raw_value == 10
Exemple #23
0
 def test_value_setter_raw_value_conversion(self):
     sig = CANSignal('Signal', 0, 8)
     sig.factor = 2.5
     sig.offset = 1.25
     sig.value = 11.25
     assert sig.raw_value == 4
Exemple #24
0
 def test_value_getter(self):
     sig = CANSignal('Signal', 0, 8)
     sig.factor = 2.5
     sig.offset = 1.25
     sig.raw_value = 2
     assert sig.value == sig.raw_value * 2.5 + 1.25
Exemple #25
0
 def test_raw_value_setter_only_int(self):
     sig = CANSignal('Signal', 0, 3)
     with pytest.raises(AttributeError):
         sig.raw_value = None
     with pytest.raises(AttributeError):
         sig.raw_value = 'a'
Exemple #26
0
 def test_add_signal(self):
     msg = CANMessage(1, 'Name', 8)
     sig = CANSignal('Signal', 0, 8)
     msg.add_signal(sig)
     assert 'Signal' in msg.signals
     assert sig.parent == msg
Exemple #27
0
 def test_raw_value_getter(self):
     sig = CANSignal('Signal1', 0, 8)
     sig._raw_value = 10
     assert sig.raw_value == 10
Exemple #28
0
 def test_int_repr(self):
     sig = CANSignal('Signal1', 0, 8)
     sig._raw_value = 10
     assert int(sig) == 10