| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // Copyright (c) 2000-2021 Ericsson Telecom AB |
| // |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v2.0 |
| // which accompanies this distribution, and is available at |
| // https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html |
| /////////////////////////////////////////////////////////////////////////////// |
| // File: EPTF_MQTT_Tests.ttcn |
| // Description: |
| // Rev: R1B |
| // Prodnr: CNL 113 860 |
| // Updated: 2021-02-03 |
| // Contact: http://ttcn.ericsson.se |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| /////////////////////////////////////////////////////////// |
| // Module: EPTF_MQTT_Tests |
| // |
| // Purpose: |
| // This module contains the component tests for the EPTF MQTT Applib |
| // |
| // Module Parameters: |
| // tsp_SUT_localHost - *charstring* - Hostname of the tested MQTT entity |
| // tsp_SUT_localPort - *integer* - Port number of the tested MQTT entity |
| // tsp_SUT_remoteHost - *charstring* - Hostname of the tester component |
| // tsp_SUT_remotePort - *integer* - Port number of the tester component |
| // |
| /////////////////////////////////////////////////////////////// |
| |
| module EPTF_MQTT_Tests |
| { |
| import from EPTF_MBT_LGen_Definitions all; |
| import from EPTF_MBT_LGen_Functions all; |
| import from EPTF_MQTT_LGen_Definitions all; |
| import from EPTF_MQTT_LGen_Functions all; |
| import from EPTF_MQTT_LocalTransport_Definitions all; |
| import from EPTF_MQTT_LocalTransport_Functions all; |
| import from EPTF_CLL_Base_Functions all; |
| import from MQTT_v3_1_1_Types all; |
| import from IoT_FT_Framework_Definitions all; |
| import from IoT_FT_Framework_Functions all; |
| import from IFW_MQTT_Server_Definitions all; |
| import from IFW_MQTT_Server_TestSteps all; |
| |
| modulepar charstring tsp_SUT_localHost := "127.0.0.1"; |
| modulepar integer tsp_SUT_localPort := 30000; |
| modulepar charstring tsp_SUT_remoteHost := "127.0.0.1"; |
| modulepar integer tsp_SUT_remotePort := 40000; |
| |
| // SUT: Coap LGen |
| type component SUT_CT extends EPTF_MBT_LGen_CT, EPTF_MQTT_LGen_CT, EPTF_MQTT_LocalTransport_CT {} |
| |
| // Tester_CT |
| type component Tester_CT extends EPTF_MBT_Tester_CT, IFW_MAIN_CT {} |
| |
| function f_MQTT_Tests_begin() runs on Tester_CT |
| { |
| log(%definitionId, " started"); |
| setverdict(pass); |
| |
| f_EPTF_Base_init_CT("mtc"); |
| |
| log(%definitionId, " Creating SUT"); |
| |
| var SUT_CT vc_sut := SUT_CT.create; |
| connect(self:EPTF_MBT_TESTER_PCO, vc_sut:EPTF_MBT_PCO); |
| vc_sut.start(f_SUT_behavior()); |
| EPTF_MBT_TESTER_PCO.receive(EPTF_MBT_CommandResponse:?) from vc_sut; |
| |
| EPTF_MBT_TESTER_PCO.send(EPTF_MBT_ConfigRequest: |
| { |
| entityGroupName := "SUT_EntityType", |
| noEntities := 1, |
| behaviors := {c_EPTF_MBT_myBName, c_MQTT_behaviorType}, |
| fsmName := "FSM_MBT" |
| } |
| ) to vc_sut; |
| EPTF_MBT_TESTER_PCO.receive(EPTF_MBT_ConfigResponse:?) from vc_sut; |
| |
| log(%definitionId, " SUT ready"); |
| |
| log(%definitionId, " finished"); |
| } |
| |
| function f_MQTT_Tests_end() runs on Tester_CT |
| { |
| log("### MAIN: END TESTCASE started"); |
| |
| f_EPTF_Base_stopAll(none, true); |
| |
| log("### MAIN: END TESTCASE finished"); |
| } |
| |
| function f_handleVerdict(in boolean p_verdict, in charstring p_reason := "") |
| return boolean |
| { |
| if (p_verdict) { setverdict(pass); return true; } |
| else { setverdict(fail, p_reason); return false; } |
| } |
| |
| function f_SUT_behavior() runs on SUT_CT |
| { |
| // Init |
| f_EPTF_MBT_init("SUT_LGen",0, "SUT_"); |
| |
| f_EPTF_MQTT_LGen_init("SUT_LGen"); |
| f_EPTF_MQTT_LocalTransport_init(); |
| |
| vf_EPTF_MQTT_Transport_send := refers(f_EPTF_MQTT_LocalTransport_send); |
| vf_EPTF_MQTT_Transport_receiveMessage := refers(f_EPTF_MQTT_LGen_receiveMessage); |
| vf_EPTF_MQTT_Transport_receiveEvent := refers(f_EPTF_MQTT_LGen_receiveEvent); |
| vf_EPTF_MQTT_Transport_apiRequest := refers(f_EPTF_MQTT_LocalTransport_transportApiRequest); |
| vf_EPTF_MQTT_Transport_apiResponse := refers(f_EPTF_MQTT_LGen_transportApiResponse); |
| |
| var integer vl_addrIdx; |
| // local address: 0 idx |
| f_EPTF_MQTT_addressDB_add({tsp_SUT_localHost, tsp_SUT_localPort}, vl_addrIdx); |
| // remote address: 1 idx |
| f_EPTF_MQTT_addressDB_add({tsp_SUT_remoteHost, tsp_SUT_remotePort}, vl_addrIdx); |
| |
| var integer v_tempIdx; |
| v_tempIdx := f_EPTF_MQTT_templateDB_add({id:= "t_MQTT_connect", msg:=valueof(t_MQTT_connect)}); |
| v_tempIdx := f_EPTF_MQTT_templateDB_add({id:= "t_MQTT_disconnect", msg:=valueof(t_MQTT_disconnect)}); |
| v_tempIdx := f_EPTF_MQTT_templateDB_add({id:= "t_MQTT_publish", msg:=valueof(t_MQTT_publish)}); |
| v_tempIdx := f_EPTF_MQTT_templateDB_add({id:= "t_MQTT_subscribe", msg:=valueof(t_MQTT_subscribe)}); |
| v_tempIdx := f_EPTF_MQTT_templateDB_add({id:= "t_MQTT_unsubscribe", msg:=valueof(t_MQTT_unsubscribe)}); |
| |
| f_EPTF_MBT_initLGenFsm(null, null); |
| EPTF_MBT_PCO.send(EPTF_MBT_CommandResponse:{ ready := {}}) to mtc; |
| |
| // Loop |
| f_EPTF_Base_wait4Shutdown(); |
| } |
| |
| const integer c_localAddr := 0; |
| const integer c_remoteAddr := 1; |
| |
| const integer c_t_MQTT_connect := 0; |
| const integer c_t_MQTT_disconnect := 1; |
| const integer c_t_MQTT_publish := 2; |
| const integer c_t_MQTT_subscribe := 3; |
| const integer c_t_MQTT_unsubscribe := 4; |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_tcp_connect |
| // |
| // Purpose: |
| // Testing a TCP connection establishment sequence |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_tcp_connect.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_tcp_connect.jpg |
| * FSM -> Applib: c_MQTT_stepName_init() |
| * FSM -> Applib: c_MQTT_stepName_setLocalAddress(c_localAddr) |
| * FSM -> Applib: c_MQTT_stepName_setRemoteAddress(c_remoteAddr) |
| * FSM -> Applib: c_MQTT_stepName_transportConnect() |
| * FSM <- Applib: c_MQTT_eventName_transportSucc |
| * Broker <- Applib: TCP SYN |
| * Broker -> Applib: TCP SYN ACK |
| * Broker <- Applib: TCP ACK |
| * FSM <- Applib: c_MQTT_eventName_transportEstablished |
| * FSM -> Applib: c_MQTT_stepName_transportClose() |
| * FSM <- Applib: c_MQTT_eventName_transportSucc |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_tcp_connect() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| f_delay(1.0); |
| |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_connect |
| // |
| // Purpose: |
| // Testing a MQTT connection establishment sequence |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_connect.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_connect.jpg |
| * FSM -> Applib: c_MQTT_stepName_init() |
| * FSM -> Applib: c_MQTT_stepName_setLocalAddress(c_localAddr) |
| * FSM -> Applib: c_MQTT_stepName_setRemoteAddress(c_remoteAddr) |
| * FSM -> Applib: c_MQTT_stepName_transportConnect() |
| * FSM <- Applib: c_MQTT_eventName_transportSucc |
| * Broker <- Applib: TCP SYN |
| * Broker -> Applib: TCP SYN ACK |
| * Broker <- Applib: TCP ACK |
| * FSM <- Applib: c_MQTT_eventName_transportEstablished |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_connect) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT CONNECT |
| * Broker -> Applib: MQTT CONNACK Accepted |
| * FSM <- Applib: c_MQTT_eventName_CONNACK_Accepted |
| * FSM -> Applib: c_MQTT_stepName_transportClose() |
| * FSM <- Applib: c_MQTT_eventName_transportSucc |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_connect() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_delay(1.0); |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_keepalive |
| // |
| // Purpose: |
| // Testing a MQTT PING sending sequence |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_keepalive.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_keepalive.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_reportPingResponse |
| * ... keepalive [5.0] seconds ... |
| * Broker <- Applib: MQTT PINGREQ |
| * Broker -> Applib: MQTT PINGRESP |
| * FSM <- Applib: c_MQTT_eventName_PING_Response |
| * ... keepalive [5.0] seconds ... |
| * Broker <- Applib: MQTT PINGREQ |
| * Broker -> Applib: MQTT PINGRESP |
| * FSM <- Applib: c_MQTT_eventName_PING_Response |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_keepalive() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| f_MBT_execute(c_MQTT_stepName_reportPingResponse, valueof(t_addr(0, 0)), {1}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_pingreq), "not valid ping request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_pingresp)); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PING_Response, valueof(t_addr(0, 0)), 3.0), "MQTT PING response was not received")) |
| { |
| f_IFW_MqttServer_receive(mqtt_server); |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_pingreq), "not valid 2nd ping request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_pingresp)); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PING_Response, valueof(t_addr(0, 0)), 3.0), "2nd MQTT PING response was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_subscribe_accepted |
| // |
| // Purpose: |
| // Testing a MQTT SUBSCRIBE sending sequence which is accepted |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_subscribe_accepted.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_subscribe_accepted.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * Broker -> Applib: MQTT SUBACK {0} |
| * FSM <- Applib: c_MQTT_eventName_SUBACK_Accepted |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_subscribe_accepted() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_suback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBACK_Accepted, valueof(t_addr(0, 0)), 3.0), "MQTT SUBACK accepted was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_subscribe_refused |
| // |
| // Purpose: |
| // Testing a MQTT SUBSCRIBE sending sequence which is refused |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_subscribe_accepted.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_subscribe_refused.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * Broker -> Applib: MQTT SUBACK {128} |
| * FSM <- Applib: c_MQTT_eventName_SUBACK_Refused |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_subscribe_refused() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_suback_refused), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBACK_Refused, valueof(t_addr(0, 0)), 3.0), "MQTT SUBACK accepted was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_subscribe_timeout |
| // |
| // Purpose: |
| // Testing a MQTT SUBSCRIBE sending sequence which is timing out |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_subscribe_timeout.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_subscribe_timeout.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * ... tsp_EPTF_MQTT_PUBLISH_responseWatchdog [3.0] seconds ... |
| * FSM <- Applib: c_MQTT_eventName_SUBSCRIBE_Timeout |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_subscribe_timeout() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBSCRIBE_Timeout, valueof(t_addr(0, 0)), 5.0), "MQTT SBUSCRIBE timeout event was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_unsubscribe |
| // |
| // Purpose: |
| // Testing a MQTT UNSUBSCRIBE sending sequence which is accepted |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_unsubscribe.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_unsubscribe.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * Broker -> Applib: MQTT SUBACK {0} |
| * FSM <- Applib: c_MQTT_eventName_SUBACK_Accepted |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_unsubscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT UNSUBSCRIBE |
| * Broker -> Applib: MQTT UNSUBACK |
| * FSM <- Applib: c_MQTT_eventName_UNSUBACK |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_unsubscribe() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_suback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBACK_Accepted, valueof(t_addr(0, 0)), 3.0), "MQTT SUBACK accepted was not received")) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_unsubscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_unsubscribe), "not valid unsubscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_unsuback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_UNSUBACK, valueof(t_addr(0, 0)), 3.0), "MQTT UNSUBACK was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_unsubscribe_timeout |
| // |
| // Purpose: |
| // Testing a MQTT UNSUBSCRIBE sending sequence which is accepted |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_unsubscribe_timeout.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_unsubscribe_timeout.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * Broker -> Applib: MQTT SUBACK {0} |
| * FSM <- Applib: c_MQTT_eventName_SUBACK_Accepted |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_unsubscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT UNSUBSCRIBE |
| * ... tsp_EPTF_MQTT_PUBLISH_responseWatchdog [3.0] seconds ... |
| * FSM <- Applib: c_MQTT_eventName_SUBSCRIBE_Timeout |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_unsubscribe_timeout() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_suback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBACK_Accepted, valueof(t_addr(0, 0)), 3.0), "MQTT SUBACK accepted was not received")) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_unsubscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_unsubscribe), "not valid unsubscribe request")) |
| { |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBSCRIBE_Timeout, valueof(t_addr(0, 0)), 5.0), "MQTT SBUSCRIBE timeout event was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_receive_publish_qos0 |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH receiving sequence |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_receive_publish_qos0.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_receive_publish_qos0.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * Broker -> Applib: MQTT SUBACK {0} |
| * FSM <- Applib: c_MQTT_eventName_SUBACK_Accepted |
| * Broker -> Applib: MQTT PUBLISH qos0 |
| * FSM <- Applib: c_MQTT_eventName_PUBLISH |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_receive_publish_qos0() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_suback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBACK_Accepted, valueof(t_addr(0, 0)), 3.0), "MQTT SUBACK accepted was not received")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_publish_qos0)); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBLISH, valueof(t_addr(0, 0)), 3.0), "MQTT PUBLISH was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_receive_publish_qos1 |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH receiving sequence qos1 |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_receive_publish_qos1.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_receive_publish_qos1.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * Broker -> Applib: MQTT SUBACK {0} |
| * FSM <- Applib: c_MQTT_eventName_SUBACK_Accepted |
| * Broker -> Applib: MQTT PUBLISH qos1 |
| * FSM <- Applib: c_MQTT_eventName_PUBLISH |
| * Broker <- Applib: MQTT PUBACK |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_receive_publish_qos1() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_suback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBACK_Accepted, valueof(t_addr(0, 0)), 3.0), "MQTT SUBACK accepted was not received")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_publish_qos1)); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBLISH, valueof(t_addr(0, 0)), 3.0), "MQTT PUBLISH was not received")) |
| { |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_puback), "not valid puback request")) |
| { |
| setverdict(pass); |
| } |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_receive_publish_qos2 |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH receiving sequence qos2 |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_receive_publish_qos2.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_receive_publish_qos2.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_reportPublishResponse(true) |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * Broker -> Applib: MQTT SUBACK {0} |
| * FSM <- Applib: c_MQTT_eventName_SUBACK_Accepted |
| * Broker -> Applib: MQTT PUBLISH qos2 |
| * FSM <- Applib: c_MQTT_eventName_PUBLISH |
| * Broker <- Applib: MQTT PUBREC |
| * Broker -> Applib: MQTT PUBREL |
| * FSM <- Applib: c_MQTT_eventName_PUBREL |
| * Broker <- Applib: MQTT PUBCOMP |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_receive_publish_qos2() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| f_MBT_execute(c_MQTT_stepName_reportPublishResponse, valueof(t_addr(0, 0)), {1}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_suback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBACK_Accepted, valueof(t_addr(0, 0)), 3.0), "MQTT SUBACK accepted was not received")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_publish_qos2)); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBLISH, valueof(t_addr(0, 0)), 3.0), "MQTT PUBLISH was not received")) |
| { |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_pubrec), "not valid pubrec request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_pubrel), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBREL, valueof(t_addr(0, 0)), 3.0), "MQTT PUBREL was not received")) |
| { |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_pubcomp), "not valid pubcomp request")) |
| { |
| setverdict(pass); |
| } |
| } |
| } |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_receive_publish_qos2_timeout |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH receiving sequence qos2 with timeout |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_receive_publish_qos2_timeout.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_receive_publish_qos2_timeout.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_reportPublishResponse(true) |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_subscribe) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT SUBSCRIBE |
| * Broker -> Applib: MQTT SUBACK {0} |
| * FSM <- Applib: c_MQTT_eventName_SUBACK_Accepted |
| * Broker -> Applib: MQTT PUBLISH qos2 |
| * FSM <- Applib: c_MQTT_eventName_PUBLISH |
| * Broker <- Applib: MQTT PUBREC |
| * ... tsp_EPTF_MQTT_PUBLISH_responseWatchdog [3.0] seconds ... |
| * FSM <- Applib: c_MQTT_eventName_PUBLISH_Timeout |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_receive_publish_qos2_timeout() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| f_MBT_execute(c_MQTT_stepName_reportPublishResponse, valueof(t_addr(0, 0)), {1}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_subscribe}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_subscribe), "not valid subscribe request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_suback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_SUBACK_Accepted, valueof(t_addr(0, 0)), 3.0), "MQTT SUBACK accepted was not received")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_publish_qos2)); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBLISH, valueof(t_addr(0, 0)), 3.0), "MQTT PUBLISH was not received")) |
| { |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_pubrec), "not valid pubrec request")) |
| { |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBLISH_Timeout, valueof(t_addr(0, 0)), 5.0), "MQTT PUBLISH timeout event was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_publish_qos0 |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH sending sequence with qos0 |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_publish_qos0.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_publish_qos0.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_publish) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT PUBLISH qos0 |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_publish_qos0() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_publish}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_publish_qos0), "not valid publish request")) |
| { |
| setverdict(pass); |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_publish_qos1 |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH sending sequence with qos1 |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_publish_qos1.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_publish_qos1.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_reportPublishResponse(true) |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_publish) |
| * FSM -> Applib: c_MQTT_stepName_setQos_intParam(1) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT PUBLISH qos1 |
| * Broker -> Applib: MQTT PUBACK |
| * FSM <- Applib: c_MQTT_eventName_PUBACK |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_publish_qos1() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_reportPublishResponse, valueof(t_addr(0, 0)), {1}, false); |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_publish}, false); |
| f_MBT_execute(c_MQTT_stepName_setQos_intParam, valueof(t_addr(0, 0)), {1}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_publish_qos1), "not valid publish qos1 request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_puback), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBACK, valueof(t_addr(0, 0)), 3.0), "MQTT PUBACK was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_publish_qos1_timeout |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH sending sequence with qos1 timeout |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_publish_qos1_timeout.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_publish_qos1_timeout.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_reportPublishResponse(true) |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_publish) |
| * FSM -> Applib: c_MQTT_stepName_setQos_intParam(1) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT PUBLISH qos1 |
| * ... tsp_EPTF_MQTT_PUBLISH_responseWatchdog [3.0] seconds ... |
| * FSM <- Applib: c_MQTT_eventName_PUBLISH_Timeout |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_publish_qos1_timeout() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_reportPublishResponse, valueof(t_addr(0, 0)), {1}, false); |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_publish}, false); |
| f_MBT_execute(c_MQTT_stepName_setQos_intParam, valueof(t_addr(0, 0)), {1}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_publish_qos1), "not valid publish qos1 request")) |
| { |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBLISH_Timeout, valueof(t_addr(0, 0)), 5.0), "MQTT PUBLISH timeout event was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_publish_qos2 |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH sending sequence with qos2 |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_publish_qos2.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_publish_qos2.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_reportPublishResponse(true) |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_publish) |
| * FSM -> Applib: c_MQTT_stepName_setQos_intParam(2) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT PUBLISH qos2 |
| * Broker -> Applib: MQTT PUBREC |
| * FSM <- Applib: c_MQTT_eventName_PUBREC |
| * Broker <- Applib: MQTT PUBREL |
| * Broker -> Applib: MQTT PUBCOMP |
| * FSM <- Applib: c_MQTT_eventName_PUBCOMP |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_publish_qos2() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_reportPublishResponse, valueof(t_addr(0, 0)), {1}, false); |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_publish}, false); |
| f_MBT_execute(c_MQTT_stepName_setQos_intParam, valueof(t_addr(0, 0)), {2}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_publish_qos2), "not valid publish qos2 request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_pubrec), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBREC, valueof(t_addr(0, 0)), 3.0), "MQTT PUBREC was not received")) |
| { |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_pubrel), "not valid pubrel request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_pubcomp), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBCOMP, valueof(t_addr(0, 0)), 3.0), "MQTT PUBCOMP was not received")) |
| { |
| setverdict(pass); |
| } |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // |
| // Testcase: tc_mqtt_publish_qos2_timeout |
| // |
| // Purpose: |
| // Testing a MQTT PUBLISH sending sequence |
| // |
| // Action: |
| // (see EPTF_MQTT_Tests.tc_mqtt_publish_qos2_timeout.jpg) |
| /////////////////////////////////////////////////////////// |
| /***************************************************************** |
| * @startuml EPTF_MQTT_Tests.tc_mqtt_publish_qos2_timeout.jpg |
| * == TCP connect == |
| * == MQTT connect == |
| * FSM -> Applib: c_MQTT_stepName_reportPublishResponse(true) |
| * FSM -> Applib: c_MQTT_stepName_loadTemplate_byIntIdx(c_t_MQTT_publish) |
| * FSM -> Applib: c_MQTT_stepName_setQos_intParam(2) |
| * FSM -> Applib: c_MQTT_stepName_send |
| * Broker <- Applib: MQTT PUBLISH qos2 |
| * Broker -> Applib: MQTT PUBREC |
| * FSM <- Applib: c_MQTT_eventName_PUBREC |
| * Broker <- Applib: MQTT PUBREL |
| * ... tsp_EPTF_MQTT_PUBLISH_responseWatchdog [3.0] seconds ... |
| * FSM <- Applib: c_MQTT_eventName_PUBLISH_Timeout |
| * == MQTT disconnect == |
| * == TCP disconnect == |
| * FSM -> Applib: c_MQTT_stepName_cleanUp() |
| * @enduml |
| ******************************************************************/ |
| testcase tc_mqtt_publish_qos2_timeout() runs on Tester_CT |
| { |
| f_MQTT_Tests_begin(); |
| |
| var integer mqtt_server := f_IFW_addComponent(MQTT_SERVER, "mqtt_server"); |
| f_IFW_initComponents(); |
| |
| f_MBT_execute(c_MQTT_stepName_init, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_tcp_connect()) |
| { |
| if (f_mqtt_connect(mqtt_server)) |
| { |
| f_MBT_execute(c_MQTT_stepName_reportPublishResponse, valueof(t_addr(0, 0)), {1}, false); |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_publish}, false); |
| f_MBT_execute(c_MQTT_stepName_setQos_intParam, valueof(t_addr(0, 0)), {2}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_publish_qos2), "not valid publish qos2 request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_pubrec), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBREC, valueof(t_addr(0, 0)), 3.0), "MQTT PUBREC was not received")) |
| { |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_pubrel), "not valid pubrel request")) |
| { |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBLISH_Timeout, valueof(t_addr(0, 0)), 5.0), "MQTT PUBLISH timeout event was not received")) |
| { |
| setverdict(pass); |
| } |
| /* |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_pubcomp), p_msgIdFromLastReceived := true); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_PUBCOMP, valueof(t_addr(0, 0)), 3.0), "MQTT PUBCOMP was not received")) |
| { |
| setverdict(pass); |
| } |
| */ |
| } |
| } |
| } |
| f_mqtt_disconnect(); |
| } |
| f_tcp_disconnect(); |
| } |
| |
| f_MBT_execute(c_MQTT_stepName_cleanUp, valueof(t_addr(0, 0)), {}, false); |
| f_MQTT_Tests_end(); |
| } |
| |
| function f_tcp_connect() |
| runs on Tester_CT |
| return boolean |
| { |
| f_MBT_execute(c_MQTT_stepName_setLocalAddress, valueof(t_addr(0, 0)), {c_localAddr}, false); |
| f_MBT_execute(c_MQTT_stepName_setRemoteAddress, valueof(t_addr(0, 0)), {c_remoteAddr}, false); |
| f_MBT_execute(c_MQTT_stepName_transportConnect, valueof(t_addr(0, 0)), {}, false); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_transportSucc, valueof(t_addr(0, 0)), 3.0), "TCP connect call failed")) |
| { |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_transportEstablished, valueof(t_addr(0, 0)), 3.0), "TCP transport was not established")) |
| { return true } |
| } |
| return false; |
| } |
| |
| function f_tcp_disconnect() |
| runs on Tester_CT |
| { |
| f_MBT_execute(c_MQTT_stepName_transportClose, valueof(t_addr(0, 0)), {}, false); |
| f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_transportSucc, valueof(t_addr(0, 0)), 3.0)); |
| } |
| |
| function f_mqtt_connect(integer mqtt_server) |
| runs on Tester_CT |
| return boolean |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_connect}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| |
| f_IFW_MqttServer_receive(mqtt_server); |
| |
| if (f_handleVerdict(f_IFW_MqttServer_check(mqtt_server, tr_MQTT_connect), "not valid connect request")) |
| { |
| f_IFW_MqttServer_setMessageToSend(mqtt_server, valueof(t_MQTT_connack)); |
| f_IFW_MqttServer_send(mqtt_server); |
| |
| if (f_handleVerdict(f_MBT_waitFor(c_MQTT_behaviorType, c_MQTT_eventName_CONNACK_Accepted, valueof(t_addr(0, 0)), 3.0), "MQTT CONNACK accepted was not received")) |
| { |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| function f_mqtt_disconnect() |
| runs on Tester_CT |
| { |
| f_MBT_execute(c_MQTT_stepName_loadTemplate_byIntIdx, valueof(t_addr(0, 0)), {c_t_MQTT_disconnect}, false); |
| f_MBT_execute(c_MQTT_stepName_send, valueof(t_addr(0, 0)), {}, false); |
| } |
| |
| function f_delay(in float p_time) |
| { |
| timer t:= p_time; |
| t.start; |
| t.timeout; |
| } |
| |
| template EPTF_MBT_LGen_Definitions.FsmAddr t_addr(integer eIdx, integer fIdx := 0) := |
| { |
| entityGroupName := "SUT_EntityType", |
| eIdx := eIdx, |
| fIdx := fIdx |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_connect := |
| { |
| connect_msg := |
| { |
| header := { flags := '0000'B }, |
| name := "MQTT", |
| protocol_level := 4, |
| flags := { |
| user_name_flag := '0'B, |
| password_flag := '0'B, |
| will_retain := '0'B, |
| will_qos := AT_MOST_ONCE_DELIVERY, |
| will_flag := '0'B, |
| clean_session := '1'B |
| }, |
| keep_alive := 5, |
| payload := { |
| client_identifier := "", //{ stringItem := "", stringLength := 0}, |
| will_topic := omit, |
| will_message := omit, |
| user_name := omit, |
| password := omit |
| } |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_disconnect := |
| { |
| disconnect_msg := { |
| header := { flags := '0000'B } |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_publish := |
| { |
| publish := { |
| header := { |
| dup_flag := '0'B, |
| qos_level := AT_MOST_ONCE_DELIVERY, |
| retain_flag := '0'B |
| }, |
| topic_name := "topic", |
| packet_identifier := omit, |
| payload := char2oct("payload") |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_publish_qos0 := |
| { |
| publish := { |
| header := { |
| dup_flag := '0'B, |
| qos_level := AT_MOST_ONCE_DELIVERY, |
| retain_flag := '0'B |
| }, |
| topic_name := "topic", |
| packet_identifier := omit, |
| payload := char2oct("payload") |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_publish_qos0 := |
| { |
| publish := { |
| header := { |
| dup_flag := '0'B, |
| qos_level := AT_MOST_ONCE_DELIVERY, |
| retain_flag := '0'B |
| }, |
| topic_name := "topic", |
| packet_identifier := omit, |
| payload := char2oct("payload") |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_publish_qos1 := |
| { |
| publish := { |
| header := { |
| dup_flag := '0'B, |
| qos_level := AT_LEAST_ONCE_DELIVERY, |
| retain_flag := '0'B |
| }, |
| topic_name := "topic", |
| packet_identifier := omit, |
| payload := char2oct("payload") |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_publish_qos1 := |
| { |
| publish := { |
| header := { |
| dup_flag := '0'B, |
| qos_level := AT_LEAST_ONCE_DELIVERY, |
| retain_flag := '0'B |
| }, |
| topic_name := "topic", |
| packet_identifier := ?, |
| payload := char2oct("payload") |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_publish_qos2 := |
| { |
| publish := { |
| header := { |
| dup_flag := '0'B, |
| qos_level := EXACTLY_ONE_DELIVERY, |
| retain_flag := '0'B |
| }, |
| topic_name := "topic", |
| packet_identifier := omit, |
| payload := char2oct("payload") |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_publish_qos2 := |
| { |
| publish := { |
| header := { |
| dup_flag := '0'B, |
| qos_level := EXACTLY_ONE_DELIVERY, |
| retain_flag := '0'B |
| }, |
| topic_name := "topic", |
| packet_identifier := ?, |
| payload := char2oct("payload") |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_subscribe := |
| { |
| subscribe := { |
| header := { flags := '0010'B }, |
| packet_identifier := 0, |
| payload := |
| { |
| { |
| topic_filter := "topic", |
| requested_qos := AT_MOST_ONCE_DELIVERY |
| } |
| } |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_subscribe := |
| { |
| subscribe := ? |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_suback := |
| { |
| suback := |
| { |
| header := { flags := '0000'B }, |
| packet_identifier := 0, |
| payload := { return_code := { 0 } } |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_suback_refused := |
| { |
| suback := |
| { |
| header := { flags := '0000'B }, |
| packet_identifier := 0, |
| payload := { return_code := { 128 } } |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_unsubscribe := |
| { |
| unsubscribe := { |
| header := { flags := '0010'B }, |
| packet_identifier := 0, |
| payload := |
| { |
| topic_filter := { "topic" } |
| } |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_unsubscribe := |
| { |
| unsubscribe := ? |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_unsuback := |
| { |
| unsuback := |
| { |
| header := { flags := '0100'B }, |
| packet_identifier := 0 |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_connect := |
| { |
| connect_msg := ? |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_connack := |
| { |
| connack := |
| { |
| header := { flags := '0000'B }, |
| session_present_flag := '0'B, |
| connect_return_code := 0 |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_puback := |
| { |
| puback := |
| { |
| header := { flags := '0100'B }, |
| packet_identifier := 0 |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_puback := |
| { |
| puback := ? |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_pubrec := |
| { |
| pubrec := |
| { |
| header := { flags := '0100'B }, |
| packet_identifier := 0 |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_pubrec := |
| { |
| pubrec := ? |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_pubrel := |
| { |
| pubrel := |
| { |
| header := { flags := '0100'B }, |
| packet_identifier := 0 |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_pubrel := |
| { |
| pubrel := ? |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_pubcomp := |
| { |
| pubcomp := |
| { |
| header := { flags := '0100'B }, |
| packet_identifier := 0 |
| } |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_pubcomp := |
| { |
| pubcomp := ? |
| } |
| |
| template MQTT_v3_1_1_ReqResp tr_MQTT_pingreq := |
| { |
| pingreq := ? |
| } |
| |
| template MQTT_v3_1_1_ReqResp t_MQTT_pingresp := |
| { |
| pingresp := { header := { flags := '0100'B } } |
| } |
| } |