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)) {
					f_cf_monitor_up(p_config.iscA);
				}
				if(isvalue(p_config.iscB)) {
					f_cf_monitor_up(p_config.iscB);
				}
								
				// 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;
				
                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;
				
				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
                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.iscA)) {
    				p_config.iscA.start(f_cf_setFilter(
    					valueof (m_SetFilterReq(
    						e_sip, 
    						{f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])}
    					)
    				)));
    				p_config.iscA.done;
				}
				
				if(isvalue(p_config.iscB)) {
					p_config.iscB.start(f_cf_setFilter(
						valueof (m_SetFilterReq(
							e_sip, 
							{f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])}
						)
					)));
					p_config.iscB.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 Application Server 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_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_down(
				inout CF_INT_AS 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);
				f_cf_monitor_down(p_config.gmB);
				if(isvalue(p_config.iscA)) {
					f_cf_monitor_down(p_config.iscA);
				}
				if(isvalue(p_config.iscB)) {
					f_cf_monitor_down(p_config.iscB);
				}
			}
			
			
		/**
				* @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_roam_as_up(
			inout CF_ROAM_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);
Bostjan Pintar's avatar
Bostjan Pintar committed
            f_cf_monitor_up(p_config.mxB);
			f_cf_monitor_up(p_config.gmB);
			if(isvalue(p_config.iscA)) {
				f_cf_monitor_up(p_config.iscA);
			}
			if(isvalue(p_config.iscB)) {
				f_cf_monitor_up(p_config.iscB);
			}
								
			// 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;
				
			p_config.gmB.start(f_cf_setFilter(
				valueof (m_SetFilterReq(
					e_sip, 
					{f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])}
				)
			)));
			p_config.gmB.done;
				
			if(isvalue(p_config.iscA)) {
							p_config.iscA.start(f_cf_setFilter(
								valueof (m_SetFilterReq(
									e_sip, 
									{f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])}
								)
							)));
							p_config.iscA.done;
			}
				
			if(isvalue(p_config.iscB)) {
				p_config.iscB.start(f_cf_setFilter(
					valueof (m_SetFilterReq(
						e_sip, 
						{f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])}
					)
				)));
				p_config.iscB.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 Application Server 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_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_roam_as_down(
			inout CF_ROAM_AS 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);
			f_cf_monitor_down(p_config.gmB);
			if(isvalue(p_config.iscA)) {
				f_cf_monitor_down(p_config.iscA);
			}
			if(isvalue(p_config.iscB)) {
				f_cf_monitor_down(p_config.iscB);
			}
		}
		
    	function f_cf_epc_call_up ( in CF_EPC_CALL p_config ) runs on ImsTestCoordinator {
Bostjan Pintar's avatar
Bostjan Pintar committed
            // Initialize the Adapter (including the TrafficCapture process).
            timer tc_configureGuard;
            var StartTrafficCaptureRsp startResult;
Bostjan Pintar's avatar
Bostjan Pintar committed
            activate(a_receiveIOTVerdict());
Bostjan Pintar's avatar
Bostjan Pintar committed
            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;
                }
            } 
Bostjan Pintar's avatar
Bostjan Pintar committed
            f_cf_monitor_up(p_config.gmA);
            f_cf_monitor_up(p_config.rx);
            f_cf_monitor_up(p_config.mxA);
            f_cf_monitor_up(p_config.mw);
            f_cf_monitor_up(p_config.sgi);
            if(isvalue(p_config.gmB)) {
                f_cf_monitor_up(p_config.gmB);
            }

            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.rx.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_diameter,
                    {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])}
                )
            )));
            p_config.rx.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;
Bostjan Pintar's avatar
Bostjan Pintar committed
            p_config.mw.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_sip,
                    {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])}
                )
            )));
            p_config.mw.done;
Bostjan Pintar's avatar
Bostjan Pintar committed
            p_config.sgi.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_sip,
                    {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])}
                )
            )));
            p_config.sgi.done;

            p_config.gmB.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_sip, 
                    {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])}
                )
            )));
            // 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;
                    }
            } 
    	} // end of function f_cf_epc_call_up
    	function f_cf_epc_call_down(
    		inout CF_EPC_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.rx);
            f_cf_monitor_down(p_config.mxA);
            f_cf_monitor_down(p_config.mw);
            f_cf_monitor_down(p_config.sgi);
			f_cf_monitor_down(p_config.gmB);
    	} // end of function f_cf_epc_call_down
	}
	
	function f_getInterfaceInfoList(
		in charstring p_interfaceName, 
		in integer p_product1, 
		in integer p_product2
	) return InterfaceInfoList {
		var InterfaceInfoList v_list := {
			f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product1]),
			f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product2])
		};
		
		return v_list;
	}
	
	function f_getInterfaceInfo(in charstring p_interfaceName, Product p_product) return InterfaceInfo {
		var InterfaceInfo v_info := {
			IpInterfaceInfo := {
				{
					domainName := "invalid",
					IpAddress := "0.0.0.0",
					portNumbers := {0}
				}
			}
		};
		
		for(var integer i := 0; i < lengthof(p_product.monitorInterfaces); i := i + 1) { // YANN: <= instead of <
			if(p_product.monitorInterfaces[i].interfaceName == p_interfaceName)	{
				return p_product.monitorInterfaces[i].interfaceInfo;
			}
		}
		
		return v_info;
	}
	
	group g_release15 {
		
Bostjan Pintar's avatar
Bostjan Pintar committed
        function f_cf_epc_call_rel15_up_old ( in CF_ATT_old 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);
            f_cf_monitor_up(p_config.rx);
            f_cf_monitor_up(p_config.s6a);
            f_cf_monitor_up(p_config.gx);
            f_cf_monitor_up(p_config.mxA);
            f_cf_monitor_up(p_config.mwPS);
            f_cf_monitor_up(p_config.sgi);
            if(isvalue(p_config.gmB)) {
                f_cf_monitor_up(p_config.gmB);
            }

            p_config.gmA.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_sip,
                    {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])}
                )
            )));
            p_config.gmA.done;
                
            p_config.rx.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_diameter,
                    {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])}
                )
            )));
            p_config.rx.done;
                
            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.mwPS.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_sip,
                    {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])}
                )
            )));
            p_config.mwPS.done;
                
            p_config.sgi.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_sip,
                    {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])}
                )
            )));
            p_config.sgi.done;

            p_config.gmB.start(f_cf_setFilter(
                valueof (m_SetFilterReq(
                    e_sip, 
                    {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])}
                )
            )));
            // 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;
                    }
            } 
        } // end of function f_cf_epc_call_rel15_up
    
        function f_cf_epc_call_rel15_down_old(
            inout CF_ATT_old 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);
            f_cf_monitor_down(p_config.rx);
            f_cf_monitor_down(p_config.s6a);
            f_cf_monitor_down(p_config.gx);
            f_cf_monitor_down(p_config.mxA);
            f_cf_monitor_down(p_config.mwPS);
            f_cf_monitor_down(p_config.sgi);
            f_cf_monitor_down(p_config.gmB);
        } // end of function f_cf_epc_call_rel15_down
        
		function f_cf_epc_call_rel15_up ( in CF_ATT 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_sip(p_config.gmA);
			f_cf_monitor_up_diameter(p_config.rx);
			f_cf_monitor_up_diameter(p_config.s6a);
			f_cf_monitor_up_diameter(p_config.gx);
			f_cf_monitor_up_sip(p_config.mxA);
			f_cf_monitor_up_sip(p_config.mw);
			f_cf_monitor_up_sgi(p_config.sgi);
			if(isvalue(p_config.gmB)) {
				f_cf_monitor_up_sip(p_config.gmB);
			}
			p_config.gmA.start(f_cf_setFilter(
				valueof (m_SetFilterReq(
					e_sip,
					{f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])}
				)
			)));
			p_config.gmA.done;
			p_config.rx.start(f_cf_setFilter(
				valueof (m_SetFilterReq(
					e_diameter,
					{f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])}
				)
			)));
			p_config.rx.done;
			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.mw.start(f_cf_setFilter(
				valueof (m_SetFilterReq(
					e_sip,
					{f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])}
				)
			)));
			p_config.mw.done;
			p_config.sgi.start(f_cf_setFilter(
				valueof (m_SetFilterReq(
					e_sip,
					{f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])}
				)
			)));
			p_config.sgi.done;
			p_config.gmB.start(f_cf_setFilter(
				valueof (m_SetFilterReq(
					e_sip, 
					{f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])}
				)
			)));
			// 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;
					}
			} 
		} // end of function f_cf_epc_call_rel15_up
		function f_cf_epc_call_rel15_down(
			inout CF_ATT 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_sip(p_config.gmA);
			f_cf_monitor_down_diameter(p_config.rx);
			f_cf_monitor_down_diameter(p_config.s6a);
			f_cf_monitor_down_diameter(p_config.gx);
			f_cf_monitor_down_sip(p_config.mxA);
			f_cf_monitor_down_sip(p_config.mw);
			f_cf_monitor_down_sgi(p_config.sgi);
			if(isvalue(p_config.gmB)) {
				f_cf_monitor_down_sip(p_config.gmB);
			}
			
		} // end of function f_cf_epc_call_rel15_down
		
	} // end group g_release15