Source code for tests.test_configuration

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
test_configuration
----------------------------------

Tests for `configuration` module.
"""

import copy
import os
import sys
import unittest

assert sys.version_info >= (3, 3, 0), "Python version 3.3 or later required!"

from can4python import canframe_definition
from can4python import cansignal
from can4python import configuration
from can4python import exceptions

FRAME_ID_SEND = 7
FRAME_ID_RECEIVE = 12
NON_EXISTING_FRAME_ID = 99

testsig1 = cansignal.CanSignalDefinition('testsignal1', 56, 1)  # Least significant bit in last byte
testsig2 = cansignal.CanSignalDefinition('testsignal2', 8, 16, endianness='big')  # Two leftmost bytes
testsig3 = cansignal.CanSignalDefinition('testsignal3', 24, 16, endianness='little')  # Two center bytes
testsig4 = cansignal.CanSignalDefinition('testsignal4', 59, 4, endianness='big', signaltype='signed')
fr_def1 = canframe_definition.CanFrameDefinition(FRAME_ID_SEND, 'testframedef_send')
fr_def1.producer_ids = ["1"]
fr_def1.signaldefinitions.append(testsig1)
fr_def1.signaldefinitions.append(testsig2)
fr_def1.signaldefinitions.append(testsig3)
fr_def1.signaldefinitions.append(testsig4)
testsig11 = cansignal.CanSignalDefinition('testsignal11', 56, 1)  # Least significant bit in last byte
testsig12 = cansignal.CanSignalDefinition('testsignal12', 8, 16, endianness='big')  # Two leftmost bytes
testsig13 = cansignal.CanSignalDefinition('testsignal13', 24, 16, endianness='little')  # Two center bytes
testsig14 = cansignal.CanSignalDefinition('testsignal14', 59, 4, endianness='big', signaltype='signed')
fr_def2 = canframe_definition.CanFrameDefinition(FRAME_ID_RECEIVE, 'testframedef_receive')
fr_def2.producer_ids = ["77"]
fr_def2.signaldefinitions.append(testsig11)
fr_def2.signaldefinitions.append(testsig12)
fr_def2.signaldefinitions.append(testsig13)
fr_def2.signaldefinitions.append(testsig14)

TESTCONFIG1 = configuration.Configuration()
TESTCONFIG1.add_framedefinition(fr_def1)
TESTCONFIG1.add_framedefinition(fr_def2)
TESTCONFIG1.busname = "bus1"
TESTCONFIG1.ego_node_ids = ["1", "33", "45A", "A",]

[docs]class TestConfiguration(unittest.TestCase):
[docs] def setUp(self): self.config = copy.deepcopy(TESTCONFIG1)
[docs] def testConstructor(self): config = configuration.Configuration() self.assertEqual(config.framedefinitions, {}) self.assertEqual(config.busname, None) config = configuration.Configuration(None, "ABC") self.assertEqual(config.framedefinitions, {}) self.assertEqual(config.busname, "ABC") config = configuration.Configuration(None, "ABC", ["1", "2", "3"]) self.assertEqual(config.framedefinitions, {}) self.assertEqual(config.busname, "ABC") self.assertEqual(config.ego_node_ids, set(["1", "2", "3"])) fr_def = canframe_definition.CanFrameDefinition(1, 'testframedef') sig1 = cansignal.CanSignalDefinition('testsignal', 56, 1) # Least significant bit in last byte fr_def.signaldefinitions.append(sig1) config = configuration.Configuration({1:fr_def}, "DEF") self.assertEqual(config.framedefinitions[1], fr_def) self.assertEqual(config.busname, "DEF")
[docs] def testRepr(self): result = repr(self.config) known_result = \ "CAN configuration object. Busname 'bus1', having 2 frameIDs defined. Enacts these node IDs: 1 33 45A A" self.assertEqual(result.strip(), known_result.strip())
[docs] def testProperties(self): self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].frame_id, FRAME_ID_SEND) self.assertEqual(self.config.ego_node_ids, set(["A", "1", "33", "45A"])) self.config.ego_node_ids = ["1", "1", "1", "2", "2", 3] self.assertEqual(self.config.ego_node_ids, set(["1", "2", "3"]))
[docs] def testPropertiesWrongValues(self): self.assertRaises(exceptions.CanException, setattr, self.config, 'ego_node_ids', 3) self.assertRaises(exceptions.CanException, setattr, self.config, 'ego_node_ids', "3")
[docs] def testSetThrottleTimes(self): self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].throttle_time, None) self.config.set_throttle_times({FRAME_ID_SEND: 123}) self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].throttle_time, 123)
[docs] def testSetThrottleTimesWrongValues(self): self.assertRaises(exceptions.CanException, self.config.set_throttle_times, {NON_EXISTING_FRAME_ID: 123}) self.assertRaises(exceptions.CanException, self.config.set_throttle_times, "ABC") self.assertRaises(exceptions.CanException, self.config.set_throttle_times, 123)
[docs] def testSetThrottleTimesFromSignalnames(self): self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].throttle_time, None) self.config.set_throttle_times_from_signalnames({'testsignal1': 125}) self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].throttle_time, 125) self.config.set_throttle_times_from_signalnames({'testsignal2': 126}) self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].throttle_time, 126)
[docs] def testSetThrottleTimesFromSignalnamesWrongValues(self): self.assertRaises(exceptions.CanException, self.config.set_throttle_times_from_signalnames, {"nonexistingsignal": 123}) self.assertRaises(exceptions.CanException, self.config.set_throttle_times_from_signalnames, "ABC") self.assertRaises(exceptions.CanException, self.config.set_throttle_times_from_signalnames, 123)
[docs] def testSetReceiveOnChangeOnly(self): self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].receive_on_change_only, False) self.config.set_receive_on_change_only([FRAME_ID_SEND]) self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].receive_on_change_only, True)
[docs] def testSetReceiveOnChangeOnlyWrongValue(self): self.assertRaises(exceptions.CanException, self.config.set_receive_on_change_only, [NON_EXISTING_FRAME_ID]) self.assertRaises(exceptions.CanException, self.config.set_receive_on_change_only, "ABC") self.assertRaises(exceptions.CanException, self.config.set_receive_on_change_only, 123)
[docs] def testSetReceiveOnChangeOnlyFromSignalnames(self): self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].receive_on_change_only, False) self.config.set_receive_on_change_only_from_signalnames(['testsignal1']) self.assertEqual(self.config.framedefinitions[FRAME_ID_SEND].receive_on_change_only, True)
[docs] def testSetReceiveOnChangeOnlyFromSignalnamesWrongValues(self): self.assertRaises(exceptions.CanException, self.config.set_receive_on_change_only_from_signalnames, ["nonexistingsignal"]) self.assertRaises(exceptions.CanException, self.config.set_receive_on_change_only_from_signalnames, "ABC") self.assertRaises(exceptions.CanException, self.config.set_receive_on_change_only_from_signalnames, 123)
[docs] def testGetDescriptiveAsciiArt(self): result = self.config.get_descriptive_ascii_art() print('\n\n' + result) # Check the output manually
[docs] def testAddFramedefinition(self): config = configuration.Configuration() fr_def = canframe_definition.CanFrameDefinition(1, 'testframedef') config.add_framedefinition(fr_def) self.assertEqual(config.framedefinitions[1], fr_def) self.assertEqual(config.busname, None)
if __name__ == '__main__': unittest.main()