Source code for pykiso.lib.robot_framework.dut_auxiliary

##########################################################################
# Copyright (c) 2010-2022 Robert Bosch GmbH
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# SPDX-License-Identifier: EPL-2.0
##########################################################################

"""
Testapp binding
***************

:module: dut_auxiliary

:synopsis: implementation of existing DUTAuxiliary for Robot
    framework usage.

.. currentmodule:: dut_auxiliary

"""

from typing import List

from robot.api import logger
from robot.api.deco import keyword, library

from pykiso.interfaces.thread_auxiliary import AuxiliaryInterface
from pykiso.message import MessageCommandType, MessageReportType, MessageType
from pykiso.test_coordinator.test_message_handler import (
    handle_basic_interaction,
)

from ..auxiliaries.dut_auxiliary import DUTAuxiliary as DutAux
from .aux_interface import RobotAuxInterface


[docs]class TestEntity: """Dummy Class to use handle_basic_interaction from test_message_handler.""" def __init__( self, test_suite_id: int, test_case_id: int, aux_list: List[AuxiliaryInterface], ): """Initialize generic test-case :param test_suite_id: test suite identification number :param test_case_id: test case identification number :param aux_list: list of used aux_list""" self.test_suite_id = test_suite_id self.test_case_id = test_case_id self.test_auxiliary_list = aux_list
[docs] def cleanup_and_skip(self, aux: AuxiliaryInterface, info_to_print: str): """Cleanup auxiliary and log reasons. :param aux: corresponding auxiliary to abort :param info_to_print: A message you want to print while cleaning up the test """ logger.error(info_to_print) # Send aborts to corresponding auxiliary if aux.abort_command() is not True: logger.error(f"Error occurred during abort command on auxiliary {aux}")
[docs]@library(version="0.0.1") class DUTAuxiliary(RobotAuxInterface): """Robot library to control the TestApp on the DUT""" ROBOT_LIBRARY_SCOPE = "SUITE" def __init__(self): """Initialize attributes.""" super().__init__(aux_type=DutAux)
[docs] @keyword(name="Test App") def test_app_run( self, command_type: str, test_suite_id: int, test_case_id: int, aux_list: List[str], timeout_cmd: int = 5, timeout_resp: int = 5, ) -> None: """Handle default communication mechanism between test manager and device under test. :param command_type: message command sub-type (TEST_SECTION_SETUP , TEST_SECTION_RUN, ...) :param test_suite_id: select test suite id on dut :param test_case_id: select test case id on dut :param aux_list: List of selected auxiliary :param timeout_cmd: timeout in seconds for auxiliary run_command :param timeout_resp: timeout in seconds for auxiliary wait_and_get_report """ auxiliaries = [self._get_aux(aux) for aux in aux_list] test_entity = TestEntity(test_suite_id, test_case_id, auxiliaries) with handle_basic_interaction( test_entity, MessageCommandType[command_type], timeout_cmd, timeout_resp, ) as report_infos: for _, report_msg, log_level_func, log_msg in report_infos: log_level_func(log_msg) if report_msg.get_message_type() == MessageType.REPORT: if not report_msg.sub_type == MessageReportType.TEST_PASS: # Raise assertion to make test red in robotframework raise AssertionError(f"Test Failed:{log_msg}")