Skip to content
AtsSccas_TCFunctions.ttcn 107 KiB
Newer Older
Steffen Ludtke's avatar
Steffen Ludtke committed
/*
 *    @author     TTF T016
 *    @version    $Id$
 *    @desc       This module provides the TCfunctions used by the test component
 *              for SCCAS tests.
 */
module AtsSccas_TCFunctions {

    // XSD support
    import from XSD all;

    // LibCommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl all;
    import from LibCommon_DataStrings all;

    // LibSip
    import from LibSip_SIPTypesAndValues all;
    import from LibSip_SDPTypes all;
    import from LibSip_Templates all;
    import from LibSip_Steps all;
    import from LibSip_Interface all;
    import from LibSip_PIXITS all;

    // LibIms
    import from LibIms_Templates all;
    import from LibIms_Steps all;
    import from LibIms_SIPTypesAndValues all;
    import from LibIms_Interface all;

    // AtsSccas
    // import from AtsSccas_TestSystem all;
    import from AtsSccas_Templates all;
    import from AtsSccas_Steps all;
    import from AtsSccas_PICS all;
    import from AtsSccas_PIXITS all;
    import from AtsSccas_TestConfiguration all;

    group Group_6_3 {

        group TP_6_3_1_General {

            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes 3pty registration information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var template(value) REGISTER_Request m_register3ptyUe;
                var template(value) RequestUnion m_req;
                var template(value) Response m_ResponseReg_3ptyUe;
                
Steffen Ludtke's avatar
Steffen Ludtke committed

                // Preamble
                f_init_userprofile(c_userProfile_PCSCFwithHomeUE);
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_initSipUrl(c_userProfile_PCSCFwithHomeUE);
               
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                //Registration
                f_setHeaders_REGISTER(v_cSeq_s);//UE REGISTER
                m_register3ptyUe :=  m_register_ue_srvcc(
                                                    vc_requestUri, 
                                                    vc_callId, 
                                                    vc_cSeq, 
                                                    vc_from, 
                                                    vc_to, 
                                                    vc_via_REG, 
                                                    vc_contact, 
                                                    m_add_Authorization_digest(
                                                                                vc_authorization, 
                                                                                {c_Integrity_protected_no}
                                                                                ), 
                                                    PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                    PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                    "600000",
                                                    omit,
                                                    omit,
                                                    omit
                                                    );
                m_req:= {Register:=valueof(m_register3ptyUe)};

                m_ResponseReg_3ptyUe :=  m_Response_2xxonREGISTER_IMS(
                                                                c_statusLine200,
                                                                vc_callId,
                                                                p_cSeq_s,
                                                                vc_from,
                                                                vc_to,
                                                                vc_via_REG,
                                                                vc_contact,
                                                                m_SipUrl_currDomain(vc_userprofile),
                                                                vc_from.addressField.nameAddr.addrSpec
                                                                );

                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);

                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_SendREGISTER(
                             m_REGISTER_Request_AS(
                                              vc_requestUri, 
                                              vc_callId, 
                                              vc_cSeq, 
                                              vc_from, 
                                              vc_to, 
                                              vc_via_REG, 
                                              vc_contact, 
                                              -,
                                              "600000",
                                              m_contentType("multipart/mixed",{m_contentTypeBoundary(c_boundary)}) ,
                                              m_MBody_MIME_SipReqResp(c_boundary,m_req,m_ResponseReg_3ptyUe)
                              ));
Steffen Ludtke's avatar
Steffen Ludtke committed
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
Steffen Ludtke's avatar
Steffen Ludtke committed
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_01

            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes de-registration information (Expires=0)
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_02(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preamble
                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone
Steffen Ludtke's avatar
Steffen Ludtke committed

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
Steffen Ludtke's avatar
Steffen Ludtke committed
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
Steffen Ludtke's avatar
Steffen Ludtke committed
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
Steffen Ludtke's avatar
Steffen Ludtke committed
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_02

        } // End of group TP_6_3_1_General
          
        group TP_6_3_2_Triggers_To_ATCF {
            
            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_03(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var template(value) REGISTER_Request m_register3ptyUe;
                var template(value) RequestUnion m_req;
                var template(value) Response m_ResponseReg_3ptyUe;

                // Preamble
                f_init_userprofile(c_userProfile_PCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_initSipUrl(c_userProfile_PCSCFwithHomeUE);
                //Registration
                f_setHeaders_REGISTER(v_cSeq_s);//UE REGISTER
                m_register3ptyUe :=  m_register_ue_srvcc(
                                                    vc_requestUri, 
                                                    vc_callId, 
                                                    vc_cSeq, 
                                                    vc_from, 
                                                    vc_to, 
                                                    vc_via_REG, 
                                                    vc_contact, 
                                                    m_add_Authorization_digest(
                                                                                vc_authorization, 
                                                                                {c_Integrity_protected_no}
                                                                                ), 
                                                    PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                    PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                    "600000",
                                                    m_sccas_featureCaps({m_fcValue("g3gppAtcfFeatureCapabilityIndicator")}),
                                                    omit,
                                                    omit
                                                    );
                m_req:= {Register:=valueof(m_register3ptyUe)};
                m_ResponseReg_3ptyUe :=  m_Response_2xxonREGISTER_IMS(
                                                                c_statusLine200,
                                                                vc_callId,
                                                                p_cSeq_s,
                                                                vc_from,
                                                                vc_to,
                                                                vc_via_REG,
                                                                vc_contact,
                                                                m_SipUrl_currDomain(vc_userprofile),
                                                                vc_from.addressField.nameAddr.addrSpec
                                                                );
                
                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                -,
                                                "600000",
                                                m_contentType("multipart/mixed",{m_contentTypeBoundary(c_boundary)}) ,
                                                m_MBody_MIME_SipReqResp(c_boundary,m_req,m_ResponseReg_3ptyUe)
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                //Deregistration
                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                -,
                                                "0",
                                                - ,
                                                -)
                                );
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_03
Steffen Ludtke's avatar
Steffen Ludtke committed


        } // End of group TP_6_3_2_Triggers_To_ATCF

        group TP_6_3_3_SRVCC_Information_To_ATCF {

            /**
             *  @desc    Verify that the SCCAS successfully sends MESSAGE providing PS to CS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_04_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var template(value) REGISTER_Request m_register3ptyUe;
                var template(value) RequestUnion m_req;
                var template(value) Response m_ResponseReg_3ptyUe;
Steffen Ludtke's avatar
Steffen Ludtke committed

                // Preamble
                f_init_userprofile(c_userProfile_PCSCFwithHomeUE);
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_initSipUrl(c_userProfile_PCSCFwithHomeUE);
                
                //Registration
                f_setHeaders_REGISTER(v_cSeq_s);//UE REGISTER
                m_register3ptyUe :=  m_register_ue_srvcc(
                                                    vc_requestUri, 
                                                    vc_callId, 
                                                    vc_cSeq, 
                                                    vc_from, 
                                                    vc_to, 
                                                    vc_via_REG, 
                                                    vc_contact, 
                                                    m_add_Authorization_digest(
                                                                                vc_authorization, 
                                                                                {c_Integrity_protected_no}
                                                                                ), 
                                                    PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                    PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                    "600000",
                                                    m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                        {
                                                                            m_fcValue(
                                                                                      "g-3gpp-atcf-mgmt-uri-in-path",
                                                                                      {
                                                                                        {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                      })
                                                                        }),
                                                    omit,
                                                    omit
                                                    );
                m_req:= {Register:=valueof(m_register3ptyUe)};
                
                m_ResponseReg_3ptyUe :=  m_Response_2xxonREGISTER_IMS(
                                                                c_statusLine200,
                                                                vc_callId,
                                                                p_cSeq_s,
                                                                vc_from,
                                                                vc_to,
                                                                vc_via_REG,
                                                                vc_contact,
                                                                m_SipUrl_currDomain(vc_userprofile),
                                                                vc_from.addressField.nameAddr.addrSpec
                                                                );
                
                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone
Steffen Ludtke's avatar
Steffen Ludtke committed

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
Steffen Ludtke's avatar
Steffen Ludtke committed
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
Steffen Ludtke's avatar
Steffen Ludtke committed
                                                "600000",
                                                m_contentType("multipart/mixed",{m_contentTypeBoundary(c_boundary)}) ,
                                                m_MBody_MIME_SipReqResp(c_boundary,m_req,m_ResponseReg_3ptyUe)
Steffen Ludtke's avatar
Steffen Ludtke committed
                                ));
                tc_ack.start;
                alt {
//					[] SIPP.receive(mw_sccas_Response_2xxonREGISTER(
//																					   vc_callId, 
//																					   vc_cSeq, 
//																					   vc_from, 
//																					   vc_to, 
//																					   vc_via_REG, 
//																					   vc_contact, 
//																					   mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
//																					   mw_PAssertedID(
//																									  mw_PAssertedIDValue(PX_SCCAS_URI)
//																									  )
//																					   )) 
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
Steffen Ludtke's avatar
Steffen Ludtke committed
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_04_ueims

            function f_TC_ISC_SCCAS_RSC_REG_04_atcf(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Message
                LibIms_Steps.f_setHeadersMESSAGE(v_cSeq_s, vc_from.addressField.addrSpecUnion, vc_to.addressField.addrSpecUnion);
                f_awaitingMESSAGE(
                                  mw_sccas_MESSAGE_Request(
                                                           -, -, 
                                                           mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                           -,
                                                           m_contentType("application/vnd.3gpp.SRVCC-info+xml"),  // TODO To be refined during validation
                                                           ? // TODO To be refined during validation
                                  )
                                  );
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // Answer to the MESSAGE
                f_send200OK();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
            } // End of function f_TC_ISC_SCCAS_RSC_REG_04_atcf

        } // End of group TP_6_3_3_SRVCC_Information_To_ATCF

        group TP_6_3_4_Trigger_SRVCC_To_MSC {

            /**
             *  @desc    Verify that the SCCAS successfully get CS to PS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_05_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var Contact v_contact;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                v_contact := valueof(vc_contact);
                v_contact.contactBody.contactAddresses[0].contactParams := { // TODO To be refined during validation
                                                                             {
                                                                               "g.3gpp.atcf-mgmt-uri",
                                                                               {tokenOrHost := PX_ACTF_MGMT_URI}
                                                                             },
                                                                             {
                                                                               "g.3gpp.path",
                                                                               {tokenOrHost := PX_ACTF_URI}
                                                                             }
                                                                            };
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                v_contact, 
                                                m_add_Authorization_digest(
                                                                           vc_authorization, 
                                                                           {c_Integrity_protected_no}
                                                                           ), 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "600000",
                                                -/*m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                    {
                                                                        m_fcValue(
                                                                                  "g-3gpp-atcf-mgmt-uri\",
                                                                                  {
                                                                                    {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                  })
                                                                    })*/, // TODO To be refined during validation
                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_05_ueims

            function f_TC_ISC_SCCAS_RSC_REG_05_msc(in CSeq p_cSeq_s)
            runs on ImsComponent {

                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // deregistration
                
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // end function f_TC_ISC_SCCAS_RSC_REG_05_msc

        } // End of group TP_6_3_4_Trigger_SRVCC_To_MSC

        group TP_6_3_5_Providing_SRVCC_To_MSC {

            /**
             *  @desc    Verify that the SCCAS successfully provide CS to PS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_06_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var Contact v_contact;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                v_contact := valueof(vc_contact);
                v_contact.contactBody.contactAddresses[0].contactParams := { // TODO To be refined during validation
                                                                             {
                                                                               "g.3gpp.icsi-ref",
                                                                               {tokenOrHost := PX_ICSI_URI}
                                                                             }
                                                                            };
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                v_contact, 
                                                m_add_Authorization_digest(
                                                                            vc_authorization, 
                                                                            {c_Integrity_protected_no}
                                                                            ), 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "600000",
                                                -/*m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                    {
                                                                        m_fcValue(
                                                                                  "g-3gpp-atcf-mgmt-uri-in-path",
                                                                                  {
                                                                                    {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                  })
                                                                    })*/, // TODO To be refined during validation
                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(
                                                                    vc_callId, 
                                                                    vc_cSeq, 
                                                                    vc_from, 
                                                                    vc_to, 
                                                                    vc_via_REG, 
                                                                    vc_contact, 
                                                                    mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                                    mw_PAssertedID(
                                                                                   mw_PAssertedIDValue(PX_SCCAS_URI)
                                                                                   ), // TODO To be refined during validation
                                                                    mw_acceptContact(
                                                                                     { // TODO To be refined during validation
                                                                                        {
                                                                                        "g.3gpp.path-media",
                                                                                        {tokenOrHost := PX_ICSI_URI}
                                                                                        }
                                                                                     }
                                                                                     )
                                                                    )) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_06_ueims

            function f_TC_ISC_SCCAS_RSC_REG_06_msc(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Message
                LibIms_Steps.f_setHeadersMESSAGE(v_cSeq_s, vc_from.addressField.addrSpecUnion, vc_to.addressField.addrSpecUnion);
                f_awaitingMESSAGE(
                                  mw_sccas_MESSAGE_Request(
                                                           -, -, 
                                                           mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                           -,
                                                           m_contentType("application/vnd.3gpp.SRVCC-info+xml"),  // TODO To be refined during validation
                                                           ? // TODO To be refined during validation
                                  )
                                  );
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // Answer to the MESSAGE
                f_send200OK();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
            } // end function f_TC_ISC_SCCAS_RSC_REG_06_msc

        } // End of group TP_6_3_5_Providing_SRVCC_To_MSC

    } // End of group Group_6_3
     
    group Group_6A_4 {

        group TP_6A_4_2_SIP_INVITE_request {

            /**
             *  @desc    Verify that the SCCAS send INVITE for anchored user populated with FeatureCaps header
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_GEN_INV_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonINVITE(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_GEN_INV_01

        }  // End of group TP_6A_4_2_SIP_INVITE_request

    } // End of group Group_6A_4
     
    group Group_7_3 {
    } // End of group Group_7_3
     
    group Group_8_3 {
    } // End of group Group_8_3
     
    group Group_9_3 {
        
        function f_TC_IISC_SCCAS_CPT_INV_01_ueims(in CSeq p_cSeq_s)
        runs on ImsComponent {
                
            // TODO: set correct service profiles
            LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
            f_SendINVITE(m_sccas_invite(
                    vc_requestUri,
                    vc_callId,
                    vc_cSeq,
                    vc_from,
                    vc_to,
                    vc_via_REG,
                    vc_contact,
                    omit, // template(omit) Require p_require := omit,
                    vc_route,
                    m_supported_replaces, //template(omit) Supported p_supported := omit,
                    omit //template(value) MessageBody p_mb
                )
            
            );
            f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s));
            
            
            }
        
Steffen Ludtke's avatar
Steffen Ludtke committed
    } // End of group Group_9_3
     
    group Group_10_3 {

            /**
             *  @desc    Verify that the SCC AS successfully processes an INVITE on a previously established dialog if the SIP INVITE request contains a Replaces header field.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_PPT_RIN_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(   // TODO request active speech media component using CS bearer
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_INVITE_Request(?,vc_requestUri)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: forwarded INVITE message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_PPT_RIN_01        


Steffen Ludtke's avatar
Steffen Ludtke committed
    } // End of group Group_10_3
     
    group Group_11_3 {

            /**
             *  @desc    Verify that the SCC AS successfully processes an INVITE that includes an active speech media component using CS bearer.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_CON_RIN_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(   // TODO request active speech media component using CS bearer
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_INVITE_Request(?,vc_requestUri)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: forwarded INVITE message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_CON_RIN_01        

            /**
             *  @desc    Verify that the SCC AS successfully processes an INVITE due to two STIs on the Target Access Leg.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_CON_RIN_02(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(   // TODO  request CS -> PS
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_INVITE_Request(?,vc_requestUri)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: forwarded INVITE message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_CON_RIN_02  

            /**
             *  @desc    Verify that the SCC AS rejects an INVITE due missing ability to associate it to an ongoing or different SIP dialog.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_CON_RIN_03(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(