<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/12620">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Vadim Yanitskiy: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">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>Depends: osmo-bsc I397e68e26d6a1727890353fa34f4897b54795866<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;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 77da306..a6f9f7d 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_disable_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 disable");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 2 sub-slot 0 disable");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 3 sub-slot 0 disable");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 4 sub-slot 0 disable");</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_disable_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 disable");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 5 sub-slot 1 disable");</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_enable_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 enable");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 2 sub-slot 0 enable");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 3 sub-slot 0 enable");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 4 sub-slot 0 enable");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 5 sub-slot 0 enable");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot 5 sub-slot 1 enable");</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_enable_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_disable_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_enable_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_enable_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_disable_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_enable_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_enable_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_disable_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_enable_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_enable_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_disable_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_enable_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_enable_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_disable_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_enable_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_enable_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_disable_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_enable_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_enable_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_disable_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_enable_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_enable_all_tch();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_disable_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_enable_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_enable_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_enable_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 ccd2928..dadb349 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: merged </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: 5 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>