AtsImsIot_TP_behavior_ISC.ttcn 10.4 KB
Newer Older
Bostjan Pintar's avatar
Bostjan Pintar committed
/*
 *  @author     STF 574, TTF006
 *  @version    $Id$
 *  @desc       This module provides the TP behaviour functions at IC interface
 */

module AtsImsIot_TP_behavior_ISC
{

Yann Garcia's avatar
Yann Garcia committed
	import from AtsImsIot_TestSystem all;
	import from LibIot_PIXITS all;
	import from AtsImsIot_Templates all;
	import from AtsImsIot_TypesAndValues all;
	import from LibIot_TestInterface all;
	import from LibIms_UpperTester all;
	import from LibIot_TypesAndValues all;
	import from LibIot_Functions all;
Bostjan Pintar's avatar
Bostjan Pintar committed
	import from LibSip_SIPTypesAndValues all;
	import from LibSip_Templates all;
    
Yann Garcia's avatar
Yann Garcia committed
	import from LibSip_Common all;
Bostjan Pintar's avatar
Bostjan Pintar committed
    
	import from AtsImsIot_Functions all;
	import from AtsImsIot_Templates_ISC all;
Yann Garcia's avatar
Yann Garcia committed
	import from LibIot_PIXITS all;
Bostjan Pintar's avatar
Bostjan Pintar committed
	// LibSip
Yann Garcia's avatar
Yann Garcia committed
	import from LibSip_SDPTypes all;
Bostjan Pintar's avatar
Bostjan Pintar committed
	// LibMsrp
//	import from LibMsrp_TypesAndValues { type MsrpURI };
//	import from LibMsrp_Functions { function f_str2msrpUri };
//	import from LibMsrp_Templates { 
//		template 
//			m_msrpSend_Dummy, mw_msrpSEND_toPath_fromPath_contentType, 
//			m_msrpReport_Dummy, mw_msrpREPORT_success, 
//			m_msrpResponse_Dummy, mw_msrpResponse_toPath_fromPath, 
//			mw_toPath,  mw_fromPath, mw_msrpResponse_toPath_fromPath_with_transferReports,
//			m_msrpURIs_ToPath_Dummy, m_msrpURIs_FromPath_Dummy, 
//			mw_contentType 
//	};


    import from AtsImsIot_Templates_IC all;

    
group g_ISC {

	group imsRegistration {
Bostjan Pintar's avatar
Bostjan Pintar committed
	/**
		* @desc Starts monitor component behavior for TP_ISC_SCSCF_REGISTER_01
		* @param p_monitorCompRef Reference to monitor component
	    * @remark source function f_mtc_check_TP_IC_IBCF_REGISTER_02
		*/
	    function f_mtc_check_TP_ISC_SCSCF_REGISTER_01(
	        SipInterfaceMonitor  p_monitorCompRef, 
	        boolean p_checkMessage := false
	    ) runs on ImsTestCoordinator {
	        if (isvalue(p_monitorCompRef)){
	            var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A);
	    
	            p_monitorCompRef.start(
	                f_Iot_Sip_receive(
	                    {mw_SipRequest(mdw_TP_ISC_SCSCF_REGISTER_01(mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain),
	                                                                mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain)))},
	                    {mw_SipRequest(mw_REGISTER_Request_Base)},
	                    {0, omit},
	                    "TP_ISC_SCSCF_REGISTER_01 - REGISTER",
	                    false,
	                    p_checkMessage
	                )
	            );
	            p_monitorCompRef.done;
	
	            var charstring v_EUT_A_Addr := f_GetEUTPcscfIpAddress_1();
	            var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1());
	                
	            p_monitorCompRef.start(
	                f_Iot_Sip_receive(
	                    {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, //TODO To/From
	                    //{mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))},
	                    {mw_SipResponse (mw_200OK_Base)},
	                    {0, omit},
	                    "TP_ISC_SCSCF_REGISTER_01 - 200 OK",
	                    false,
	                    p_checkMessage
	                )
	            );
	            p_monitorCompRef.done;
	    
	    	}
	    }//end f_mtc_check_TP_ISC_SCSCF_REGISTER_01
	}// end imsRegistration
    
	group imsInvite {
    
		/**
		 * @desc Verify that the S-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE.
		 * Reference 
		 *   "ETSI TS 124 229 [1], Clauses 5.7.1.14"
		 * Config Id CF_VoLTE_INT_ES
		 * PICS Selection NONE
		 * Initial conditions with {
		 *    the UE_A entity isAttachedTo the EPC_A and
		 *    the UE_A entity isRegisteredTo the IMS_A and
		 *    the UE_A entity not isEmergencyRegisteredTo the IMS_A
		 * }
		 * Expected behaviour
		 *   ensure that {
		 *       when {
		 *           the UE_A entity isRequestedToEstablishEmergencyCall
		 *       }
		 *       then {
		 *           the IMS_S_CSCF_A entity receives an INVITE containing
		 *               From indicating value PX_UE_A_SIP_URI,
		 *               To indicating value PX_SIP_EMERGENCY_SERVICE_URN,
		 *               CallId indicating value PX_UE_A_CALLID,
		 *               Via indicating value PX_UE_A_VIA,
		 *               Route indicating value PX_UE_A_SERVICE_ROUTE,
		 *               PPreferredIdentity, // one or two instances
		 *               MessageBody;
		 *           from the UE_A entity
		 *       }
		 *   }
		 */
		function f_mtc_check_TP_ISC_SCSCF_ECO_INVITE_01( 
													   in SipInterfaceMonitor p_monitorCompRef,
													   in boolean p_checkMessage := false,
													   out SipMessage p_sip
													   ) runs on ImsTestCoordinator {
			 if (isvalue(p_monitorCompRef)){
				var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A);
				var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP);
                
				// Check the INVITE
				p_monitorCompRef.start(
									   f_Iot_Sip_receive(
														{ 
															mw_SipRequest(mw_TP_ISC_SCSCF_ECO_INVITE_01(
																									   -, // FIXME Set expected value
																									   mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain),
																									   mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain)
																									   ))
														},
														{ mw_SipRequest(mw_INVITE_Request_Base) },
														{0, omit},
														"TP_GM_PCSCF_ECO_INVITE_01 - Request", //TODO
														true,
														p_checkMessage
														)
									   );
				p_monitorCompRef.done;
				// Retrieve messge
				f_getSipMsgFromMonitor(p_monitorCompRef, p_sip);
			 }
		} // End of function f_mtc_check_TP_ISC_SCSCF_INVITE_01
		
	}

	group ims183SessionProgress {
        
		function f_mtc_check_TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01(
																   in SipInterfaceMonitor p_monitorCompRef,
																   in boolean p_checkMessage := false,
																   in SipMessage p_sip
																   ) runs on ImsTestCoordinator {
			if (isvalue(p_monitorCompRef)) {
				// Check the 183 SESSION_PROGRESS
				p_monitorCompRef.start(
									   f_Iot_Sip_receive(
														 { mw_SipResponse(mw_TP_ISC_SCSCF_183SessionProgress_01(
																											   p_sip.request.msgHeader.cSeq,
																											   p_sip.request.msgHeader.fromField,
																											   p_sip.request.msgHeader.toField
																											   )) 
														 },
														 { mw_SipResponse(mw_183SessionProgress_Base) },
														 { 0, omit },
														 "TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01",
														 false,
														 p_checkMessage
														 )
										);
				p_monitorCompRef.done;
			}
		} // End of function f_mtc_check_TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01

	} // End of group ims183SessionProgress
	group ims180Ringing {
        
		function f_mtc_check_TP_ISC_SCSCF_ECO_180RINGING_01(
														   in SipInterfaceMonitor p_monitorCompRef,
														   in boolean p_checkMessage := false,
														   in SipMessage p_sip
														   ) runs on ImsTestCoordinator {
			if (isvalue(p_monitorCompRef)) {
				// Check the 180 RINGING
				p_monitorCompRef.start(
									   f_Iot_Sip_receive(
														 { mw_SipResponse(mw_TP_ISC_SCSCF_180Ringing_01(
																									   p_sip.request.msgHeader.cSeq,
																									   p_sip.request.msgHeader.fromField,
																									   mw_To_NameAddr_TelUrl(
																															 -,
																															 p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber
																		  ))) 
														 },
														 { mw_SipResponse(mw_180Ringing_Base) },
														 { 0, omit },
														 "TP_ISC_SCSCF_180RINGING_01",
														 false,
														 p_checkMessage
														 )
										);
				p_monitorCompRef.done;
			}
		} // End of function f_mtc_check_TP_ISC_SCSCF_ECO_180RINGING_01
        
	} // End of group ims180Ringing

	group ims200Ok {
        
		function f_mtc_check_TP_ISC_SCSCF_ECO_200OK_01(
													  in SipInterfaceMonitor p_monitorCompRef,
													  in boolean p_checkMessage := false,
													  in SipMessage p_sip
													  ) runs on ImsTestCoordinator {
			if (isvalue(p_monitorCompRef)) {
				var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B);
				// Check the 200 OK
				p_monitorCompRef.start(
									   f_Iot_Sip_receive(
														 { mw_SipResponse(mw_200OK(
																				   p_sip.request.msgHeader.cSeq,
																				   p_sip.request.msgHeader.callId,
																				   p_sip.request.msgHeader.fromField,
																				   (
																					  mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}),
																					  mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId),
																					  p_sip.request.msgHeader.toField
																					)
																				   )) 
														 },
														 { mw_SipResponse(mw_200OK_Base) },
														 { 0, omit },
														 "TP_ISC_SCSCF_ECO_200OK_01",
														 false,
														 p_checkMessage
														 )
										);
				p_monitorCompRef.done;
                
			}
		} // End of function f_mtc_check_TP_ISC_SCSCF_ECO_200OK_01
        
	} // End of group ims200Ok
	
   group imsAck {
        
		function f_mtc_check_TP_ISC_SCSCF_ECO_ACK_01(
												   in SipInterfaceMonitor p_monitorCompRef,
												   in boolean p_checkMessage := false,
												   in SipMessage p_sip
												   ) runs on ImsTestCoordinator {
			if (isvalue(p_monitorCompRef)) {
				// Check the ACK
				p_monitorCompRef.start(
									   f_Iot_Sip_receive(
														 { mw_SipRequest(mw_TP_ISC_SCSCF_ACK_01(
																							   p_sip.request.msgHeader.callId,
																							   p_sip.request.msgHeader.cSeq,
																							   -, // FIXME To be set
																							   p_sip.request.msgHeader.fromField,
																							   p_sip.request.msgHeader.toField
																							   )) 
														 },
														 { mw_SipRequest(mw_ACK_Request_Base) },
														 { 0, omit },
														 "TP_ISC_SCSCF_ECO_ACK_01 - Request",
														 false,
														 p_checkMessage
														 )
										);
				p_monitorCompRef.done;
			}
		} // End of function f_mtc_check_TP_ISC_SCSCF_ECO_ACK_01
        
	} // End of group imsAck

Bostjan Pintar's avatar
Bostjan Pintar committed

} // end of g_ISC

} // end module AtsImsIot_TP_behavior_IC