Ejemplo n.º 1
0
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
Ejemplo n.º 2
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")
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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"]
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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]
Ejemplo n.º 9
0
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')
Ejemplo n.º 10
0
def test_node_class():
    """Test loading essential open node classes."""
    assert NodeM3 == open_node_class('m3')
    assert NodeA8 == open_node_class('a8')
Ejemplo n.º 11
0
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__
Ejemplo n.º 12
0
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]