def test_open_node_inheritance(): """ test case for open node that derive from other open nodes in the case the superclass does not have the TYPE attribute """ class NodeStLinkBoard1(BaseOpenNode): """derived class 1""" TYPE = "stlink_board_1" class NodeStLinkBoard2(BaseOpenNode, OpenNodeBase): """derived class 2""" TYPE = "stlink_board_2" board_1 = open_node_class("stlink_board_1") board_2 = open_node_class("stlink_board_2") for node in all_open_nodes_types(): assert open_node_class(node) != BaseOpenNode assert board_1 == NodeStLinkBoard1 assert board_2 == NodeStLinkBoard2 board_instance = board_1() assert board_instance.TTY == '/dev/iotlab/tty_stlink' assert board_instance.BAUDRATE == 4242 assert board_instance.setup('path/to/firmware') == 42 assert board_instance.teardown() == 4242 assert board_instance.status() == 0
def test_registry_open_node(): """ Verify the open node registry metaclass """ class MyNode(OpenNodeBase): # pylint:disable=abstract-method """Basic empty OpenNode""" TYPE = "my_node" ELF_TARGET = ('ELFCLASS32', 'EM_ARM') AUTOTEST_AVAILABLE = ['echo', 'get_time'] assert open_node_class("my_node") == MyNode with pytest.raises(ValueError): open_node_class("invalid_node")
def __init__(self): board_type = config.read_config('board_type') self.board_class = nodes.open_node_class(board_type) cn_type = config.read_config('control_node_type', 'iotlab') self.cn_class = nodes.control_node_class(cn_type) linux_on_type = config.read_config('linux_open_node_type', None) self.linux_on_class = (nodes.open_node_class(linux_on_type) if linux_on_type else None) self.robot_type = config.read_config('robot', None) self.node_id = config.read_config('hostname') self.profile_from_dict = functools.partial(profile.Profile.from_dict, self.board_class) self.default_profile = self.profile_from_dict(config.DEFAULT_PROFILE)
def test_nodes_classes(): """Test loading all implemented open nodes implementation.""" for node in all_open_nodes_types(): # No exception print(node) node_class = open_node_class(node) node_class() print(node_class)
def test_node_verify_errors(): """test case for verify open node method.""" class OpenNodeElfTargetInvalid(BaseOpenNode): # pylint:disable=abstract-method,unused-variable """OpenNode with invalid elf target attribute.""" TYPE = "open_node_elf_target_invalid" ELF_TARGET = ('INVALID') with pytest.raises(ValueError): open_node_class("open_node_elf_target_invalid") # Remove test node from registry del OpenNodeBase.__registry__["open_node_elf_target_invalid"] class OpenNodeNoElfTargetNone(BaseOpenNode): # pylint:disable=abstract-method,unused-variable """OpenNode with None elf target attribute.""" TYPE = "open_node_elf_target_none" ELF_TARGET = None with pytest.raises(ValueError): open_node_class("open_node_elf_target_none") # Remove test node from registry del OpenNodeBase.__registry__["open_node_elf_target_none"] class OpenNodeInvalidAutotest(BaseOpenNode): # pylint:disable=abstract-method,unused-variable """OpenNode with invalid autotest attribute.""" TYPE = "open_node_invalid_autotest" AUTOTEST_AVAILABLE = ['echo', 'invalid'] with pytest.raises(ValueError): open_node_class("open_node_invalid_autotest") # Remove test node from registry del OpenNodeBase.__registry__["open_node_invalid_autotest"] class OpenNodeIncompatibleElf(BaseOpenNode): # pylint:disable=abstract-method,unused-variable """OpenNode with incompatible firmwares.""" TYPE = "open_node_incompatible_elf" FW_IDLE = "idle" FW_AUTOTEST = "autotest" with patch('gateway_code.utils.' 'elftarget.is_compatible_with_node') as is_compatible: is_compatible.return_value = False with pytest.raises(ValueError): open_node_class("open_node_incompatible_elf") # Remove test node from registry del OpenNodeBase.__registry__["open_node_incompatible_elf"]
def test_nodes_classes(check_output): """Test loading all implemented open nodes implementation.""" # node_lora_gateway starts the lora_pkt_forwarder during initialization # so we need to mock the process pid check. check_output.return_value = 42 for node in all_open_nodes_types(): # No exception print(node) node_class = open_node_class(node) node_class() print(node_class)
def test_registry_inheritance(): """ test case for open node that derive from other open nodes """ class DerivedOpenNode(BaseOpenNode): # pylint:disable=abstract-method """Derivation with normal class inheritance""" TYPE = "derived_open_node" class MixinDerivedOpenNode(BaseOpenNode, OpenNodeBase): # pylint:disable=abstract-method """Derivation + OpenNode mixin""" TYPE = "mixin_derived_open_node" assert open_node_class("base_open_node") == BaseOpenNode assert open_node_class("derived_open_node") == DerivedOpenNode assert open_node_class("mixin_derived_open_node") == MixinDerivedOpenNode class TypeMissingDerivedOpenNode(BaseOpenNode): # pylint:disable=abstract-method """trap with missing TYPE""" pass # the derived class overrides the base class in the registry assert open_node_class("base_open_node") == TypeMissingDerivedOpenNode
def test_registry_inheritance(): """ test case for open node that derive from other open nodes """ class DerivedOpenNode(BaseOpenNode): # pylint:disable=abstract-method """Derivation with normal class inheritance""" TYPE = "derived_open_node" class MixinDerivedOpenNode(BaseOpenNode, OpenNodeBase): # pylint:disable=abstract-method """Derivation + OpenNode mixin""" TYPE = "mixin_derived_open_node" REGISTRY[BaseOpenNode.TYPE] = BaseOpenNode REGISTRY[DerivedOpenNode.TYPE] = DerivedOpenNode REGISTRY[MixinDerivedOpenNode.TYPE] = MixinDerivedOpenNode assert open_node_class("base_open_node") == BaseOpenNode assert open_node_class("derived_open_node") == DerivedOpenNode assert open_node_class("mixin_derived_open_node") == MixinDerivedOpenNode del REGISTRY[BaseOpenNode.TYPE] del REGISTRY[DerivedOpenNode.TYPE] del REGISTRY[MixinDerivedOpenNode.TYPE]
def test_open_node_class_errors(): """Test error while loading an open node class.""" # No module with pytest.raises(ValueError, match='^Board unknown not implemented*$'): open_node_class('unknown')
def test_node_class(): """Test loading essential open node classes.""" assert NodeM3 == open_node_class('m3') assert NodeA8 == open_node_class('a8')
def test_node_class(): """Test loading essential open node classes.""" assert NodeM3.__name__ == open_node_class('m3').__name__ assert NodeA8.__name__ == open_node_class('a8').__name__
def test_node_verify_errors(): """test case for verify open node method.""" class OpenNodeElfTargetInvalid(BaseOpenNode): # pylint:disable=abstract-method,unused-variable """OpenNode with invalid elf target attribute.""" TYPE = "open_node_elf_target_invalid" ELF_TARGET = ('INVALID') REGISTRY[OpenNodeElfTargetInvalid.TYPE] = OpenNodeElfTargetInvalid with pytest.raises(ValueError): open_node_class("open_node_elf_target_invalid") # Remove test node from registry del REGISTRY[OpenNodeElfTargetInvalid.TYPE] class OpenNodeNoElfTargetNone(BaseOpenNode): # pylint:disable=abstract-method,unused-variable """OpenNode with None elf target attribute.""" TYPE = "open_node_elf_target_none" ELF_TARGET = None REGISTRY[OpenNodeNoElfTargetNone.TYPE] = OpenNodeNoElfTargetNone with pytest.raises(ValueError): open_node_class("open_node_elf_target_none") # Remove test node from registry del REGISTRY[OpenNodeNoElfTargetNone.TYPE] class OpenNodeInvalidAutotest(BaseOpenNode): # pylint:disable=abstract-method,unused-variable """OpenNode with invalid autotest attribute.""" TYPE = "open_node_invalid_autotest" AUTOTEST_AVAILABLE = ['echo', 'invalid'] REGISTRY[OpenNodeInvalidAutotest.TYPE] = OpenNodeInvalidAutotest with pytest.raises(ValueError): open_node_class("open_node_invalid_autotest") # Remove test node from registry del REGISTRY[OpenNodeInvalidAutotest.TYPE] class OpenNodeIncompatibleElf(BaseOpenNode): # pylint:disable=abstract-method,unused-variable """OpenNode with incompatible firmwares.""" TYPE = "open_node_incompatible_elf" FW_IDLE = "idle" FW_AUTOTEST = "autotest" REGISTRY[OpenNodeIncompatibleElf.TYPE] = OpenNodeIncompatibleElf # skip on iotlab gateways because of too little RAM if os.uname()[4] != 'armv7l': with patch('gateway_code.utils.' 'elftarget.is_compatible_with_node') as is_compatible: is_compatible.return_value = False with pytest.raises(ValueError): open_node_class("open_node_incompatible_elf") # Remove test node from registry del REGISTRY[OpenNodeIncompatibleElf.TYPE]