bsc: New test cases for encryption without assignment

The existing encryption related test cases are all testing a case
involving the assignment procedure.

This patch adds some new testcases that test encryption without
any assignment, like e.g. in a typical LU.

Change-Id: I443cd8127e76f70fcaa7bf1638c2219524fa9381
Closes: OS#3183
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 14f3724..762b5a2 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1434,6 +1434,50 @@
 	fn.apply(id);
 }
 
+/* Establish signalling channel (non-assignment case) followed by cipher mode */
+private function f_tc_ciph_mode_a5(charstring id) runs on MSC_ConnHdlr {
+	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
+	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
+	var template PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelTypeSIGNAL);
+
+	// Disable generation of ASSIGNMENT CMD, as OsmoBSC currently performs MODE MODFIY sign->sign (OS#2936)
+	//f_establish_fully(ass_cmd, exp_compl);
+	f_establish_fully(omit, exp_compl);
+}
+testcase TC_ciph_mode_a5_0() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	pars.encr := valueof(t_EncrParams('01'O, f_rnd_octstring(8)));
+
+	f_init(1, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);
+	vc_conn.done;
+}
+testcase TC_ciph_mode_a5_1() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	pars.encr := valueof(t_EncrParams('02'O, f_rnd_octstring(8)));
+
+	f_init(1, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);
+	vc_conn.done;
+}
+testcase TC_ciph_mode_a5_3() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	pars.encr := valueof(t_EncrParams('08'O, f_rnd_octstring(8)));
+
+	f_init(1, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);
+	vc_conn.done;
+}
+
+
+/* establish initial channel, enable ciphering followed by assignment to ciphered channel */
 private function f_tc_assignment_fr_a5(charstring id) runs on MSC_ConnHdlr {
 	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
 	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
@@ -2392,6 +2436,9 @@
 	execute( TC_assignment_fr_a5_1_codec_missing() );
 	execute( TC_assignment_fr_a5_3() );
 	execute( TC_assignment_fr_a5_4() );
+	execute( TC_ciph_mode_a5_0() );
+	execute( TC_ciph_mode_a5_1() );
+	execute( TC_ciph_mode_a5_3() );
 
 	execute( TC_assignment_codec_fr() );
 	execute( TC_assignment_codec_hr() );