/** * @author ETSI / STF405 * @version $URL$ * $Id$ * @desc Module containing functions for basic Transport Protocol * */ module LibItsBtp_Functions { // LibCommon import from LibCommon_Sync all; import from LibCommon_VerdictControl all; // LibIts import from LibIts_Interface all; import from LibItsBtp_TypesAndValues all; group configurationFunctions { /** * @desc Setups default configuration */ function f_cfUp() runs on ItsNt { map(self:utPort, system:utPort); map(self:btpPort, system:btpPort); f_connect4SelfOrClientSync(); } // end f_cfUp /** * @desc Deletes default configuration */ function f_cfDown() runs on ItsNt { unmap(self:utPort, system:utPort); unmap(self:btpPort, system:btpPort); f_disconnect4SelfOrClientSync(); } // end f_cfDown } // end configurationFunctions group btpAltsteps { /** * @desc The base default. */ altstep a_default() runs on ItsNt { [] btpPort.receive { f_selfOrClientSyncAndVerdict("error", e_error, "*** a_default: Received an unexpected message ***"); } [] tc_wait.timeout { f_selfOrClientSyncAndVerdict("error", e_timeout, "*** a_default: Timeout while awaiting reaction of the IUT prior to Upper Tester action ***"); } [] tc_ac.timeout { f_selfOrClientSyncAndVerdict("error", e_timeout, "*** a_default: Timeout while awaiting the reception of a message ***"); } [] a_shutdown() { f_poDefault(); f_cfDown(); log("*** a_default: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); stop; } } } //end btpAltsteps group preambles { /** * @desc The default preamble. */ function f_prDefault() runs on ItsNt { activate(a_default()); } /** * @desc Brings the IUT into an initial state. */ function f_prInitialState() runs on ItsNt { f_prDefault(); f_utInitializeIut(); } } // end of group preambles group postambles { /** * @desc The default postamble. */ function f_poDefault() runs on ItsNt { //empty } } // end postambles group upperTester { /** * @desc Requests to bring the IUT in an initial state */ function f_utInitializeIut() runs on ItsNt { utPort.send(UtBtpInitialize:{}); tc_wait.start; alt { [] utPort.receive(UtBtpResult:true) { tc_wait.stop; log("*** f_utInitializeIut: INFO: IUT initialized ***"); } [] utPort.receive { tc_wait.stop; f_selfOrClientSyncAndVerdict("error", e_error, "*** IUT could not be initialized ***"); } [] tc_wait.timeout { f_selfOrClientSyncAndVerdict("error", e_timeout, "*** IUT could not be initialized in time ***"); } } } /** * @desc Triggers event from the application layer * @param p_event The event to trigger. * @return */ function f_utTriggerEvent(template (value) UtBtpEvent p_event) runs on ItsNt return FncRetCode { var FncRetCode v_ret := e_success; var template (value) UtBtpTrigger v_utMsg := { p_event }; utPort.send(v_utMsg); return v_ret; } /** * @desc Checks that the event was indicated at the application layer * @param p_event The event to check. * @param p_discard The event should not appear. Default value: FALSE. * @return */ function f_utCheckEvent(template (value) UtBtpEvent p_event, boolean p_discard := false) runs on ItsNt { var template (value) UtBtpCheck v_utMsg := { p_event }; utPort.send(v_utMsg); tc_wait.start; alt { [] utPort.receive(UtBtpResult:true) { tc_wait.stop; if (p_discard == false) { log("*** f_utCheckEvent: Event correctly indicated at application layer ***"); } else { f_selfOrClientSyncAndVerdict("error", e_error, "*** f_utCheckEvent: Event indicated at application layer where it should be discarded ***"); } } [] utPort.receive { tc_wait.stop; if (p_discard == false) { f_selfOrClientSyncAndVerdict("error", e_error, "*** f_utCheckEvent: Event not correctly indicated at application layer ***"); } else { log("*** f_utCheckEvent: Another event indicated at application layer, repeating check ***"); repeat; } } [] tc_wait.timeout { if (p_discard == false) { f_selfOrClientSyncAndVerdict("error", e_timeout, "*** f_utCheckEvent: Timeout while waiting for event check result ***"); } else { log("*** f_utCheckEvent: Event not indicated at application layer ***"); } } } } } // end of group upper tester } // end LibItsBtp_Functions