Commit 01df23ad authored by garciay's avatar garciay
Browse files

Finalize HSS role validation with Spectra

parent 083795e1
Loading
Loading
Loading
Loading
+72 −74
Original line number Diff line number Diff line
@@ -2306,7 +2306,6 @@ module DiameterCxDx_Cx_TCFunctions {
                                *,
                                mw_restoration_Info_AVP_dummy   // containing an SCSCF-Restoration-Info AVP
                                                                //     indicating information related with Public User Identity
                                                                // TODO To be enhanced
                    )));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    
@@ -2384,6 +2383,10 @@ module DiameterCxDx_Cx_TCFunctions {
                    // Preamble
                    // Clause 'Initial conditions'
                    f_preamble_ICSCF();
                    f_hssRegistrationCx(vc_sessionId,
                                        PX_UserName,
                                        PX_PublicIdentity
                    );
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // Test Body
@@ -2420,16 +2423,15 @@ module DiameterCxDx_Cx_TCFunctions {
                    );
                    // Check Result Code in vc_recvDiamMsg
                    if (ischosen(vc_recvDiamMsg.sAA_MSG)) {
                        
                        if ( // containing a Result-Code AVP 
                             //     indicating DIAMETER_SUCCESS
                            ispresent(vc_recvDiamMsg.sAA_MSG.sAA_Body.result_Code) and 
                            (vc_recvDiamMsg.sAA_MSG.sAA_Body.result_Code.aVP_Data == DIAMETER_SUCCESS_E)
                            match(vc_recvDiamMsg.sAA_MSG.sAA_Body.result_Code, mw_resultCode(DIAMETER_SUCCESS_E))
                        ) {
                            f_setVerdict(e_success);
                        } else if (
                            ispresent(vc_recvDiamMsg.sAA_MSG.sAA_Body.experimental_Result) and 
                            (vc_recvDiamMsg.sAA_MSG.sAA_Body.experimental_Result.experimental_Result_Code.aVP_Data == DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED_E)
                            match(vc_recvDiamMsg.sAA_MSG.sAA_Body.experimental_Result.experimental_Result_Code, mw_experimentalResultCode(?, DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED_E))
                        ) { // OR containing an Experimental-Result AVP
                            //     containing an Experimental-Result-Code AVP
                            //         indicating DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED
@@ -2443,7 +2445,7 @@ module DiameterCxDx_Cx_TCFunctions {
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    
                    // Postamble
                    f_s_SAR_SAA(vc_sessionId, USER_DEREGISTRATION_E);
                    f_hssDeregistrationCx(vc_sessionId);
                    f_postamble_HSS();
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
                } // End of function f_TC_CX_HSS_SA_15_I
@@ -2458,7 +2460,10 @@ module DiameterCxDx_Cx_TCFunctions {
                    // Preamble
                    // Clause 'Initial conditions'
                    f_preamble_ICSCF();
                    f_s_SAR_SAA(vc_sessionId);
                    f_hssRegistrationCx(vc_sessionId,
                                        PX_UserName,
                                        PX_PublicIdentity
                    );
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // Test Body
@@ -2500,7 +2505,7 @@ module DiameterCxDx_Cx_TCFunctions {
                    
                    // Postamble
                    vc_serverName := m_serverName(PX_ServerName);
                    f_s_SAR_SAA(vc_sessionId, USER_DEREGISTRATION_E);
                    f_hssDeregistrationCx(vc_sessionId);
                    f_postamble_HSS();
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
                } // End of function f_TC_CX_HSS_SA_16_I
@@ -2515,7 +2520,10 @@ module DiameterCxDx_Cx_TCFunctions {
                    // Preamble
                    // Clause 'Initial conditions'
                    f_preamble_ICSCF();
                    f_s_SAR_SAA(vc_sessionId);
                    f_hssRegistrationCx(vc_sessionId,
                                        PX_UserName,
                                        PX_PublicIdentity
                    );
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // Test Body
@@ -2556,9 +2564,8 @@ module DiameterCxDx_Cx_TCFunctions {
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    
                    // Postamble
                    f_s_SAR_SAA(vc_sessionId, USER_DEREGISTRATION_E);
                    vc_serverName := m_serverName(PX_ServerName);
                    f_s_SAR_SAA(vc_sessionId, USER_DEREGISTRATION_E);
                    f_hssDeregistrationCx(vc_sessionId);
                    f_postamble_HSS();
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
                } // End of function f_TC_CX_HSS_SA_17_I
@@ -2854,9 +2861,9 @@ module DiameterCxDx_Cx_TCFunctions {
                    if (ispresent(vc_recvDiamMsg.rTR_MSG.rTR_Body.public_Identity)) {   // not containing a list of Public-Identity AVP
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else if (
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != PERMANENT_TERMINATION_E) and 
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != SERVER_CHANGE_E) and 
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != REMOVE_S_CSCF_E) 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, PERMANENT_TERMINATION_E)) and 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, SERVER_CHANGE_E)) and 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, REMOVE_S_CSCF_E)) 
                    ) {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else {
@@ -2926,9 +2933,9 @@ module DiameterCxDx_Cx_TCFunctions {
                    if (ispresent(vc_recvDiamMsg.rTR_MSG.rTR_Body.public_Identity)) {           // not containing a list of Public-Identity AVP
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else if (
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != PERMANENT_TERMINATION_E) and 
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != SERVER_CHANGE_E) and 
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != REMOVE_S_CSCF_E) 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, PERMANENT_TERMINATION_E)) and 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, SERVER_CHANGE_E)) and 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, REMOVE_S_CSCF_E)) 
                    ) {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else {
@@ -2998,9 +3005,9 @@ module DiameterCxDx_Cx_TCFunctions {
                                }
                    )));
                    if (
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != PERMANENT_TERMINATION_E) and 
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != SERVER_CHANGE_E) and 
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != REMOVE_S_CSCF_E) 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, PERMANENT_TERMINATION_E)) and 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, SERVER_CHANGE_E)) and 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, REMOVE_S_CSCF_E)) 
                    ) {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else {
@@ -3014,7 +3021,8 @@ module DiameterCxDx_Cx_TCFunctions {
                                                     m_resultCode
                                                     (DIAMETER_SUCCESS_E),
                                                     omit)));
                    
                    vc_sessionId := v_sessionId;
                    f_hssDeregistrationCx(vc_sessionId);
                    f_postamble_HSS();
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
                    
@@ -3026,15 +3034,17 @@ module DiameterCxDx_Cx_TCFunctions {
                function f_TC_CX_HSS_RT_07_I_S() runs on DiameterCx {
                    
                    // Local variables
                    var Session_Id_AVP v_sessionId;
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_preamble_ICSCF();
                    f_hssRegistrationCx(vc_sessionId,                                    // Public Service Identities
                                        PX_UserName,
                                        PX_ServiceIdentity,
                                        PX_WildcardIdentity,                             //     indicating wildcarded public user identity
                                        m_uar_Flags_Cx
                    );
                    v_sessionId := valueof(vc_sessionId);
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // Test Body
@@ -3044,7 +3054,7 @@ module DiameterCxDx_Cx_TCFunctions {
                    // Clause 'then': the IUT sends an RT-Request and receives an RT-Answer
                    f_awaiting_RTR(
                        mw_RTR_Msg(
                            vc_sessionId,                       // containing a Session-ID AVP
                            ?,                                                          // containing a Session-ID AVP
                            mw_RTR_publicIdentity(
                                vc_originHost,
                                vc_originRealm,
@@ -3061,24 +3071,24 @@ module DiameterCxDx_Cx_TCFunctions {
                                    valueof(vc_publicIdentity)
                                }
                    )));
                    if (ispresent(vc_recvDiamMsg.rTR_MSG.rTR_Body.public_Identity)) {           // not containing a list of Public-Identity AVP
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else if (
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != PERMANENT_TERMINATION_E) and 
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != SERVER_CHANGE_E) and 
                        (vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != REMOVE_S_CSCF_E) 
                    if (
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, PERMANENT_TERMINATION_E)) and 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, SERVER_CHANGE_E)) and 
                        (not match(vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data, REMOVE_S_CSCF_E)) 
                    ) {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else {
                        f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    };
                    // Postamble
                    f_send_RTA(m_RTA_Msg(vc_sessionId,
                                         m_RTA_basic(vc_originHost,
                                                     vc_originRealm,
                                                     m_resultCode
                                                     (DIAMETER_SUCCESS_E),
                                                     omit)));
                    // Postamble
                    vc_sessionId := v_sessionId;
                    f_hssDeregistrationCx(vc_sessionId);
                    f_postamble_HSS();
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
                    
@@ -3090,6 +3100,7 @@ module DiameterCxDx_Cx_TCFunctions {
                function f_TC_CX_HSS_RT_08_I_S2() runs on DiameterCx {
                    
                    // Local variables
                    var Session_Id_AVP v_sessionId;
                    
                    // Preamble
                    // Clause 'Initial conditions'
@@ -3099,6 +3110,7 @@ module DiameterCxDx_Cx_TCFunctions {
                                        PX_ServiceIdentity,
                                        m_uar_Flags_Cx
                    );
                    v_sessionId := valueof(vc_sessionId);
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // Test Body
@@ -3108,7 +3120,7 @@ module DiameterCxDx_Cx_TCFunctions {
                    // Clause 'then': the IUT sends an RT-Request and receives an RT-Answer
                    f_awaiting_RTR(
                        mw_RTR_Msg(
                            vc_sessionId,                       // containing a Session-ID AVP
                            ?,                                                          // containing a Session-ID AVP
                            mw_RTR_publicIdentity(
                                vc_originHost,
                                vc_originRealm,
@@ -3117,23 +3129,16 @@ module DiameterCxDx_Cx_TCFunctions {
                                vc_userName,                                            // containing a User-Name AVP
                                                                                        //     indicating the private user identity
                                mw_deregistration_Reason_AVP(                           // containing a Deregistration-Reason AVP
                                                                                        //     indicating any deregistration reason
                                    mw_reason_Code_AVP
                                    mw_reason_Code_AVP(
                                        NEW_SERVER_ASSIGNED_E                           //     indicating NEW_SERVER_ASSIGNED
                                    )
                                ),
                                {                                                       // containing more than one Public-Identity AVP
                                                                                        //     indicating a public service identity matching the wildcarded public service identity provided by the SA-Request message
                                    valueof(vc_publicIdentity)
                                }
                    )));
                    if (ispresent(vc_recvDiamMsg.rTR_MSG.rTR_Body.public_Identity)) {           // not containing a list of Public-Identity AVP
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else if (
                        vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != NEW_SERVER_ASSIGNED_E 
                    ) {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else {
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    }
                    
                    // Postamble
                    f_send_RTA(m_RTA_Msg(vc_sessionId,
@@ -3142,7 +3147,8 @@ module DiameterCxDx_Cx_TCFunctions {
                                                     m_resultCode
                                                     (DIAMETER_SUCCESS_E),
                                                     omit)));
                    
                    vc_sessionId := v_sessionId;
                    f_hssDeregistrationCx(vc_sessionId);
                    f_postamble_HSS();
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
                    
@@ -3154,6 +3160,7 @@ module DiameterCxDx_Cx_TCFunctions {
                function f_TC_CX_HSS_RT_09_I_S2() runs on DiameterCx {
                    
                    // Local variables
                    var Session_Id_AVP v_sessionId;
                    
                    // Preamble
                    // Clause 'Initial conditions'
@@ -3163,6 +3170,7 @@ module DiameterCxDx_Cx_TCFunctions {
                                        PX_ServiceIdentity,
                                        m_uar_Flags_Cx
                    );
                    v_sessionId := valueof(vc_sessionId);
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // Test Body
@@ -3172,7 +3180,7 @@ module DiameterCxDx_Cx_TCFunctions {
                    // Clause 'then': the IUT sends an RT-Request and receives an RT-Answer
                    f_awaiting_RTR(
                        mw_RTR_Msg(
                            vc_sessionId,                       // containing a Session-ID AVP
                            ?,                                                          // containing a Session-ID AVP
                            mw_RTR_publicIdentity(
                                vc_originHost,
                                vc_originRealm,
@@ -3181,23 +3189,16 @@ module DiameterCxDx_Cx_TCFunctions {
                                vc_userName,                                            // containing a User-Name AVP
                                                                                        //     indicating the private user identity
                                mw_deregistration_Reason_AVP(                           // containing a Deregistration-Reason AVP
                                                                                        //     indicating any deregistration reason
                                    mw_reason_Code_AVP
                                    mw_reason_Code_AVP(
                                        NEW_SERVER_ASSIGNED_E                           //     indicating NEW_SERVER_ASSIGNED
                                    )
                                ),
                                {                                                       // containing more than one Public-Identity AVP
                                                                                        //     indicating a public service identity matching the wildcarded public service identity provided by the SA-Request message
                                    valueof(vc_publicIdentity)
                                }
                    )));
                    if (ispresent(vc_recvDiamMsg.rTR_MSG.rTR_Body.public_Identity)) {           // not containing a list of Public-Identity AVP
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else if (
                        vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != SERVER_CHANGE_E 
                    ) {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else {
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    }
                    
                    // Postamble
                    f_send_RTA(m_RTA_Msg(vc_sessionId,
@@ -3206,7 +3207,8 @@ module DiameterCxDx_Cx_TCFunctions {
                                                     m_resultCode
                                                     (DIAMETER_SUCCESS_E),
                                                     omit)));

                    vc_sessionId := v_sessionId;
                    f_hssDeregistrationCx(vc_sessionId);
                    f_postamble_HSS();
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
                    
@@ -3218,6 +3220,7 @@ module DiameterCxDx_Cx_TCFunctions {
                function f_TC_CX_HSS_RT_10_I_S() runs on DiameterCx {
                    
                    // Local variables
                    var Session_Id_AVP v_sessionId;
                    
                    // Preamble
                    // Clause 'Initial conditions'
@@ -3227,6 +3230,7 @@ module DiameterCxDx_Cx_TCFunctions {
                                        PX_ServiceIdentity,
                                        m_uar_Flags_Cx
                    );
                    v_sessionId := valueof(vc_sessionId);
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // Test Body
@@ -3236,7 +3240,7 @@ module DiameterCxDx_Cx_TCFunctions {
                    // Clause 'then': the IUT sends an RT-Request and receives an RT-Answer
                    f_awaiting_RTR(
                        mw_RTR_Msg(
                            vc_sessionId,                       // containing a Session-ID AVP
                            ?,                                                          // containing a Session-ID AVP
                            mw_RTR_publicIdentity(
                                vc_originHost,
                                vc_originRealm,
@@ -3245,23 +3249,16 @@ module DiameterCxDx_Cx_TCFunctions {
                                vc_userName,                                            // containing a User-Name AVP
                                                                                        //     indicating the private user identity
			                    mw_deregistration_Reason_AVP(                           // containing a Deregistration-Reason AVP
                                                                                        //     indicating any deregistration reason
                                    mw_reason_Code_AVP
			                        mw_reason_Code_AVP(
			                            REMOVE_S_CSCF_E                                 //     indicating REMOVE_S CSCF
			                        )
			                    ),
                                {                                                       // containing more than one Public-Identity AVP
                                                                                        //     indicating a public service identity matching the wildcarded public service identity provided by the SA-Request message
                                    valueof(vc_publicIdentity)
                                }
                    )));
                    if (ispresent(vc_recvDiamMsg.rTR_MSG.rTR_Body.public_Identity)) {           // not containing a list of Public-Identity AVP
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else if (
                        vc_recvDiamMsg.rTR_MSG.rTR_Body.deregistration_Reason.reason_Code.aVP_Data != REMOVE_S_CSCF_E 
                    ) {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    } else {
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    }
                    
                    // Postamble
                    f_send_RTA(m_RTA_Msg(vc_sessionId,
@@ -3270,6 +3267,7 @@ module DiameterCxDx_Cx_TCFunctions {
                                                     m_resultCode
                                                     (DIAMETER_SUCCESS_E),
                                                     omit)));
                    vc_sessionId := v_sessionId;
                    f_hssDeregistrationCx(vc_sessionId);
                    f_postamble_HSS();
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
+8 −0
Original line number Diff line number Diff line
@@ -276,6 +276,14 @@ module DiameterCxDx_PIXITS

        modulepar UTF8String PX_ServiceIdentity := "service_identity@etsi.org";
        
        
        /** @desc   UTF8String, PIXIT item A.7/33
         *          the wildcard-Identity value.
         * @see 3GPP TS 29.229 6.3.2 Public-Identity AVP
         */

        modulepar UTF8String PX_WildcardIdentity := "public_identity!.*!@etsi.org";
        
        /** @desc   UTF8String, PIXIT item A.7/34
         *          the application server URL.
         * @see 3GPP TS 29.229 6.3.2 Public-Identity AVP
+5 −4
Original line number Diff line number Diff line
@@ -1699,7 +1699,8 @@ module DiameterCxDx_Templates {
                    server_Capabilities := p_serverCapabilities
                }
                
                template SAA_Body_AVP mw_SAA_ResulExpre (template Result_Code_AVP p_resultCode, 
                template SAA_Body_AVP mw_SAA_ResulExpre (
                                                         template Result_Code_AVP p_resultCode, 
                                                         template Experimental_Result_AVP p_experimentalResult)
                modifies mw_SAA_basic := {
                    result_Code := p_resultCode,