BSC LCLS: restructure tests
Move duplicated code into separate functions to simplify adding test
cases which do not use MGW MDCX methods for closing the loop.
Change-Id: Idf9fc8e639b0ece662ab26c481899ef39fb7edfe
Related: OS#3659
diff --git a/bsc/BSC_Tests_LCLS.ttcn b/bsc/BSC_Tests_LCLS.ttcn
index 0151329..585059e 100644
--- a/bsc/BSC_Tests_LCLS.ttcn
+++ b/bsc/BSC_Tests_LCLS.ttcn
@@ -255,11 +255,28 @@
f_lcls_test_fini();
}
+private function f_tc_lcls_recv_ls_exp_mgcp() runs on lcls_test_CT {
+ var MgcpCommand mgcp_cmd;
+
+ interleave {
+ [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_yet_ls));
+ [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_locally_switched));
+ [] CONN_B.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
+ [] CONN_A.receive(tr_MDCX) -> value mgcp_cmd {
+ CONN_A.send(f_build_mdcx_rsp(mgcp_cmd));
+ }
+ /* not needed, as this MDCX is still handled within MSC_ConnectionHandler
+ [] CONN_B.receive(tr_MDCX) -> value mgcp_cmd {
+ CONN_B.send(f_build_mdcx_rsp(mgcp_cmd));
+ }
+ */
+ }
+}
+
private function f_tc_lcls_gcr_bway_connect(boolean hr) runs on lcls_test_CT {
var TestHdlrParams pars_a := valueof(t_def_TestHdlrPars);
var TestHdlrParams pars_b;
var MSC_ConnHdlr vc_conn;
- var MgcpCommand mgcp_cmd;
f_lcls_init();
@@ -281,14 +298,8 @@
f_lcls_test_init(pars_a, pars_b);
CONN_A.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- interleave {
- [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_yet_ls));
- [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_locally_switched));
- [] CONN_B.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- [] CONN_A.receive(tr_MDCX) -> value mgcp_cmd {
- CONN_A.send(f_build_mdcx_rsp(mgcp_cmd));
- }
- }
+
+ f_tc_lcls_recv_ls_exp_mgcp();
f_lcls_test_fini();
}
@@ -366,6 +377,12 @@
f_lcls_test_fini();
}
+/* check for the cases where LCLS is not possible due to some reason */
+private function f_lcls_not_yet_ls() runs on lcls_test_CT {
+ CONN_A.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
+ CONN_B.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
+ CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_yet_ls));
+}
/* Send an ASSIGNMENT REQ with LCLS GCR+CFG+CSC; expect no connect */
testcase TC_lcls_gcr_bway_dont_connect() runs on lcls_test_CT {
@@ -387,9 +404,7 @@
pars_b.lcls.exp_sts := LCLS_STS_not_yet_ls;
f_lcls_test_init(pars_a, pars_b);
- CONN_A.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- CONN_B.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_yet_ls));
+ f_lcls_not_yet_ls();
f_wait_fail_notify();
f_lcls_test_fini();
}
@@ -435,12 +450,26 @@
pars_b.lcls.exp_sts := LCLS_STS_not_yet_ls;
f_lcls_test_init(pars_a, pars_b);
- CONN_A.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- CONN_B.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_yet_ls));
+ f_lcls_not_yet_ls();
f_lcls_test_fini();
}
+/* Expect given LCLS status alongside with corresponding MDCX commands */
+private function f_lcls_sts_mgcp(BIT4 expected_status) runs on lcls_test_CT {
+ var MgcpCommand mgcp_cmd;
+
+ interleave {
+ [] CONN_B.receive(tr_BSSMAP_LclsConnCtrlAck(tr_BSSMAP_IE_LclsSts(expected_status)));
+ [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(expected_status));
+ [] CONN_A.receive(tr_MDCX) -> value mgcp_cmd {
+ CONN_A.send(f_build_mdcx_rsp(mgcp_cmd));
+ }
+ [] CONN_B.receive(tr_MDCX) -> value mgcp_cmd {
+ CONN_B.send(f_build_mdcx_rsp(mgcp_cmd));
+ }
+ }
+}
+
/* Send an ASSIGNMENT REQ with "do not connect" and enable later using LCLS CTRL */
testcase TC_lcls_gcr_bway_dont_connect_csc() runs on lcls_test_CT {
var TestHdlrParams pars_a := valueof(t_def_TestHdlrPars);
@@ -463,9 +492,7 @@
/* start call and expect it to be "not yet" LS */
f_lcls_test_init(pars_a, pars_b);
- CONN_A.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- CONN_B.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_yet_ls));
+ f_lcls_not_yet_ls();
f_sleep(2.0);
/* send "connect" on A side, expect call to remain in "not yet" */
@@ -475,16 +502,7 @@
/* send "connect" on B side, expect call to go LS, with notify to A side */
CONN_B.send(ts_BSSMAP_LclsConnCtrl(omit, ts_BSSMAP_IE_LclsCsc(LCLS_CSC_connect)));
- interleave {
- [] CONN_B.receive(tr_BSSMAP_LclsConnCtrlAck(tr_BSSMAP_IE_LclsSts(LCLS_STS_locally_switched)));
- [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_locally_switched));
- [] CONN_A.receive(tr_MDCX) -> value mgcp_cmd {
- CONN_A.send(f_build_mdcx_rsp(mgcp_cmd));
- }
- [] CONN_B.receive(tr_MDCX) -> value mgcp_cmd {
- CONN_B.send(f_build_mdcx_rsp(mgcp_cmd));
- }
- }
+ f_lcls_sts_mgcp(LCLS_STS_locally_switched);
f_wait_fail_notify();
f_lcls_test_fini();
}
@@ -510,7 +528,6 @@
var TestHdlrParams pars_a := valueof(t_def_TestHdlrPars);
var TestHdlrParams pars_b;
var MSC_ConnHdlr vc_conn;
- var MgcpCommand mgcp_cmd;
f_lcls_init();
@@ -528,19 +545,8 @@
/* Expect LS to be established successfully */
f_lcls_test_init(pars_a, pars_b);
CONN_A.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- interleave {
- [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_yet_ls));
- [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_locally_switched));
- [] CONN_B.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- [] CONN_A.receive(tr_MDCX) -> value mgcp_cmd {
- CONN_A.send(f_build_mdcx_rsp(mgcp_cmd));
- }
-/* not needed, as this MDCX is still handled within MSC_ConnectionHandler
- [] CONN_B.receive(tr_MDCX) -> value mgcp_cmd {
- CONN_B.send(f_build_mdcx_rsp(mgcp_cmd));
- }
-*/
- }
+
+ f_tc_lcls_recv_ls_exp_mgcp()
/* request LS release on "A" side; call continues to be locally switched */
CONN_A.send(ts_BSSMAP_LclsConnCtrl(omit, ts_BSSMAP_IE_LclsCsc(LCLS_CSC_release_lcls)));
@@ -549,16 +555,8 @@
/* request LS release on "B" side; call LS is released */
CONN_B.send(ts_BSSMAP_LclsConnCtrl(omit, ts_BSSMAP_IE_LclsCsc(LCLS_CSC_release_lcls)));
- interleave {
- [] CONN_A.receive(tr_MDCX) -> value mgcp_cmd {
- CONN_A.send(f_build_mdcx_rsp(mgcp_cmd));
- }
- [] CONN_B.receive(tr_MDCX) -> value mgcp_cmd {
- CONN_B.send(f_build_mdcx_rsp(mgcp_cmd));
- }
- [] CONN_B.receive(tr_BSSMAP_LclsConnCtrlAck(tr_BSSMAP_IE_LclsSts(LCLS_STS_no_longer_ls)));
- [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_no_longer_ls));
- }
+
+ f_lcls_sts_mgcp(LCLS_STS_no_longer_ls)
f_lcls_test_fini();
}
@@ -587,14 +585,8 @@
/* Expect LS to be established successfully */
f_lcls_test_init(pars_a, pars_b);
CONN_A.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- interleave {
- [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_yet_ls));
- [] CONN_A.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_locally_switched));
- [] CONN_B.receive(LclsCompSync:LCLS_COMP_SYNC_ASS_COMPL);
- [] CONN_A.receive(tr_MDCX) -> value mgcp_cmd {
- CONN_A.send(f_build_mdcx_rsp(mgcp_cmd));
- }
- }
+
+ f_tc_lcls_recv_ls_exp_mgcp();
/* Perform hard BSSMAP Clear on "A" side, expect no LS on "B" side */
var myBSSMAP_Cause cause_val := GSM0808_CAUSE_CALL_CONTROL;