diff options
Diffstat (limited to 'bts/BTS_Tests.ttcn')
-rw-r--r-- | bts/BTS_Tests.ttcn | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn index 27ed81cc..a879f758 100644 --- a/bts/BTS_Tests.ttcn +++ b/bts/BTS_Tests.ttcn @@ -3538,6 +3538,60 @@ testcase TC_pcu_paging_from_rsl() runs on test_CT { setverdict(pass); } +/* test for periodic TIME_IND; check number of FN expired and number of TIME_IND within frames */ +testcase TC_pcu_time_ind() runs on test_CT { + var PCUIF_send_data pcu_sd; + var integer num_time_ind := 0; + var integer first_fn, last_fn; + var float test_duration := 5.0; + timer T; + + f_init_pcu_test(); + f_TC_pcu_act_req(0, 0, 7, true); + + PCU.clear; + T.start(test_duration); + alt { + [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TIME_IND(0, ?))) -> value pcu_sd { + num_time_ind := num_time_ind + 1; + if (not isbound(first_fn)) { + first_fn := pcu_sd.data.u.time_ind.fn; + } + last_fn := pcu_sd.data.u.time_ind.fn; + repeat; + } + [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TIME_IND(?, ?))) -> value pcu_sd { + setverdict(fail, "Received unexpected PCUIF_TIME_IND: ", pcu_sd.data); + repeat; + } + [] PCU.receive { + repeat; + } + [] T.timeout {} + } + var integer fn_expired := last_fn - first_fn; + log(fn_expired, " fn expired with ", num_time_ind, " PCU_TIME.ind"); + + /* verify the number of frames expired matches our expectation */ + const float c_GSM_FN_DURATION_MS := 4.61538; + var float fn_expected := test_duration * 1000.0 / c_GSM_FN_DURATION_MS; + var template integer t_fn_expected := f_tolerance(float2int(fn_expected), 1, 100000, 10); + if (not match(fn_expired, t_fn_expected)) { + setverdict(fail, "Number of TDMA Frames (", fn_expired, ") not matching ", t_fn_expected); + } + + /* There are three TIME.ind in every fn MOD 13 */ + var float time_ind_expected := int2float(fn_expired) * 3.0 / 13.0; + /* Add some tolerance */ + var template integer t_time_ind_exp := f_tolerance(float2int(time_ind_expected), 1, 100000, 5); + if (not match(num_time_ind, t_time_ind_exp)) { + setverdict(fail, "Number of TIME.ind (", num_time_ind, ") not matching ", t_time_ind_exp); + } + + setverdict(pass); +} + + /*********************************************************************** * Osmocom Style Dynamic Timeslot Support ***********************************************************************/ @@ -4766,7 +4820,6 @@ testcase TC_chopped_ipa_payload() runs on test_CT { * error handling ** IE duplicated? * PCU interface -** TIME_IND from BTS->PCU ** DATA_IND from BTS->PCU ** verification of PCU-originated DATA_REQ arrival on Um/MS side @@ -4839,6 +4892,7 @@ control { execute( TC_pcu_rach_content() ); execute( TC_pcu_ext_rach_content() ); execute( TC_pcu_paging_from_rsl() ); + execute( TC_pcu_time_ind() ); } else { log("PCU socket path not available, skipping PCU tests"); } |