<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19904">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: verify handover rate counters<br><br>This will break the 'latest' builds for most handover tests until<br>Ib0087b6566ae4d82f8c3ef272c1256bcd1d08bf1 is released.<br><br>Depends: Ib0087b6566ae4d82f8c3ef272c1256bcd1d08bf1 (osmo-bsc)<br>Change-Id: I10bc0b67ca8dcf41dbb02332ed18017e819c2b32<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 406 insertions(+), 43 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/04/19904/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index dce9ae9..4560957 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -93,6 +93,56 @@</span><br><span>     { "mscpool:subscr:paged", 0 }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Default list of counters for 'bsc' and 'bts' entities. */</span><br><span style="color: hsl(120, 100%, 40%);">+const CounterNameVals counternames_bsc_bts_handover := {</span><br><span style="color: hsl(120, 100%, 40%);">+     { "assignment:attempted", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { "assignment:completed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { "assignment:stopped", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { "assignment:no_channel", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { "assignment:timeout", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { "assignment:failed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { "assignment:error", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { "handover:attempted", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { "handover:completed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { "handover:stopped", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "handover:no_channel", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+       { "handover:timeout", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "handover:failed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { "handover:error", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  { "intra_cell_ho:attempted", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { "intra_cell_ho:completed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { "intra_cell_ho:stopped", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { "intra_cell_ho:no_channel", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "intra_cell_ho:timeout", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { "intra_cell_ho:failed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { "intra_cell_ho:error", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     { "intra_bsc_ho:attempted", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "intra_bsc_ho:completed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "intra_bsc_ho:stopped", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { "intra_bsc_ho:no_channel", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { "intra_bsc_ho:timeout", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { "intra_bsc_ho:failed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+       { "intra_bsc_ho:error", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      { "interbsc_ho_out:attempted", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { "interbsc_ho_out:completed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { "interbsc_ho_out:stopped", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { "interbsc_ho_out:timeout", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { "interbsc_ho_out:failed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "interbsc_ho_out:error", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   { "interbsc_ho_in:attempted", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "interbsc_ho_in:completed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "interbsc_ho_in:stopped", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "interbsc_ho_in:no_channel", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { "interbsc_ho_in:timeout", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "interbsc_ho_in:failed", 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+     { "interbsc_ho_in:error", 0 }</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Set of all System Information received during one RSL port's startup.</span><br><span>  * Note that some System Information may be sent on RSL, but lacking actual SI data, to indicate that the BTS should not</span><br><span>  * broadcast that SI type. That will be reflected as 'omit' here.</span><br><span>@@ -498,6 +548,8 @@</span><br><span>         timer T_guard := 30.0;</span><br><span> </span><br><span>   var CounterNameValsList g_ctr_msc;</span><br><span style="color: hsl(120, 100%, 40%);">+    var CounterNameValsList g_ctr_bsc;</span><br><span style="color: hsl(120, 100%, 40%);">+    var CounterNameValsList g_ctr_bts;</span><br><span> </span><br><span>       /* System Information bytes as received during RSL startup, for each RSL[idx]. */</span><br><span>    var SystemInformationConfig_list g_system_information := {};</span><br><span>@@ -611,6 +663,78 @@</span><br><span>  f_ctrs_msc_verify();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Convenience functions for rate counters using g_ctr_bts, always also including g_ctr_bsc. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ctrs_bsc_and_bts_init(integer bts_count := NUM_BTS, CounterNameVals counternames := counternames_bsc_bts_handover) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     g_ctr_bts := f_counter_name_vals_get_n(IPA_CTRL, "bts", bts_count, counternames);</span><br><span style="color: hsl(120, 100%, 40%);">+   log("initial bts rate counters: ", g_ctr_bts);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_init(counternames);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ctrs_bsc_and_bts_add(integer bts_nr, charstring countername, integer val := 1) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_counter_name_vals_list_add(g_ctr_bts, bts_nr, countername, val);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_add(countername, val);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*  f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_thing(on_bts := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_thing(on_bts := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_other(on_bts := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_and_bts_add(0, "thing", 2);</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_and_bts_add(1, "other");</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ctrs_bsc_and_bts_verify() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_counter_name_vals_expect_n(IPA_CTRL, "bts", g_ctr_bts);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ctrs_bsc_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* convenience: f_ctrs_bsc_and_bts_add() and f_ctrs_bsc_and_bts_verify() in one call.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_thing(on_bts := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_thing(on_bts := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_thing(on_bts := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_and_bts_expect(0, "thing", 3);</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ctrs_bsc_and_bts_expect(integer bts_nr, charstring countername, integer val := 1) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(bts_nr, countername, val);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Convenience functions for rate counters using g_ctr_bsc. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ctrs_bsc_init(CounterNameVals counternames := counternames_bsc_bts_handover) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      g_ctr_bsc := f_counter_name_vals_get_n(IPA_CTRL, "bsc", 1, counternames);</span><br><span style="color: hsl(120, 100%, 40%);">+   log("initial bsc rate counters: ", g_ctr_bsc);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ctrs_bsc_add(charstring countername, integer val := 1) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    f_counter_name_vals_list_add(g_ctr_bsc, 0, countername, val);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*  f_ctrs_bsc_init();</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_thing();</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_thing();</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_other();</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_add("thing", 2);</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_add("other");</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ctrs_bsc_verify() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_counter_name_vals_expect_n(IPA_CTRL, "bsc", g_ctr_bsc);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* convenience: f_ctrs_bsc_add() and f_ctrs_bsc_verify() in one call.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_init();</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_do_thing();</span><br><span style="color: hsl(120, 100%, 40%);">+ *  f_ctrs_bsc_expect("thing", 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ctrs_bsc_expect(charstring countername, integer val := 1) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_add(countername, val);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> private function f_shutdown_helper() runs on test_CT {</span><br><span>      all component.stop;</span><br><span>@@ -4112,8 +4236,21 @@</span><br><span>         var MSC_ConnHdlr vc_conn;</span><br><span>    f_init(2, true);</span><br><span>     f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_int));</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* from f_establish_fully() */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+  /* from handover */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span>@@ -4211,8 +4348,18 @@</span><br><span>       f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_out_of_this_bsc));</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> /* BSC asks for inter-BSC HO, but the MSC decides that it won't happen and</span><br><span>@@ -4258,8 +4405,18 @@</span><br><span>     f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_out_fail_no_msc_response));</span><br><span>        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> /* BSC asks for inter-BSC HO, receives BSSMAP Handover Command, but MS reports</span><br><span>@@ -4342,8 +4499,18 @@</span><br><span>     f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_out_fail_rr_ho_failure));</span><br><span>  vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> /* BSC asks for inter-BSC-out HO, receives BSSMAP Handover Command, but then no reply is received about HO outcome</span><br><span>@@ -4429,8 +4596,18 @@</span><br><span>         f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_out_fail_no_result_after_ho_cmd));</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -4503,11 +4680,19 @@</span><br><span>      f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span>      pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_into_this_bsc), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -4576,11 +4761,19 @@</span><br><span>         f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span>      pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears), pars);</span><br><span>        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:stopped");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:stopped");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_in_fail_msc_clears_after_ho_detect(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -4656,11 +4849,19 @@</span><br><span>         f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span>      pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears_after_ho_detect), pars);</span><br><span>        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:stopped");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:stopped");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> /* The new BSS's lchan times out before the MSC decides that handover failed. */</span><br><span>@@ -4737,11 +4938,19 @@</span><br><span>      f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span>      pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect), pars);</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:error");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> /* Same as f_tc_ho_in_fail_no_detect, but MSC fails to send a Clear Command */</span><br><span>@@ -4808,11 +5017,19 @@</span><br><span>    f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span>      pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>         vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect2), pars);</span><br><span>        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:error");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> type record of charstring Commands;</span><br><span>@@ -4994,6 +5211,43 @@</span><br><span>                        "handover any to arfcn 871 bsic 11",</span><br><span>                       true);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_neighbor_config_1() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3, true, guard_timeout := 60.0);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_1));</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* f_tc_ho_neighbor_config_start() */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* 1.a */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the</span><br><span style="color: hsl(120, 100%, 40%);">+      * handover quickly by sending a Handover Failure message. */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* 1.b */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 1.c */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 1.d */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_ho_neighbor_config_2(charstring id) runs on MSC_ConnHdlr {</span><br><span>        f_tc_ho_neighbor_config_start();</span><br><span> </span><br><span>@@ -5016,6 +5270,33 @@</span><br><span>                        "handover any to arfcn 871 bsic 12",</span><br><span>                       false);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_neighbor_config_2() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3, true, guard_timeout := 50.0);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_2));</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* f_tc_ho_neighbor_config_start() */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* 2.a */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the</span><br><span style="color: hsl(120, 100%, 40%);">+      * handover quickly by sending a Handover Failure message. */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* 2.b */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_ho_neighbor_config_3(charstring id) runs on MSC_ConnHdlr {</span><br><span>        f_tc_ho_neighbor_config_start();</span><br><span> </span><br><span>@@ -5037,6 +5318,33 @@</span><br><span>                        "handover any to arfcn 871 bsic 12",</span><br><span>                       true);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_neighbor_config_3() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3, true, guard_timeout := 50.0);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_3));</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* f_tc_ho_neighbor_config_start() */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* 3.a */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 3.b */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the</span><br><span style="color: hsl(120, 100%, 40%);">+      * handover quickly by sending a Handover Failure message. */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_ho_neighbor_config_4(charstring id) runs on MSC_ConnHdlr {</span><br><span>        f_tc_ho_neighbor_config_start();</span><br><span> </span><br><span>@@ -5061,6 +5369,37 @@</span><br><span>                        "handover any to arfcn 123 bsic 45",</span><br><span>                       true, true);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_neighbor_config_4() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3, true, guard_timeout := 50.0);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_4));</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* f_tc_ho_neighbor_config_start() */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* 4.a */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 4.b */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 4.c */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the</span><br><span style="color: hsl(120, 100%, 40%);">+     * handover quickly by timing out after the Handover Required message */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_ho_neighbor_config_5(charstring id) runs on MSC_ConnHdlr {</span><br><span>        f_tc_ho_neighbor_config_start();</span><br><span> </span><br><span>@@ -5079,6 +5418,29 @@</span><br><span>                        "handover any to arfcn 871 bsic 12",</span><br><span>                       true, true);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_neighbor_config_5() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_5));</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* f_tc_ho_neighbor_config_start() */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* 5 */</span><br><span style="color: hsl(120, 100%, 40%);">+       /* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the</span><br><span style="color: hsl(120, 100%, 40%);">+     * handover quickly by timing out after the Handover Required message */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_ho_neighbor_config_6(charstring id) runs on MSC_ConnHdlr {</span><br><span>        f_tc_ho_neighbor_config_start();</span><br><span> </span><br><span>@@ -5098,6 +5460,27 @@</span><br><span>                        "handover any to arfcn 871 bsic 12",</span><br><span>                       false);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_neighbor_config_6() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_6));</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* f_tc_ho_neighbor_config_start() */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* 6.a */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the</span><br><span style="color: hsl(120, 100%, 40%);">+     * handover quickly by timing out after the Handover Required message */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_ho_neighbor_config_7(charstring id) runs on MSC_ConnHdlr {</span><br><span>        f_tc_ho_neighbor_config_start();</span><br><span> </span><br><span>@@ -5120,55 +5503,35 @@</span><br><span>                       "handover any to arfcn 123 bsic 45",</span><br><span>                       true, true);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_ho_neighbor_config_1() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-   var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(0, 100%, 40%);">-       f_init(3, true, guard_timeout := 60.0);</span><br><span style="color: hsl(0, 100%, 40%);">- f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_1));</span><br><span style="color: hsl(0, 100%, 40%);">-  vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_ho_neighbor_config_2() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-      var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(0, 100%, 40%);">-       f_init(3, true, guard_timeout := 50.0);</span><br><span style="color: hsl(0, 100%, 40%);">- f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_2));</span><br><span style="color: hsl(0, 100%, 40%);">-  vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_ho_neighbor_config_3() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-      var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(0, 100%, 40%);">-       f_init(3, true, guard_timeout := 50.0);</span><br><span style="color: hsl(0, 100%, 40%);">- f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_3));</span><br><span style="color: hsl(0, 100%, 40%);">-  vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_ho_neighbor_config_4() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-      var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(0, 100%, 40%);">-       f_init(3, true, guard_timeout := 50.0);</span><br><span style="color: hsl(0, 100%, 40%);">- f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_4));</span><br><span style="color: hsl(0, 100%, 40%);">-  vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_ho_neighbor_config_5() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-      var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(0, 100%, 40%);">-       f_init(3, true);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_5));</span><br><span style="color: hsl(0, 100%, 40%);">-  vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_ho_neighbor_config_6() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-      var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(0, 100%, 40%);">-       f_init(3, true);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_6));</span><br><span style="color: hsl(0, 100%, 40%);">-  vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span> testcase TC_ho_neighbor_config_7() runs on test_CT {</span><br><span>       var MSC_ConnHdlr vc_conn;</span><br><span>    f_init(3, true, guard_timeout := 50.0);</span><br><span>      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_init();</span><br><span>   vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_7));</span><br><span>       vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* f_tc_ho_neighbor_config_start() */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* 7.a */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* "failed" means a handover was triggered and started (which is all this test aims for) and the test ended the</span><br><span style="color: hsl(120, 100%, 40%);">+      * handover quickly by sending a Handover Failure message. */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* 7.b */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* "timeout" means a handover was triggered and started (which is all this test aims for) and the test ended the</span><br><span style="color: hsl(120, 100%, 40%);">+     * handover quickly by timing out after the Handover Required message */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ctrs_bsc_and_bts_verify();</span><br><span> }</span><br><span> </span><br><span> /* OS#3041: Open and close N connections in a normal fashion, and expect no</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19904">change 19904</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19904"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I10bc0b67ca8dcf41dbb02332ed18017e819c2b32 </div>
<div style="display:none"> Gerrit-Change-Number: 19904 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>