Commit 909dc46d authored by poglitsch's avatar poglitsch
Browse files

ue test cases added

parent a3d0c283
Loading
Loading
Loading
Loading

CONF/CONF_Steps.ttcn3

0 → 100644
+234 −0
Original line number Diff line number Diff line
module CONF_Steps {
    
    import from LibIms_SIPTypesAndValues language "TTCN-3:2009" all;

    import from CONF_Templates language "TTCN-3:2009" all;

    import from IMS_SS_Functions language "TTCN-3:2009" all
	with {
		extension "File:SS_Ims_Functions.ttcn"
	}

    import from LibSip_SDPTypes language "TTCN-3:2005" all;

    import from LibIms_Steps language "TTCN-3:2009" all;
    import from LibSip_SIPTypesAndValues language "TTCN-3:2005" all;
    import from LibIms_Interface language "TTCN-3:2009" all;
    import from LibSip_Steps language "TTCN-3:2005" all;
    import from LibSip_Templates language "TTCN-3:2009" all;
    import from LibIms_Templates language "TTCN-3:2009" all;

    
    /**
     * 
     * @desc This function accepts a new incoming call 
     */
    function f_acceptSession() runs on ImsComponent {
        // await INVITE 
        f_getInvite(mw_INVITE_Request_MB(?, ?));
            
        // 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_recordroute(),
            valueof(m_MBody_SDP(vc_sdp_local))
        ));
            
        // await ACK
        f_awaitingACK(mw_ACK_Request_Base(vc_callId));
    }
    
    function f_acceptConference() runs on ImsComponent {
        f_getInvite(mw_INVITE_Request_CONF(
            f_initSipUrl(c_conferenceProfile_factoryURI),
            *,
            *
        )); 
        
        f_sendResponse(m_Response_Base(
            c_statusLine200, 
            vc_callId,
            vc_cSeq, 
            vc_caller_From,
            vc_caller_To, 
            vc_via
         ));
         
        // await ACK
        f_awaitingACK(mw_ACK_Request_Base(vc_callId));
    }
        
    /**
     * 
     * @desc This function accepts a re-INVITE request to put on hold a active call
     */
    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_recordroute(),
            valueof(m_MBody_SDP(vc_sdp_local))
        ));
            
        // await ACK
        f_awaitingACK(mw_ACK_Request_Base(vc_callId));
    }
    
        
    /**
     * 
     * @desc This function accepts an incoming request to join a conference  
     * @param p_cSeq CSeq number
     * @param p_profile conference profile
     */
    function f_joinConference(inout CSeq p_cSeq, boolean p_notify) runs on ImsComponent {
        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(p_notify) {
            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);
            
            f_SendNOTIFY(m_NOTIFY_Request_sipfrag(
                vc_requestUri, 
                vc_callId, 
                vc_cSeq,
                vc_from, 
                vc_to, 
                vc_via,
                "active",
                "SIP/2.0 200 OK"
            ));
            
            // 200 OK NOTIFY
            f_awaitingOkResponse(vc_cSeq);
        }
    }
    
    
    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 optional,
                RecordRoute recordRoute optional,
                Via via
            }
        }
        
        group sessionModification {
            
            /**
             * @desc This function 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 This function loads a given dialog parameters (previously stored)
             * @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;
            }
        }
    }
    
    function f_clearSDPprecondition(inout SDP_Message p_sdp) {
        if(ispresent(p_sdp.media_list)) {
            var SDP_attribute_list v_attList;
            var integer mn := sizeof(p_sdp.media_list[0].attributes);
            for(var integer i := 0; i<=mn; i := i+1) {
                if(not ischosen(p_sdp.media_list[0].attributes[i].curr)
                and not ischosen(p_sdp.media_list[0].attributes[i].des)){
                    v_attList[sizeof(v_attList)] := p_sdp.media_list[0].attributes[i];
                }   
            }
            p_sdp.media_list[0].attributes := v_attList;
        }
    }
}
 No newline at end of file
+323 −12
Original line number Diff line number Diff line
module CONF_TC_Functions {

    import from CONF_Steps all;

    import from LibIms_PIXITS language "TTCN-3:2009" all;

    import from LibSip_SDPTypes language "TTCN-3:2005" all;
@@ -1053,17 +1055,326 @@ module CONF_TC_Functions {
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_clearSDPprecondition(inout SDP_Message p_sdp) {
        if(ispresent(p_sdp.media_list)) {
            var SDP_attribute_list v_attList;
            var integer mn := sizeof(p_sdp.media_list[0].attributes);
            for(var integer i := 0; i<=mn; i := i+1) {
                if(not ischosen(p_sdp.media_list[0].attributes[i].curr)
                and not ischosen(p_sdp.media_list[0].attributes[i].des)){
                    v_attList[sizeof(v_attList)] := p_sdp.media_list[0].attributes[i];
    function f_TC_CONF_U01_003(CSeq p_CSeq) runs on ImsComponent {
        // variables
        var SessionDialog v_Session1;
        var SessionDialog v_Session2;
        var SessionDialog v_CONF_Session;
        
        // init
        f_init_gm_pcscf(p_CSeq);
        
        // ----  preamble   ----->
        f_gm_pcscf_preamble(p_CSeq);
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // accept first session
        f_acceptSession();
        // set session on hold
        f_acceptHoldCall();
        // save session parameters
        v_Session1 := f_saveSession();
        
        // accept second session
        f_acceptSession();
        // set session on hold
        f_acceptHoldCall();
        // save session parameters
        v_Session2 := f_saveSession();
        
        // ----  test body   ----> 
        
        // accept conference request
        f_acceptConference(); 
        
        // get conference subscription
        f_gm_pcscf_subscribe_conf(p_CSeq);
        
        // get refer request to invite user to conference
        f_joinConference(p_CSeq, true);
        
        // save conference session parameters
        v_CONF_Session := f_saveSession();
        
        // load session 1
        f_loadSession(v_Session1);
         
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
        
        // load session conference
        f_loadSession(v_CONF_Session);
        
        // get refer request to invite user to conference
        f_joinConference(p_CSeq, true);
        
        // load session 2
        f_loadSession(v_Session2);
         
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
        
        // ----  postamble   ---->      
        
        // load session conference
        f_loadSession(v_CONF_Session);
         
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_U01_004(CSeq p_CSeq) runs on ImsComponent {
        // variables
        var SessionDialog v_Session1;
        var SessionDialog v_Session2;
        var SessionDialog v_CONF_Session;
        
        // init
        f_init_gm_pcscf(p_CSeq);
        
        // ----  preamble   ----->
        f_gm_pcscf_preamble(p_CSeq);
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // accept first session
        f_acceptSession();
        // set session on hold
        f_acceptHoldCall();
        // save session parameters
        v_Session1 := f_saveSession();
        
        // accept second session
        f_acceptSession();
        // set session on hold
        f_acceptHoldCall();
        // save session parameters
        v_Session2 := f_saveSession();
        
        // ----  test body   ----> 
        
        // accept conference request
        f_acceptConference(); 
        
        // get refer request to invite user to conference
        f_joinConference(p_CSeq, false);
        
        // save conference session parameters
        v_CONF_Session := f_saveSession();
        
        // load session 1
        f_loadSession(v_Session1);
         
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
        
        // load session conference
        f_loadSession(v_CONF_Session);
        
        // get refer request to invite user to conference
        f_joinConference(p_CSeq, false);
        
        // load session 2
        f_loadSession(v_Session2);
         
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
        
        // ----  postamble   ---->      
        
        // load session conference
        f_loadSession(v_CONF_Session);
         
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_U01_007(CSeq p_CSeq) runs on ImsComponent {
        // variables
        var SessionDialog v_CONF_Session;
        
        // init
        f_init_gm_pcscf(p_CSeq);
        
        // ----  preamble   ----->
        f_gm_pcscf_preamble(p_CSeq);
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // ----  test body   ----> 
        
        LibIms_Steps.f_setHeadersREFER(p_CSeq, c_userProfile_UE1atSUThome);
            
        f_SendREFER(m_REFER_Request_Base(
            vc_requestUri, 
            vc_callId, 
            vc_cSeq,
            vc_contact, 
            vc_from, 
            vc_to, 
            vc_via, 
            m_ReferTo_SipUrl(
                f_initSipUrl(c_conferenceProfile_factoryURI), 
                "INVITE"
            ),
            m_ReferredBy_SipUrl(
                f_initSipUrl(c_userProfile_PCSCFwithHomeUE)
            )
        ));
            
        f_awaitingResponse(mw_Response_Base(
            c_statusLine202, 
            vc_callId, 
        p_CSeq
        ));
        
        f_getInvite(mw_INVITE_Request_CONF_referredBy(
            f_initSipUrl(c_conferenceProfile_factoryURI),
            *,
            *,
            m_ReferredBy_SipUrl(f_initSipUrl(c_userProfile_PCSCFwithHomeUE))
        )); 
        
        // ----  postamble   ---->      
        
        f_sendResponse(m_Response_Base(
            c_statusLine200, 
            vc_callId,
            vc_cSeq, 
            vc_caller_From,
            vc_caller_To, 
            vc_via
         ));
         
        // await ACK
        f_awaitingACK(mw_ACK_Request_Base(vc_callId));
        
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_U01_008(CSeq p_CSeq) runs on ImsComponent {
        // variables
        var SessionDialog v_CONF_Session;
        
        // init
        f_init_gm_pcscf(p_CSeq);
        
        // ----  preamble   ----->
        f_gm_pcscf_preamble(p_CSeq);
        
        // accept conference request
        f_acceptConference(); 
        
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // ----  test body   ----> 
        
        f_awaitingREFER(mw_REFER_Request_IMS(
            vc_callId,
            f_initSipUrl(c_userProfile_PCSCFwithHomeUE),
            mw_ReferTo(f_initSipUrl(c_conferenceProfile_factoryURI))
        ));
            
        // send 202 Accepted 
        f_sendResponse(m_Response_Base(
            c_statusLine202,
            vc_callId, 
            vc_cSeq,
            vc_caller_From, 
            vc_caller_To, 
            vc_via
        ));
        
        // ----  postamble   ---->      
        
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
            p_sdp.media_list[0].attributes := v_attList;
    
    function f_TC_CONF_U01_009(CSeq p_CSeq) runs on ImsComponent {
        // variables
        var SessionDialog v_CONF_Session;
        
        // init
        f_init_gm_pcscf(p_CSeq);
        
        // ----  preamble   ----->
        f_gm_pcscf_preamble(p_CSeq);
        
        // accept conference request
        f_acceptConference(); 
        
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // ----  test body   ----> 
        
        f_awaitingREFER(mw_REFER_Request_IMS(
            vc_callId,
            f_initSipUrl(c_conferenceProfile_factoryURI),
            m_ReferTo_SipUrl(f_initSipUrl(c_userProfile_PCSCFwithHomeUE), "INVITE")
        ));
            
        // send 202 Accepted 
        f_sendResponse(m_Response_Base(
            c_statusLine202,
            vc_callId, 
            vc_cSeq,
            vc_caller_From, 
            vc_caller_To, 
            vc_via
        ));
        
        // ----  postamble   ---->      
        
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_U01_010(CSeq p_CSeq) runs on ImsComponent {
        // variables
        var SessionDialog v_CONF_Session;
        
        // init
        f_init_gm_pcscf(p_CSeq);
        
        // ----  preamble   ----->
        f_gm_pcscf_preamble(p_CSeq);
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // ----  test body   ----> 
        f_getInvite(mw_INVITE_Request_CONF_resourceList(
            f_initSipUrl(c_conferenceProfile_factoryURI),
            *,
            *,
            mw_Resource_lists(f_initSipUrl(c_userProfile_PCSCFwithHomeUE))
        )); 
        
        f_sendResponse(m_Response_Base(
            c_statusLine200, 
            vc_callId,
            vc_cSeq, 
            vc_caller_From,
            vc_caller_To, 
            vc_via
         ));
         
        // await ACK
        f_awaitingACK(mw_ACK_Request_Base(vc_callId));
        
        // ----  postamble   ---->      
        
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
}
 No newline at end of file
+104 −0
Original line number Diff line number Diff line
module CONF_Templates {
    
    
    import from ietf_params_xml_ns_resource_lists all;

    import from LibSip_SDPTypes language "TTCN-3:2005" all;

    import from LibSip_Templates language "TTCN-3:2009" all;
@@ -107,4 +109,106 @@ module CONF_Templates {
            pAssertedID := p_pAssertedID
        }
    }
    
    template INVITE_Request mw_INVITE_Request_CONF_referredBy(
        template SipUrl p_requestUri,
        template PAssertedID p_pAssertedID, 
        template Contact p_contact,
        template ReferredBy p_referredBy
    ) modifies mw_INVITE_Request_Base := {
        requestLine := {requestUri := p_requestUri},
        msgHeader := {
            contact := p_contact,
            pAssertedID := p_pAssertedID, 
            referredBy := p_referredBy
        }
    }
    
    template INVITE_Request mw_INVITE_Request_CONF_resourceList(
        template SipUrl p_requestUri,
        template PAssertedID p_pAssertedID,
        template Contact p_contact,
        template Resource_lists p_resource_lists
    ) modifies mw_INVITE_Request_Base := {
		requestLine := {requestUri := p_requestUri},
		msgHeader := {
			contact := p_contact,
			contentDisposition := {
				fieldName := CONTENT_DISPOSITION_E,
				dispositionType := "recipient-list",
				dispositionParams := *
			},
			contentType := {
				fieldName := CONTENT_TYPE_E,
				mediaType := "application/resource-lists+xml"
			},
			pAssertedID := p_pAssertedID
		},
		messageBody := {
			xmlBody := {
				resourceLists := p_resource_lists
			}
		}
	}
    

template Resource_lists mw_Resource_lists(
    SipUrl p_user
) := {
	sequence := {
		{
			list := {
				name := *,
				anyAttributes := *,
				display_name := *,
				sequence_list := {
					{
						choice := {
							entry := {
								uri := p_user.userInfo.userOrTelephoneSubscriber & "@" &
                                p_user.hostPort.host,
								anyAttributes := *,
								display_name := *,
								elem := *
							}
						}
					}
				},
				elem := *
			}
		}
	}
}

    template REFER_Request mw_REFER_Request_IMS(
        CallId p_callId, 
        template SipUrl p_requestUri,
        template ReferTo p_referTo
    ) modifies mw_REFER_Request_Base := {
		requestLine := {
			method := REFER_E, 
			requestUri := p_requestUri, 
			sipVersion := ?
		},
		msgHeader := {
            referTo := p_referTo
		}
	}

template ReferTo mw_ReferTo (
    template SipUrl p_uri
):= {
	fieldName := REFER_TO_E,
	nameAddr := {
		displayName := *,
		addrSpec := p_uri
	},
	referToParams := *
}




    
    
}
 No newline at end of file
+183 −0

File changed.

Preview size limit exceeded, changes collapsed.