s1gw: add TC_conn_term_{by_mme,mme_unavail}
Change-Id: I5ac2020160c914db0882f148469570cfb142b18d
Related: SYS#6772
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index 6237557..30dcd46 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -90,8 +90,10 @@
var ConnHdlr vc_conn;
vc_conn := ConnHdlr.create("ConnHdlr-" & testcasename());
- connect(vc_conn:S1AP_CONN, vc_S1APSRV:S1AP_CLIENT);
- connect(vc_conn:S1AP_PROC, vc_S1APSRV:S1AP_PROC);
+ if (vc_S1APSRV.running) {
+ connect(vc_conn:S1AP_CONN, vc_S1APSRV:S1AP_CLIENT);
+ connect(vc_conn:S1AP_PROC, vc_S1APSRV:S1AP_PROC);
+ }
vc_conn.start(derefers(fn)(pars));
return vc_conn;
@@ -214,9 +216,65 @@
}
}
+
+/* MME terminates connection, expect S1GW to terminate the eNB connection */
+function f_TC_conn_term_by_mme(ConnHdlrPars pars) runs on ConnHdlr {
+ var Global_ENB_ID genb_id := valueof(ts_Global_ENB_ID(pars.seed));
+
+ f_ConnHdlr_register(genb_id);
+
+ f_ConnHdlr_connect();
+ f_ConnHdlr_setup(genb_id);
+ f_sleep(0.5); /* keep the connection idle for some time */
+
+ /* MME (S1AP_Server_CT) terminates connection */
+ f_ConnHdlr_close_conn(genb_id);
+ /* expect our eNB connection to be released gracefully */
+ S1AP_ENB.receive(tr_SctpShutDownEvent(g_s1ap_conn_id));
+ S1AP_ENB.receive(tr_SctpAssocChange(SCTP_SHUTDOWN_COMP, g_s1ap_conn_id));
+ S1AP_ENB.receive(PortEvent:{connClosed := ?});
+
+ f_ConnHdlr_unregister(genb_id);
+}
+testcase TC_conn_term_by_mme() runs on test_CT {
+ var ConnHdlrPars pars := { seed := 0 };
+ var ConnHdlr vc_conn;
+
+ f_init();
+ f_init_s1ap_srv();
+
+ vc_conn := f_ConnHdlr_spawn(refers(f_TC_conn_term_by_mme), pars);
+ vc_conn.done;
+}
+
+
+/* MME is not available, expect S1GW to terminate the eNB connection */
+function f_TC_conn_term_mme_unavail(ConnHdlrPars pars) runs on ConnHdlr {
+ /* establish an eNB connection to the S1GW */
+ f_ConnHdlr_connect();
+ /* expect our eNB connection to be released gracefully */
+ S1AP_ENB.receive(tr_SctpShutDownEvent(g_s1ap_conn_id));
+ S1AP_ENB.receive(tr_SctpAssocChange(SCTP_SHUTDOWN_COMP, g_s1ap_conn_id));
+ S1AP_ENB.receive(PortEvent:{connClosed := ?});
+ setverdict(pass);
+}
+testcase TC_conn_term_mme_unavail() runs on test_CT {
+ var ConnHdlrPars pars := { seed := 0 };
+ var ConnHdlr vc_conn;
+
+ f_init();
+ f_init_s1ap_srv();
+ vc_S1APSRV.stop;
+
+ vc_conn := f_ConnHdlr_spawn(refers(f_TC_conn_term_mme_unavail), pars);
+ vc_conn.done;
+}
+
control {
execute( TC_setup() );
execute( TC_setup_multi() );
+ execute( TC_conn_term_by_mme() );
+ execute( TC_conn_term_mme_unavail() );
}
}