Source code for pykiso.lib.auxiliaries.simulated_auxiliary.response_templates

##########################################################################
# 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
##########################################################################

"""
ResponseTemplates
*****************

:module: response_templates

:synopsis: Used to create a set of predefined messages

.. currentmodule:: response_templates

.. warning:: Still under test
"""
import random
from typing import List

from pykiso import message
from pykiso.message import Message


[docs]class ResponseTemplates: """Used to create a set of predefined messages (ACK, NACK, REPORT ...).""" reasons_list = [ "Component busy, could not run", "fatal error occur, could not run", "Overvoltage situation happen, could not run", ] log = []
[docs] @classmethod def default(cls, msg: Message) -> Message: """handle default response, if not test case/suite run just return ACK message otherwise ACK + REPORT. :param msg: current received message :return: list of Message """ if ( msg.sub_type in message.MessageCommandType.__members__.values() and msg.sub_type != message.MessageCommandType.PING and msg.sub_type != message.MessageCommandType.ABORT ): return cls.ack_with_report_ok(msg) else: return cls.ack(msg)
[docs] @classmethod def ack(cls, msg: Message) -> List[Message]: """Return an acknowledgment message. :param msg: current received message :return: list of Message """ return [msg.generate_ack_message(message.MessageAckType.ACK)]
[docs] @classmethod def ack_with_report_ok(cls, msg: Message) -> List[Message]: """Return an acknowledgment message and a report message with verdict pass. :param msg: current received message :return: list of Message """ ack_msg = msg.generate_ack_message(message.MessageAckType.ACK) report_msg = message.Message( msg_type=message.MessageType.REPORT, sub_type=message.MessageReportType.TEST_PASS, test_suite=msg.test_suite, test_case=msg.test_case, ) return [ack_msg, report_msg]
[docs] @classmethod def ack_with_report_nok(cls, msg: Message) -> List[Message]: """Return an acknowledgment message and a report message with verdict failed + tlv part with failure reason. :param msg: current received message :return: list of Message """ ack_run_cmd = msg.generate_ack_message(message.MessageAckType.ACK) report_msg = message.Message( msg_type=message.MessageType.REPORT, sub_type=message.MessageReportType.TEST_FAILED, test_suite=msg.test_suite, test_case=msg.test_case, ) report_msg.tlv_dict = cls.get_random_reason() return [ack_run_cmd, report_msg]
[docs] @classmethod def ack_with_logs_and_report_ok(cls, msg: Message) -> List[Message]: """Return an acknowledge message and log messages and report message with verdict pass. :param msg: current received message :return: list of Message """ ack_msg = msg.generate_ack_message(message.MessageAckType.ACK) log_msg = message.Message( msg_type=message.MessageType.LOG, sub_type=message.MessageLogType.RESERVED, test_suite=msg.test_suite, test_case=msg.test_case, ) report_msg = message.Message( msg_type=message.MessageType.REPORT, sub_type=message.MessageReportType.TEST_PASS, test_suite=msg.test_suite, test_case=msg.test_case, ) return [ack_msg, log_msg, log_msg, report_msg]
[docs] @classmethod def ack_with_logs_and_report_nok(cls, msg: Message) -> List[Message]: """Return an acknowledge message and log messages and report message with verdict failed + tlv part with failure reason. :param msg: current received message :return: list of Message """ ack_msg = msg.generate_ack_message(message.MessageAckType.ACK) log_msg = message.Message( msg_type=message.MessageType.LOG, sub_type=message.MessageLogType.RESERVED, test_suite=msg.test_suite, test_case=msg.test_case, ) report_msg = message.Message( msg_type=message.MessageType.REPORT, sub_type=message.MessageReportType.TEST_FAILED, test_suite=msg.test_suite, test_case=msg.test_case, ) report_msg.tlv_dict = cls.get_random_reason() return [ack_msg, log_msg, log_msg, report_msg]
[docs] @classmethod def get_random_reason(self) -> dict: """Return tlv dictionary containing a random reason from pre-defined reason list. :param msg: current received message :return: tlv dictionary with failure reason """ return { message.TlvKnownTags.FAILURE_REASON: random.choice( ResponseTemplates.reasons_list ) }
[docs] @classmethod def nack_with_reason(cls, msg: Message) -> List[Message]: """Return a NACK message with a tlv part containing the failure reason. :param msg: current received message :return: list of Message """ ack_msg = msg.generate_ack_message(message.MessageAckType.NACK) ack_msg.tlv_dict.update(cls.get_random_reason()) return [ack_msg]
[docs] @classmethod def ack_with_report_not_implemented(cls, msg: Message) -> List[Message]: """Return an acknowledge message and a report message with verdict test not implemented. :param msg: current received message :return: list of Message """ ack_run_cmd = msg.generate_ack_message(message.MessageAckType.ACK) report_msg = message.Message( msg_type=message.MessageType.REPORT, sub_type=message.MessageReportType.TEST_NOT_IMPLEMENTED, test_suite=msg.test_suite, test_case=msg.test_case, ) return [ack_run_cmd, report_msg]