blob: f7fe435cf946081c7c857621724c0dc2043c391d [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
//
// 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 } }
}
}