DL: add test case to show wrong window size

This patch adds a test case test_tbf_update_ws. Which expects a
current bug with DL window size calculation. The test's expectation
is corrected along with the bug fix in a subsequent commit

Related: OS#1808

Change-Id: I4659494c6f93ae89e4cc4ac79fff5fcaf2d23699
diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp
index a4de6c9..ca5a3c8 100644
--- a/tests/tbf/TbfTest.cpp
+++ b/tests/tbf/TbfTest.cpp
@@ -1774,6 +1774,65 @@
 	gprs_bssgp_destroy();
 }
 
+static void test_tbf_update_ws(void)
+{
+	BTS the_bts;
+	gprs_rlcmac_bts *bts;
+	uint8_t ts_no = 4;
+	uint8_t ms_class = 11;
+	gprs_rlcmac_dl_tbf *dl_tbf;
+
+	printf("=== start %s ===\n", __func__);
+
+	bts = the_bts.bts_data();
+	setup_bts(&the_bts, ts_no);
+
+	bts->ws_base = 128;
+	bts->ws_pdch = 64;
+	bts->alloc_algorithm = alloc_algorithm_b;
+	bts->trx[0].pdch[2].enable();
+	bts->trx[0].pdch[3].enable();
+	bts->trx[0].pdch[4].enable();
+	bts->trx[0].pdch[5].enable();
+
+	gprs_bssgp_create_and_connect(bts, 33001, 0, 33001,
+		1234, 1234, 1234, 1, 1, 0, 0, 0);
+
+	/* EGPRS-only */
+	bts->egprs_enabled = 1;
+
+	/* Does support EGPRS */
+	dl_tbf = tbf_alloc_dl_tbf(bts, NULL, 0, ms_class, ms_class, 1);
+
+	OSMO_ASSERT(dl_tbf != NULL);
+	fprintf(stderr, "DL TBF slots: 0x%02x, N: %d, WS: %d\n",
+		dl_tbf->dl_slots(),
+		pcu_bitcount(dl_tbf->dl_slots()),
+		dl_tbf->window()->ws());
+	OSMO_ASSERT(pcu_bitcount(dl_tbf->dl_slots()) == 1);
+	OSMO_ASSERT(dl_tbf->window()->ws() == 128 + 1 * 64);
+
+	dl_tbf->update();
+
+	/*
+	 * TODO: Should not expect window size as 192.
+	 * should be fixed in subsequent patch
+	 */
+	OSMO_ASSERT(dl_tbf != NULL);
+	fprintf(stderr, "DL TBF slots: 0x%02x, N: %d, WS: %d\n",
+		dl_tbf->dl_slots(),
+		pcu_bitcount(dl_tbf->dl_slots()),
+		dl_tbf->window()->ws());
+	OSMO_ASSERT(pcu_bitcount(dl_tbf->dl_slots()) == 4);
+	OSMO_ASSERT(dl_tbf->window()->ws() == 128 + 1 * 64);
+
+	tbf_free(dl_tbf);
+
+	printf("=== end %s ===\n", __func__);
+
+	gprs_bssgp_destroy();
+}
+
 static void test_tbf_puan_urbb_len(void)
 {
 	BTS the_bts;
@@ -2485,6 +2544,7 @@
 	test_tbf_egprs_retx_dl();
 	test_tbf_egprs_spb_dl();
 	test_tbf_puan_urbb_len();
+	test_tbf_update_ws();
 
 	if (getenv("TALLOC_REPORT_FULL"))
 		talloc_report_full(tall_pcu_ctx, stderr);