BSC_Tests_CBSP: add a new testcase TC_cbsp_write_rep_period_num

Change-Id: I169c482ea5de040df63db4c605ac9cae19f8d28f
Related: SYS#5905
diff --git a/bsc/BSC_Tests_CBSP.ttcn b/bsc/BSC_Tests_CBSP.ttcn
index 25f00d8..0d8fb38 100644
--- a/bsc/BSC_Tests_CBSP.ttcn
+++ b/bsc/BSC_Tests_CBSP.ttcn
@@ -696,6 +696,61 @@
 	setverdict(pass);
 }
 
+/* Verify handling of the Repetition Period and the Number of Broadcasts */
+testcase TC_cbsp_write_rep_period_num() runs on cbsp_test_CT {
+	var CBSP_IE page := f_gen_page();
+	const integer rep_period := 2; /* units of 1.883s */
+	const integer rep_number := 5;
+	var integer msg_count := 0;
+	var float last_time := 0.0;
+	timer T;
+
+	g_pars := valueof(ts_CBSP_Pars_default(false, 9001, 9501));
+	f_init(guard_timeout := 60.0);
+
+	f_cbsp_write(g_cbsp_msg_id, g_cbsp_ser_no,
+		     cell_list := ts_BSSMAP_CIL_LAC_CI({bssmap_lac_ci(mp_cgi_bts0)}),
+		     rep_period := rep_period, num_bcast_req := rep_number,
+		     content := { page }, success_list := ?, fail_list := omit);
+
+	/* Count SMSCB messages during N=rep_number+2 repetition periods */
+	T.start(int2float(rep_period * (rep_number + 2)) * 1.883);
+	alt {
+	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(f_page2rsl(page, g_cbsp_msg_id, g_cbsp_ser_no))) {
+		var float exp_period := int2float(rep_period) * 1.883;
+		var float calc_period := T.read - last_time;
+
+		log("Rx SMSCB message: count := ", msg_count + 1, ", ",
+		    "elapsed := ", T.read, "s, diff := ", calc_period, "s");
+
+		if (msg_count > 0) {
+			/* Check the actual repetition period (+/- 0.5s) */
+			var template float tr_exp_period := (exp_period - 0.5 .. exp_period + 0.5);
+			if (not match(calc_period, tr_exp_period)) {
+				setverdict(fail, "Repetition period mismatch: ",
+					   "calculated := ", calc_period, "s vs ",
+					   "expected := ", tr_exp_period, "s");
+			}
+		}
+
+		msg_count := msg_count + 1;
+		last_time := T.read;
+		repeat;
+		}
+	[] T.timeout {
+		log("Received ", msg_count, " messages during ", last_time, "s");
+		}
+	}
+
+	if (msg_count != rep_number) {
+		setverdict(fail, "Received ", msg_count, " messages, ",
+			   "while we expected ", rep_number);
+	}
+
+	f_sleep(1.0);
+	setverdict(pass);
+}
+
 /* Replace a message that doesn't exist: failure */
 testcase TC_cbsp_replace_nonexist() runs on cbsp_test_CT {
 	var CBSP_IEs pages := {f_gen_page()};
@@ -945,6 +1000,7 @@
 	execute( TC_cbsp_write_lac() );
 
 	execute( TC_cbsp_write_then_replace() );
+	execute( TC_cbsp_write_rep_period_num() );
 	execute( TC_cbsp_replace_nonexist() );
 	execute( TC_cbsp_write_too_many() );
 	execute( TC_cbsp_kill_nonexist() );