dexter has uploaded this change for review. ( https://gerrit.osmocom.org/9204


Change subject: MSC_Tests: add test to try two LU from different BSCs
......................................................................

MSC_Tests: add test to try two LU from different BSCs

Currently we are only able to simulate a Location Update from a
single BSC. However, as a preperation for inter BSC handover tests
we need to be able to communicate to the MSC from two independed
BSC instances. A location update is a simple operation to try out
the multi-bsc functionality

- Add support to create multiple BSC instances in independed ports
- Add test to simulate a LU from two different BSCs

Change-Id: Ib3eabf8537066f43faed8fb983d9e1f4092ec515
Related: OS#1609
---
M library/BSSMAP_Emulation.ttcn
M msc/BSC_ConnectionHandler.ttcn
M msc/MSC_Tests.ttcn
M msc/expected-results.xml
4 files changed, 69 insertions(+), 23 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/04/9204/1

diff --git a/library/BSSMAP_Emulation.ttcn b/library/BSSMAP_Emulation.ttcn
index 95b39f3..74c6ed0 100644
--- a/library/BSSMAP_Emulation.ttcn
+++ b/library/BSSMAP_Emulation.ttcn
@@ -47,8 +47,11 @@
 type component BSSAP_ConnHdlr {
        /* port towards MSC Emulator core / SCCP connection dispatchar */
        port BSSAP_Conn_PT BSSAP;
+       port BSSAP_Conn_PT BSSAP_1;
+
        /* procedure based port to register for incoming connections */
        port BSSMAPEM_PROC_PT BSSAP_PROC;
+       port BSSMAPEM_PROC_PT BSSAP_PROC_1;
 }

 /* Auxiliary primitive that can happen on the port between per-connection 
client and this dispatcher */
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index b7a4f50..69608bd 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -44,10 +44,16 @@
        boolean expect_ciph
 }

-type record BSC_ConnHdlrPars {
+type record BSC_ConnHdlrBscPars {
        SCCP_PAR_Address sccp_addr_own,
        SCCP_PAR_Address sccp_addr_peer,
-       BSSMAP_IE_CellIdentifier cell_id,
+       BSSMAP_IE_CellIdentifier cell_id
+}
+
+type record of BSC_ConnHdlrBscPars BSC_ConnHdlrBscParsTable;
+
+type record BSC_ConnHdlrPars {
+       BSC_ConnHdlrBscParsTable bsc,
        hexstring imei,
        hexstring imsi,
        hexstring msisdn,
@@ -173,15 +179,16 @@
 };

 /* Encode 'l3' and ask BSSMAP_Emulation to create new connection with COMPL L3 
INFO */
-function f_bssap_compl_l3(PDU_ML3_MS_NW l3)
+function f_bssap_compl_l3(PDU_ML3_MS_NW l3, integer bsc_num := 0, 
BSSAP_Conn_PT BSSAP_PT := BSSAP)
 runs on BSC_ConnHdlr {
        log("Sending COMPL L3: ", l3);
        var octetstring l3_enc := enc_PDU_ML3_MS_NW(l3);
-       BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, 
g_pars.sccp_addr_own,
-                                    valueof(ts_BSSMAP_ComplL3(g_pars.cell_id, 
l3_enc))));
+
+       BSSAP_PT.send(ts_BSSAP_Conn_Req(g_pars.bsc[bsc_num].sccp_addr_peer, 
g_pars.bsc[bsc_num].sccp_addr_own,
+                                       
valueof(ts_BSSMAP_ComplL3(g_pars.bsc[bsc_num].cell_id, l3_enc))));
        alt {
-       [] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {}
-       [] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
+       [] BSSAP_PT.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {}
+       [] BSSAP_PT.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
                        setverdict(fail, "DISC.ind from SCCP");
                        self.stop;
                }
@@ -297,7 +304,7 @@
        }
 }

-function f_perform_lu()
+function f_perform_lu(integer bsc_num := 0, BSSAP_Conn_PT BSSAP_PT := BSSAP)
 runs on BSC_ConnHdlr {
        var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
        var PDU_DTAP_MT dtap_mt;
@@ -306,10 +313,10 @@
        f_create_gsup_expect(hex2str(g_pars.imsi));

        /* Send BSSAP_Conn_Req with COMPL L3 INFO to MSC */
-       f_bssap_compl_l3(l3_lu);
+       f_bssap_compl_l3(l3_lu, bsc_num, BSSAP_PT);

        if (g_pars.send_early_cm) {
-               BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));
+               BSSAP_PT.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));
        }

        f_mm_common();
@@ -321,7 +328,7 @@
        GSUP.send(ts_GSUP_UL_RES(g_pars.imsi));

        alt {
-       [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Acc)) -> value dtap_mt {
+       [] BSSAP_PT.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Acc)) -> value dtap_mt {
                var PDU_ML3_LocationUpdateAccept lu_acc := 
dtap_mt.dtap.msgs.mm.locationUpdateAccept;
                if (g_pars.net.expect_tmsi) {
                        if (not ispresent(lu_acc.mobileIdentityTLV) or
@@ -330,7 +337,7 @@
                                self.stop;
                        } else {
                                g_pars.tmsi := 
lu_acc.mobileIdentityTLV.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi.octets;
-                               
BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_TmsiRealloc_Cmpl));
+                               
BSSAP_PT.send(ts_PDU_DTAP_MO(ts_ML3_MO_TmsiRealloc_Cmpl));
                        }
                } else {
                        if (ispresent(lu_acc.mobileIdentityTLV) and
@@ -340,15 +347,15 @@
                        }
                }
                }
-       [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) {
+       [] BSSAP_PT.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) {
                setverdict(fail, "Expected LU ACK, but received LU REJ");
                self.stop;
                }
        }
        /* FIXME: there could be pending SMS or other common procedures by the 
MSC, let's ignore them */
-       BSSAP.receive(tr_BSSMAP_ClearCommand);
-       BSSAP.send(ts_BSSMAP_ClearComplete);
-       BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
+       BSSAP_PT.receive(tr_BSSMAP_ClearCommand);
+       BSSAP_PT.send(ts_BSSMAP_ClearComplete);
+       BSSAP_PT.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
        setverdict(pass);
 }

diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index edaa61b..ebf0081 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -434,10 +434,22 @@
                expect_auth := false,
                expect_ciph := false
        };
+
+       var BSC_ConnHdlrBscParsTable bsc_pars := {
+               {
+                       sccp_addr_own := g_bssap[0].sccp_addr_own,
+                       sccp_addr_peer := g_bssap[0].sccp_addr_peer,
+                       cell_id := valueof(ts_CellId_CGI('262'H, '42'H, 23, 42))
+               },
+               {
+                       sccp_addr_own := g_bssap[1].sccp_addr_own,
+                       sccp_addr_peer := g_bssap[1].sccp_addr_peer,
+                       cell_id := valueof(ts_CellId_CGI('262'H, '42'H, 24, 43))
+               }
+       }
+
        var BSC_ConnHdlrPars pars := {
-               sccp_addr_own := g_bssap[0].sccp_addr_own,
-               sccp_addr_peer := g_bssap[0].sccp_addr_peer,
-               cell_id := valueof(ts_CellId_CGI('262'H, '42'H, 23, 42)),
+               bsc := bsc_pars,
                imei := f_gen_imei(imsi_suffix),
                imsi := f_gen_imsi(imsi_suffix),
                msisdn := f_gen_msisdn(imsi_suffix),
@@ -449,6 +461,9 @@
                net := net_pars,
                send_early_cm := true
        };
+
+/* ========================= */
+
        return pars;
 }

@@ -460,6 +475,8 @@
        /* BSSMAP part / A interface */
        connect(vc_conn:BSSAP, g_bssap[0].vc_BSSMAP:CLIENT);
        connect(vc_conn:BSSAP_PROC, g_bssap[0].vc_BSSMAP:PROC);
+       connect(vc_conn:BSSAP_1, g_bssap[1].vc_BSSMAP:CLIENT);
+       connect(vc_conn:BSSAP_PROC_1, g_bssap[1].vc_BSSMAP:PROC);
        /* MNCC part */
        connect(vc_conn:MNCC, vc_MNCC:MNCC_CLIENT);
        connect(vc_conn:MNCC_PROC, vc_MNCC:MNCC_PROC);
@@ -1106,8 +1123,8 @@
        f_init_handler(pars);

        /* Send Complete L3 Info with empty L3 frame */
-       BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, 
g_pars.sccp_addr_own,
-                                       
valueof(ts_BSSMAP_ComplL3(g_pars.cell_id, ''O))));
+       BSSAP.send(ts_BSSAP_Conn_Req(g_pars.bsc[0].sccp_addr_peer, 
g_pars.bsc[0].sccp_addr_own,
+                                       
valueof(ts_BSSMAP_ComplL3(g_pars.bsc[0].cell_id, ''O))));

        timer T := 5.0;
        T.start;
@@ -1140,8 +1157,8 @@
        var octetstring payl := f_rnd_octstring(len);

        /* Send Complete L3 Info with empty L3 frame */
-       BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, 
g_pars.sccp_addr_own,
-                                       
valueof(ts_BSSMAP_ComplL3(g_pars.cell_id, payl))));
+       BSSAP.send(ts_BSSAP_Conn_Req(g_pars.bsc[0].sccp_addr_peer, 
g_pars.bsc[0].sccp_addr_own,
+                                       
valueof(ts_BSSMAP_ComplL3(g_pars.bsc[0].cell_id, payl))));

        timer T := 5.0;
        T.start;
@@ -1847,6 +1864,23 @@
        setverdict(pass);
 }

+private function f_tc_lu_two(charstring id, BSC_ConnHdlrPars pars) runs on 
BSC_ConnHdlr {
+       pars.net.expect_tmsi := false;
+       f_init_handler(pars);
+       f_perform_lu(0, BSSAP);
+       f_perform_lu(1, BSSAP_1);
+}
+testcase TC_lu_two() runs on MTC_CT {
+       /* Like TC_lu_imsi_noauth_notmsi, but with two different BSC */
+       var BSC_ConnHdlr vc_conn;
+       f_init(2);
+       f_vty_config(MSCVTY, "msc", "no assign-tmsi");
+
+       vc_conn := f_start_handler(refers(f_tc_lu_two), 2);
+       vc_conn.done;
+}
+
+
 /***********************************************************************
  * SMS Testing
  ***********************************************************************/
@@ -2173,6 +2207,7 @@
        execute( TC_mo_release_timeout() );
        execute( TC_lu_and_mt_call_no_dlcx_resp() );
        execute( TC_reset_two() );
+       execute( TC_lu_two() );

        execute( TC_lu_and_mt_call() );

diff --git a/msc/expected-results.xml b/msc/expected-results.xml
index 0b192d0..cade469 100644
--- a/msc/expected-results.xml
+++ b/msc/expected-results.xml
@@ -70,6 +70,7 @@
   <testcase classname='MSC_Tests' name='TC_mo_release_timeout' time='MASKED'/>
   <testcase classname='MSC_Tests' name='TC_lu_and_mt_call_no_dlcx_resp' 
time='MASKED'/>
   <testcase classname='MSC_Tests' name='TC_reset_two' time='MASKED'/>
+  <testcase classname='MSC_Tests' name='TC_lu_two' time='MASKED'/>
   <testcase classname='MSC_Tests' name='TC_lu_and_mt_call' time='MASKED'/>
   <testcase classname='MSC_Tests' name='TC_lu_and_mo_sms' time='MASKED'/>
   <testcase classname='MSC_Tests' name='TC_lu_and_mt_sms' time='MASKED'/>

--
To view, visit https://gerrit.osmocom.org/9204
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib3eabf8537066f43faed8fb983d9e1f4092ec515
Gerrit-Change-Number: 9204
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pma...@sysmocom.de>

Reply via email to