Commit 812b827c authored by poglitsch's avatar poglitsch
Browse files

all test cases implemented

parent ae0dbb07
Loading
Loading
Loading
Loading
+219 −1
Original line number Diff line number Diff line
@@ -269,6 +269,48 @@ module CONF_Steps {
    }
    
        
    /**
     * @desc This function invites a user to join a conference by sending a REFER request to the user
     * @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, "INVITE"),
            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")
        ));
    }
        
    /**
     * @desc This function invites a user to join a conference by sending a REFER request to a conference FOKUS
     * @param p_cSeq CSeq number
@@ -306,7 +348,183 @@ module CONF_Steps {
            "active",
            "application/message/sipfrag",
            m_Event_refer,
            m_MBody_sipfrag("SIP/2.0 100 Trying")
            m_MBody_sipfrag("SIP/2.0 200 Trying")
        ));
    }
    
        
    /**
     * 
     * @desc This function sends a re-INVITE request to put on hold a active call 
     * @param   p_originating booleana indicator if user is originating party of the call
     */
    function f_holdCall(in boolean p_orginatingSide) runs on ImsComponent {
            
        // change SDP to sendonly
        f_SIP_modMediaDirection(0,m_attribute_sendonly);
            
        // prepare and send INVITE
        LibIms_Steps.f_setHeadersReINVITE(vc_cSeq, p_orginatingSide);
        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 This function establishes a new 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
        )); 
    }
    
    function f_createConference(integer p_profile) runs on ImsComponent {
        LibIms_Steps.f_setHeadersINVITE(vc_cSeq, p_profile);
        f_SendINVITE(m_INVITE_Request_Base(
            vc_requestUri, 
            vc_callId, 
            vc_cSeq, 
            vc_from, 
            vc_to, 
            vc_via, 
            vc_contact
        ));
        
        //receive 200 OK
        f_awaitingResponse(mw_Response_Contact(
            c_statusLine200, 
            vc_callId, 
            vc_cSeq, 
            mw_Contact_conference
        ));
        
        f_SendACK(m_ACK_Request_Base(
            vc_requestUri, 
            vc_callId, 
            vc_cSeq, 
            vc_from, 
            vc_to, 
            vc_via
        ));
    }
    
    function f_enterConference(integer p_conf, integer p_user) runs on ImsComponent {
        LibIms_Steps.f_setHeadersINVITE(vc_cSeq, p_conf);
        f_SendINVITE(m_INVITE_Request_CONF(
            vc_requestUri, 
            vc_callId, 
            vc_cSeq, 
            vc_from, 
            vc_to, 
            vc_via, 
            vc_contact,
            m_ReferredBy_SipUrl(
                f_initSipUrl(p_user)
            )
        ));
        
        //receive 200 OK
        f_awaitingResponse(mw_Response_Contact(
            c_statusLine200, 
            vc_callId, 
            vc_cSeq, 
            mw_Contact_conference
        ));
        
        f_SendACK(m_ACK_Request_Base(
            vc_requestUri, 
            vc_callId, 
            vc_cSeq, 
            vc_from, 
            vc_to, 
            vc_via
        ));
    }
    
    function f_terminateSession(integer p_profile) runs on ImsComponent {
        // UE#1 sends BYE
        LibIms_Steps.f_setHeadersBYE(vc_cSeq, p_profile);
        f_SendBYE(m_BYE_Request_Base(
            vc_requestUri, 
            vc_callId, 
            vc_cSeq, 
            vc_from, 
            vc_to, 
            vc_via
         ));
        
        f_awaitingResponse(mw_Response_Base(
            c_statusLine200, 
            vc_callId, 
            vc_cSeq
        ));
    }
}
 No newline at end of file
+334 −0
Original line number Diff line number Diff line
@@ -513,11 +513,345 @@ module CONF_TC_Functions {
            *
        ));
        
        // await BYE and send 200OK
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
        
    }
    
    
    function f_TC_CONF_N03_002(CSeq p_CSeq) runs on ImsComponent {
        f_init_ics_scscf(p_CSeq);
        
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
       // ----  create conference  ----->
       LibIms_Steps.f_setHeadersINVITE(vc_cSeq, c_conferenceProfile_factoryURI);
       f_SendINVITE(m_INVITE_Request_ResourceList(
           vc_requestUri, 
           vc_callId, 
           vc_cSeq, 
           vc_from, 
           vc_to, 
           vc_via, 
           vc_contact,
           m_MBody_XML(mw_XmlBody_ResourceLists(m_ResourceList_1User(
            m_EntryUser(f_initSipUrl(c_userProfile_UE2atSUThome))
           )))
       ));
    
       f_awaitingINVITE(mw_INVITE_Request_CONF(
           f_initSipUrl(c_userProfile_UE2atSUThome),
           mw_PAssertedID(mw_AddrUnion_Nameaddr(*,PX_IMS_SUT_UE2_PUBLIC_USER, *)),
           mw_Contact_conference
       ));
    
       f_SendACK(m_ACK_Request_Base(
           vc_requestUri, 
           vc_callId, 
           vc_cSeq, 
           vc_from, 
           vc_to, 
           vc_via
       ));
        
       // ----  UE#2 get INVITE ----->
        
        f_awaitingINVITE(mw_INVITE_Request_CONF_OIR(
            f_initSipUrl(c_userProfile_UE2atSUThome),
            *,
            *
        ));
                
        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))
        ));
        
        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());
    }
    
    function f_TC_CONF_N03_003(CSeq p_CSeq) runs on ImsComponent {
        var SessionDialog v_s1;
        var SessionDialog v_s2;
        var SessionDialog v_s3;
        
        f_init_ics_scscf(p_CSeq);
        
        // create session with ue2
        f_establishCall(p_CSeq, c_userProfile_UE2atSUThome);
        f_holdCall(true);
        v_s1 := f_saveSession();
        
        // create session with ue3
        f_establishCall(p_CSeq, c_userProfile_UE3atSUThome);
        f_holdCall(true);
        v_s2 := f_saveSession();
        
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // create conference
        f_createConference(c_conferenceProfile_factoryURI);
        v_s3 := f_saveSession();
        
        // UE#2 join
        f_enterConference(c_conferenceProfile_factoryURI, c_userProfile_UE1atSUThome);
        
        // terminate session 1
        f_loadSession(v_s1);
        f_terminateSession(c_userProfile_UE2atSUThome);
        
        // load conference
        f_loadSession(v_s3);
        
        // UE#3 join
        f_enterConference(c_conferenceProfile_factoryURI, c_userProfile_UE1atSUThome);
        v_s3 := f_saveSession();
        
        // terminate session 2
        f_loadSession(v_s2);
        f_terminateSession(c_userProfile_UE3atSUThome);
        
        // load conference
        f_loadSession(v_s3);
        
        // terminate conference
        f_terminateSession(c_conferenceProfile_factoryURI);
        
        // await BYE and send 200OK UE#2
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        // await BYE and send 200OK UE#3
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_N03_004(CSeq p_CSeq) runs on ImsComponent {
        var SessionDialog v_s1;
        var SessionDialog v_s2;
        var SessionDialog v_s3;
        
        f_init_ics_scscf(p_CSeq);
        
        // create session with ue2
        f_establishCall(p_CSeq, c_userProfile_UE2atSUThome);
        f_holdCall(true);
        v_s1 := f_saveSession();
        
        // create session with ue3
        f_establishCall(p_CSeq, c_userProfile_UE3atSUThome);
        f_holdCall(true);
        v_s2 := f_saveSession();
        
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // create conference
        f_createConference(c_conferenceProfile_factoryURI);
        v_s3 := f_saveSession();
        
        // invite UE#2
        f_referConference(p_CSeq, c_userProfile_UE2atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI));
        v_s3 := f_saveSession();
        
        // UE#2 accept
        f_acceptConference();
        
        // terminate session 1
        f_loadSession(v_s1);
        f_terminateSession(c_userProfile_UE2atSUThome);
        
        // load conference
        f_loadSession(v_s3);
        
        // invite UE#3
        f_referConference(p_CSeq, c_userProfile_UE3atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI));
        v_s3 := f_saveSession();
        
        // terminate session 2
        f_loadSession(v_s2);
        f_terminateSession(c_userProfile_UE3atSUThome);
        
        // load conference
        f_loadSession(v_s3);
        
        // terminate conference
        f_terminateSession(c_conferenceProfile_factoryURI);
        
        // await BYE and send 200OK UE#2
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        // await BYE and send 200OK UE#3
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_N03_005(CSeq p_CSeq) runs on ImsComponent {
        var SessionDialog v_s1;
        var SessionDialog v_s2;
        var SessionDialog v_s3;
        
        f_init_ics_scscf(p_CSeq);
        
        // create session with ue2
        f_establishCall(p_CSeq, c_userProfile_UE2atSUThome);
        f_holdCall(true);
        v_s1 := f_saveSession();
        
        // create session with ue3
        f_establishCall(p_CSeq, c_userProfile_UE3atSUThome);
        f_holdCall(true);
        v_s2 := f_saveSession();
        
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // create conference
        f_createConference(c_conferenceProfile_factoryURI);
        v_s3 := f_saveSession();
        
        // invite UE#2
        f_referConference(p_CSeq, c_userProfile_UE2atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); // TODO add replace
        v_s3 := f_saveSession();
        
        // UE#2 accept
        f_acceptConference();
        
        // terminate session 1
        f_loadSession(v_s1);
        f_terminateSession(c_userProfile_UE2atSUThome);
        
        // load conference
        f_loadSession(v_s3);
        
        // invite UE#3
        f_referConference(p_CSeq, c_userProfile_UE3atSUThome, f_initSipUrl(c_conferenceProfile_factoryURI)); // TODO add replace
        v_s3 := f_saveSession();
        
        // terminate session 2
        f_loadSession(v_s2);
        f_terminateSession(c_userProfile_UE3atSUThome);
        
        // load conference
        f_loadSession(v_s3);
        
        // terminate conference
        f_terminateSession(c_conferenceProfile_factoryURI);
        
        // await BYE and send 200OK UE#2
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        // await BYE and send 200OK UE#3
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_N03_006(CSeq p_CSeq) runs on ImsComponent {
        var SessionDialog v_s1;
        var SessionDialog v_s2;
        var SessionDialog v_s3;
        
        f_init_ics_scscf(p_CSeq);
        
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // create conference
        f_createConference(c_conferenceProfile_factoryURI);
        
        // invite UE#2
        LibIms_Steps.f_setHeadersREFER_conf(vc_cSeq, f_initSipUrl(c_conferenceProfile_factoryURI));
            
         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_userProfile_UE2atSUThome), "INVITE"),
            m_ReferredBy_SipUrl(f_initSipUrl(c_userProfile_UE3atSUThome)) 
         ));
                    
         f_awaitingResponse(mw_Response_Base(
             c_statusLine202, 
             vc_callId, 
            vc_cSeq
         ));
        
        // UE#2 accept
        f_acceptConference();
        
        // terminate conference
        f_terminateSession(c_conferenceProfile_factoryURI);
        
        // await BYE and send 200OK UE#2
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_N03_007(CSeq p_CSeq) runs on ImsComponent {
        var SessionDialog v_s1;
        var SessionDialog v_s2;
        var SessionDialog v_s3;
        
        f_init_ics_scscf(p_CSeq);
        
        f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
        // create conference
        f_createConference(c_conferenceProfile_factoryURI);
        
        // invite UE#2
        LibIms_Steps.f_setHeadersREFER_conf(vc_cSeq, f_initSipUrl(c_conferenceProfile_factoryURI));
            
         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_userProfile_UE2atSUThome), "INVITE"),
             omit
         ));
                    
         f_awaitingResponse(mw_Response_Base(
             c_statusLine202, 
             vc_callId, 
            vc_cSeq
         ));
        
        // UE#2 accept
        f_acceptConference();
        
        // terminate conference
        f_terminateSession(c_conferenceProfile_factoryURI);
        
        // await BYE and send 200OK UE#2
        f_awaitingBYE_sendReply(mw_BYE_Request_Base(?));
        
        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
    }
    
    function f_TC_CONF_N04_001(CSeq p_CSeq) runs on ImsComponent {
        f_init_ics_scscf(p_CSeq);

+31 −0
Original line number Diff line number Diff line
@@ -228,4 +228,35 @@ template Resource_lists mw_Resource_lists(
    	msgHeader := {privacy := p_privacy}
    }
    
    template Resource_lists m_ResourceList_1User(
        EntryType p_user1
    ) :=
    {
        sequence := {
            {
                list := {
                    name := omit,
                    anyAttributes := omit,
                    display_name := omit,
                    sequence_list := {
                        {
                            choice := {
                                entry := p_user1
                            }
                        }
                    },
                    elem := omit
                }
            }
        }
    }
    
    template INVITE_Request m_INVITE_Request_CONF (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq,
         From p_from, To p_to, Via p_via, Contact p_contact, ReferredBy p_referredBy) modifies m_INVITE_Dummy :=
    {
        msgHeader :=
        {
            referredBy := p_referredBy
        }
    }
}
 No newline at end of file
+136 −0
Original line number Diff line number Diff line
@@ -247,6 +247,142 @@ module CONF_TestCases {
            // tear down test configuration
            f_cf_as_down(v_scscf);
        }
        
        
        /**
         * @desc
         *     Inviting participant by sending a participant list to the focus.
         * @param p_cSeq Transaction Id
         */
        testcase TC_CONF_N03_002(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter {
            // variable declaration
            var ImsComponent v_scscf;
        
            // setup test configuration
            f_cf_as_up(v_scscf);
        
            // start component
            v_scscf.start(f_TC_CONF_N03_002(p_cSeq));
        
            // synchronize component
            f_serverSync1Client({c_prDone, c_tbDone});
        
            // tear down test configuration
            f_cf_as_down(v_scscf);
        }
        
        /**
         * @desc
         *     Three-way session creation. REFER is sent to the participants.
         * @param p_cSeq Transaction Id
         */
        testcase TC_CONF_N03_003(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter {
            // variable declaration
            var ImsComponent v_scscf;
        
            // setup test configuration
            f_cf_as_up(v_scscf);
        
            // start component
            v_scscf.start(f_TC_CONF_N03_003(p_cSeq));
        
            // synchronize component
            f_serverSync1Client({c_prDone, c_tbDone});
        
            // tear down test configuration
            f_cf_as_down(v_scscf);
        }
        
        
        /**
         * @desc
         *     Three-way session creation. REFER is sent to the focus.
         * @param p_cSeq Transaction Id
         */
        testcase TC_CONF_N03_004(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter {
            // variable declaration
            var ImsComponent v_scscf;
        
            // setup test configuration
            f_cf_as_up(v_scscf);
        
            // start component
            v_scscf.start(f_TC_CONF_N03_004(p_cSeq));
        
            // synchronize component
            f_serverSync1Client({c_prDone, c_tbDone});
        
            // tear down test configuration
            f_cf_as_down(v_scscf);
        }
        
        
        /**
         * @desc
         *     Three-way session creation. Replace header included in the REFER.
         * @param p_cSeq Transaction Id
         */
        testcase TC_CONF_N03_005(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter {
            // variable declaration
            var ImsComponent v_scscf;
        
            // setup test configuration
            f_cf_as_up(v_scscf);
        
            // start component
            v_scscf.start(f_TC_CONF_N03_005(p_cSeq));
        
            // synchronize component
            f_serverSync1Client({c_prDone, c_tbDone});
        
            // tear down test configuration
            f_cf_as_down(v_scscf);
        }
        
        
        /**
         * @desc
         *     Referred-By value does not contain a valid identity of the requesting user.
         * @param p_cSeq Transaction Id
         */
        testcase TC_CONF_N03_006(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter {
            // variable declaration
            var ImsComponent v_scscf;
        
            // setup test configuration
            f_cf_as_up(v_scscf);
        
            // start component
            v_scscf.start(f_TC_CONF_N03_006(p_cSeq));
        
            // synchronize component
            f_serverSync1Client({c_prDone, c_tbDone});
        
            // tear down test configuration
            f_cf_as_down(v_scscf);
        }
        
        /**
         * @desc
         *     Referred-By header not present.
         * @param p_cSeq Transaction Id
         */
        testcase TC_CONF_N03_007(inout CSeq p_cSeq) runs on ServerSyncComp system TestAdapter {
            // variable declaration
            var ImsComponent v_scscf;
        
            // setup test configuration
            f_cf_as_up(v_scscf);
        
            // start component
            v_scscf.start(f_TC_CONF_N03_007(p_cSeq));
        
            // synchronize component
            f_serverSync1Client({c_prDone, c_tbDone});
        
            // tear down test configuration
            f_cf_as_down(v_scscf);
        }
    }
    
    group leavingConference {