LibItsBtp_Functions.ttcn 8.12 KB
Newer Older
berge's avatar
berge committed
/**
 *  @author     ETSI / STF405
 *  @version    $URL$
 *              $Id$
 *  @desc       Module containing functions for basic Transport Protocol
 *
 */
fischer's avatar
fischer committed
 
 module LibItsBtp_Functions {
     
    // LibCommon
    import from LibCommon_Sync all;
fischer's avatar
fischer committed
    import from LibCommon_VerdictControl all;
reinaortega's avatar
reinaortega committed
    import from LibItsCommon_Functions all;
    import from LibItsBtp_TestSystem all;
    import from LibItsBtp_TypesAndValues all;
    import from LibItsBtp_Templates all;
    import from LibItsBtp_Pixits all;
reinaortega's avatar
reinaortega committed

    group utFuntions { 
            
        /**
         * @desc    Requests to bring the IUT in an initial state
         * @param   p_init The initialisation to trigger.
         */
        function f_utInitializeIut(template (value) UtInitialize p_init) runs on ItsBtp {
            
            utPort.send(p_init);
            tc_wait.start;
            alt {
                [] utPort.receive(UtResult:true) {
                    tc_wait.stop;
                    log("*** f_utInitializeIut: INFO: IUT initialized ***");
                }
                [] utPort.receive {
                    tc_wait.stop;
                    log("*** f_utInitializeIut: INFO: IUT could not be initialized ***");
                    f_selfOrClientSyncAndVerdict("error", e_error);
                }
                [] tc_wait.timeout {
                    log("*** f_utInitializeIut: INFO: IUT could not be initialized in time ***");
                    f_selfOrClientSyncAndVerdict("error", e_timeout);
                }
                [else] { // Shortcut defaults
                    repeat; 
                }
            }
            
        }
        
        /**
         * @desc    Triggers event from the application layer
         * @param   p_event The event to trigger.
         */
        function f_utTriggerEvent(template (value) UtEvent p_event) runs on ItsBtp {
            var template (value) UtTrigger v_utMsg := { p_event };
            
            utPort.send(v_utMsg);
            alt {
                [] utPort.receive(UtResult:true) {
                    tc_wait.stop;
                }
                [] utPort.receive {
                    tc_wait.stop;
                }
                [] tc_wait.timeout {
                }
                [else] { // Shortcut defaults
                    repeat; 
                }
            }
        }
        
        /**
         * @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.
         */
        function f_utCheckEvent(template (value) UtEvent p_event, boolean p_discard) runs on ItsBtp {
            var template (value) UtCheck v_utMsg := { p_event };
            
            utPort.send(v_utMsg);
            tc_wait.start;
            alt {
                [] utPort.receive(UtResult:true) {
                    tc_wait.stop;
                    if (p_discard == false) {
                        log("*** f_utCheckEvent: INFO: Event correctly indicated at application layer ***");
                    }
                    else {
                        log("*** f_utCheckEvent: ERROR: Event indicated at application layer where it should be discarded ***");
                        f_selfOrClientSyncAndVerdict("error", e_error);
                    }
                }
                [] utPort.receive(UtResult:false) {
                    tc_wait.stop;
                    if (p_discard == false) {
                        log("*** f_utCheckEvent: ERROR: Event not correctly indicated at application layer ***");
                        f_selfOrClientSyncAndVerdict("error", e_error);
                    }
                    else {
                        log("*** f_utCheckEvent: INFO: Event not indicated at application layer***");
                    }
                }
                [] tc_wait.timeout {
                    log("*** f_utCheckEvent: ERROR: Timeout while waiting for event check result ***");
                    f_selfOrClientSyncAndVerdict("error", e_timeout);                    
                }
                [else] { // Shortcut defaults
                    repeat; 
                }
            }
        }
                    
    } // End of group utFunctions
fischer's avatar
fischer committed
     
    group configurationFunctions {
        
        /**
         * @desc    Setups default configuration   
         */
reinaortega's avatar
reinaortega committed
        function f_cfUp() runs on ItsBtp {
            
            map(self:utPort, system:utPort);
            map(self:btpPort, system:btpPort);
            f_connect4SelfOrClientSync();
            
        } // end f_cfUp
        
        /**
         * @desc    Deletes default configuration 
         */
reinaortega's avatar
reinaortega committed
        function f_cfDown() runs on ItsBtp {
            
            unmap(self:utPort, system:utPort);
            unmap(self:btpPort, system:btpPort);
            f_disconnect4SelfOrClientSync();
            
        } // end f_cfDown
        
    } // end configurationFunctions
berge's avatar
berge committed
    
tepelmann's avatar
tepelmann committed
    group btpAltsteps {
        
        /**
         * @desc The base default.
         */
reinaortega's avatar
reinaortega committed
        altstep a_default() runs on ItsBtp {
tepelmann's avatar
tepelmann committed
            
            [] btpPort.receive {
                log("*** a_default: ERROR: Received an unexpected message ***");
berge's avatar
berge committed
                f_selfOrClientSyncAndVerdict("error", e_error);
tepelmann's avatar
tepelmann committed
            }
            [] tc_wait.timeout {
                log("*** a_default: INCONC: Timeout while awaiting reaction of the IUT prior to Upper Tester action ***");
berge's avatar
berge committed
                f_selfOrClientSyncAndVerdict("error", e_timeout);
tepelmann's avatar
tepelmann committed
            }
            [] tc_ac.timeout {
                log("*** a_default: INCONC: Timeout while awaiting the reception of a message ***");
berge's avatar
berge committed
                f_selfOrClientSyncAndVerdict("error", e_timeout);
tepelmann's avatar
tepelmann committed
            }
            [] a_shutdown() {
                f_poDefault();
                f_cfDown();
                log("*** a_default: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
                stop;   
            }
        }
    } //end btpAltsteps

fischer's avatar
fischer committed
    group preambles {
        
tepelmann's avatar
tepelmann committed
        /**
         * @desc The default preamble.
         */
reinaortega's avatar
reinaortega committed
        function f_prDefault() runs on ItsBtp {
tepelmann's avatar
tepelmann committed
            activate(a_default());
        }
        
fischer's avatar
fischer committed
        /**
         * @desc Brings the IUT into an initial state.
         */
reinaortega's avatar
reinaortega committed
        function f_prInitialState() runs on ItsBtp {
fischer's avatar
fischer committed
            
            f_utInitializeIut(m_btpInitialize);
			f_prDefault();
fischer's avatar
fischer committed
        }
        
    } // end of group preambles    
    

tepelmann's avatar
tepelmann committed
    group postambles {
        
        /**
         * @desc The default postamble.
         */
reinaortega's avatar
reinaortega committed
        function f_poDefault() runs on ItsBtp {
tepelmann's avatar
tepelmann committed
            //empty
        }
        
    } // end postambles
    
    group getFunctions {
        
        /**
         * @desc Gets the BTP source port of the IUT.
         * @return BTP source port ID
         */
        function f_getBtpSrcPort() return BtpPortId {
            return PX_SOURCE_PORT;
        }
        
        /**
         * @desc Gets the BTP destination port of the IUT.
         * @return BTP destination port ID
         */
        function f_getBtpDstPort() return BtpPortId {
            return PX_DESTINATION_PORT;
        }
        
        /**
         * @desc Gets a unknown BTP destination port of the IUT.
         * @return Unknown BTP destination port ID
        function f_getBtpUnknownDstPort() return BtpPortId {
            return PX_UNKNOWN_DESTINATION_PORT;
        }
        
        /**
         * @desc Gets the BTP destination port info of the IUT.
         * @return BTP destination port info
         */
        function f_getBtpDstPortInfo() return BtpPortId {
            return PX_DESTINATION_PORT_INFO;
        }
        
        /**
         * @desc Gets the BTP payload to use.
         * @return BTP payload
         */
        function f_getBtpPayload() return BtpPayload {
            return PX_PAYLOAD;
        }
        
    } // end getFunctions
berge's avatar
berge committed
} // end LibItsBtp_Functions