AtsImsIot_TestConfiguration.ttcn 57.7 KB
Newer Older
Bostjan Pintar's avatar
Bostjan Pintar committed
/*
 *	@author 	STF 370
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 all;
Bostjan Pintar's avatar
Bostjan Pintar committed
    /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/
	import from LibIms_UpperTester all;
	import from LibIot_PIXITS all;
	import from LibIot_TypesAndValues all;
Bostjan Pintar's avatar
Bostjan Pintar committed
    /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/
    import from LibIot_Functions all;
	import from LibIot_TestConfiguration all;
	import from LibIot_TestInterface all;
	import from AtsImsIot_TestSystem all;
	import from LibIot_TestInterface all;
	import from AtsImsIot_Templates all;
	import from AtsImsIot_Functions all;
	
	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_B_emergency := "User B Emergency";
		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);
Bostjan Pintar's avatar
Bostjan Pintar committed
                f_cf_monitor_up(p_config.mxA);
				f_cf_monitor_up(p_config.ici);
                f_cf_monitor_up(p_config.mxB);
				f_cf_monitor_up(p_config.gmB);
				if(isvalue(p_config.iscA)) {