From 12941bd6b0e97ec8490b9c84959d24e4a07a986a Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Sat, 29 Aug 2020 03:21:26 +0000 Subject: bsc: verify handover rate counters This will break the 'latest' builds for most handover tests until Ib0087b6566ae4d82f8c3ef272c1256bcd1d08bf1 is released. Move the TC_ho_neighbor_config_* closer to the f_tc_ho_neighbor_config_* functions, so that it is easier to read the added counters, relating to the expected handovers. Depends: Ib0087b6566ae4d82f8c3ef272c1256bcd1d08bf1 (osmo-bsc) Change-Id: I10bc0b67ca8dcf41dbb02332ed18017e819c2b32 --- bsc/BSC_Tests.ttcn | 449 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 406 insertions(+), 43 deletions(-) (limited to 'bsc') diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn index dce9ae9c..4560957a 100644 --- a/bsc/BSC_Tests.ttcn +++ b/bsc/BSC_Tests.ttcn @@ -93,6 +93,56 @@ const CounterNameVals counternames_msc_mscpool := { { "mscpool:subscr:paged", 0 } }; +/* Default list of counters for 'bsc' and 'bts' entities. */ +const CounterNameVals counternames_bsc_bts_handover := { + { "assignment:attempted", 0 }, + { "assignment:completed", 0 }, + { "assignment:stopped", 0 }, + { "assignment:no_channel", 0 }, + { "assignment:timeout", 0 }, + { "assignment:failed", 0 }, + { "assignment:error", 0 }, + + { "handover:attempted", 0 }, + { "handover:completed", 0 }, + { "handover:stopped", 0 }, + { "handover:no_channel", 0 }, + { "handover:timeout", 0 }, + { "handover:failed", 0 }, + { "handover:error", 0 }, + + { "intra_cell_ho:attempted", 0 }, + { "intra_cell_ho:completed", 0 }, + { "intra_cell_ho:stopped", 0 }, + { "intra_cell_ho:no_channel", 0 }, + { "intra_cell_ho:timeout", 0 }, + { "intra_cell_ho:failed", 0 }, + { "intra_cell_ho:error", 0 }, + + { "intra_bsc_ho:attempted", 0 }, + { "intra_bsc_ho:completed", 0 }, + { "intra_bsc_ho:stopped", 0 }, + { "intra_bsc_ho:no_channel", 0 }, + { "intra_bsc_ho:timeout", 0 }, + { "intra_bsc_ho:failed", 0 }, + { "intra_bsc_ho:error", 0 }, + + { "interbsc_ho_out:attempted", 0 }, + { "interbsc_ho_out:completed", 0 }, + { "interbsc_ho_out:stopped", 0 }, + { "interbsc_ho_out:timeout", 0 }, + { "interbsc_ho_out:failed", 0 }, + { "interbsc_ho_out:error", 0 }, + + { "interbsc_ho_in:attempted", 0 }, + { "interbsc_ho_in:completed", 0 }, + { "interbsc_ho_in:stopped", 0 }, + { "interbsc_ho_in:no_channel", 0 }, + { "interbsc_ho_in:timeout", 0 }, + { "interbsc_ho_in:failed", 0 }, + { "interbsc_ho_in:error", 0 } +}; + /* Set of all System Information received during one RSL port's startup. * Note that some System Information may be sent on RSL, but lacking actual SI data, to indicate that the BTS should not * broadcast that SI type. That will be reflected as 'omit' here. @@ -498,6 +548,8 @@ type component test_CT extends CTRL_Adapter_CT { timer T_guard := 30.0; var CounterNameValsList g_ctr_msc; + var CounterNameValsList g_ctr_bsc; + var CounterNameValsList g_ctr_bts; /* System Information bytes as received during RSL startup, for each RSL[idx]. */ var SystemInformationConfig_list g_system_information := {}; @@ -611,6 +663,78 @@ private function f_ctrs_msc_expect(integer msc_nr, charstring countername, integ f_ctrs_msc_verify(); } +/* Convenience functions for rate counters using g_ctr_bts, always also including g_ctr_bsc. */ + +private function f_ctrs_bsc_and_bts_init(integer bts_count := NUM_BTS, CounterNameVals counternames := counternames_bsc_bts_handover) runs on test_CT { + g_ctr_bts := f_counter_name_vals_get_n(IPA_CTRL, "bts", bts_count, counternames); + log("initial bts rate counters: ", g_ctr_bts); + f_ctrs_bsc_init(counternames); +} + +private function f_ctrs_bsc_and_bts_add(integer bts_nr, charstring countername, integer val := 1) runs on test_CT { + f_counter_name_vals_list_add(g_ctr_bts, bts_nr, countername, val); + f_ctrs_bsc_add(countername, val); +} + +/* f_ctrs_bsc_and_bts_init(); + * f_do_thing(on_bts := 0); + * f_do_thing(on_bts := 0); + * f_do_other(on_bts := 1); + * f_ctrs_bsc_and_bts_add(0, "thing", 2); + * f_ctrs_bsc_and_bts_add(1, "other"); + * f_ctrs_bsc_and_bts_verify(); + */ +private function f_ctrs_bsc_and_bts_verify() runs on test_CT { + f_counter_name_vals_expect_n(IPA_CTRL, "bts", g_ctr_bts); + f_ctrs_bsc_verify(); +} + +/* convenience: f_ctrs_bsc_and_bts_add() and f_ctrs_bsc_and_bts_verify() in one call. + * f_ctrs_bsc_and_bts_init(); + * f_do_thing(on_bts := 0); + * f_do_thing(on_bts := 0); + * f_do_thing(on_bts := 0); + * f_ctrs_bsc_and_bts_expect(0, "thing", 3); + */ +private function f_ctrs_bsc_and_bts_expect(integer bts_nr, charstring countername, integer val := 1) runs on test_CT { + f_ctrs_bsc_and_bts_add(bts_nr, countername, val); + f_ctrs_bsc_and_bts_verify(); +} + + +/* Convenience functions for rate counters using g_ctr_bsc. */ + +private function f_ctrs_bsc_init(CounterNameVals counternames := counternames_bsc_bts_handover) runs on test_CT { + g_ctr_bsc := f_counter_name_vals_get_n(IPA_CTRL, "bsc", 1, counternames); + log("initial bsc rate counters: ", g_ctr_bsc); +} + +private function f_ctrs_bsc_add(charstring countername, integer val := 1) runs on test_CT { + f_counter_name_vals_list_add(g_ctr_bsc, 0, countername, val); +} + +/* f_ctrs_bsc_init(); + * f_do_thing(); + * f_do_thing(); + * f_do_other(); + * f_ctrs_bsc_add("thing", 2); + * f_ctrs_bsc_add("other"); + * f_ctrs_bsc_verify(); + */ +private function f_ctrs_bsc_verify() runs on test_CT { + f_counter_name_vals_expect_n(IPA_CTRL, "bsc", g_ctr_bsc); +} + +/* convenience: f_ctrs_bsc_add() and f_ctrs_bsc_verify() in one call. + * f_ctrs_bsc_init(); + * f_do_thing(); + * f_ctrs_bsc_expect("thing", 1); + */ +private function f_ctrs_bsc_expect(charstring countername, integer val := 1) runs on test_CT { + f_ctrs_bsc_add(countername, val); + f_ctrs_bsc_verify(); +} + private function f_shutdown_helper() runs on test_CT { all component.stop; @@ -4112,8 +4236,21 @@ testcase TC_ho_int() runs on test_CT { var MSC_ConnHdlr vc_conn; f_init(2, true); f_sleep(1.0); + + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_int)); vc_conn.done; + + /* from f_establish_fully() */ + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + /* from handover */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:completed"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:completed"); + f_ctrs_bsc_and_bts_verify(); } /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */ @@ -4211,8 +4348,18 @@ testcase TC_ho_out_of_this_bsc() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_out_of_this_bsc)); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:completed"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:completed"); + f_ctrs_bsc_and_bts_verify(); } /* BSC asks for inter-BSC HO, but the MSC decides that it won't happen and @@ -4258,8 +4405,18 @@ testcase TC_ho_out_fail_no_msc_response() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_out_fail_no_msc_response)); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:timeout"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout"); + f_ctrs_bsc_and_bts_verify(); } /* BSC asks for inter-BSC HO, receives BSSMAP Handover Command, but MS reports @@ -4342,8 +4499,18 @@ testcase TC_ho_out_fail_rr_ho_failure() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_out_fail_rr_ho_failure)); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:failed"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:failed"); + f_ctrs_bsc_and_bts_verify(); } /* BSC asks for inter-BSC-out HO, receives BSSMAP Handover Command, but then no reply is received about HO outcome @@ -4429,8 +4596,18 @@ testcase TC_ho_out_fail_no_result_after_ho_cmd() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_out_fail_no_result_after_ho_cmd)); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:timeout"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout"); + f_ctrs_bsc_and_bts_verify(); } private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr { @@ -4503,11 +4680,19 @@ testcase TC_ho_into_this_bsc() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + pars.sccp_addr_msc := g_bssap[0].sccp_addr_own; pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_into_this_bsc), pars); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:completed"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:completed"); + f_ctrs_bsc_and_bts_verify(); } private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr { @@ -4576,11 +4761,19 @@ testcase TC_ho_in_fail_msc_clears() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + pars.sccp_addr_msc := g_bssap[0].sccp_addr_own; pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears), pars); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:stopped"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:stopped"); + f_ctrs_bsc_and_bts_verify(); } private function f_tc_ho_in_fail_msc_clears_after_ho_detect(charstring id) runs on MSC_ConnHdlr { @@ -4656,11 +4849,19 @@ testcase TC_ho_in_fail_msc_clears_after_ho_detect() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + pars.sccp_addr_msc := g_bssap[0].sccp_addr_own; pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears_after_ho_detect), pars); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:stopped"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:stopped"); + f_ctrs_bsc_and_bts_verify(); } /* The new BSS's lchan times out before the MSC decides that handover failed. */ @@ -4737,11 +4938,19 @@ testcase TC_ho_in_fail_no_detect() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + pars.sccp_addr_msc := g_bssap[0].sccp_addr_own; pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect), pars); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:error"); + f_ctrs_bsc_and_bts_verify(); } /* Same as f_tc_ho_in_fail_no_detect, but MSC fails to send a Clear Command */ @@ -4808,11 +5017,19 @@ testcase TC_ho_in_fail_no_detect2() runs on test_CT { f_init(1, true); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + pars.sccp_addr_msc := g_bssap[0].sccp_addr_own; pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect2), pars); vc_conn.done; + + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:error"); + f_ctrs_bsc_and_bts_verify(); } type record of charstring Commands; @@ -4994,6 +5211,43 @@ private function f_tc_ho_neighbor_config_1(charstring id) runs on MSC_ConnHdlr { "handover any to arfcn 871 bsic 11", true); } +testcase TC_ho_neighbor_config_1() runs on test_CT { + var MSC_ConnHdlr vc_conn; + f_init(3, true, guard_timeout := 60.0); + f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_1)); + vc_conn.done; + + /* f_tc_ho_neighbor_config_start() */ + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + + /* 1.a */ + /* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the + * handover quickly by sending a Handover Failure message. */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:failed"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed"); + + /* 1.b */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + + /* 1.c */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + + /* 1.d */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:failed"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed"); + + f_ctrs_bsc_and_bts_verify(); +} + private function f_tc_ho_neighbor_config_2(charstring id) runs on MSC_ConnHdlr { f_tc_ho_neighbor_config_start(); @@ -5016,6 +5270,33 @@ private function f_tc_ho_neighbor_config_2(charstring id) runs on MSC_ConnHdlr { "handover any to arfcn 871 bsic 12", false); } +testcase TC_ho_neighbor_config_2() runs on test_CT { + var MSC_ConnHdlr vc_conn; + f_init(3, true, guard_timeout := 50.0); + f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_2)); + vc_conn.done; + + /* f_tc_ho_neighbor_config_start() */ + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + + /* 2.a */ + /* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the + * handover quickly by sending a Handover Failure message. */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:failed"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed"); + + /* 2.b */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + + f_ctrs_bsc_and_bts_verify(); +} + private function f_tc_ho_neighbor_config_3(charstring id) runs on MSC_ConnHdlr { f_tc_ho_neighbor_config_start(); @@ -5037,6 +5318,33 @@ private function f_tc_ho_neighbor_config_3(charstring id) runs on MSC_ConnHdlr { "handover any to arfcn 871 bsic 12", true); } +testcase TC_ho_neighbor_config_3() runs on test_CT { + var MSC_ConnHdlr vc_conn; + f_init(3, true, guard_timeout := 50.0); + f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_3)); + vc_conn.done; + + /* f_tc_ho_neighbor_config_start() */ + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + + /* 3.a */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + + /* 3.b */ + /* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the + * handover quickly by sending a Handover Failure message. */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:failed"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed"); + + f_ctrs_bsc_and_bts_verify(); +} + private function f_tc_ho_neighbor_config_4(charstring id) runs on MSC_ConnHdlr { f_tc_ho_neighbor_config_start(); @@ -5061,6 +5369,37 @@ private function f_tc_ho_neighbor_config_4(charstring id) runs on MSC_ConnHdlr { "handover any to arfcn 123 bsic 45", true, true); } +testcase TC_ho_neighbor_config_4() runs on test_CT { + var MSC_ConnHdlr vc_conn; + f_init(3, true, guard_timeout := 50.0); + f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_4)); + vc_conn.done; + + /* f_tc_ho_neighbor_config_start() */ + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + + /* 4.a */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + + /* 4.b */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + + /* 4.c */ + /* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the + * handover quickly by timing out after the Handover Required message */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:timeout"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout"); + + f_ctrs_bsc_and_bts_verify(); +} + private function f_tc_ho_neighbor_config_5(charstring id) runs on MSC_ConnHdlr { f_tc_ho_neighbor_config_start(); @@ -5079,6 +5418,29 @@ private function f_tc_ho_neighbor_config_5(charstring id) runs on MSC_ConnHdlr { "handover any to arfcn 871 bsic 12", true, true); } +testcase TC_ho_neighbor_config_5() runs on test_CT { + var MSC_ConnHdlr vc_conn; + f_init(3, true); + f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_5)); + vc_conn.done; + + /* f_tc_ho_neighbor_config_start() */ + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + + /* 5 */ + /* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the + * handover quickly by timing out after the Handover Required message */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:timeout"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout"); + + f_ctrs_bsc_and_bts_verify(); +} + private function f_tc_ho_neighbor_config_6(charstring id) runs on MSC_ConnHdlr { f_tc_ho_neighbor_config_start(); @@ -5098,6 +5460,27 @@ private function f_tc_ho_neighbor_config_6(charstring id) runs on MSC_ConnHdlr { "handover any to arfcn 871 bsic 12", false); } +testcase TC_ho_neighbor_config_6() runs on test_CT { + var MSC_ConnHdlr vc_conn; + f_init(3, true); + f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); + vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_6)); + vc_conn.done; + + /* f_tc_ho_neighbor_config_start() */ + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + + /* 6.a */ + /* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the + * handover quickly by timing out after the Handover Required message */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:error"); + + f_ctrs_bsc_and_bts_verify(); +} + private function f_tc_ho_neighbor_config_7(charstring id) runs on MSC_ConnHdlr { f_tc_ho_neighbor_config_start(); @@ -5120,55 +5503,35 @@ private function f_tc_ho_neighbor_config_7(charstring id) runs on MSC_ConnHdlr { "handover any to arfcn 123 bsic 45", true, true); } - -testcase TC_ho_neighbor_config_1() runs on test_CT { - var MSC_ConnHdlr vc_conn; - f_init(3, true, guard_timeout := 60.0); - f_sleep(1.0); - vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_1)); - vc_conn.done; -} -testcase TC_ho_neighbor_config_2() runs on test_CT { - var MSC_ConnHdlr vc_conn; - f_init(3, true, guard_timeout := 50.0); - f_sleep(1.0); - vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_2)); - vc_conn.done; -} -testcase TC_ho_neighbor_config_3() runs on test_CT { - var MSC_ConnHdlr vc_conn; - f_init(3, true, guard_timeout := 50.0); - f_sleep(1.0); - vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_3)); - vc_conn.done; -} -testcase TC_ho_neighbor_config_4() runs on test_CT { - var MSC_ConnHdlr vc_conn; - f_init(3, true, guard_timeout := 50.0); - f_sleep(1.0); - vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_4)); - vc_conn.done; -} -testcase TC_ho_neighbor_config_5() runs on test_CT { - var MSC_ConnHdlr vc_conn; - f_init(3, true); - f_sleep(1.0); - vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_5)); - vc_conn.done; -} -testcase TC_ho_neighbor_config_6() runs on test_CT { - var MSC_ConnHdlr vc_conn; - f_init(3, true); - f_sleep(1.0); - vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_6)); - vc_conn.done; -} testcase TC_ho_neighbor_config_7() runs on test_CT { var MSC_ConnHdlr vc_conn; f_init(3, true, guard_timeout := 50.0); f_sleep(1.0); + f_ctrs_bsc_and_bts_init(); vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_7)); vc_conn.done; + + /* f_tc_ho_neighbor_config_start() */ + f_ctrs_bsc_and_bts_add(0, "assignment:attempted"); + f_ctrs_bsc_and_bts_add(0, "assignment:completed"); + + /* 7.a */ + /* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the + * handover quickly by sending a Handover Failure message. */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:failed"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted"); + f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed"); + + /* 7.b */ + /* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the + * handover quickly by timing out after the Handover Required message */ + f_ctrs_bsc_and_bts_add(0, "handover:attempted"); + f_ctrs_bsc_and_bts_add(0, "handover:timeout"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted"); + f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout"); + + f_ctrs_bsc_and_bts_verify(); } /* OS#3041: Open and close N connections in a normal fashion, and expect no -- cgit v1.2.3