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

Change subject: S1GW: Add test case to test release of e-RABs during handover 
preperation
......................................................................

S1GW: Add test case to test release of e-RABs during handover preperation

HANDOVER COMMAND allows e-EABs to be forwarded or to be released. The
test provides two lists and expects osmo-s1gw to release only those
e-RABs that are included int the "E-RABs to Release List" IE.

Related: SYS#7309
Change-Id: Ic70ba19c0a6e349f63aae124607d075b6d19e779
---
M s1gw/S1GW_ConnHdlr.ttcn
M s1gw/S1GW_Tests.ttcn
M s1gw/expected-results.xml
3 files changed, 102 insertions(+), 20 deletions(-)

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




diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn
index 1d41d0d..09a5fee 100644
--- a/s1gw/S1GW_ConnHdlr.ttcn
+++ b/s1gw/S1GW_ConnHdlr.ttcn
@@ -350,6 +350,19 @@
        return -1; /* make compiler happy */
 }

+/* Compose an E-RAB list by selecting entries from the global E-RAB list as 
indicated by index list. */
+function f_ERabList_compose(ERabIdxList idx_list)
+runs on ConnHdlr return ERabList {
+       var ERabList erabs;
+
+       for (var integer i := 0; i < lengthof(idx_list); i := i + 1) {
+               var ERabIdx idx := idx_list[i];
+               erabs[i] := g_pars.erabs[idx];
+       }
+
+       return erabs;
+}
+
 function f_ConnHdlr_tx_erab_setup_req(in ERabList erabs,
                                      MME_UE_S1AP_ID mme_ue_id,
                                      ENB_UE_S1AP_ID enb_ue_id)
@@ -1204,49 +1217,75 @@
        return pdu;
 }

-function f_ConnHdlr_tx_handover_cmd(in ERabList erabs,
+function f_ConnHdlr_tx_handover_cmd(ERabIdxList erabs_forward,
                                    MME_UE_S1AP_ID mme_ue_id,
-                                   ENB_UE_S1AP_ID enb_ue_id)
+                                   ENB_UE_S1AP_ID enb_ue_id,
+                                   ERabIdxList erabs_release := {})
 runs on ConnHdlr {
-       var template (value) E_RABSubjecttoDataForwardingList items;
+       var template (value) E_RABSubjecttoDataForwardingList items_forward;
+       var template (omit) E_RABList items_release :=  omit;

-       for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
+       for (var integer i := 0; i < lengthof(erabs_forward); i := i + 1) {
                var template (value) E_RABDataForwardingItem item;
+               var ERabIdx idx := erabs_forward[i];

-               item := ts_E_RABDataForwardingItem(rab_id := erabs[i].erab_id,
+               item := ts_E_RABDataForwardingItem(rab_id := 
g_pars.erabs[idx].erab_id,
                                                   dl_tla := omit,
                                                   dl_gtp_teid := omit,
                                                   ul_tla := omit,
                                                   ul_gtp_teid := omit);
-               items[i] := ts_E_RABSubjecttoDataForwardingList(item)[0];
+               items_forward[i] := 
ts_E_RABSubjecttoDataForwardingList(item)[0];
        }

+       for (var integer i := 0; i < lengthof(erabs_release); i := i + 1) {
+               var template (value) E_RABItem item;
+               var ERabIdx idx := erabs_release[i];
+
+               item := ts_E_RABItem(rab_id := g_pars.erabs[idx].erab_id,
+                                    cause := { transport := 
transport_resource_unavailable });
+               items_release[i] := ts_E_RABList(item)[0];
+        }
+
        f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_HandoverCmd(mme_id := mme_ue_id,
                                                        enb_id := enb_ue_id,
                                                        ho_type := intralte,
-                                                       rab_forward_items := 
items,
-                                                       container := 
'123456'O));
+                                                       rab_forward_items := 
items_forward,
+                                                       container := '123456'O,
+                                                       rab_release_items := 
items_release));
 }

-function f_ConnHdlr_rx_handover_cmd(in ERabList erabs,
+function f_ConnHdlr_rx_handover_cmd(ERabIdxList erabs_forward,
                                    MME_UE_S1AP_ID mme_ue_id,
-                                   ENB_UE_S1AP_ID enb_ue_id)
+                                   ENB_UE_S1AP_ID enb_ue_id,
+                                   ERabIdxList erabs_release := {})
 runs on ConnHdlr return S1AP_PDU {
-       var template (present) E_RABSubjecttoDataForwardingList items;
+       var template (present) E_RABSubjecttoDataForwardingList items_forward;
+       var template E_RABList items_release := omit;
        var S1AP_PDU pdu;

-       for (var integer i := 0; i < lengthof(erabs); i := i + 1) {
+       for (var integer i := 0; i < lengthof(erabs_forward); i := i + 1) {
                var template (present) E_RABDataForwardingItem item;
+               var ERabIdx idx := erabs_forward[i];

-               item := tr_E_RABDataForwardingItem(rab_id := erabs[i].erab_id)
-               items[i] := tr_E_RABSubjecttoDataForwardingList(item)[0];
+               item := tr_E_RABDataForwardingItem(rab_id := 
g_pars.erabs[idx].erab_id)
+               items_forward[i] := 
tr_E_RABSubjecttoDataForwardingList(item)[0];
+       }
+
+       for (var integer i := 0; i < lengthof(erabs_release); i := i + 1) {
+               var template (present) E_RABItem item;
+               var ERabIdx idx := erabs_release[i];
+
+               item := tr_E_RABItem(rab_id := g_pars.erabs[idx].erab_id,
+                                    cause := { transport := 
transport_resource_unavailable });
+               items_release[i] := tr_E_RABList(item)[0];
        }

        f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_HandoverCmd(mme_id := 
mme_ue_id,
                                                             enb_id := 
enb_ue_id,
                                                             ho_type := 
intralte,
-                                                            rab_forward_items 
:= items,
-                                                            container := 
'123456'O));
+                                                            rab_forward_items 
:= items_forward,
+                                                            container := 
'123456'O,
+                                                            rab_release_items 
:= items_release));
        return pdu;
 }

@@ -1682,17 +1721,27 @@

 function f_ConnHdlr_handover_cmd_()
 runs on ConnHdlr {
-       f_ConnHdlr_handover_cmd(g_pars.erabs, g_pars.mme_ue_id, g_pars.idx);
+       var ERabIdxList erabs_forward;
+       for (var integer i := 0; i < lengthof(g_pars.erabs); i := i + 1) {
+               erabs_forward[i] := i;
+       }
+       f_ConnHdlr_handover_cmd(erabs_forward, {}, g_pars.mme_ue_id, 
g_pars.idx);
 }

-function f_ConnHdlr_handover_cmd(in ERabList erabs,
+function f_ConnHdlr_handover_cmd(ERabIdxList erabs_forward,
+                                ERabIdxList erabs_release,
                                 MME_UE_S1AP_ID mme_ue_id,
                                 ENB_UE_S1AP_ID enb_ue_id)
 runs on ConnHdlr {
        log("[eNB -> S1GW] -> MME: HANDOVER COMMAND");
-       f_ConnHdlr_tx_handover_cmd(erabs, mme_ue_id, enb_ue_id);
+       f_ConnHdlr_tx_handover_cmd(erabs_forward, mme_ue_id, enb_ue_id, 
erabs_release);
+       /* Expect the S1GW to delete sessions for released E-RABs (if any) */
+       if (lengthof(erabs_release) > 0) {
+               var ERabList erabs := f_ERabList_compose(erabs_release);
+               f_ConnHdlr_session_delete(erabs);
+       }
        log("eNB -> [S1GW -> MME]: HANDOVER COMMAND");
-       f_ConnHdlr_rx_handover_cmd(erabs, mme_ue_id, enb_ue_id);
+       f_ConnHdlr_rx_handover_cmd(erabs_forward, mme_ue_id, enb_ue_id, 
erabs_release);
 }

 }
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index 17c63cb..391584e 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -889,6 +889,37 @@
        f_TC_exec(refers(f_TC_handover_preparation));
 }

+/* Test Handover Preparation procedures with release */
+function f_TC_handover_preparation_release(charstring id) runs on ConnHdlr {
+       var ERabIdxList erabs_forward := {0, 2};
+       var ERabIdxList erabs_release := {1, 3};
+       var ERabList erabs_left;
+
+       f_ConnHdlr_s1ap_register(g_pars.genb_id);
+       f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
+       f_ConnHdlr_s1ap_setup(g_pars.genb_id);
+
+       f_ConnHdlr_erab_setup_req_();
+       f_ConnHdlr_erab_setup_rsp_();
+       f_ConnHdlr_handover_rqd_();
+       f_ConnHdlr_handover_cmd(erabs_forward,
+                               erabs_release,
+                               g_pars.mme_ue_id,
+                               g_pars.idx);
+
+       if (lengthof(erabs_forward) > 0) {
+               erabs_left := f_ERabList_compose(erabs_forward);
+               f_ConnHdlr_erab_release_cmd(erabs_left, g_pars.mme_ue_id, 
g_pars.idx);
+               f_ConnHdlr_erab_release_rsp(erabs_left, g_pars.mme_ue_id, 
g_pars.idx);
+       }
+
+       f_ConnHdlr_s1ap_disconnect();
+       f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
+}
+testcase TC_handover_preparation_release() runs on test_CT {
+       f_TC_exec(refers(f_TC_handover_preparation_release), 1, 4);
+}
+
 /* Test Handover Resource Allocation procedures */
 function f_TC_handover_res_alloc(charstring id) runs on ConnHdlr {
        f_ConnHdlr_s1ap_register(g_pars.genb_id);
@@ -956,6 +987,7 @@
        execute( TC_uemux_ue_ctx_release_req() );
        execute( TC_uemux_ue_ctx_release_cmd() );
        execute( TC_handover_preparation() );
+       execute( TC_handover_preparation_release() );
        execute( TC_handover_res_alloc() );
        execute( TC_pfcp_heartbeat() );
 }
diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml
index 24c0fe0..bcf1d83 100644
--- a/s1gw/expected-results.xml
+++ b/s1gw/expected-results.xml
@@ -31,6 +31,7 @@
   <testcase classname='S1GW_Tests' name='TC_uemux_ue_ctx_release_req' 
time='MASKED'/>
   <testcase classname='S1GW_Tests' name='TC_uemux_ue_ctx_release_cmd' 
time='MASKED'/>
   <testcase classname='S1GW_Tests' name='TC_handover_preparation' 
time='MASKED'/>
+  <testcase classname='S1GW_Tests' name='TC_handover_preparation_release' 
time='MASKED'/>
   <testcase classname='S1GW_Tests' name='TC_handover_res_alloc' time='MASKED'/>
   <testcase classname='S1GW_Tests' name='TC_pfcp_heartbeat' time='MASKED'/>
 </testsuite>

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

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ic70ba19c0a6e349f63aae124607d075b6d19e779
Gerrit-Change-Number: 41094
Gerrit-PatchSet: 4
Gerrit-Owner: jolly <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: jolly <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to