AtsImsIot_Emergency.ttcn 242 KB
Newer Older
3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,
															  PX_SIP_MW_PE_INTERFACENAME,
															  PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueA );
						f_cf_user_up ( v_psap );
						f_cf_VxLteMonitor_Up();

						// Preamble
						f_mtc_userRegistration(v_ueA, v_userInfoA);
						if (PX_PSAP_REGISTERED) {
							f_mtc_userRegistration(v_psap, v_infoPsap);
						} else {
							// TODO Check OPTIONS from PSAP to E-CSCF
						}
						f_mtc_check_precond_TD_VoLTE_NGC_INT_INI_01();

						// Test body
						f_mtc_check_TP_GM_PCSCF_NGC_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
						f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

						//Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
						f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
						f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

						f_mtc_check_TP_MW_PCSCF_NGC_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
						f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

						f_mtc_check_TP_MM_ECSCF_NGC_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11
						f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);

						// 183 Session Progress
						f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12
						f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
						f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18

						//Rx/Gx exchange after 183(SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17

						f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20
						f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21
						f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 22

						f_mtc_userCheckRinging(v_psap); // Event 19
						f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19
						f_mtc_userAnswerCall(v_psap); // Event 26

						f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23
						f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
						f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25

						f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 26 
						f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27
						f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28

						f_mtc_userCheckCallEstablished(v_ueA); // Event 29
						f_mtc_userCheckCallEstablished(v_psap); // Event 29

						// Postamble
						f_mtc_EndCall(v_ueA);
						f_PO_user_home_deregistration(v_ueA);
						f_PO_user_home_deregistration(v_psap);
						//f_cf_int_call_down(v_config);

						//unmap/disconnect component ports
						f_cf_user_down ( v_psap );
						f_cf_user_down ( v_ueA );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );

				} // End of TC TD_VoLTE_NGC_INT_INI_01

				group f_TD_VoLTE_NGC_INT_INI_01 {

					function f_mtc_check_precond_TD_VoLTE_NGC_INT_INI_01() runs on ImsTestCoordinator {
						log("If the test case fails, please check the preconditions");
						// TODO Add real code to check pre-conditions
					 } // End of function f_mtc_check_precond_TD_VoLTE_NGC_INT_INI_01

				} // End of group f_TD_VoLTE_NGC_INT_INI_01
				
				
			   /**
				 * @desc To demonstrate the if an IMS emergency call of the (automatically or manually) initiated eCall type of emergency service has been established,
				 *       the attempt by the PSAP to request transfer of an updated MSD shall be answered.
				 * @see ETSI TS 103 795-2 Clause 5.3.4.1    MSD update during NG eCall
				 */
				testcase TD_VoLTE_NGC_INT_INF_01_01() runs on ImsTestCoordinator system IotSystemInterface {
					var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
					var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
					var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
					var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,
															  PX_SIP_MW_PE_INTERFACENAME,
															  PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueA );
						f_cf_user_up ( v_psap );
						f_cf_VxLteMonitor_Up();

						// Preamble
						
						f_mtc_userRegistration(v_ueA, v_userInfoA);
						if (PX_PSAP_REGISTERED) {
							f_mtc_userRegistration(v_psap, v_infoPsap);
						} else {
							// TODO Check OPTIONS from PSAP to E-CSCF
						}
						f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
						f_mtc_check_precond_TD_VoLTE_NGC_INT_INF_01();

						// Test body
						
						//Send INFO
						f_mtc_check_TP_MM_ECSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 1
						f_mtc_check_TP_MW_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 6
						f_mtc_check_TP_GM_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 7
						
						//Receive INFO 
						
						f_mtc_check_TP_GM_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 8
						f_mtc_check_TP_MW_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 9
						f_mtc_check_TP_MM_ECSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 10
						

						// Postamble
						f_mtc_EndCall(v_ueA);
						f_PO_user_home_deregistration(v_ueA);
						f_PO_user_home_deregistration(v_psap);

						//unmap/disconnect component ports
						f_cf_user_down ( v_psap );
						f_cf_user_down ( v_ueA );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );

				} // End of TC TD_VoLTE_NGC_INT_INF_01_01
				
			testcase TD_VoLTE_NGC_INT_INF_01_02() runs on ImsTestCoordinator system IotSystemInterface {
					var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
					var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
					var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
					var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,
															  PX_SIP_MW_PE_INTERFACENAME,
															  PX_SIP_MW_EB_INTERFACENAME // E-CSCCF -> IBCF
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueA );
						f_cf_user_up ( v_psap );
						f_cf_VxLteMonitor_Up();

						// Preamble
						
						f_mtc_userRegistration(v_ueA, v_userInfoA);
						if (PX_PSAP_REGISTERED) {
							f_mtc_userRegistration(v_psap, v_infoPsap);
						} else {
							// TODO Check OPTIONS from PSAP to E-CSCF
						}
						f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
						f_mtc_check_precond_TD_VoLTE_NGC_INT_INF_01();

						// Test body
						
						//Send INFO
						f_mtc_check_TP_MX_ECSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 3
						f_mtc_check_TP_MW_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 6 
						f_mtc_check_TP_GM_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 7
						
						//Receive INFO 
						
						f_mtc_check_TP_GM_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 8  TODO
						f_mtc_check_TP_MW_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 9  TODO
						f_mtc_check_TP_MX_ECSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 11
						

						// Postamble
						f_mtc_EndCall(v_ueA);
						f_PO_user_home_deregistration(v_ueA);
						f_PO_user_home_deregistration(v_psap);

						//unmap/disconnect component ports
						f_cf_user_down ( v_psap );
						f_cf_user_down ( v_ueA );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );

				} // End of TC TD_VoLTE_NGC_INT_INF_01_02
				
				testcase TD_VoLTE_NGC_INT_INF_01_03() runs on ImsTestCoordinator system IotSystemInterface {
					var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
					var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
					var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
					var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,
															  PX_SIP_MW_PE_INTERFACENAME,
															  PX_SIP_MI_EB_INTERFACENAME // E-CSCCF -> BGCF
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueA );
						f_cf_user_up ( v_psap );
						f_cf_VxLteMonitor_Up();

						// Preamble
						
						f_mtc_userRegistration(v_ueA, v_userInfoA);
						if (PX_PSAP_REGISTERED) {
							f_mtc_userRegistration(v_psap, v_infoPsap);
						} else {
							// TODO Check OPTIONS from PSAP to E-CSCF
						}
						f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
						f_mtc_check_precond_TD_VoLTE_NGC_INT_INF_01();

						// Test body
						
						//Send INFO
						f_mtc_check_TP_MI_ECSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 5
						f_mtc_check_TP_MW_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 6 
						f_mtc_check_TP_GM_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 7
						
						//Receive INFO 
						
						f_mtc_check_TP_GM_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 8  TODO
						f_mtc_check_TP_MW_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 9  TODO
						f_mtc_check_TP_MI_ECSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 13
						

						// Postamble
						f_mtc_EndCall(v_ueA);
						f_PO_user_home_deregistration(v_ueA);
						f_PO_user_home_deregistration(v_psap);

						//unmap/disconnect component ports
						f_cf_user_down ( v_psap );
						f_cf_user_down ( v_ueA );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );

				} // End of TC TD_VoLTE_NGC_INT_INF_01_03

				group f_TD_VoLTE_NGC_INT_INF_01 {

					function f_mtc_check_precond_TD_VoLTE_NGC_INT_INF_01() runs on ImsTestCoordinator {
						log("If the test case fails, please check the preconditions");
						// TODO Add real code to check pre-conditions
					 } // End of function f_mtc_check_precond_TD_VoLTE_NGC_INT_INI_01

				} // End of group f_TD_VoLTE_NGC_INT_INF_01_01
		}
barakatr's avatar
barakatr committed
		
		} // End of group EmergencySessionEmergencyBearerOperations
         * @see ETSI TS 103 795-2 Clause 5.5    Emergency Network Detachment
         */
        group EmergencyNetworkDetachment {

            group EmergencySessionDetachment {
                /**
                 * @desc    To demonstrate UE initiated network emergency detachment (IP-CAN session termination) for a UE that has not yet emergency registered to the IMS or for UE that has been emergency registered to the IMS
                 * @see ETSI TS 103 795-2 Clause 5.5.1    UE Emergency  Network Detachment (with/without Emergency Registration)
                 */
                testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                    var ImsUserInfo v_userInfoA    := f_getImUser ( PX_EUT_A );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){
                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        //preamble
barakatr's avatar
barakatr committed
                        f_mtc_userRadioEnabled ( v_ueA, true, true ); // UE-A trigger an initial network_attachment by enabling radio interface of its mobile
                        f_mtc_userRadioEnabled ( v_ueA, false, true );
barakatr's avatar
barakatr committed
                        
                        // test body
                        // Check that user A starts initial network attachment
                        f_mtc_check_TP_GX_PCRF_EMC_CCA_01(vc_vxlte_monitor_components.gx, false);//f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3)

                        //postamble

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_DTC_01

                /**
                 * @desc    To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session
                 * @see ETSI TS 103 795-2 Clause 5.5.2    UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session
                 * @remark This is option 1: PSAP is in IMS A network
                 */
                testcase TC_VoLTE_ECO_INT_DTC_02_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
                                                              })){
                        var SipMessage v_sip;

                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01();
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1

                        // Test body
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 3
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 4
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 5
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 6                       

                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7

                        f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 8

                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19

                        f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20)

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_psap); // Event 23

                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_DTC_02_01

                group f_TC_VoLTE_ECO_INT_DTC_02_01 {

                    function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01

                } // End of f_TC_VoLTE_ECO_INT_DTC_02_01

                /**
                 * @desc    To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session
                 * @see ETSI TS 103 795-2 Clause 5.5.2    UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session
                 * @remark This is option 2: PSAP is not in IMS A network
                 */
                testcase TC_VoLTE_ECO_INT_DTC_02_02 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP
                                                              })){
                        var SipMessage v_sip;

                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02();
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1

                        // Test body
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 3
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 4)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 5)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 6)                        

                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7

                        f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 9
                        f_mtc_check_TP_IC_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.ic); // Event 10

                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19

                        f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20)

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_psap); // Event 23

                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_DTC_02_02

                group f_TC_VoLTE_ECO_INT_DTC_02_02 {

                    function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02

                } // End of f_TC_VoLTE_ECO_INT_DTC_02_02

                /**
                 * @desc    To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session
                 * @see ETSI TS 103 795-2 Clause 5.5.2    UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session
                 * @remark This is option 3: PSAP is in PSTN network
                 */
                testcase TC_VoLTE_ECO_INT_DTC_02_03 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP
                                                              })){
                        var SipMessage v_sip;

                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03();
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1

                        // Test body
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 3
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 4)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 5)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 6)                        

                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7

                        f_mtc_check_TP_MI_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11

                        f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19

                        f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20)

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_psap); // Event 23

                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_DTC_02_03

                group f_TC_VoLTE_ECO_INT_DTC_02_03 {

                    function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03

                } // End of f_TC_VoLTE_ECO_INT_DTC_02_03
            } // End of group EmergencySessionDetachment

        } // End of group EmergencyNetworkDetachment

    } // End of group Interoperability

    /**
      * @see ETSI TS 103 795-2 Clause 6    Test Descriptions (Roaming)
      */
    group Roaming {

        /**
         * @see ETSI TS 103 795-2 6.1    Network Attachment
         */
        group NetworkAttachment {

            group UENetworkAttachmentWithUSIM {
                /**
                 * @desc    Emergency Network Attachment and Establishment of the Emergency Bearer with USIM.
                 * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address.
                 * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF
                 * and allowed forwarding towards E-CSCF
barakatr's avatar
barakatr committed
                 * @see ETSI TS 103 795-2 6.1.1    UE Emergency Network Attachment with USIM
                 * TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12;
                 * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails)
                 * 
                 */
                testcase TC_VoLTE_ECO_RMI_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueB    := f_cf_create_IotEquipmentUser ( c_userUE_B );
                    var ImsUserInfo v_userInfoB    := f_getImUser ( PX_EUT_B );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){
                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueB );
                        f_cf_VxLteMonitor_Up();

                        // preamble
                        f_mtc_userRadioEnabled ( v_ueB, true, true ); // UE-B trigger an initial network_attachment by enabling radio interface of its mobile
                        // TODO: Check that user B starts initial network attachment
                        f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2)
                        f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) 
                        f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5)

                        // postamble
                        f_mtc_userRadioEnabled ( v_ueB, false, true );

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueB );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_RMI_ATT_01
            } // End of group UENetworkAttachmentWithUSIM

            group UENetworkAttachmentWithoutUSIM {
                /**
                 * @desc    Emergency Network Attachment and Establishment of the Emergency Bearer without USIM.
                 * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address.
                 * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF
                 * and allowed forwarding towards E-CSCF
barakatr's avatar
barakatr committed
                 * @see ETSI TS 103 795-2 6.1.2    UE Emergency Network Attachment without USIM
                 *  TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12;
                 * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails)
                 * 
                 */
                testcase TC_VoLTE_EMC_RMI_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueB    := f_cf_create_IotEquipmentUser ( c_userUE_B );
                    var ImsUserInfo v_userInfoB    := f_getImUser ( PX_EUT_B );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){
                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueB );
                        f_cf_VxLteMonitor_Up();

                        // preamble
barakatr's avatar
barakatr committed
                        f_mtc_userRadioEnabled ( v_ueB, true, true ); // UE-B trigger an initial network_attachment by enabling radio interface of its mobile
                        // TODO Check that user B starts initial network attachment
                        f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2)
                        f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a);        // Check (ULA – Event 3) 
                        f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5)

                        // postamble
                        f_mtc_userRadioEnabled ( v_ueB, false, true );

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueB );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_RMI_ATT_02
            } // End of group UENetworkAttachmentWithoutUSIM

        } // End of group NetworkAttachment

        /**
         * @see ETSI TS 103 795-2 Clause 6.2    IMS Emergency Registration in a visited network
         */
        group IMSEmergencyRegistration {

            /**
             * @desc    To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration.
             * @see ETSI TS 103 795-2 Clause 6.2.1    IMS Emergency Registration - Rejection
             * @remark This is option 1: Emergency registration rejected by the visited network
             */
            testcase TD_VoLTE_ECO_RMI_REG_01_01() runs on ImsTestCoordinator system IotSystemInterface {

                var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY );

                f_setVxLteMonIterfacesAvailability();
                //Check required monitor interfaces due to TD
                if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                          PX_SIP_MW_PI_INTERFACENAME,
                                                          PX_DIAMETER_CX_SH_INTERFACENAME,
                                                          PX_DIAMETER_CX_IH_INTERFACENAME,
                                                          PX_DIAMETER_RX_INTERFACENAME}))
                {  
                    f_cf_createVxLteMonitor();

                    // map/connect component ports
                    f_cf_adapter_up ( );
                    f_cf_user_up ( v_ueA );
                    f_cf_VxLteMonitor_Up();

                    // preamble
barakatr's avatar
barakatr committed
                    f_mtc_userRadioEnabled ( v_ueA, true, true ); // UE-A trigger an initial network_attachment by enabling radio interface of its mobile

                    // Test body
                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 1, 8
                    

                    f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP
                    f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.mwPI); // Event 4, 7
                    f_mtc_check_TP_CX_HSS_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6

                    // postamble
                    f_PO_user_home_deregistration ( v_ueA );
                    f_mtc_userRadioEnabled ( v_ueA, false, true );

                    //unmap/disconnet component ports
                    f_cf_user_down ( v_ueA );
                    f_cf_VxLteMonitor_Down();
                    f_cf_adapter_down ( );
                }else{
                    //log...
                    setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs");
                }
            } // End of testcase TD_VoLTE_ECO_RMI_REG_01_01

            /**
             * @desc    To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration.
             * @see ETSI TS 103 795-2 Clause 6.2.1    IMS Emergency Registration - Rejection
             * @remark This is option 1: Emergency registration rejected - UE not supporting GIBA
             */
            testcase TD_VoLTE_ECO_RMI_REG_01_02() runs on ImsTestCoordinator system IotSystemInterface {

                var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY );

                f_setVxLteMonIterfacesAvailability();
                //Check required monitor interfaces due to TD
                if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                          PX_SIP_MW_PI_INTERFACENAME,
                                                          PX_DIAMETER_CX_SH_INTERFACENAME,
                                                          PX_DIAMETER_CX_IH_INTERFACENAME,
                                                          PX_DIAMETER_RX_INTERFACENAME}))
                {  
                    f_cf_createVxLteMonitor();

                    // map/connect component ports
                    f_cf_adapter_up ( );
                    f_cf_user_up ( v_ueA );
                    f_cf_VxLteMonitor_Up();

                    // preamble
barakatr's avatar
barakatr committed
                    f_mtc_userRadioEnabled ( v_ueA, true, true ); // UE-A trigger an initial network_attachment by enabling radio interface of its mobile

                    // Test body
                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 1, 10
                    

                    f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP
                    f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.mwPI); // Event 4, 9

                    f_mtc_check_TP_CX_HSS_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6

                    // postamble
                    f_PO_user_home_deregistration ( v_ueA );
                    f_mtc_userRadioEnabled ( v_ueA, false, true );

                    //unmap/disconnet component ports
                    f_cf_user_down ( v_ueA );
                    f_cf_VxLteMonitor_Down();
                    f_cf_adapter_down ( );
                }else{
                    //log...
                    setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs");
                }
            } // End of testcase TD_VoLTE_ECO_RMI_REG_01_02

        } // End of group IMSEmergencyRegistration
        
         /**
         * @see ETSI TS 103 795-3 Clause 6.3    Emergency Session Establishment(Roaming)
         */
        group EmergencySessionEstablishmentRoaming {
        	   
			/**
		 	* @see ETSI TS 103 795-3 Clause 6.3.1    Roaming UE calling PSAP with emergency registration
		 	*/      
			group RoamingUECallingPSAPWithEmergencyRegistration {   
				
				/**
				 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP roaming emergency session establishment within an emergency registration.
				 *          PSAP is located in the IM CN subsystem of IMS A
				 * @see ETSI TS 103 795-2 Clause 6.3.1    Roaming UE calling PSAP with emergency registration
				 */
				testcase TD_VoLTE_ECO_RMI_INI_01() runs on ImsTestCoordinator system IotSystemInterface {

					var IotEquipmentUser v_ueB  := f_cf_create_IotEquipmentUser ( c_userUE_B_emergency );
					var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
					var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B_EMERGENCY );
					var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,
															  PX_SIP_MW_PE_INTERFACENAME,
															  PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueB );
						f_cf_user_up ( v_psap );
						f_cf_VxLteMonitor_Up();

						// Preamble
						f_mtc_userRegistration(v_ueB, v_userInfoB);
						if (PX_PSAP_REGISTERED) {
							f_mtc_userRegistration(v_psap, v_infoPsap);
						} else {
							// TODO Check OPTIONS from PSAP to E-CSCF
						}
						f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01();

						// Test body
						if (not PX_ECALL) {
							f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1
						} else {
							f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1
						}
						f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmB, -, v_sip);

						//Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
						f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
						f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

						f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
						f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

						f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11
						f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);

						// 183 Session Progress
						f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12
						f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
						f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 18

						//Rx/Gx exchange after 183(SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17

						f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20
						f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21
						f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 22

						f_mtc_userCheckRinging(v_psap); // Event 19
						f_mtc_userCheckPeerIsRinging(v_ueB); // Event 19
						f_mtc_userAnswerCall(v_psap);

						f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23
						f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
						f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25

						f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // ACK Event 26 
						f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // ACK Event 27
						f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28

						f_mtc_userCheckCallEstablished(v_ueB); // Event 29
						f_mtc_userCheckCallEstablished(v_psap); // Event 29

						// Postamble
						f_mtc_EndCall(v_ueB);
						f_PO_user_home_deregistration(v_ueB);
						f_PO_user_home_deregistration(v_psap);
						//f_cf_int_call_down(v_config);

						//unmap/disconnect component ports
						f_cf_user_down ( v_psap );
						f_cf_user_down ( v_ueB );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );
				} // End of TC TD_VoLTE_ECO_INT_INI_01

				group f_TD_VoLTE_ECO_RMI_INI_01 {

					function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01() runs on ImsTestCoordinator {
						log("If the test case fails, please check the preconditions");
						// TODO Add real code to check pre-conditions
					 } // End of function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01

				} // End of group f_TD_VoLTE_ECO_RMI_INI_01
			} // End of group RoamingUECallingPSAPWithEmergencyRegistration

			/**
		 	* @see ETSI TS 103 795-3 Clause 6.3.2    Roaming UE calling PSAP with non-emergency registration
		 	*/      			
			group RoamingUECallingPSAPWithNonEmergencyRegistration { 
				
				/**
				 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to roaming SIP emergency session establishment within non-emergency registration.
				 *          PSAP is located in the IM CN subsystem of IMS A
				 * @see ETSI TS 103 795-2 Clause 6.3.2.1    Roaming UE calling PSAP in same network
				 */
				testcase TD_VoLTE_ECO_RMI_INI_02() runs on ImsTestCoordinator system IotSystemInterface {

					var IotEquipmentUser v_ueB  := f_cf_create_IotEquipmentUser ( c_userUE_B_emergency );
					var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
					var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); //non-emergency registration
					var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMB_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,