fixeria has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37185?usp=email )

 (

1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
 )Change subject: s1gw: add first testcases TC_setup and TC_setup_multi
......................................................................

s1gw: add first testcases TC_setup and TC_setup_multi

Change-Id: Ia2fc53306ac09064c071fd9ff86cf7ccfc42fcec
Related: SYS#6772
---
M s1gw/S1GW_Tests.default
M s1gw/S1GW_Tests.ttcn
2 files changed, 174 insertions(+), 1 deletion(-)

Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved




diff --git a/s1gw/S1GW_Tests.default b/s1gw/S1GW_Tests.default
index 1c220d8..ceca1b2 100644
--- a/s1gw/S1GW_Tests.default
+++ b/s1gw/S1GW_Tests.default
@@ -1,5 +1,6 @@
 [LOGGING]
 FileMask := LOG_ALL | TTCN_MATCHING;
+ConsoleMask := ERROR | WARNING | PARALLEL | VERDICTOP | USER;
 mtc.FileMask := ERROR | WARNING | PARALLEL | VERDICTOP;

 [TESTPORT_PARAMETERS]
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index 7f9bd44..ad42a59 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -14,18 +14,180 @@
 module S1GW_Tests {

 import from General_Types all;
+import from Osmocom_Types all;
 import from Native_Functions all;
 import from IPL4asp_Types all;
 import from Misc_Helpers all;
+
+import from S1AP_CodecPort all;
+import from S1AP_CodecPort_CtrlFunct all;
 import from S1AP_Types all;
 import from S1AP_Templates all;
 import from S1AP_PDU_Descriptions all;
 import from S1AP_IEs all;
 import from S1AP_PDU_Contents all;
 import from S1AP_Constants all;
-import from Osmocom_Types all;
+
+import from S1AP_Server all;
+
+modulepar {
+       charstring mp_s1gw_ip := "127.0.1.1";
+       charstring mp_mme_bind_ip := "127.0.2.10";
+}
+
+private type record of ConnHdlr ConnHdlrList;
+
+type component ConnHdlr extends S1APSRV_ConnHdlr {
+       port S1AP_CODEC_PT S1AP_ENB;
+       var ConnectionId g_s1ap_conn_id := -1;
+};
+
+type component test_CT {
+       var S1AP_Server_CT vc_S1APSRV;
+};
+
+template Global_ENB_ID
+ts_Global_ENB_ID(integer enb_id := 0,
+                OCT3 plmn_id := '00f110'O) := {
+       pLMNidentity := plmn_id,
+       eNB_ID := {
+               macroENB_ID := int2bit(enb_id, 20)
+       },
+       iE_Extensions := omit
+}
+
+function f_init_s1ap_srv() runs on test_CT {
+       var S1APSRV_ConnParams cpars := {
+               local_ip := mp_mme_bind_ip,
+               local_port := 36412
+       };
+
+       vc_S1APSRV := S1AP_Server_CT.create("S1APSRV-" & testcasename());
+       vc_S1APSRV.start(S1AP_Server.main(cpars));
+}
+
+type union ConnHdlrPars {
+       integer seed
+};
+
+type function void_fn(ConnHdlrPars pars) runs on ConnHdlr;
+
+function f_ConnHdlr_spawn(void_fn fn, ConnHdlrPars pars)
+runs on test_CT return ConnHdlr {
+       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);
+       vc_conn.start(derefers(fn)(pars));
+
+       return vc_conn;
+}
+
+function f_ConnHdlr_connect() runs on ConnHdlr {
+       var Result res;
+
+       map(self:S1AP_ENB, system:S1AP_CODEC_PT);
+       res := S1AP_CodecPort_CtrlFunct.f_IPL4_connect(S1AP_ENB,
+                                                      mp_s1gw_ip, 36412,
+                                                      "0.0.0.0", 0, -1,
+                                                      { sctp := 
valueof(ts_SCTP) });
+       if (not ispresent(res.connId)) {
+               setverdict(fail, "Could not create an S1AP socket, check your 
configuration");
+               mtc.stop;
+       }
+       g_s1ap_conn_id := res.connId;
+
+       log("eNB connection established");
+}
+
+function f_ConnHdlr_disconnect() runs on ConnHdlr {
+       var Result res;
+
+       S1AP_CodecPort_CtrlFunct.f_IPL4_close(S1AP_ENB, g_s1ap_conn_id,
+                                             { sctp := valueof(ts_SCTP) });
+       g_s1ap_conn_id := -1;
+       unmap(self:S1AP_ENB, system:S1AP_CODEC_PT);
+
+       S1AP_CONN.receive(S1APSRV_Event:S1APSRV_EVENT_CONN_DOWN);
+
+       log("eNB connection closed");
+}
+
+function f_ConnHdlr_setup(Global_ENB_ID genb_id) runs on ConnHdlr {
+       var S1AP_PDU pdu;
+       timer T;
+
+       var SupportedTAs supported_tas_dummy := {
+               {
+                       tAC := '0000'O,
+                       broadcastPLMNs := { '00f000'O },
+                       iE_Extensions := omit
+               }
+       };
+
+       S1AP_ENB.send(t_S1AP_Send(g_s1ap_conn_id,
+                                 ts_S1AP_SetupReq(genb_id,
+                                                  supported_tas_dummy,
+                                                  v32)));
+       T.start(1.0);
+       alt {
+       [] S1AP_CONN.receive(S1APSRV_Event:S1APSRV_EVENT_CONN_UP) { repeat; }
+       [] S1AP_CONN.receive(tr_S1AP_SetupReq) {
+               setverdict(pass);
+               T.stop;
+               }
+       [] S1AP_CONN.receive(S1AP_PDU:?) -> value pdu {
+               setverdict(fail, "Rx unexpected S1AP PDU: ", pdu);
+               T.stop;
+               }
+       [] T.timeout {
+               setverdict(fail, "Timeout waiting for S1AP SetupReq");
+               }
+       }
+}
+
+
+function f_TC_setup(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 */
+       f_ConnHdlr_disconnect();
+
+       f_ConnHdlr_unregister(genb_id);
+}
+testcase TC_setup() runs on test_CT {
+       var ConnHdlrPars pars := { seed := 0 };
+       var ConnHdlr vc_conn;
+
+       f_init_s1ap_srv();
+
+       vc_conn := f_ConnHdlr_spawn(refers(f_TC_setup), pars);
+       vc_conn.done;
+}
+testcase TC_setup_multi() runs on test_CT {
+       var ConnHdlrList vc_conns := { };
+
+       f_init_s1ap_srv();
+
+       for (var integer i := 0; i < 42; i := i + 1) {
+               var ConnHdlrPars pars := { seed := i };
+               var ConnHdlr vc_conn := f_ConnHdlr_spawn(refers(f_TC_setup), 
pars);
+               vc_conns := vc_conns & { vc_conn };
+       }
+
+       for (var integer i := 0; i < 42; i := i + 1) {
+               vc_conns[i].done;
+       }
+}

 control {
+       execute( TC_setup() );
+       execute( TC_setup_multi() );
 }

 }

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37185?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ia2fc53306ac09064c071fd9ff86cf7ccfc42fcec
Gerrit-Change-Number: 37185
Gerrit-PatchSet: 3
Gerrit-Owner: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to