sgsn: add TC_attach_no_imei_response

Ignores Identity Request IMEI.

MS -> SGSN: Attach Request IMSI
MS <- SGSN: Identity Request IMSI (optional)
MS -> SGSN: Identity Response IMSI (optional)
MS <- SGSN: Identity Request IMEI
MS -x SGSN: no response
MS <- SGSN: re-send: Identity Request IMEI 4x
MS <- SGSN: Attach Reject

Change-Id: Ie50c75e62e31e01c5b17969fb067664e44fd68a5
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index 46b7b74..c1d4cdf 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -1367,6 +1367,50 @@
 
 
 
+/* Attempt an attach, but loose the Identification Request (IMEI) */
+private function f_TC_attach_no_imei_response(charstring id) runs on BSSGP_ConnHdlr {
+	var integer count_req := 0;
+	var MobileL3_CommonIE_Types.MobileIdentityLV mi;
+
+	BSSGP.send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), f_random_RAI(), true, false, omit, omit));
+
+	alt {
+		[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {
+			/* break */
+		}
+		[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {
+			mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
+			BSSGP.send(ts_GMM_ID_RESP(mi));
+			repeat;
+		}
+		[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {
+			/* ignore ID REQ IMEI */
+			count_req := count_req + 1;
+			repeat;
+		}
+	}
+	if (count_req != 5) {
+		setverdict(fail, "Did not received GMM ID Request Type IMEI 5 times!");
+	}
+	setverdict(pass);
+}
+
+testcase TC_attach_no_imei_response() runs on test_CT {
+	/* MS -> SGSN: Attach Request IMSI
+	 * MS <- SGSN: Identity Request IMSI (optional)
+	 * MS -> SGSN: Identity Response IMSI (optional)
+	 * MS <- SGSN: Identity Request IMEI
+	 * MS -x SGSN: no response
+	 * MS <- SGSN: re-send: Identity Request IMEI 4x
+	 * MS <- SGSN: Attach Reject
+	 */
+	var BSSGP_ConnHdlr vc_conn;
+	f_init();
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_TC_attach_no_imei_response), testcasename(), g_gb[0], 32, 60.0);
+	vc_conn.done;
+}
+
 control {
 	execute( TC_attach() );
 	execute( TC_attach_mnc3() );
@@ -1380,6 +1424,7 @@
 	execute( TC_attach_combined() );
 	execute( TC_attach_accept_all() );
 	execute( TC_attach_closed() );
+	execute( TC_attach_no_imei_response() );
 	execute( TC_hlr_location_cancel_request_update(), 10.0 );
 	execute( TC_hlr_location_cancel_request_withdraw(), 10.0 );
 	execute( TC_hlr_location_cancel_request_unknown_subscriber_withdraw(), 10.0 );