diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2014-09-04 11:08:50 +0200 |
---|---|---|
committer | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2014-09-09 10:10:12 +0200 |
commit | 7fb26c2943b46c9082d7615dc98095bf6bbe5905 (patch) | |
tree | d731664bc2fc11f16e04d05173350f75c688d879 /openbsc/tests/gbproxy/gbproxy_test.c | |
parent | 31591142e97268b3add6b99ad5eb9b203a0a37f7 (diff) |
gbproxy/test: Add assertions, improve test coverage
This patch add explicit tests for
- gbproxy_peer_by_bvci
- gbproxy_peer_by_nsei
- gbproxy_cleanup_peers
- gbproxy_peer_by_rai
- gbproxy_peer_by_lai
- gbproxy_peer_by_lac
and for messages with an unknown TLLI sent by the SGSN.
Sponsored-by: On-Waves ehf
Diffstat (limited to 'openbsc/tests/gbproxy/gbproxy_test.c')
-rw-r--r-- | openbsc/tests/gbproxy/gbproxy_test.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/openbsc/tests/gbproxy/gbproxy_test.c b/openbsc/tests/gbproxy/gbproxy_test.c index 6fd54857f..4e40f3301 100644 --- a/openbsc/tests/gbproxy/gbproxy_test.c +++ b/openbsc/tests/gbproxy/gbproxy_test.c @@ -166,6 +166,13 @@ static int dump_peers(FILE *stream, int indent, time_t now, return 0; } +const uint8_t *convert_ra(struct gprs_ra_id *raid) +{ + static uint8_t buf[6]; + gsm48_construct_ra(buf, raid); + return buf; +} + /* DTAP - Attach Request */ static const unsigned char dtap_attach_req[] = { 0x08, 0x01, 0x02, 0xf5, 0xe0, 0x21, 0x08, 0x02, @@ -1149,6 +1156,24 @@ static void test_gbproxy() send_ns_unitdata(nsi, NULL, &sgsn_peer, 0x10ff, (uint8_t *)"", 0); + /* Find peer */ + OSMO_ASSERT(gbproxy_peer_by_bvci(&gbcfg, 0xeeee) == NULL); + OSMO_ASSERT(gbproxy_peer_by_bvci(&gbcfg, 0x1000) == NULL); + OSMO_ASSERT(gbproxy_peer_by_bvci(&gbcfg, 0x1012) != NULL); + OSMO_ASSERT(gbproxy_peer_by_nsei(&gbcfg, 0xeeee) == NULL); + OSMO_ASSERT(gbproxy_peer_by_nsei(&gbcfg, 0x1012) == NULL); + OSMO_ASSERT(gbproxy_peer_by_nsei(&gbcfg, 0x1000) != NULL); + + + /* Cleanup */ + OSMO_ASSERT(gbproxy_cleanup_peers(&gbcfg, 0, 0) == 0); + OSMO_ASSERT(gbproxy_cleanup_peers(&gbcfg, 0x1000, 0xeeee) == 0); + OSMO_ASSERT(gbproxy_cleanup_peers(&gbcfg, 0, 0x1002) == 0); + OSMO_ASSERT(gbproxy_cleanup_peers(&gbcfg, 0x1000, 0x1012) == 1); + OSMO_ASSERT(gbproxy_cleanup_peers(&gbcfg, 0x1000, 0x1012) == 0); + + dump_peers(stdout, 0, 0, &gbcfg); + dump_global(stdout, 0); gbprox_reset(&gbcfg); @@ -1376,6 +1401,18 @@ static void test_gbproxy_ra_patching() GPRS_SAPI_GMM, 1, dtap_attach_acc, sizeof(dtap_attach_acc)); + OSMO_ASSERT(gbproxy_peer_by_rai(&gbcfg, convert_ra(&rai_bss)) != NULL); + OSMO_ASSERT(gbproxy_peer_by_rai(&gbcfg, convert_ra(&rai_sgsn)) == NULL); + OSMO_ASSERT(gbproxy_peer_by_rai(&gbcfg, convert_ra(&rai_unknown)) == NULL); + + OSMO_ASSERT(gbproxy_peer_by_lai(&gbcfg, convert_ra(&rai_bss)) != NULL); + OSMO_ASSERT(gbproxy_peer_by_lai(&gbcfg, convert_ra(&rai_sgsn)) == NULL); + OSMO_ASSERT(gbproxy_peer_by_lai(&gbcfg, convert_ra(&rai_unknown)) == NULL); + + OSMO_ASSERT(gbproxy_peer_by_lac(&gbcfg, convert_ra(&rai_bss)) != NULL); + OSMO_ASSERT(gbproxy_peer_by_lac(&gbcfg, convert_ra(&rai_sgsn)) != NULL); + OSMO_ASSERT(gbproxy_peer_by_lac(&gbcfg, convert_ra(&rai_unknown)) == NULL); + tlli_info = gbproxy_find_tlli_by_sgsn_tlli(peer, local_tlli); OSMO_ASSERT(tlli_info); OSMO_ASSERT(tlli_info->tlli.assigned == local_tlli); @@ -1532,6 +1569,7 @@ static void test_gbproxy_ptmsi_patching() const uint32_t local_sgsn_tlli2 = 0xe0987654; const uint32_t local_sgsn_tlli3 = 0xe0543210; const uint32_t random_sgsn_tlli = 0x7c69fb81; + const uint32_t unknown_sgsn_tlli = 0xeebadbad; const uint32_t bss_ptmsi = 0xc00f7304; const uint32_t bss_ptmsi2 = 0xe656aa1f; @@ -1541,6 +1579,7 @@ static void test_gbproxy_ptmsi_patching() const uint32_t local_bss_tlli3 = 0xead4775a; const uint32_t foreign_bss_tlli = 0x8000dead; + const uint8_t imsi[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18}; struct gbproxy_tlli_info *tlli_info; struct gbproxy_peer *peer; @@ -1801,6 +1840,18 @@ static void test_gbproxy_ptmsi_patching() dump_global(stdout, 0); + /* Bad case: Invalid TLLI from SGSN (IMSI unknown) */ + send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002, + unknown_sgsn_tlli, 1, NULL, 0, + GPRS_SAPI_GMM, 2, + dtap_gmm_information, sizeof(dtap_gmm_information)); + + /* Bad case: Invalid TLLI from SGSN (IMSI known) */ + send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002, + unknown_sgsn_tlli, 1, imsi, sizeof(imsi), + GPRS_SAPI_GMM, 3, + dtap_gmm_information, sizeof(dtap_gmm_information)); + /* Detach */ send_llc_ul_ui(nsi, "DETACH REQ", &bss_peer[0], 0x1002, local_bss_tlli3, &rai_bss, cell_id, |