aboutsummaryrefslogtreecommitdiffstats
path: root/tests/sysmobts/sysmobts_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sysmobts/sysmobts_test.c')
-rw-r--r--tests/sysmobts/sysmobts_test.c122
1 files changed, 122 insertions, 0 deletions
diff --git a/tests/sysmobts/sysmobts_test.c b/tests/sysmobts/sysmobts_test.c
new file mode 100644
index 00000000..938bd8ca
--- /dev/null
+++ b/tests/sysmobts/sysmobts_test.c
@@ -0,0 +1,122 @@
+/*
+ * (C) 2013 by Holger Hans Peter Freyther
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <osmo-bts/bts.h>
+
+#include "femtobts.h"
+#include "utils.h"
+
+#include <stdio.h>
+
+static int direct_map[][3] = {
+ { GSM_BAND_850, GsmL1_FreqBand_850, 128 },
+ { GSM_BAND_900, GsmL1_FreqBand_900, 1 },
+ { GSM_BAND_1800, GsmL1_FreqBand_1800, 600 },
+ { GSM_BAND_1900, GsmL1_FreqBand_1900, 600 },
+};
+
+static int dcs_to_dcs[][3] = {
+ { GSM_BAND_900, GsmL1_FreqBand_1800, 600 },
+ { GSM_BAND_1800, GsmL1_FreqBand_900, 1 },
+ { GSM_BAND_900, -1, 438 },
+};
+
+static int pcs_to_pcs[][3] = {
+ { GSM_BAND_850, GsmL1_FreqBand_1900, 512 },
+ { GSM_BAND_1900, GsmL1_FreqBand_850, 128 },
+ { GSM_BAND_900, -1, 438 },
+};
+
+static void test_sysmobts_auto_band(void)
+{
+ struct gsm_bts bts;
+ struct gsm_bts_role_bts btsb;
+ int i;
+
+ memset(&bts, 0, sizeof(bts));
+ memset(&btsb, 0, sizeof(btsb));
+ bts.role = &btsb;
+
+ /* start with the current option */
+ printf("Testing the no auto-band mapping.\n");
+ for (i = 0; i < ARRAY_SIZE(direct_map); ++i) {
+ uint16_t arfcn;
+ int res;
+
+ btsb.auto_band = 0;
+ bts.band = direct_map[i][0];
+ arfcn = direct_map[i][2];
+ res = sysmobts_select_femto_band(&bts, arfcn);
+ printf("No auto-band band(%d) arfcn(%u) want(%d) got(%d)\n",
+ bts.band, arfcn, direct_map[i][1], res);
+ OSMO_ASSERT(res == direct_map[i][1]);
+ }
+
+ /* Check if auto-band does not break things */
+ printf("Checking the mapping with auto-band.\n");
+ for (i = 0; i < ARRAY_SIZE(direct_map); ++i) {
+ uint16_t arfcn;
+ int res;
+
+ btsb.auto_band = 1;
+ bts.band = direct_map[i][0];
+ arfcn = direct_map[i][2];
+ res = sysmobts_select_femto_band(&bts, arfcn);
+ printf("Auto-band band(%d) arfcn(%u) want(%d) got(%d)\n",
+ bts.band, arfcn, direct_map[i][1], res);
+ OSMO_ASSERT(res == direct_map[i][1]);
+ }
+
+ /* Check DCS to DCS change */
+ printf("Checking DCS to DCS\n");
+ for (i = 0; i < ARRAY_SIZE(dcs_to_dcs); ++i) {
+ uint16_t arfcn;
+ int res;
+
+ btsb.auto_band = 1;
+ bts.band = dcs_to_dcs[i][0];
+ arfcn = dcs_to_dcs[i][2];
+ res = sysmobts_select_femto_band(&bts, arfcn);
+ printf("DCS to DCS band(%d) arfcn(%u) want(%d) got(%d)\n",
+ bts.band, arfcn, dcs_to_dcs[i][1], res);
+ OSMO_ASSERT(res == dcs_to_dcs[i][1]);
+ }
+
+ /* Check for a PCS to PCS change */
+ printf("Checking PCS to PCS\n");
+ for (i = 0; i < ARRAY_SIZE(pcs_to_pcs); ++i) {
+ uint16_t arfcn;
+ int res;
+
+ btsb.auto_band = 1;
+ bts.band = pcs_to_pcs[i][0];
+ arfcn = pcs_to_pcs[i][2];
+ res = sysmobts_select_femto_band(&bts, arfcn);
+ printf("PCS to PCS band(%d) arfcn(%u) want(%d) got(%d)\n",
+ bts.band, arfcn, pcs_to_pcs[i][1], res);
+ OSMO_ASSERT(res == pcs_to_pcs[i][1]);
+ }
+}
+
+int main(int argc, char **argv)
+{
+ printf("Testing sysmobts routines\n");
+ test_sysmobts_auto_band();
+ return 0;
+}