AtsImsIot_TestConfiguration.ttcn 75.7 KB
Newer Older
Bostjan Pintar's avatar
Bostjan Pintar committed
/*
Bostjan Pintar's avatar
Bostjan Pintar committed
 *  @version    $Id $
 *    @desc        This module contains functions which implement the 
Bostjan Pintar's avatar
Bostjan Pintar committed
 *              configuration of the SUT adapter and mapping of test
 *              components for establishing and tearing down different 
 *              test configurations.
 */

module AtsImsIot_TestConfiguration {
    
    import from LibCommon_VerdictControl { type FncRetCode; }
Bostjan Pintar's avatar
Bostjan Pintar committed
    /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/
    import from LibIms_UpperTester  { modulepar PX_IMS_USER_DATA; }
    import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_PRODUCTS, PX_MAX_MSG_WAIT; }
    import from LibIot_TypesAndValues {
        type    StartTrafficCaptureRsp, StopTrafficCaptureRsp, MonitorInterfaceInfo, InterfaceInfo, InterfaceInfoList, Product,
                ProtocolFilter, StartTrafficCaptureRsp, StopTrafficCaptureRsp, SetFilterReq, SetFilterRsp, Status; }
Bostjan Pintar's avatar
Bostjan Pintar committed
    /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/
    import from LibIot_Functions  { altstep a_receiveIOTVerdict; function f_setConformanceVerdict, f_setE2EVerdict; }
    import from LibIot_TestConfiguration { function f_cf_oracle_up, f_cf_oracle_down; }
    import from LibIot_TestInterface all;
    import from AtsImsIot_TestSystem {type ImsInterfaceMonitor, SipInterfaceMonitor, DiameterInterfaceMonitor, NaptrInterfaceMonitor, SgiInterfaceMonitor, ImsTestCoordinator, CF_INT_CALL, CF_INT_AS, CF_ROAM_AS, CF_EPC_CALL, CF_ATT, CF_ATT_old;}
    import from LibIot_TestInterface {type InterfaceMonitor;}
    import from AtsImsIot_Templates {
        template    m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge,
                    m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout,
                    m_SetFilterReq, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq,
                    m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any; }
    import from AtsImsIot_Functions {function f_setInterfaceNameOnComponent, f_setInterfaceInfoComponent;}
    
    group constantDefinitions {
        //* interface monitor name Gm A
        const charstring c_gm_A := "Gm A";
        //* interface monitor name Gm B
        const charstring c_gm_B := "Gm B";
        //* interface monitor name Mx A
Bostjan Pintar's avatar
Bostjan Pintar committed
        const charstring c_mx_A := "Mx A";
        //* interface monitor name Mx B
        const charstring c_mx_B := "Mx B";
        //* interface monitor name Ic
        const charstring c_ic := "Ici";
        //* interface monitor name Isc A
        const charstring c_isc_A := "Isc A";
        //* interface monitor name Isc B
        const charstring c_isc_B := "Isc B";
        //* interface monitor name NAPTR
        const charstring c_naptr := "NAPTR";
        //* eut trigger name User A
        const charstring c_trigger_A := "User A";
        //* eut trigger name User B
        const charstring c_trigger_B := "User B";
        //* eut trigger name User A
        const charstring c_userUE_A := "User A";
        const charstring c_userUE_A_emergency := "User A Emergency";
          const charstring c_userUE_A2 := "User A2";
        //* eut trigger name User B
        const charstring c_userUE_B := "User B";
        const charstring c_userUE_B2 := "User B2";
Bostjan Pintar's avatar
Bostjan Pintar committed
        //* eut trigger name User C
        const charstring c_userUE_C := "User C";
        //* interface monitor name Gm C
        const charstring c_gm_C := "Gm C";
Bostjan Pintar's avatar
Bostjan Pintar committed
        //* eut trigger name User D
        const charstring c_userUE_D := "User D";
        //* interface monitor name Gm D
        const charstring c_gm_D := "Gm D";
Bostjan Pintar's avatar
Bostjan Pintar committed
        //* interface monitor name Rx
        const charstring c_rx := "Rx"; // See ETSI TS 103 029 V3.1.1 clause 5.4.2
        //* interface monitor name Mw
        const charstring c_mw := "Mw";
        //* interface monitor name Mx
        const charstring c_mx := "Mx";
        //* interface monitor name Sgi
        const charstring c_sgi := "Sgi";
        //* interface monitor name Rx
        const charstring c_s6a := "S6a";
        //* interface monitor name Rx
        const charstring c_gx := "Gx";
        //* interface monitor name Mm/Mx/Mw
        const charstring c_psap := "Psap";
    }
    
    group mappingFunctions {
    
            /**
             * 
             * @desc initialize the adapter port of MTC
             */
            function f_cf_adapter_up() runs on ImsTestCoordinator {
                map(self:acPort, system:acPort);
            }
            
            /**
             * 
             * @desc uninitialize the adapter port of MTC
             */
            function f_cf_adapter_down() runs on ImsTestCoordinator {
                unmap(self:acPort, system:acPort);
            }
            
            /**
             * 
             * @desc initialize trigger component ports
             * @param p_driver trigger component
             */
            function f_cf_user_up(in IotEquipmentUser p_driver) runs on ImsTestCoordinator {
                // connect sync ports
                connect(p_driver:syncPort, self:syncPort);
                // connect TSI ports 
                map(p_driver:eaPort, system:eaPort);
                // configure oracle
                f_cf_oracle_up(p_driver);
            }
            
            /**
             * 
             * @desc uninitialize trigger component ports
             * @param p_driver trigger component
             */
            function f_cf_user_down(in IotEquipmentUser p_driver) runs on ImsTestCoordinator {
                // disconnect sync ports
                disconnect(p_driver:syncPort, self:syncPort);
                // disconnect TSI ports 
                unmap(p_driver:eaPort, system:eaPort);
                // release oracle ports
                f_cf_oracle_down(p_driver);
            }
            
            /**
            * @desc     configures monitor component: connects to the synchronnization
            *             port, maps to the TSI port and connects to the oracle 
            * @param     p_monitor    monitor component 
            */    
            function f_cf_monitor_up(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                connect(p_monitor:syncPort, self:syncPort);
                connect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                map(p_monitor:dPort, system:dPort);
                map(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_up(p_monitor);
            }
                        /**
            * @desc     configures monitor component: connects to the synchronnization
            *             port, maps to the TSI port and connects to the oracle 
            * @param     p_monitor    monitor component 
            */    
            function f_cf_monitor_up_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                connect(p_monitor:syncPort, self:syncPort);
                connect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                map(p_monitor:sipPort, system:sipPort);
                map(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_up(p_monitor);
            }
            /**
            * @desc     configures monitor component: connects to the synchronnization
            *             port, maps to the TSI port and connects to the oracle 
            * @param     p_monitor    monitor component 
            */    
            function f_cf_monitor_up_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                connect(p_monitor:syncPort, self:syncPort);
                connect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                map(p_monitor:diameterPort, system:diameterPort);
                map(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_up(p_monitor);
            }
            /**
            * @desc     configures monitor component: connects to the synchronnization
            *             port, maps to the TSI port and connects to the oracle 
            * @param     p_monitor    monitor component 
            */    
            function f_cf_monitor_up_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                connect(p_monitor:syncPort, self:syncPort);
                connect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                map(p_monitor:naptrPort, system:naptrPort);
                map(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_up(p_monitor);
            }
            /**
            * @desc     configures monitor component: connects to the synchronnization
            *             port, maps to the TSI port and connects to the oracle 
            * @param     p_monitor    monitor component 
            */    
            function f_cf_monitor_up_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                connect(p_monitor:syncPort, self:syncPort);
                connect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                map(p_monitor:sgiPort, system:sgiPort);
                map(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_up(p_monitor);
        
            /**
            * @desc     frees monitor component: disconnects the synchronnization
            *             port, unmaps from the TSI port and disconnects from the oracle 
            * @param     p_monitor    monitor component 
            */        
            function f_cf_monitor_down(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                disconnect(p_monitor:syncPort, self:syncPort);
                disconnect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                unmap(p_monitor:dPort, system:dPort);
                unmap(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_down(p_monitor);
            }
            /**
            * @desc     frees monitor component: disconnects the synchronnization
            *             port, unmaps from the TSI port and disconnects from the oracle 
            * @param     p_monitor    monitor component 
            */        
            function f_cf_monitor_down_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                disconnect(p_monitor:syncPort, self:syncPort);
                disconnect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                unmap(p_monitor:sipPort, system:sipPort);
                unmap(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_down(p_monitor);
            }
            /**
            * @desc     frees monitor component: disconnects the synchronnization
            *             port, unmaps from the TSI port and disconnects from the oracle 
            * @param     p_monitor    monitor component 
            */        
            function f_cf_monitor_down_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                disconnect(p_monitor:syncPort, self:syncPort);
                disconnect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                unmap(p_monitor:diameterPort, system:diameterPort);
                unmap(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_down(p_monitor);
            }
            /**
            * @desc     frees monitor component: disconnects the synchronnization
            *             port, unmaps from the TSI port and disconnects from the oracle 
            * @param     p_monitor    monitor component 
            */        
            function f_cf_monitor_down_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                disconnect(p_monitor:syncPort, self:syncPort);
                disconnect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                unmap(p_monitor:naptrPort, system:naptrPort);
                unmap(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_down(p_monitor);
            }
            /**
            * @desc     frees monitor component: disconnects the synchronnization
            *             port, unmaps from the TSI port and disconnects from the oracle 
            * @param     p_monitor    monitor component 
            */        
            function f_cf_monitor_down_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator {
                // connect sync ports
                disconnect(p_monitor:syncPort, self:syncPort);
                disconnect(p_monitor:icpPort, self:icpPort);
                // mapp TSI port
                unmap(p_monitor:sgiPort, system:sgiPort);
                unmap(p_monitor:acPort, system:acPort);
                // configure oracle
                f_cf_oracle_down(p_monitor);
            }
    }
    
    group adapterConfiguration {
        
        function f_cf_setFilter(in SetFilterReq p_req) runs on /*Ims*/InterfaceMonitor {
            var SetFilterRsp v_rsp;
            var template Status v_status := {
                code := e_success,
                reason := *
            }
            
            tc_wait.start;
            acPort.send(p_req);
            alt {
                [] acPort.receive (mw_SetFilterRsp(v_status)) -> value v_rsp {
                    tc_wait.stop;
                    f_setE2EVerdict(pass, "Adapter Configuration: setting monitor filter successful");
                    f_setConformanceVerdict(pass, "Adapter Configuration: setting monitor filter successful");
                }
                [] acPort.receive (mw_SetFilterRsp(?)) -> value v_rsp {
                    tc_wait.stop;
                    f_setE2EVerdict(inconc, "Adapter Configuration: error while setting monitor filter");
                    f_setConformanceVerdict(inconc, "Adapter Configuration: error while setting monitor filter");
                }
                [] tc_wait.timeout {
                    f_setE2EVerdict(inconc, "Adapter Configuration: timer expires while waiting for response");
                    f_setConformanceVerdict(inconc, "Adapter Configuration: timer expires while waiting for response");
                }
            }
        }
        
        /**
        * @desc     Initialize traffic cature process
        *              
        * @param      
        */
        function f_cf_initCapture () runs on ImsTestCoordinator {
            // Initialize the Adapter (including the TrafficCapture process).
            timer tc_configureGuard;
            var StartTrafficCaptureRsp startResult;
            activate(a_receiveIOTVerdict());
            tc_configureGuard.start(PX_MAX_MSG_WAIT);
            acPort.send(m_generalConfigurationReq_offline); //TODO: Check posibility to enable ONLINE mode
            alt {
                [] acPort.receive (m_generalConfigurationRsp_success) {
                    log("General configuration succeed.");
                    tc_configureGuard.stop;
                }
                [] acPort.receive (m_generalConfigurationRsp_timeout) {
                    setverdict(fail);
                    tc_configureGuard.stop;
                    stop;
                }
                [] acPort.receive (m_generalConfigurationRsp_error) {
                    setverdict(fail);
                    tc_configureGuard.stop;
                    stop;
                }
                [] acPort.receive {
                    log("Unknown response.");
                    tc_configureGuard.stop;
                    setverdict (inconc);
                    stop;
                }
                [] tc_configureGuard.timeout {
                    log("Timeout.");
                    setverdict (inconc);
                    stop;
                }
            }
        }
            /**
        * @desc     Start traffic cature process
        *              
        * @param      
        */
        function f_cf_startCapture () runs on ImsTestCoordinator {
            
            timer tc_configureGuard;
            var StartTrafficCaptureRsp startResult;
            activate(a_receiveIOTVerdict());
Bostjan Pintar's avatar
Bostjan Pintar committed
            
            //Start traffic capture processing.
            tc_configureGuard.start(PX_MAX_MSG_WAIT);
            acPort.send(m_startTrafficCaptureReq);
            alt {
                [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult {
                    tc_configureGuard.stop;
                        if (startResult.status.code != e_success)
                        {
                            log("**** StartTrafficCaptureReq unsuccessfull! ****");
                            setverdict(fail);
                            stop;
                        }
                    }
                [] tc_configureGuard.timeout {
                    log("**** StartTrafficCaptureReq not answered. ****");
                    setverdict (inconc);
                    stop;
                }
            }
        } 
        
        /**
        * @desc     Stops traffic cature
        *              
        * @param      
        */
        function f_cf_stopCapture() runs on ImsTestCoordinator {
            //Stop traffic capture processing.
            timer tc_configureGuard; //TODO check to import correct modules
            var StopTrafficCaptureRsp stopResult;
            tc_configureGuard.start(PX_MAX_MSG_WAIT);
            acPort.send(m_stopTrafficCaptureReq);
            alt {
                  [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult {
                    tc_configureGuard.stop;
                    if (stopResult.status.code != e_success)
                    {
                        log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****");
                        setverdict(fail);
                    }
                }
                [] tc_configureGuard.timeout {
                    log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****");
                    setverdict (inconc);
                }
            }
        }    
    }
    
    group componentCreation {
    
            /**
            * @desc     creates a monitor component 
            * @param     p_name    name of the monitor component 
            * @return             the created monitor component
            */    
            function f_cf_create_monitor(in charstring p_name) runs on ImsTestCoordinator return ImsInterfaceMonitor {
                var ImsInterfaceMonitor v_monitor := ImsInterfaceMonitor.create(p_name) alive;
                v_monitor.start(f_setInterfaceNameOnComponent(p_name));
                v_monitor.done;                 
                return v_monitor; 
            }
        /**
        * @desc     creates a monitor component 
        * @param     p_name    name of the monitor component 
        * @return             the created monitor component
        */    
        function f_cf_create_monitor_sip(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SipInterfaceMonitor {
            var SipInterfaceMonitor v_monitor := SipInterfaceMonitor.create(p_mii.interfaceName) alive;
            //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName));
            v_monitor.start(f_setInterfaceInfoComponent(p_mii));
            v_monitor.done;                 
            return v_monitor; 
        }
        /**
        * @desc     creates a monitor component 
        * @param     p_name    name of the monitor component 
        * @return             the created monitor component
        */    
        function f_cf_create_monitor_diameter(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return DiameterInterfaceMonitor {
            var DiameterInterfaceMonitor v_monitor := DiameterInterfaceMonitor.create(p_mii.interfaceName) alive;
            //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName));
            v_monitor.start(f_setInterfaceInfoComponent(p_mii));
            v_monitor.done;                 
            return v_monitor; 
        }
        /**
        * @desc     creates a monitor component 
        * @param     p_name    name of the monitor component 
        * @return             the created monitor component
        */    
        function f_cf_create_monitor_naptr(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return NaptrInterfaceMonitor {
            var NaptrInterfaceMonitor v_monitor := NaptrInterfaceMonitor.create(p_mii.interfaceName) alive;
            //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName));
            v_monitor.start(f_setInterfaceInfoComponent(p_mii));
            v_monitor.done;                 
            return v_monitor; 
        }
        /**
        * @desc     creates a monitor component 
        * @param     p_name    name of the monitor component 
        * @return             the created monitor component
        */    
        function f_cf_create_monitor_sgi(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SgiInterfaceMonitor {
            var SgiInterfaceMonitor v_monitor := SgiInterfaceMonitor.create(p_mii.interfaceName) alive;
            //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName));
            v_monitor.start(f_setInterfaceInfoComponent(p_mii));
            v_monitor.done;                 
            return v_monitor; 
        }
    }
    
    
    group testConfiguration { //TODO: check to delete at end of STF574 ATS devel
        
        /**
         * @desc
         *     Test configuration function for roaming registration szenario.
         *     More information can be found in ETSI TS 186 011-2 V2.3.1 Clause
         *     4.3.4.
         * @param p_Gm Gm interface monitor component
         * @param p_MxA Mx interface IMS A network
         * @param p_ici Mw interface monitor component
         * @param p_MxB Mx interface IMS B network
         */
            function f_cf_roam_reg_up(
                inout ImsInterfaceMonitor p_Gm, 
                inout ImsInterfaceMonitor p_MxA, 
                inout ImsInterfaceMonitor p_ici,
                inout ImsInterfaceMonitor p_MxB 
            ) runs on ImsTestCoordinator {
                // Initialize the Adapter (including the TrafficCapture process).
                timer tc_configureGuard;
                var StartTrafficCaptureRsp startResult;
                activate(a_receiveIOTVerdict());
                
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_generalConfigurationReq_offline);
                alt {
                    [] acPort.receive (m_generalConfigurationRsp_success) {
                        log("General configuration succeed.");
                        tc_configureGuard.stop;
                    }
                    [] acPort.receive (m_generalConfigurationRsp_timeout) {
                        setverdict(fail);
                        tc_configureGuard.stop;
                        stop;
                    }
                    [] acPort.receive (m_generalConfigurationRsp_error) {
                        setverdict(fail);
                        tc_configureGuard.stop;
                        stop;
                    }
                    [] acPort.receive {
                        log("Unknown response.");
                        tc_configureGuard.stop;
                        setverdict (inconc);
                        stop;
                    }
                    [] tc_configureGuard.timeout {
                        log("Timeout.");
                        setverdict (inconc);
                        stop;
                    }
                } 
                
                f_cf_monitor_up(p_Gm);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_up(p_MxA);
                f_cf_monitor_up(p_ici);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_up(p_MxB);
                                
                // TODO UE IP address and port is missing
                p_Gm.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip, 
                        f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B)
                    )
                )));
                p_Gm.done;
                
Bostjan Pintar's avatar
Bostjan Pintar committed
                p_MxA.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip,
                        {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])}
                    )
                )));
                p_MxA.done;
                
                p_ici.start(f_cf_setFilter(
                    valueof(m_SetFilterReq(
                        e_sip, 
                        f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B)
                    )
                )));
                p_ici.done;
                
Bostjan Pintar's avatar
Bostjan Pintar committed
                p_MxB.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip,
                        {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])}
                    )
                )));
                p_MxB.done;
                
                // Start traffic capture processing.
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_startTrafficCaptureReq);
                alt {
                [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult {
                    tc_configureGuard.stop;
                            if (startResult.status.code != e_success)
                            {
                                log("**** StartTrafficCaptureReq unsuccessfull! ****");
                                setverdict(fail);
                                stop;
                            }
                        }
                        [] tc_configureGuard.timeout {
                            log("**** StartTrafficCaptureReq not answered. ****");
                            setverdict (inconc);
                            stop;
                        }
                } 
            }
            
            /**
         * @desc
         *     Test configuration function for roaming registration szenario.
         *     More information can be found in ETSI TS 186 011-2 V2.3.1 Clause
         *     4.3.4.
         * @param p_Gm Gm interface monitor component
         * @param p_ic Mw interface monitor component
         */
            function f_cf_roam_reg_down(
                inout ImsInterfaceMonitor p_Gm, 
                inout ImsInterfaceMonitor p_MxA, 
                inout ImsInterfaceMonitor p_ici,
                   inout ImsInterfaceMonitor p_MxB
            ) runs on ImsTestCoordinator {
                // Stop traffic capture processing.
                timer tc_configureGuard;
                var StopTrafficCaptureRsp stopResult;
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_stopTrafficCaptureReq);
                alt {
                    [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult {
                        tc_configureGuard.stop;
                        if (stopResult.status.code != e_success)
                        {
                            log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****");
                            setverdict(fail);
                        }
                    }
                    [] tc_configureGuard.timeout {
                        log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****");
                        setverdict (inconc);
                    }
                } 
                f_cf_monitor_down(p_Gm);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_down(p_MxA);
                f_cf_monitor_down(p_ici);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_down(p_MxB);
            }
            
            /**
                 * @desc
                 *     Interworking Call test configuration. Mapps/connects all related
                 *     ports and initialize the test adapter.
                 *     More information can be found in ETSI TS 186 011-2 V2.3.1 Clause
                  *     4.3.4.
                 * @param p_GmA Gm A Interface Monitor component
                 * @param p_ici Mw Interface Monitor component
                 * @param p_GmB
                 *     Gm B Interface Monitor component (optional, can be omitted)
                 */
            function f_cf_int_call_up(
                inout CF_INT_CALL p_config 
            ) runs on ImsTestCoordinator {
                // Initialize the Adapter (including the TrafficCapture process).
                timer tc_configureGuard;
                var StartTrafficCaptureRsp startResult;
                
                activate(a_receiveIOTVerdict());
                
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_generalConfigurationReq_offline);
                alt {
                    [] acPort.receive (m_generalConfigurationRsp_success) {
                        log("General configuration succeed.");
                        tc_configureGuard.stop;
                    }
                    [] acPort.receive (m_generalConfigurationRsp_timeout) {
                        setverdict(fail);
                        tc_configureGuard.stop;
                        stop;
                    }
                    [] acPort.receive (m_generalConfigurationRsp_error) {
                        setverdict(fail);
                        tc_configureGuard.stop;
                        stop;
                    }
                    [] acPort.receive {
                        log("Unknown response.");
                        tc_configureGuard.stop;
                        setverdict (inconc);
                        stop;
                    }
                    [] tc_configureGuard.timeout {
                        log("Timeout.");
                        setverdict (inconc);
                        stop;
                    }
                } 
                
                f_cf_monitor_up(p_config.gmA);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_up(p_config.mxA);
                f_cf_monitor_up(p_config.ici);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_up(p_config.mxB);
                if(isvalue(p_config.gmB)) {
                    f_cf_monitor_up(p_config.gmB);
                }
Bostjan Pintar's avatar
Bostjan Pintar committed
                if(isvalue(p_config.naptr)) {
                    f_cf_monitor_up(p_config.naptr);
                // TODO UE IP address and port is missing
                p_config.gmA.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip,
                        {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])}
                    )
                )));
                p_config.gmA.done;
                
Bostjan Pintar's avatar
Bostjan Pintar committed
                p_config.mxA.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip,
                        {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])}
                    )
                )));
                p_config.mxA.done;
                
                p_config.ici.start(f_cf_setFilter(
                    valueof(m_SetFilterReq(
                        e_sip, 
                        f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B)
                    )
                )));
                p_config.ici.done;
                
Bostjan Pintar's avatar
Bostjan Pintar committed
                p_config.mxB.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip,
                        {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])}
                    )
                )));
                p_config.mxB.done;
                
                if(isvalue(p_config.gmB)) {
                        p_config.gmB.start(f_cf_setFilter(
                            valueof (m_SetFilterReq(
                                e_sip, 
                                {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])}
                            )
                        )));
                        p_config.gmB.done;
                }
Bostjan Pintar's avatar
Bostjan Pintar committed
                if(isvalue(p_config.naptr)) {
                        p_config.naptr.start(f_cf_setFilter(
                            valueof (m_SetFilterReq(
                                e_dns, 
                                {f_getInterfaceInfo("NAPTR", PX_PRODUCTS[PX_EUT_A])}
                            )
                        )));
                        p_config.naptr.done;
                }
                // Start traffic capture processing.
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_startTrafficCaptureReq);
                alt {
                [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult {
                    tc_configureGuard.stop;
                            if (startResult.status.code != e_success)
                            {
                                log("**** StartTrafficCaptureReq unsuccessfull! ****");
                                setverdict(fail);
                                stop;
                            }
                        }
                        [] tc_configureGuard.timeout {
                            log("**** StartTrafficCaptureReq not answered. ****");
                            setverdict (inconc);
                            stop;
                        }
                } 
            }
            
            /**
             * @desc
             *     Interworking Call test configuration. Ummaps/disconnect the
             *     related component ports. More information can be found in ETSI TS
             *     186 011-2 V2.3.1 Clause 4.3.4.
             * @param p_GmA Gm A Interface Monitor component
             * @param p_ici Mw Interface Monitor component
             * @param p_GmB
             *     Gm B Interface Monitor component (optional, can be omitted)
             */
            function f_cf_int_call_down(
                inout CF_INT_CALL p_config
            ) runs on ImsTestCoordinator {
                // Stop traffic capture processing.
                timer tc_configureGuard;
                var StopTrafficCaptureRsp stopResult;
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_stopTrafficCaptureReq);
                alt {
                    [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult {
                        tc_configureGuard.stop;
                        if (stopResult.status.code != e_success) {
                            log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****");
                            setverdict(fail);
                        }
                    }
                    [] tc_configureGuard.timeout {
                        log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****");
                        //setverdict (inconc);
                    }
                } 
                f_cf_monitor_down(p_config.gmA);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_down(p_config.mxA);
                f_cf_monitor_down(p_config.ici);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_down(p_config.mxB);
                if ( isvalue ( p_config.gmB ) )        { f_cf_monitor_down( p_config.gmB );}
                if ( isvalue ( p_config.naptr ) )    { f_cf_monitor_down( p_config.naptr );}
            }        
            /**
             * @desc
             *     Roaming Call test configuration. Mapps/connects all related
             *     ports and initialize the test adapter.
             *     More information can be found in ETSI TS 186 011-2 V2.3.1 Cause
             *     4.3.4.
             * @param p_Gm Gm A Interface Monitor component
             * @param p_ici Mw Interface Monitor component
             */
            function f_cf_roam_call_up(
                inout ImsInterfaceMonitor p_Gm,
                inout ImsInterfaceMonitor p_MxA, 
                inout ImsInterfaceMonitor p_ici,
                inout ImsInterfaceMonitor p_MxB
            ) runs on ImsTestCoordinator {
                // Initialize the Adapter (including the TrafficCapture process).
                timer tc_configureGuard;
                var StartTrafficCaptureRsp startResult;
                activate(a_receiveIOTVerdict());
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_generalConfigurationReq_offline);
                alt {
                    [] acPort.receive (m_generalConfigurationRsp_success) {
                        log("General configuration succeed.");
                        tc_configureGuard.stop;
                    }
                    [] acPort.receive (m_generalConfigurationRsp_timeout) {
                        setverdict(fail);
                        tc_configureGuard.stop;
                        stop;
                    }
                    [] acPort.receive (m_generalConfigurationRsp_error) {
                        setverdict(fail);
                        tc_configureGuard.stop;
                        stop;
                    }
                    [] acPort.receive {
                        log("Unknown response.");
                        tc_configureGuard.stop;
                        setverdict (inconc);
                        stop;
                    }
                    [] tc_configureGuard.timeout {
                        log("Timeout.");
                        setverdict (inconc);
                        stop;
                    }
                } 
                
                f_cf_monitor_up(p_Gm);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_up(p_MxA);
                f_cf_monitor_up(p_ici);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_up(p_MxB);
                
                // TODO UE IP address and port is missing
                // TODO UE IP address and port is missing
                p_Gm.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip, 
                        f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B)
                    )
                )));
                p_Gm.done;
                
Bostjan Pintar's avatar
Bostjan Pintar committed
                p_MxA.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip,
                        {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])}
                    )
                )));
                p_MxA.done;
                
                p_ici.start(f_cf_setFilter(
                    valueof(m_SetFilterReq(
                        e_sip, 
                        f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B)
                    )
                )));
                p_ici.done;
                
Bostjan Pintar's avatar
Bostjan Pintar committed
                p_MxB.start(f_cf_setFilter(
                    valueof (m_SetFilterReq(
                        e_sip,
                        {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])}
                    )
                )));
                p_MxB.done;
                
                // Start traffic capture processing.
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_startTrafficCaptureReq);
                alt {
                [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult {
                    tc_configureGuard.stop;
                            if (startResult.status.code != e_success)
                            {
                                log("**** StartTrafficCaptureReq unsuccessfull! ****");
                                setverdict(fail);
                                stop;
                            }
                        }
                        [] tc_configureGuard.timeout {
                            log("**** StartTrafficCaptureReq not answered. ****");
                            setverdict (inconc);
                            stop;
                        }
                } 
            }
            
            /**
                 * @desc
                 *     Roaming Call test configuration. Ummaps/disconnect the
                 *     related component ports. More information can be found in ETSI TS
                 *     186 011-2 V2.3.1 Clause 4.3.4.
                 * @param p_GmA Gm A Interface Monitor component
                 * @param p_ici Mw Interface Monitor component
                 */
            function f_cf_roam_call_down(
Bostjan Pintar's avatar
Bostjan Pintar committed
                inout ImsInterfaceMonitor p_Gm,
                inout ImsInterfaceMonitor p_MxA, 
                inout ImsInterfaceMonitor p_ici,
                inout ImsInterfaceMonitor p_MxB
            ) runs on ImsTestCoordinator {
                // Stop traffic capture processing.
                timer tc_configureGuard;
                var StopTrafficCaptureRsp stopResult;
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_stopTrafficCaptureReq);
                alt {
                    [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult {
                        tc_configureGuard.stop;
                        if (stopResult.status.code != e_success)
                        {
                            log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****");
                            setverdict(fail);
                        }
                    }
                    [] tc_configureGuard.timeout {
                        log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****");
                        setverdict (inconc);
                    }
                } 
                f_cf_monitor_down(p_Gm);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_down(p_MxA);
                f_cf_monitor_down(p_ici);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_down(p_MxB);
            }
            
            
            /**
                 * @desc
                 *     Roaming Call test configuration. Mapps/connects all related
                 *     ports and initialize the test adapter.
                 *     More information can be found in ETSI TS 186 011-2 V2.3.1 Clause
         *     4.3.4.
                 * @param p_config.gmA Gm A Interface Monitor component
                 * @param p_config.mw Mw Interface Monitor component
                 * @param p_config.gmB Gm B Interface Monitor component
                 * @param p_config.iscA Isc A Interface Monitor component
                 * @param p_config.iscB Isc B Interface Monitor component
                 *      IscA and IscB Interface Monitor component (optional, can be omitted)
                 */
            function f_cf_int_as_up(
                  inout CF_INT_AS p_config
            ) runs on ImsTestCoordinator {
                // Initialize the Adapter (including the TrafficCapture process).
                timer tc_configureGuard;
                var StartTrafficCaptureRsp startResult;
                activate(a_receiveIOTVerdict());
                tc_configureGuard.start(PX_MAX_MSG_WAIT);
                acPort.send(m_generalConfigurationReq_offline);
                alt {
                    [] acPort.receive (m_generalConfigurationRsp_success) {
                        log("General configuration succeed.");
                        tc_configureGuard.stop;
                    }
                    [] acPort.receive (m_generalConfigurationRsp_timeout) {
                        setverdict(fail);
                        tc_configureGuard.stop;
                        stop;
                    }
                    [] acPort.receive (m_generalConfigurationRsp_error) {
                        setverdict(fail);
                        tc_configureGuard.stop;
                        stop;
                    }
                    [] acPort.receive {
                        log("Unknown response.");
                        tc_configureGuard.stop;
                        setverdict (inconc);
                        stop;
                    }
                    [] tc_configureGuard.timeout {
                        log("Timeout.");
                        setverdict (inconc);
                        stop;
                    }
                } 
                
                f_cf_monitor_up(p_config.gmA);