Commit 6a616b4b authored by poglitsch's avatar poglitsch
Browse files

conference test cases added

parent bf65dcfa
Loading
Loading
Loading
Loading
+1246 −1

File changed.

Preview size limit exceeded, changes collapsed.

+481 −0
Original line number Diff line number Diff line
/*
 *	@author 	STF 369
 *  @version    $Id$
 *	@desc		This module provides the functions used by the test component 
 *              for SIP SIP tests. 
 */
module AtsNIT_SipSip_Steps {
 
	import from LibSip_Steps all;

	import from LibSip_Templates all;

	import from LibSip_SIPTypesAndValues all;

	import from LibIms_Templates all;
	
	import from LibIms_Steps all;

	import from LibIms_Interface all;
	
	group headerFunctions {
		
		/**
		 * @desc extract the contact uri
		 * @param p_contact contact header
		 * @return contact uri
		 */
		function f_getContactURI(in Contact p_contact) return SipUrl {
    		var SipUrl   v_SipUrl;
          
    		if (ischosen(p_contact.contactBody.contactAddresses[0].addressField.nameAddr))
    		{
    		  v_SipUrl := p_contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec;
    		}
    		else
    		{
    		  v_SipUrl := p_contact.contactBody.contactAddresses[0].addressField.addrSpecUnion;
    		}
          
    		return v_SipUrl;
    	}
	}	
	
	group sessionFunctions {
	
    	group sessionTypes {
    		type record SessionDialog {
    			CallId callId,
    			From calleeFrom,
    			To calleeTo,
    			From callerFrom, 
				To callerTo,
    			CSeq cSeq optional, 
    			SipUrl remoteURI,
    			HostPort remoteTarget,
    			Route route,
    			RecordRoute recordRoute,
    			Via	via
    		}
    	}
    	
    	group sessionModification {
    		
    		/**
			 * @desc Saves the current dialog infomation
			 * @return Dialog infomation
			 */
    		function f_saveSession() runs on ImsComponent return SessionDialog {
    			var SessionDialog v_dialog := {
    				callId := vc_callId,
    				calleeFrom := vc_from,
    				calleeTo := vc_to,
    				callerFrom := vc_caller_From, 
					callerTo := vc_caller_To, 
    				cSeq := vc_cSeq,
    				remoteURI := vc_requestUri,
    				remoteTarget := vc_reqHostPort,
    				route := vc_route,
    				recordRoute := vc_recordRoute,
    				via := vc_via
    			}
    			
    			return v_dialog;
    		}
    		
    		/**
			 * @desc Load a given dialog parameters
			 * @param p_dialog dialog parameters
			 */
    		function f_loadSession(in SessionDialog p_dialog) runs on ImsComponent {
    			vc_callId := p_dialog.callId;
				vc_from := p_dialog.calleeFrom;
				vc_to := p_dialog.calleeTo;
				vc_caller_From:= p_dialog.callerFrom;
				vc_caller_To:= p_dialog.callerTo; 
				vc_cSeq := p_dialog.cSeq;
				vc_requestUri := p_dialog.remoteURI;
				vc_reqHostPort := p_dialog.remoteTarget;
				vc_route := p_dialog.route;
				vc_recordRoute := p_dialog.recordRoute;
				vc_via := p_dialog.via;
    		}
    	}
	}

	group callFunctions {
		
		/**
		 * @desc Establish a call to given user profile.
		 * @param p_cSeq_s CSeq number
		 * @param p_to_user user profile
		 */
		function f_establishCall(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent {
			// prepare and send INVITE
    		LibIms_Steps.f_setHeadersINVITE(
    			p_cSeq_s, 
    			p_to_user
    		);
    		f_SendINVITE(m_INVITE_Request_UE(
    			vc_requestUri, 
    			vc_callId, 
    			vc_cSeq,
    			vc_from, 
    			vc_to, 
    			vc_via, 
    			vc_contact, 
    			omit, 
    			vc_route, 
    			omit, 
    			m_MBody_SDP(vc_sdp_local)
    		));
    		
    		// await 180 response
    		f_awaitingResponse(mw_Response_Base(
    			c_statusLine180,
    			vc_callId, 
    			vc_cSeq
    		));
			
			// await 200 OK response
    		f_awaitingOkResponse(p_cSeq_s);
			
			// send ACK
    		f_SendACK(m_ACK_Request_Base(
    			vc_requestUri, 
    			vc_callId, 
    			vc_cSeq, 
    			vc_from, 
    			vc_to, 
    			vc_via
    		));	
		}
		
		/**
		 * 
		 * @desc Accept a incomming call 
		 */
		function f_acceptCall() runs on ImsComponent {
			// await INVITE 
			f_awaitingINVITE(mw_INVITE_Request_Base); 
			
			// send 180 Ringing
			f_sendResponse(m_Response_18XonINVITE(
				c_statusLine180,
				vc_callId, 
				vc_cSeq,
				vc_caller_From, 
				vc_caller_To, 
				vc_via,
				vc_contact
			));
			
			// send 200 OK
			f_sendResponse(m_Response_2xxonINVITE_UE(
				c_statusLine200,
				vc_callId, 
				vc_cSeq,
				vc_caller_From, 
				vc_caller_To, 
				vc_via,
				vc_contact,
				f_route(),
				valueof(m_MBody_SDP(vc_sdp_local))
			));
    		
    		// await ACK
			f_awaitingACK(mw_ACK_Request_Base(vc_callId));
		}
		
		
		/**
		 * 
		 * @desc holds a active call 
		 */
		function f_holdCall() runs on ImsComponent {
			
			// change SDP to sendonly
			f_SIP_modSessionDirection(m_attribute_sendonly); 
			
			// prepare and send INVITE
    		LibIms_Steps.f_setHeadersReINVITE_(vc_cSeq);
    		f_SendINVITE(m_INVITE_Request_UE(
    			vc_requestUri, 
    			vc_callId, 
    			vc_cSeq,
    			vc_from, 
    			vc_to, 
    			vc_via, 
    			vc_contact, 
    			omit, 
    			vc_route, 
    			omit, 
    			m_MBody_SDP(vc_sdp_local)
    		));
    		
    		// await 200 OK Response
    		f_awaitingResponse(mw_Response_Base(
    			c_statusLine200,vc_callId, vc_cSeq
    		));	
    		
    		// send ACK			
    		f_SendACK(m_ACK_Request_Base(
    			vc_requestUri, 
    			vc_callId, 
    			vc_cSeq, 
    			vc_from, 
    			vc_to, 
    			vc_via
    		));
    		
    		// check SDP 		
    		f_SIP_checkSDPrespDirection(mw_attribute_recvonly);
		}
		
		/**
		 * 
		 * @desc accept call hold 
		 */
		function f_acceptHoldCall() runs on ImsComponent {
			// await INVITE
			f_awaitingINVITE(mw_INVITE_Request_IMS(*,*,*,*));
			
			// check SDP
    		f_SIP_checksetSDPreqDirection(
    			mw_attribute_sendonly,m_attribute_recvonly
    		); // handling of attribute in media description
    		
    		// send 200 OK 
    		f_sendResponse(m_Response_2xxonINVITE(
    			c_statusLine200,
    			vc_callId, 
    			vc_cSeq,
    			vc_caller_From, 
    			vc_caller_To, 
    			vc_via,vc_contact,
    			f_route(),
    			valueof(m_MBody_SDP(vc_sdp_local))
    		));
    		
    		// await ACK
    		f_awaitingACK(mw_ACK_Request_Base(vc_callId));
		}
		
		/**
		 * @desc Creates a new confernece
		 * @param p_cSeq_s CSeq number
		 * @param p_profile conference profile
		 * @param p_subscribe enables subscription of conference state
		 * @return conference uri
		 */
		function f_createConference(inout CSeq p_cSeq_s, in integer p_profile, in boolean p_subscribe) runs on ImsComponent return SipUrl {
			var SipUrl v_conferenceURI := null;
			
			// prepare and send INVITE
    		LibIms_Steps.f_setHeadersINVITE(
    			p_cSeq_s, 
    			p_profile
    		);
    		f_SendINVITE(m_INVITE_Request_sdp(
    			vc_requestUri, 
    			vc_callId, 
    			vc_cSeq,
    			vc_from, 
    			vc_to, 
    			vc_via, 
    			vc_contact, 
    			m_MBody_SDP(vc_sdp_local)
    		));
    
    		// await 200 OK response
    		f_awaitingResponse(mw_Response_Contact(
    			c_statusLine200, 
    			vc_callId, 
    			p_cSeq_s,
    			mw_Contact_conference
    		));
    		
    		if (ispresent(vc_response.msgHeader.contact)) {
    			v_conferenceURI := f_getContactURI(
    				vc_response.msgHeader.contact
    			);
    		}
    		
    		// send ACK
    		f_SendACK(m_ACK_Request_Base(
    			vc_requestUri, 
    			vc_callId, 
    			vc_cSeq, 
    			vc_from, 
    			vc_to, 
    			vc_via
    		));
    		
    		if(p_subscribe) {
        		// subscribe to conference state
        		f_SubscriptionWithNotification(
        			p_cSeq_s,
        			m_SUBSCRIBE_Request_Event(
            			vc_requestUri, 
            			vc_callId, 
            			p_cSeq_s, 
            			vc_from, 
            			vc_to, 
            			vc_via, 
            			vc_contact,
            			m_Event_conference
        			),
        			mw_NOTIFY_Request(
        				vc_callId,
        				"active", 
        				"application/conference-info+xml",
        				m_Event_conference,
        				* // TODO add XML check
        			)
        		);
    		}
    		
    		return v_conferenceURI;
		}
		
		/**
		 * @desc invites a user to a conference
		 * @param p_cSeq CSeq number
		 * @param p_to_user user
		 * @param p_conferenceUri conference uri
		 */		
		function f_referUser(
			inout CSeq p_cSeq, 
			in integer p_to_user, 
			in SipUrl p_conferenceUri
		) runs on ImsComponent {
			
			LibIms_Steps.f_setHeadersREFER(p_cSeq, p_to_user);
			
			f_SendREFER(m_REFER_Request_Base(
				vc_requestUri, 
            	vc_callId, 
    			vc_cSeq,
    			vc_contact, 
    			vc_from, 
    			vc_to, 
    			vc_via, 
    			m_ReferTo_SipUrl(p_conferenceUri),
    			omit 
			));
			
			f_awaitingResponse(mw_Response_Base(
    			c_statusLine202, 
    			vc_callId, 
    			p_cSeq
    		));
			
			//await NOTIFY and send reply 200 OK
	  		f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request(
				vc_callId,
				"active",
				"application/message/sipfrag",
				m_Event_refer,
				m_MBody_sipfrag("SIP/2.0 100 Trying")
			));
			
			//await NOTIFY and send reply 200 OK
	  		f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request(
				vc_callId,
				"terminated",
				"application/message/sipfrag",
				m_Event_refer,
				m_MBody_sipfrag("SIP/2.0 200 OK")
			));
		}
		
		/**
		 * 
		 * @desc join a conference  
		 * @param p_cSeq CSeq number
		 * @param p_profile conference profile
		 */
		function f_joinConference(inout CSeq p_cSeq, in integer p_profile) runs on ImsComponent {
			var SipUrl v_confUrl;
			
			f_awaitingREFER(mw_REFER_Request_Base(vc_callId));
			
			// send 202 Accepted 
    		f_sendResponse(m_Response_Base(
    			c_statusLine202,
    			vc_callId, 
    			vc_cSeq,
    			vc_caller_From, 
    			vc_caller_To, 
    			vc_via
    		));
    		
    		if (ispresent(vc_request.msgHeader.referTo)) {
				v_confUrl := vc_request.msgHeader.referTo.nameAddr.addrSpec
			}
			
			// prepare and send INVITE
    		LibIms_Steps.f_setHeadersINVITE(
    			p_cSeq, 
    			p_profile
    		);
    		
    		vc_requestUri := v_confUrl;
    		
    		f_SendINVITE(m_INVITE_Request_UE(
    			vc_requestUri, 
    			vc_callId, 
    			vc_cSeq,
    			vc_from, 
    			vc_to, 
    			vc_via, 
    			vc_contact, 
    			omit, 
    			vc_route, 
    			omit, 
    			m_MBody_SDP(vc_sdp_local)
    		));
    		
    		f_SendNOTIFY(m_NOTIFY_Request_sipfrag(
				vc_requestUri, 
            	vc_callId, 
    			vc_cSeq,
    			vc_from, 
    			vc_to, 
    			vc_via,
    			"active",
    			"SIP/2.0 100 Trying"
			));
			
			// 200 OK NOTIFY
			f_awaitingOkResponse(vc_cSeq);
			
			// 200 OK INVITE
			f_awaitingOkResponse(vc_cSeq);
			
			// send ACK
    		f_SendACK(m_ACK_Request_Base(
    			vc_requestUri, 
    			vc_callId, 
    			vc_cSeq, 
    			vc_from, 
    			vc_to, 
    			vc_via
    		));
    		
    		f_SendNOTIFY(m_NOTIFY_Request_sipfrag(
				vc_requestUri, 
            	vc_callId, 
    			vc_cSeq,
    			vc_from, 
    			vc_to, 
    			vc_via,
    			"terminated",
    			"SIP/2.0 200 OK"
			));
			
			// 200 OK NOTIFY
			f_awaitingOkResponse(vc_cSeq);
		}
	}
}
 No newline at end of file
+202 −32
Original line number Diff line number Diff line
@@ -670,16 +670,9 @@ module AtsNIT_SipSip_Testcases {
                
        		f_cf_2imsDown(v_imsComponent1, v_imsComponent2);
        	} // end TC_SS___XX__U08
        	
    		
    		
    	} // end group TP1_2_BC_UnSuccessful	
	
	} // end group TP_1_BasicCall
	
	
	
	
group TP_2_SupplementaryServices {
	
group TP2_1_SS_OIP_OIR {
@@ -733,8 +726,185 @@ group TP2_7_SS_CFNL {
        }//end group TP2_7_SS_CFNL
        
        group TP2_8_SS_CONF {
}//end group TP2_8_SS_CONF
        	 
        	 group TP2_8_1_SS_CONF_CRE {
        	 
            	/*
            	 * @desc TC_SSS__XXSSCONF_CRE_001
            	 * @param p_CSeq_s Transaction Id
            	 */
            	testcase TC_SSS__XXSSCONF_CRE_001 (
            		inout CSeq p_CSeq_s
            	) runs on ServerSyncComp system TestAdapter {
            		//Variables
            		var ImsComponent v_imsComponent1;
              		var ImsComponent v_imsComponent2;
              		var ImsComponent v_imsComponent3;
            		
            		//Configuration
            		f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            		f_IncCSeq(p_CSeq_s); 
            
            		//Start
            		v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE1(p_CSeq_s));
            		v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE2(p_CSeq_s));
            		v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE3(p_CSeq_s));
            		
            		// synchronize both PTCs on 4 sychronization points
            		f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone});
                    
                    //Clear configration
            		f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            	} // end TC_SSS__XXSSCONF_CRE_001
            	
            	
            	/*
            	 * @desc TC_SSS__XXSSCONF_CRE_002
            	 * @param p_CSeq_s Transaction Id
            	 */
            	testcase TC_SSS__XXSSCONF_CRE_002 (
            		inout CSeq p_CSeq_s
            	) runs on ServerSyncComp system TestAdapter {
            		//Variables
            		var ImsComponent v_imsComponent1;
              		var ImsComponent v_imsComponent2;
              		var ImsComponent v_imsComponent3;
            		
            		//Configuration
            		f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            		f_IncCSeq(p_CSeq_s); 
            
            		//Start
            		v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE1(p_CSeq_s));
            		v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE2(p_CSeq_s));
            		v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE3(p_CSeq_s));
            		
            		// synchronize both PTCs on 4 sychronization points
            		f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone});
                    
                    //Clear configration
            		f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            	} // end TC_SSS__XXSSCONF_CRE_002
            	
            	
            	/*
            	 * @desc TC_SSS__XXSSCONF_CRE_003
            	 * @param p_CSeq_s Transaction Id
            	 */
            	testcase TC_SSS__XXSSCONF_CRE_003 (
            		inout CSeq p_CSeq_s
            	) runs on ServerSyncComp system TestAdapter {
            		//Variables
            		var ImsComponent v_imsComponent1;
              		var ImsComponent v_imsComponent2;
              		var ImsComponent v_imsComponent3;
            		
            		//Configuration
            		f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            		f_IncCSeq(p_CSeq_s); 
            
            		//Start
            		v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE1(p_CSeq_s));
            		v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE2(p_CSeq_s));
            		v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE3(p_CSeq_s));
            		
            		// synchronize both PTCs on 4 sychronization points
            		f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone});
                    
                    //Clear configration
            		f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            	} // end TC_SSS__XXSSCONF_CRE_003
            	
            	
            	
            	/*
            	 * @desc TC_SSS__XXSSCONF_CRE_004
            	 * @param p_CSeq_s Transaction Id
            	 */
            	testcase TC_SSS__XXSSCONF_CRE_004 (
            		inout CSeq p_CSeq_s
            	) runs on ServerSyncComp system TestAdapter {
            		//Variables
            		var ImsComponent v_imsComponent1;
              		var ImsComponent v_imsComponent2;
              		var ImsComponent v_imsComponent3;
            		
            		//Configuration
            		f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            		f_IncCSeq(p_CSeq_s); 
            
            		//Start
            		v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE1(p_CSeq_s));
            		v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE2(p_CSeq_s));
            		v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE3(p_CSeq_s));
            		
            		// synchronize both PTCs on 4 sychronization points
            		f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone});
                    
                    //Clear configration
            		f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            	} // end TC_SSS__XXSSCONF_CRE_004
            	
            	
            	/*
            	 * @desc TC_SSS__XXSSCONF_CRE_007
            	 * @param p_CSeq_s Transaction Id
            	 */
            	testcase TC_SSS__XXSSCONF_CRE_007 (
            		inout CSeq p_CSeq_s
            	) runs on ServerSyncComp system TestAdapter {
            		//Variables
            		var ImsComponent v_imsComponent1;
              		var ImsComponent v_imsComponent2;
              		var ImsComponent v_imsComponent3;
            		
            		//Configuration
            		f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            		f_IncCSeq(p_CSeq_s); 
            
            		//Start
            		v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE1(p_CSeq_s));
            		v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE2(p_CSeq_s));
            		v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE3(p_CSeq_s));
            		
            		// synchronize both PTCs on 4 sychronization points
            		f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone});
                    
                    //Clear configration
            		f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            	} // end TC_SSS__XXSSCONF_CRE_007
            	
            	
            	/*
            	 * @desc TC_SSS__XXSSCONF_CRE_008
            	 * @param p_CSeq_s Transaction Id
            	 */
            	testcase TC_SSS__XXSSCONF_CRE_008 (
            		inout CSeq p_CSeq_s
            	) runs on ServerSyncComp system TestAdapter {
            		//Variables
            		var ImsComponent v_imsComponent1;
              		var ImsComponent v_imsComponent2;
              		var ImsComponent v_imsComponent3;
            		
            		//Configuration
            		f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            		f_IncCSeq(p_CSeq_s); 
            
            		//Start
            		v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE1(p_CSeq_s));
            		v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE2(p_CSeq_s));
            		v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE3(p_CSeq_s));
            		
            		// synchronize both PTCs on 4 sychronization points
            		f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone});
                    
                    //Clear configration
            		f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3);
            	} // end TC_SSS__XXSSCONF_CRE_008
        	  }//end group TP2_8_1_SS_CONF_CRE
         
    	 }//end group TP2_8_SS_CONF
         
    }//end group TP_2_SupplementaryServices