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
This commit is contained in:
Max 2018-10-31 19:38:38 +01:00 committed by Harald Welte
parent 4b0f49633e
commit b1599b11e3
1 changed files with 52 additions and 60 deletions

View File

@ -255,11 +255,28 @@ testcase TC_lcls_gcr_only() runs on lcls_test_CT {
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 @@ private function f_tc_lcls_gcr_bway_connect(boolean hr) runs on lcls_test_CT {
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 @@ testcase TC_lcls_gcr_nomatch_bway_connect() runs on lcls_test_CT {
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 @@ testcase TC_lcls_gcr_bway_dont_connect() runs on lcls_test_CT {
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 @@ testcase TC_lcls_gcr_unsuppported_csc() runs on lcls_test_CT {
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 @@ testcase TC_lcls_gcr_bway_dont_connect_csc() runs on lcls_test_CT {
/* 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 @@ testcase TC_lcls_gcr_bway_dont_connect_csc() runs on lcls_test_CT {
/* 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 @@ testcase TC_lcls_connect_break() 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();
@ -528,19 +545,8 @@ testcase TC_lcls_connect_break() runs on lcls_test_CT {
/* 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 @@ testcase TC_lcls_connect_break() runs on lcls_test_CT {
/* 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 @@ testcase TC_lcls_connect_clear() runs on lcls_test_CT {
/* 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;