diff options
Diffstat (limited to 'tests/sysmobts/sysmobts_test.c')
-rw-r--r-- | tests/sysmobts/sysmobts_test.c | 122 |
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; +} |