MME_Tests: add new testcase TC_s1ap_tau_unknown_guti

A tracking area update that contains an OldGUTI (TMSI) that is unknown
to the MME should be rejected.

Related: OS#5760
Change-Id: I9306fea69ac930b9642528e2fd32a7091147081e
diff --git a/mme/MME_Tests.ttcn b/mme/MME_Tests.ttcn
index 2db5b01..104c3d2 100644
--- a/mme/MME_Tests.ttcn
+++ b/mme/MME_Tests.ttcn
@@ -964,11 +964,60 @@
 	}
 }
 
+/* Tracking area update with a GUTI (TMSI) that is unknown to the MME. The MME is expected to reject this TAU
+ * request. */
+private function f_TC_tau_unknown_guti(ConnHdlrPars pars) runs on ConnHdlr {
+
+	f_init_handler(pars);
+	var template (value) EPS_MobileIdentityV mi := ts_NAS_MobileId_IMSI(pars.ue_pars.imsi);
+	var template (value) S1AP_PDU tx;
+	var template (value) PDU_NAS_EPS nas_tau;
+	timer T := 5.0;
+
+	var hexstring mcc_mnc := f_convert_plmn(g_pars.enb_pars[g_pars.mme_idx].global_enb_id.pLMNidentity);
+	var EPS_MobileIdentityLV old_guti := valueof(ts_EPS_MobileId_GUTI(mcc_mnc, '0001'O, '01'O, 'AABBCCDD'O));
+	nas_tau := ts_PDU_NAS_EPS_TrackingAreaUpdateRequest(old_guti);
+
+	tx := ts_S1AP_InitialUE(p_eNB_value := 0, p_nasPdu := enc_PDU_NAS_EPS(valueof(nas_tau)),
+				p_tAI := ts_enb_S1AP_TAI(g_pars.enb_pars[g_pars.mme_idx]),
+				p_eUTRAN_CGI := ts_enb_S1AP_CGI(g_pars.enb_pars[g_pars.mme_idx]),
+				p_rrcCause := mo_Signalling);
+
+	S1AP.send(tx);
+
+	T.start;
+	alt {
+	[] S1AP.receive(tr_PDU_NAS_EPS_TrackingAreaUpdateReject) {
+		setverdict(pass);
+		}
+	[] S1AP.receive {
+		setverdict(fail, "unexpected S1AP message from MME");
+		}
+	[] T.timeout {
+		setverdict(fail, "no message from MME");
+		}
+	}
+
+}
+testcase TC_s1ap_tau_unknown_guti() runs on MTC_CT {
+	var charstring id := testcasename();
+
+	f_init_diameter(id);
+	f_init_s1ap(id, 4);
+	f_s1ap_setup(0);
+
+	var ConnHdlrPars pars := f_init_pars(ue_idx := 0);
+	var ConnHdlr vc_conn;
+	vc_conn := f_start_handler_with_pars(refers(f_TC_tau_unknown_guti), pars);
+	vc_conn.done;
+}
+
 control {
 	execute( TC_s1ap_setup_wrong_plmn() );
 	execute( TC_s1ap_setup_wrong_tac() );
 	execute( TC_s1ap_setup() );
 	execute( TC_s1ap_attach() );
+	execute( TC_s1ap_tau_unknown_guti() );
 	execute( TC_gn_echo_request() );
 	execute( TC_RIM_RAN_INF() );
 	execute( TC_s1ap_reset() );