diff options
author | Harald Welte <laforge@osmocom.org> | 2022-03-28 21:29:04 +0200 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2022-03-28 21:29:04 +0200 |
commit | 562d28e305446f648cd58bcf87c0a3c2c9d3853d (patch) | |
tree | 732262df7611af9305a8151b2060b64c580cd8cb | |
parent | f42c787ce669bcbcfb41e012a3830b0719270c3c (diff) |
bsc: Add tests for CBSP MESSAGE STATUS QUERY procedure
Change-Id: I124a69c515d634bc054ed35e430af6b3c11ad46e
Related: SYS#5909
-rw-r--r-- | bsc/BSC_Tests_CBSP.ttcn | 70 | ||||
-rw-r--r-- | library/CBSP_Templates.ttcn | 79 |
2 files changed, 149 insertions, 0 deletions
diff --git a/bsc/BSC_Tests_CBSP.ttcn b/bsc/BSC_Tests_CBSP.ttcn index 8119289a..25f00d84 100644 --- a/bsc/BSC_Tests_CBSP.ttcn +++ b/bsc/BSC_Tests_CBSP.ttcn @@ -380,6 +380,34 @@ function f_cbsp_kill(uint16_t msg_id, uint16_t ser_no, template (omit) uint8_t c } } +/* send a KILL CBS to the BSC; expect either COMPLETE or FAILURE in response*/ +function f_cbsp_msg_status_query(uint16_t msg_id, uint16_t ser_no, template (value) uint8_t channel_ind := 0, + template (value) BSSMAP_FIELD_CellIdentificationList cell_list := ts_BSSMAP_CIL_BSS, + template CBSP_IE_NumBcastComplList compl_list := ?, + template CBSP_FailureListItems fail_list := omit) runs on cbsp_test_CT +{ + var template (value) CBSP_PDU tx; + var template CBSP_PDU rx; + + tx := ts_CBSP_MSG_STATUS_QUERY(msg_id, ser_no, cell_list, channel_ind); + CBSP[0].send(ts_CBSP_Send(g_cbsp_conn_id[0], tx)); + if (istemplatekind(fail_list, "omit")) { + rx := tr_CBSP_MSG_STATUS_QUERY_COMPL(msg_id, ser_no, compl_list:=compl_list, channel_ind:=channel_ind); + } else { + rx := tr_CBSP_MSG_STATUS_QUERY_FAIL(msg_id, ser_no, fail_list, channel_ind:=channel_ind, + compl_list:=compl_list); + } + alt { + [] CBSP[0].receive(tr_CBSP_Recv(g_cbsp_conn_id[0], rx)) { + setverdict(pass); + } + [] CBSP[0].receive(tr_CBSP_Recv(g_cbsp_conn_id[0], ?)) { + setverdict(fail, "Received unexpected CBSP"); + mtc.stop; + } + } +} + template (present) RSL_IE_CbCommandType tr_RslCbCmdType(template (present) uint2_t lblock := ?, template (present) RSL_CbCommand cmd := ?) := { command := cmd, @@ -858,6 +886,45 @@ testcase TC_cbsp_emerg_write_bts_cgi_cchan_disable() runs on cbsp_test_CT { } } +/* Send a MSG STATUS QUERY for an unknown message; expect no completion list and present failure list */ +testcase TC_cbsp_status_q_empty() runs on cbsp_test_CT { + g_pars := valueof(ts_CBSP_Pars_default(false, 18001, 18501)); + f_init(); + + f_cbsp_msg_status_query(g_cbsp_msg_id, g_cbsp_ser_no, compl_list := omit, fail_list := ?); +} + +/* Send a SMSCB to entire BSS followed by MSG_STATUS_QUERY; expect completion list and no failure list */ +testcase TC_cbsp_status_q_bts_cgi() runs on cbsp_test_CT { + g_pars := valueof(ts_CBSP_Pars_default(false, 19001, 19501)); + f_init(); + + var CBSP_IEs pages := {f_gen_page()}; + var template (value) BSSMAP_FIELD_CellIdentificationList cell_list; + cell_list := ts_BSSMAP_CIL_CGI({bssmap_cgi(mp_cgi_bts0)}); + /* request 5 transmissions */ + f_cbsp_write(g_cbsp_msg_id, g_cbsp_ser_no, cell_list, num_bcast_req := 5, content:=pages, + success_list:=cell_list, fail_list:=omit); + var template (present) RSL_Message tr := f_page2rsl(pages[0], g_cbsp_msg_id, g_cbsp_ser_no); + /* wait for first transmission */ + IPA_RSL[0].receive(tr_ASP_RSL_UD(tr)); + var template (present) CBSP_IE_NumBcastComplList compl_list := { + len := ?, + spare1_4 := ?, + cell_id_discr := ?, + list := { + cI_CGI := { + ci := bssmap_cgi(mp_cgi_bts0), + num_bcast_compl := (1 .. 5), + num_bcast_info := CBSP_NUM_BCAST_INFO_VALID, + spare1_4 := '0000'B + } + } + }; + f_cbsp_msg_status_query(g_cbsp_msg_id, g_cbsp_ser_no, cell_list:=cell_list, compl_list := compl_list, fail_list := omit); +} + + control { @@ -884,6 +951,9 @@ control { execute( TC_cbsp_write_then_kill() ); execute( TC_cbsp_write_then_reset() ); + execute( TC_cbsp_status_q_empty() ); + execute( TC_cbsp_status_q_bts_cgi() ); + execute( TC_cbsp_emerg_write_bts_cgi_dchan() ); execute( TC_cbsp_emerg_write_bts_cgi_cchan() ); execute( TC_cbsp_emerg_write_bts_cgi_cchan_disable() ); diff --git a/library/CBSP_Templates.ttcn b/library/CBSP_Templates.ttcn index 5da29585..f86241ef 100644 --- a/library/CBSP_Templates.ttcn +++ b/library/CBSP_Templates.ttcn @@ -667,6 +667,85 @@ return template CBSP_PDU { return tr_CBSP(CBSP_MSGT_KILL_FAIL, ies); } +/* 8.1.3.10 MESSAGE STATUS QUERY */ +template (value) CBSP_PDU +ts_CBSP_MSG_STATUS_QUERY(template (value) uint16_t msg_id, + template (value) uint16_t old_ser_nr, + template (value) BSSMAP_FIELD_CellIdentificationList cell_list, + template (value) uint8_t channel_ind) := + ts_CBSP(CBSP_MSGT_MSG_STATUS_QUERY, { + ts_CbspMsgId(msg_id), + ts_OldSerNo(old_ser_nr), + ts_CbspCellList(cell_list), + ts_CbspChannelInd(channel_ind)}); +template (present) CBSP_PDU +tr_CBSP_MSG_STATUS_QUERY(template (present) uint16_t msg_id := ?, + template (present) uint16_t old_ser_nr := ?, + template (present) BSSMAP_FIELD_CellIdentificationList cell_list := ?, + template (present) uint8_t channel_ind := ?) := + ts_CBSP(CBSP_MSGT_MSG_STATUS_QUERY, { + ts_CbspMsgId(msg_id), + ts_OldSerNo(old_ser_nr), + ts_CbspCellList(cell_list), + ts_CbspChannelInd(channel_ind)}); + +/* 8.1.3.11 MESSAGE STATUS QUERY COMPLETE */ +template (value) CBSP_PDU +ts_CBSP_MSG_STATUS_QUERY_COMPL(template (value) uint16_t msg_id, template (value) uint16_t old_ser_nr, + template (value) CBSP_IE_NumBcastComplList compl_list, + template (value) uint8_t channel_ind) := + ts_CBSP(CBSP_MSGT_MSG_STATUS_QUERY_COMPL, { + ts_CbspMsgId(msg_id), + ts_OldSerNo(old_ser_nr), + ts_CbspNumComplList(valueof(compl_list)), + ts_CbspChannelInd(channel_ind)}); +template (present) CBSP_PDU +tr_CBSP_MSG_STATUS_QUERY_COMPL(template (present) uint16_t msg_id, template (present) uint16_t old_ser_nr, + template (present) CBSP_IE_NumBcastComplList compl_list, + template (present) uint8_t channel_ind) := + tr_CBSP(CBSP_MSGT_MSG_STATUS_QUERY_COMPL, { + tr_CbspMsgId(msg_id), + tr_OldSerNo(old_ser_nr), + tr_CbspNumComplList(compl_list), + tr_CbspChannelInd(channel_ind)}); + +/* 8.1.3.12 MESSAGE STATUS QUERY FAILURE */ +function ts_CBSP_MSG_STATUS_QUERY_FAIL(template (value) uint16_t msg_id, template (value) uint16_t old_ser_nr, + template (value) CBSP_FailureListItems fail_list, + template (value) uint8_t channel_ind, + template (omit) CBSP_IE_NumBcastComplList compl_list) +return template (value) CBSP_PDU { + var template (value) CBSP_IEs ies := { + ts_CbspMsgId(msg_id), + ts_OldSerNo(old_ser_nr), + ts_CbspFailList(fail_list), + ts_CbspChannelInd(channel_ind) + }; + if (not istemplatekind(compl_list, "omit")) { + ies[lengthof(ies)] := ts_CbspNumComplList(valueof(compl_list)); + } + return ts_CBSP(CBSP_MSGT_MSG_STATUS_QUERY_FAIL, ies); +} +function tr_CBSP_MSG_STATUS_QUERY_FAIL(template (present) uint16_t msg_id := ?, template (present) uint16_t old_ser_nr := ?, + template (present) CBSP_FailureListItems fail_list := ?, + template (present) uint8_t channel_ind := ?, + template CBSP_IE_NumBcastComplList compl_list := *) +return template (present) CBSP_PDU { + var template (present) CBSP_IEs ies := { + tr_CbspMsgId(msg_id), + tr_OldSerNo(old_ser_nr), + tr_CbspFailList(fail_list), + tr_CbspChannelInd(channel_ind) + }; + if (istemplatekind(compl_list, "*")) { + testcase.stop("TITAN > 6.5.0 doesn't support this"); + //ies[lengthof(ies)] := ts_CbspNumComplList(valueof(compl_list)); + } else if (not istemplatekind(compl_list, "omit")) { + ies[lengthof(ies)] := tr_CbspNumComplList(compl_list); + } + return tr_CBSP(CBSP_MSGT_MSG_STATUS_QUERY_FAIL, ies); +} + /* 8.1.3.16 RESET */ template (value) CBSP_PDU ts_CBSP_RESET(template (value) BSSMAP_FIELD_CellIdentificationList cell_list) := |