<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12620">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: BSC_Tests: Add tests to check channel allocator<br><br>When a channel is assigned via the assignment request throught the A<br>interface, the MSC may offer either FR, HR or both. When FR and HR are<br>permitted, a preference is set on one of the two.<br><br>At the moment we do not check how the bsc is reacting to those<br>preferences and its also not checked how the behavior is when the<br>preferred rate is not available because all lchan of that type are<br>already in use. Lets add a set of tests to verify this.<br><br>Change-Id: I109d986dd7ece1a56422a669ca64353ed46f7ed6<br>Related: OS#3503<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/expected-results.xml<br>2 files changed, 304 insertions(+), 0 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/20/12620/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 77da306..1467063 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -2053,6 +2053,289 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_shun_all_tch_f() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 1 sub-slot 0 shun");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 2 sub-slot 0 shun");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 3 sub-slot 0 shun");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 4 sub-slot 0 shun");</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_shun_all_tch_h() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 5 sub-slot 0 shun");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 5 sub-slot 1 shun");</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_allow_all_tch() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 1 sub-slot 0 allow");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 2 sub-slot 0 allow");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 3 sub-slot 0 allow");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 4 sub-slot 0 allow");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 5 sub-slot 0 allow");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 5 sub-slot 1 allow");</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%);">+/* Allow HR only */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_xr_exhausted_req_hr(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+    g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '09'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '05'O;</span><br><span style="color: hsl(120, 100%, 40%);">+     ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecHR}));</span><br><span style="color: hsl(120, 100%, 40%);">+      f_establish_fully(ass_cmd, exp_compl);</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%);">+/* Allow FR only */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_xr_exhausted_req_fr(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+    g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '08'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '01'O;</span><br><span style="color: hsl(120, 100%, 40%);">+     ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+      f_establish_fully(ass_cmd, exp_compl);</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%);">+/* Allow HR only (expect assignment failure) */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_xr_exhausted_req_hr_fail(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+   g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;</span><br><span style="color: hsl(120, 100%, 40%);">+  ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '09'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '05'O;</span><br><span style="color: hsl(120, 100%, 40%);">+     ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecHR}));</span><br><span style="color: hsl(120, 100%, 40%);">+      f_establish_fully(ass_cmd, exp_fail);</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%);">+/* Allow FR only (expect assignment failure) */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_xr_exhausted_req_fr_fail(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+    g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;</span><br><span style="color: hsl(120, 100%, 40%);">+  ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '08'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '01'O;</span><br><span style="color: hsl(120, 100%, 40%);">+     ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+      f_establish_fully(ass_cmd, exp_fail);</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%);">+/* Allow FR and HR, but prefer FR */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_fr_exhausted_req_fr_hr(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '0A'O; /* Prefer FR */</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '8105'O;</span><br><span style="color: hsl(120, 100%, 40%);">+   ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR, ts_CodecHR}));</span><br><span style="color: hsl(120, 100%, 40%);">+  exp_compl.pdu.bssmap.assignmentComplete.speechVersion.speechVersionIdentifier := '0000101'B; /* Expect HR */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_establish_fully(ass_cmd, exp_compl);</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%);">+/* Allow FR and HR, but prefer HR */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_fr_exhausted_req_hr_fr(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '0B'O; /* Prefer HR */</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '8501'O;</span><br><span style="color: hsl(120, 100%, 40%);">+   ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecHR, ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+  exp_compl.pdu.bssmap.assignmentComplete.speechVersion.speechVersionIdentifier := '0000101'B; /* Expect HR */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_establish_fully(ass_cmd, exp_compl);</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%);">+/* Allow FR and HR, but prefer FR */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_hr_exhausted_req_fr_hr(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '0A'O; /* Prefer FR */</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '8105'O;</span><br><span style="color: hsl(120, 100%, 40%);">+   ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR, ts_CodecHR}));</span><br><span style="color: hsl(120, 100%, 40%);">+  exp_compl.pdu.bssmap.assignmentComplete.speechVersion.speechVersionIdentifier := '0000001'B; /* Expect FR */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_establish_fully(ass_cmd, exp_compl);</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%);">+/* Allow FR and HR, but prefer HR */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_hr_exhausted_req_hr_fr(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '0B'O; /* Prefer HR */</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '8501'O;</span><br><span style="color: hsl(120, 100%, 40%);">+   ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecHR, ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+  exp_compl.pdu.bssmap.assignmentComplete.speechVersion.speechVersionIdentifier := '0000001'B; /* Expect FR */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_establish_fully(ass_cmd, exp_compl);</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%);">+/* Request a HR channel while all FR channels are exhausted, this is expected</span><br><span style="color: hsl(120, 100%, 40%);">+ * to work without conflicts */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_fr_exhausted_req_hr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shun_all_tch_f();</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_hr));</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</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%);">+/* Request a FR channel while all FR channels are exhausted, this is expected</span><br><span style="color: hsl(120, 100%, 40%);">+ * to fail. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_fr_exhausted_req_fr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shun_all_tch_f();</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_fr_fail));</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</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%);">+/* Request a FR (prefered) or alternatively a HR channel while all FR channels</span><br><span style="color: hsl(120, 100%, 40%);">+ * are exhausted, this is expected to be resolved by selecting a HR channel. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_fr_exhausted_req_fr_hr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shun_all_tch_f();</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_assignment_codec_fr_exhausted_req_fr_hr));</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</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%);">+/* Request a HR (prefered) or alternatively a FR channel while all FR channels</span><br><span style="color: hsl(120, 100%, 40%);">+ * are exhausted, this is expected to work without conflicts. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_fr_exhausted_req_hr_fr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shun_all_tch_f();</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_assignment_codec_fr_exhausted_req_hr_fr));</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</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%);">+/* Request a FR channel while all HR channels are exhausted, this is expected</span><br><span style="color: hsl(120, 100%, 40%);">+ * to work without conflicts */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_hr_exhausted_req_fr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shun_all_tch_h();</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_fr));</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</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%);">+/* Request a HR channel while all HR channels are exhausted, this is expected</span><br><span style="color: hsl(120, 100%, 40%);">+ * to fail. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_hr_exhausted_req_hr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shun_all_tch_h();</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_hr_fail));</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</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%);">+/* Request a HR (prefered) or alternatively a FR channel while all HR channels</span><br><span style="color: hsl(120, 100%, 40%);">+ * are exhausted, this is expected to be resolved by selecting a FR channel. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_hr_exhausted_req_hr_fr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shun_all_tch_h();</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_assignment_codec_hr_exhausted_req_hr_fr));</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</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%);">+/* Request a FR (prefered) or alternatively a HR channel while all HR channels</span><br><span style="color: hsl(120, 100%, 40%);">+ * are exhausted, this is expected to work without conflicts. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_hr_exhausted_req_fr_hr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shun_all_tch_h();</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_TC_assignment_codec_hr_exhausted_req_fr_hr));</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</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%);">+/* Allow FR and HR, but prefer HR */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_req_hr_fr(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '0B'O; /* Prefer HR */</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '8501'O;</span><br><span style="color: hsl(120, 100%, 40%);">+   ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecHR, ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+  exp_compl.pdu.bssmap.assignmentComplete.speechVersion.speechVersionIdentifier := '0000101'B; /* Expect HR */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_establish_fully(ass_cmd, exp_compl);</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%);">+/* Allow FR and HR, but prefer FR */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_codec_req_fr_hr(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+     g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.channelType.channelRateAndType := '0A'O; /* Prefer FR */</span><br><span style="color: hsl(120, 100%, 40%);">+ ass_cmd.pdu.bssmap.assignmentRequest.channelType.speechId_DataIndicator := '8105'O;</span><br><span style="color: hsl(120, 100%, 40%);">+   ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR, ts_CodecHR}));</span><br><span style="color: hsl(120, 100%, 40%);">+  exp_compl.pdu.bssmap.assignmentComplete.speechVersion.speechVersionIdentifier := '0000001'B; /* Expect FR */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_establish_fully(ass_cmd, exp_compl);</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%);">+/* Request a HR (prefered) or alternatively a FR channel, it is expected that</span><br><span style="color: hsl(120, 100%, 40%);">+ * HR, which is the prefered type, is selected. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_req_hr_fr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_TC_assignment_codec_req_hr_fr));</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(pass);</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%);">+/* Request a FR (prefered) or alternatively a HR channel, it is expected that</span><br><span style="color: hsl(120, 100%, 40%);">+ * FR, which is the prefered type, is selected. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_codec_req_fr_hr() 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(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_allow_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_TC_assignment_codec_req_fr_hr));</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* test the procedure of the MSC requesting a Classmark Update:</span><br><span>  * a) BSSMAP Classmark Request should result in RR CLASSMARK ENQUIRY,</span><br><span>  * b) L3 RR CLASSMARK CHANGE should result in BSSMAP CLASSMARK UPDATE */</span><br><span>@@ -3444,6 +3727,17 @@</span><br><span>      execute( TC_assignment_codec_amr_f() );</span><br><span>      execute( TC_assignment_codec_amr_h() );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_assignment_codec_fr_exhausted_req_hr() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_assignment_codec_fr_exhausted_req_fr() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_assignment_codec_fr_exhausted_req_fr_hr() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_assignment_codec_fr_exhausted_req_hr_fr() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_assignment_codec_hr_exhausted_req_fr() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_assignment_codec_hr_exhausted_req_hr() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_assignment_codec_hr_exhausted_req_hr_fr() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_assignment_codec_hr_exhausted_req_fr_hr() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_assignment_codec_req_hr_fr() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_assignment_codec_req_fr_hr() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        /* RLL Establish Indication on inactive DCHAN / SAPI */</span><br><span>      execute( TC_rll_est_ind_inact_lchan() );</span><br><span>     execute( TC_rll_est_ind_inval_sapi1() );</span><br><span>diff --git a/bsc/expected-results.xml b/bsc/expected-results.xml</span><br><span>index fd26922..67fdeed 100644</span><br><span>--- a/bsc/expected-results.xml</span><br><span>+++ b/bsc/expected-results.xml</span><br><span>@@ -35,6 +35,16 @@</span><br><span>   <testcase classname='BSC_Tests' name='TC_assignment_codec_efr' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_assignment_codec_amr_f' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_assignment_codec_amr_h' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_fr_exhausted_req_hr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_fr_exhausted_req_fr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_fr_exhausted_req_fr_hr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_fr_exhausted_req_hr_fr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_hr_exhausted_req_fr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_hr_exhausted_req_hr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_hr_exhausted_req_hr_fr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_hr_exhausted_req_fr_hr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_req_hr_fr' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_assignment_codec_req_fr_hr' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_rll_est_ind_inact_lchan' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_rll_est_ind_inval_sapi1' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_rll_est_ind_inval_sapi3' time='MASKED'/></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12620">change 12620</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/12620"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I109d986dd7ece1a56422a669ca64353ed46f7ed6 </div>
<div style="display:none"> Gerrit-Change-Number: 12620 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>