diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2017-02-03 02:42:47 +0100 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2017-03-16 15:32:29 +0100 |
commit | d20e7483d0872270a38d83efe1b7a14e87fe37de (patch) | |
tree | 19110266eb7f2879abb4c2f81943039a6f6549f4 /openbsc/tests | |
parent | 067991aeb2b404f120678bd618ebd15614de3446 (diff) |
Use libvlr in libmsc (large refactoring)
Original libvlr code is by Harald Welte <laforge@gnumonks.org>,
polished and tweaked by Neels Hofmeyr <nhofmeyr@sysmocom.de>.
This is a long series of development collapsed in one patch. The original
history may still be available as branch neels/vlr_orig.
TODO: This commit may be split in several smaller changes before merging to
master.
Related: OS#1592
Change-Id: I702ba504ce2de93507312c28eca8d11f09f4ee8b
Diffstat (limited to 'openbsc/tests')
-rw-r--r-- | openbsc/tests/Makefile.am | 3 | ||||
-rw-r--r-- | openbsc/tests/channel/Makefile.am | 1 | ||||
-rw-r--r-- | openbsc/tests/channel/channel_test.c | 27 | ||||
-rw-r--r-- | openbsc/tests/db/db_test.c | 7 | ||||
-rw-r--r-- | openbsc/tests/mm_auth/mm_auth_test.c | 266 | ||||
-rw-r--r-- | openbsc/tests/mm_auth/mm_auth_test.ok | 41 | ||||
-rw-r--r-- | openbsc/tests/subscr/Makefile.am | 18 | ||||
-rw-r--r-- | openbsc/tests/subscr/subscr_test.c | 117 | ||||
-rw-r--r-- | openbsc/tests/subscr/subscr_test.ok | 3 | ||||
-rw-r--r-- | openbsc/tests/testsuite.at | 14 | ||||
-rw-r--r-- | openbsc/tests/vty_test_runner.py | 150 |
11 files changed, 46 insertions, 601 deletions
diff --git a/openbsc/tests/Makefile.am b/openbsc/tests/Makefile.am index 9cbc1c172..a40ee4fa3 100644 --- a/openbsc/tests/Makefile.am +++ b/openbsc/tests/Makefile.am @@ -1,6 +1,5 @@ SUBDIRS = \ gsm0408 \ - db \ channel \ mgcp \ gprs \ @@ -10,6 +9,8 @@ SUBDIRS = \ subscr \ mm_auth \ nanobts_omlattr \ + vlr \ + subscr_conn \ $(NULL) if BUILD_NAT diff --git a/openbsc/tests/channel/Makefile.am b/openbsc/tests/channel/Makefile.am index ca470ace4..c7164b475 100644 --- a/openbsc/tests/channel/Makefile.am +++ b/openbsc/tests/channel/Makefile.am @@ -26,6 +26,7 @@ channel_test_SOURCES = \ channel_test_LDADD = \ $(top_builddir)/src/libmsc/libmsc.a \ $(top_builddir)/src/libbsc/libbsc.a \ + $(top_builddir)/src/libvlr/libvlr.a \ $(top_builddir)/src/libcommon-cs/libcommon-cs.a \ $(top_builddir)/src/libcommon/libcommon.a \ $(LIBOSMOCORE_LIBS) \ diff --git a/openbsc/tests/channel/channel_test.c b/openbsc/tests/channel/channel_test.c index 88293d0a8..2c3b44e47 100644 --- a/openbsc/tests/channel/channel_test.c +++ b/openbsc/tests/channel/channel_test.c @@ -29,6 +29,7 @@ #include <openbsc/abis_rsl.h> #include <openbsc/debug.h> #include <openbsc/gsm_subscriber.h> +#include <openbsc/vlr.h> static int s_end = 0; static struct gsm_subscriber_connection s_conn; @@ -70,23 +71,25 @@ void test_request_chan(void) network = bsc_network_init(tall_bsc_ctx, 1, 1, NULL); if (!network) exit(1); + network->vlr = talloc_zero(network, struct vlr_instance); + network->vlr->user_ctx = network; + INIT_LLIST_HEAD(&network->vlr->subscribers); + INIT_LLIST_HEAD(&network->vlr->operations); + bts = gsm_bts_alloc(network); bts->location_area_code = 23; s_conn.network = network; /* Create a dummy subscriber */ - struct gsm_subscriber *subscr = subscr_alloc(); - subscr->lac = 23; - subscr->group = network->subscr_group; - - OSMO_ASSERT(subscr->group); - OSMO_ASSERT(subscr->group->net == network); + struct vlr_subscr *vsub = vlr_subscr_alloc(network->vlr); + vsub->lac = 23; /* Ask for a channel... */ struct subscr_request *sr; - sr = subscr_request_channel(subscr, RSL_CHANNEED_TCH_F, subscr_cb, (void*)0x2342L); + sr = subscr_request_channel(vsub, RSL_CHANNEED_TCH_F, subscr_cb, (void*)0x2342L); OSMO_ASSERT(sr); OSMO_ASSERT(s_cbfn); + s_conn.network = network; s_cbfn(101, 200, (void*)0x1323L, &s_conn, s_data); OSMO_ASSERT(s_end); @@ -140,5 +143,13 @@ void gsm48_secure_channel() {} void paging_request_stop() {} void vty_out() {} -struct tlv_definition nm_att_tlvdef; +void ipa_client_conn_clear_queue() {} +void ipa_client_conn_close() {} +void ipa_client_conn_create() {} +void ipa_client_conn_destroy() {} +void ipa_client_conn_open() {} +void ipa_client_conn_send() {} +void ipa_msg_push_header() {} +void ipaccess_bts_handle_ccm() {} +struct tlv_definition nm_att_tlvdef; diff --git a/openbsc/tests/db/db_test.c b/openbsc/tests/db/db_test.c index 755a6e9eb..a54f11b26 100644 --- a/openbsc/tests/db/db_test.c +++ b/openbsc/tests/db/db_test.c @@ -254,3 +254,10 @@ int main() /* stubs */ void vty_out() {} +void vlr_subscr_disconnected() {} +void vlr_subscr_rx_tmsi_reall_compl() {} +void vlr_subscr_rx_id_resp() {} +void vlr_subscr_rx_auth_resp() {} +void vlr_loc_update() {} +void vlr_proc_acc_req() {} +void vlr_init() {} diff --git a/openbsc/tests/mm_auth/mm_auth_test.c b/openbsc/tests/mm_auth/mm_auth_test.c index b8777a8c5..f620385f9 100644 --- a/openbsc/tests/mm_auth/mm_auth_test.c +++ b/openbsc/tests/mm_auth/mm_auth_test.c @@ -10,6 +10,7 @@ #define min(A,B) ((A)>(B)? (B) : (A)) +#if 0 static char *auth_tuple_str(struct gsm_auth_tuple *atuple) { static char buf[256]; @@ -60,10 +61,7 @@ static bool auth_tuple_is(struct gsm_auth_tuple *atuple, } return same; } - -/* override, requires '-Wl,--wrap=db_get_authinfo_for_subscr' */ -int __real_db_get_authinfo_for_subscr(struct gsm_auth_info *ainfo, - struct gsm_subscriber *subscr); +#endif int test_get_authinfo_rc = 0; struct gsm_auth_info test_auth_info = {0}; @@ -73,268 +71,14 @@ struct gsm_auth_info default_auth_info = { .a3a8_ki = { 0 } }; -int __wrap_db_get_authinfo_for_subscr(struct gsm_auth_info *ainfo, - struct gsm_subscriber *subscr) -{ - *ainfo = test_auth_info; - printf("wrapped: db_get_authinfo_for_subscr(): rc = %d\n", test_get_authinfo_rc); - return test_get_authinfo_rc; -} - -/* override, requires '-Wl,--wrap=db_get_lastauthtuple_for_subscr' */ -int __real_db_get_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple, - struct gsm_subscriber *subscr); - -int test_get_lastauthtuple_rc = 0; -struct gsm_auth_tuple test_last_auth_tuple = { 0 }; -struct gsm_auth_tuple default_auth_tuple = { 0 }; - -int __wrap_db_get_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple, - struct gsm_subscriber *subscr) -{ - *atuple = test_last_auth_tuple; - printf("wrapped: db_get_lastauthtuple_for_subscr(): rc = %d\n", test_get_lastauthtuple_rc); - return test_get_lastauthtuple_rc; -} - -/* override, requires '-Wl,--wrap=db_sync_lastauthtuple_for_subscr' */ -int __real_db_sync_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple, - struct gsm_subscriber *subscr); -int test_sync_lastauthtuple_rc = 0; -int __wrap_db_sync_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple, - struct gsm_subscriber *subscr) -{ - test_last_auth_tuple = *atuple; - printf("wrapped: db_sync_lastauthtuple_for_subscr(): rc = %d\n", test_sync_lastauthtuple_rc); - return test_sync_lastauthtuple_rc; -} - -int auth_get_tuple_for_subscr_verbose(struct gsm_auth_tuple *atuple, - struct gsm_subscriber *subscr, - int key_seq) -{ - int auth_action; - auth_action = auth_get_tuple_for_subscr(atuple, subscr, key_seq); - printf("auth_get_tuple_for_subscr(key_seq=%d) --> auth_action == %s\n", - key_seq, auth_action_str(auth_action)); - return auth_action; -} - -/* override libssl RAND_bytes() to get testable crypto results */ -int RAND_bytes(uint8_t *rand, int len) -{ - memset(rand, 23, len); - return 1; -} - -static void test_error() -{ - int auth_action; - - struct gsm_auth_tuple atuple = {0}; - struct gsm_subscriber subscr = {0}; - int key_seq = 0; - - printf("\n* test_error()\n"); - - /* any error (except -ENOENT) */ - test_get_authinfo_rc = -EIO; - auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr, - key_seq); - OSMO_ASSERT(auth_action == AUTH_ERROR); -} - -static void test_auth_not_avail() -{ - int auth_action; - - struct gsm_auth_tuple atuple = {0}; - struct gsm_subscriber subscr = {0}; - int key_seq = 0; - - printf("\n* test_auth_not_avail()\n"); - - /* no entry */ - test_get_authinfo_rc = -ENOENT; - auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr, - key_seq); - OSMO_ASSERT(auth_action == AUTH_NOT_AVAIL); -} - -static void test_auth_then_ciph1() -{ - int auth_action; - - struct gsm_auth_tuple atuple = {0}; - struct gsm_subscriber subscr = {0}; - int key_seq; - - printf("\n* test_auth_then_ciph1()\n"); - - /* Ki entry, but no auth tuple negotiated yet */ - test_auth_info = default_auth_info; - test_last_auth_tuple = default_auth_tuple; - test_get_authinfo_rc = 0; - test_get_lastauthtuple_rc = -ENOENT; - key_seq = 0; - auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr, - key_seq); - OSMO_ASSERT(auth_action == AUTH_DO_AUTH_THEN_CIPH); - OSMO_ASSERT(auth_tuple_is(&atuple, - "gsm_auth_tuple {\n" - " .use_count = 1\n" - " .key_seq = 0\n" - " .rand = 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 \n" - " .sres = a1 ab c6 90 \n" - " .kc = 0f 27 ed f3 ac 97 ac 00 \n" - "}\n" - )); - - /* With a different last saved key_seq stored in the out-arg of - * db_get_lastauthtuple_for_subscr() by coincidence, expect absolutely - * the same as above. */ - test_auth_info = default_auth_info; - test_last_auth_tuple = default_auth_tuple; - test_last_auth_tuple.key_seq = 3; - test_get_authinfo_rc = 0; - test_get_lastauthtuple_rc = -ENOENT; - key_seq = 0; - auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr, - key_seq); - OSMO_ASSERT(auth_action == AUTH_DO_AUTH_THEN_CIPH); - OSMO_ASSERT(auth_tuple_is(&atuple, - "gsm_auth_tuple {\n" - " .use_count = 1\n" - " .key_seq = 0\n" - " .rand = 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 \n" - " .sres = a1 ab c6 90 \n" - " .kc = 0f 27 ed f3 ac 97 ac 00 \n" - "}\n" - )); -} - -static void test_auth_then_ciph2() -{ - int auth_action; - - struct gsm_auth_tuple atuple = {0}; - struct gsm_subscriber subscr = {0}; - int key_seq; - - printf("\n* test_auth_then_ciph2()\n"); - - /* Ki entry, auth tuple negotiated, but invalid incoming key_seq */ - test_auth_info = default_auth_info; - test_last_auth_tuple = default_auth_tuple; - test_last_auth_tuple.key_seq = 2; - test_get_authinfo_rc = 0; - test_get_lastauthtuple_rc = 0; - key_seq = GSM_KEY_SEQ_INVAL; - auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr, - key_seq); - OSMO_ASSERT(auth_action == AUTH_DO_AUTH_THEN_CIPH); - OSMO_ASSERT(auth_tuple_is(&atuple, - "gsm_auth_tuple {\n" - " .use_count = 1\n" - " .key_seq = 3\n" - " .rand = 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 \n" - " .sres = a1 ab c6 90 \n" - " .kc = 0f 27 ed f3 ac 97 ac 00 \n" - "}\n" - )); - - /* Change the last saved key_seq, expect last_auth_tuple.key_seq + 1 */ - test_auth_info = default_auth_info; - test_last_auth_tuple = default_auth_tuple; - test_last_auth_tuple.key_seq = 3; - test_get_authinfo_rc = 0; - test_get_lastauthtuple_rc = 0; - key_seq = GSM_KEY_SEQ_INVAL; - auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr, - key_seq); - OSMO_ASSERT(auth_action == AUTH_DO_AUTH_THEN_CIPH); - OSMO_ASSERT(auth_tuple_is(&atuple, - "gsm_auth_tuple {\n" - " .use_count = 1\n" - " .key_seq = 4\n" - " .rand = 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 \n" - " .sres = a1 ab c6 90 \n" - " .kc = 0f 27 ed f3 ac 97 ac 00 \n" - "}\n" - )); -} - -static void test_auth_reuse() -{ - int auth_action; - struct gsm_auth_tuple atuple = {0}; - struct gsm_subscriber subscr = {0}; - int key_seq; - - printf("\n* test_auth_reuse()\n"); - - /* Ki entry, auth tuple negotiated, valid+matching incoming key_seq */ - test_auth_info = default_auth_info; - test_last_auth_tuple = default_auth_tuple; - test_last_auth_tuple.key_seq = key_seq = 3; - test_last_auth_tuple.use_count = 1; - test_get_authinfo_rc = 0; - test_get_lastauthtuple_rc = 0; - auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr, - key_seq); - OSMO_ASSERT(auth_action == AUTH_DO_CIPH); - OSMO_ASSERT(auth_tuple_is(&atuple, - "gsm_auth_tuple {\n" - " .use_count = 2\n" - " .key_seq = 3\n" - " .rand = 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \n" - " .sres = 00 00 00 00 \n" - " .kc = 00 00 00 00 00 00 00 00 \n" - "}\n" - )); -} - -static void test_auth_reuse_key_seq_mismatch() -{ - int auth_action; - struct gsm_auth_tuple atuple = {0}; - struct gsm_subscriber subscr = {0}; - int key_seq; - - printf("\n* test_auth_reuse_key_seq_mismatch()\n"); - - /* Ki entry, auth tuple negotiated, valid+matching incoming key_seq */ - test_auth_info = default_auth_info; - test_last_auth_tuple = default_auth_tuple; - test_last_auth_tuple.key_seq = 3; - key_seq = 4; - test_last_auth_tuple.use_count = 1; - test_get_authinfo_rc = 0; - test_get_lastauthtuple_rc = 0; - auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr, - key_seq); - OSMO_ASSERT(auth_action == AUTH_DO_AUTH_THEN_CIPH); - OSMO_ASSERT(auth_tuple_is(&atuple, - "gsm_auth_tuple {\n" - " .use_count = 1\n" - " .key_seq = 4\n" - " .rand = 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 \n" - " .sres = a1 ab c6 90 \n" - " .kc = 0f 27 ed f3 ac 97 ac 00 \n" - "}\n" - )); -} int main(void) { osmo_init_logging(&log_info); log_set_log_level(osmo_stderr_target, LOGL_INFO); - test_error(); - test_auth_not_avail(); - test_auth_then_ciph1(); - test_auth_then_ciph2(); - test_auth_reuse(); - test_auth_reuse_key_seq_mismatch(); + printf("Nothing being tested!\n"); + + /* TODO auth_get_tuple_for_subscr() no longer exists ... test auth somehow?? */ return 0; } diff --git a/openbsc/tests/mm_auth/mm_auth_test.ok b/openbsc/tests/mm_auth/mm_auth_test.ok index 6c49f97b7..37b1289be 100644 --- a/openbsc/tests/mm_auth/mm_auth_test.ok +++ b/openbsc/tests/mm_auth/mm_auth_test.ok @@ -1,40 +1 @@ - -* test_error() -wrapped: db_get_authinfo_for_subscr(): rc = -5 -auth_get_tuple_for_subscr(key_seq=0) --> auth_action == AUTH_ERROR - -* test_auth_not_avail() -wrapped: db_get_authinfo_for_subscr(): rc = -2 -auth_get_tuple_for_subscr(key_seq=0) --> auth_action == AUTH_NOT_AVAIL - -* test_auth_then_ciph1() -wrapped: db_get_authinfo_for_subscr(): rc = 0 -wrapped: db_get_lastauthtuple_for_subscr(): rc = -2 -wrapped: db_sync_lastauthtuple_for_subscr(): rc = 0 -auth_get_tuple_for_subscr(key_seq=0) --> auth_action == AUTH_DO_AUTH_THEN_CIPH -wrapped: db_get_authinfo_for_subscr(): rc = 0 -wrapped: db_get_lastauthtuple_for_subscr(): rc = -2 -wrapped: db_sync_lastauthtuple_for_subscr(): rc = 0 -auth_get_tuple_for_subscr(key_seq=0) --> auth_action == AUTH_DO_AUTH_THEN_CIPH - -* test_auth_then_ciph2() -wrapped: db_get_authinfo_for_subscr(): rc = 0 -wrapped: db_get_lastauthtuple_for_subscr(): rc = 0 -wrapped: db_sync_lastauthtuple_for_subscr(): rc = 0 -auth_get_tuple_for_subscr(key_seq=7) --> auth_action == AUTH_DO_AUTH_THEN_CIPH -wrapped: db_get_authinfo_for_subscr(): rc = 0 -wrapped: db_get_lastauthtuple_for_subscr(): rc = 0 -wrapped: db_sync_lastauthtuple_for_subscr(): rc = 0 -auth_get_tuple_for_subscr(key_seq=7) --> auth_action == AUTH_DO_AUTH_THEN_CIPH - -* test_auth_reuse() -wrapped: db_get_authinfo_for_subscr(): rc = 0 -wrapped: db_get_lastauthtuple_for_subscr(): rc = 0 -wrapped: db_sync_lastauthtuple_for_subscr(): rc = 0 -auth_get_tuple_for_subscr(key_seq=3) --> auth_action == AUTH_DO_CIPH - -* test_auth_reuse_key_seq_mismatch() -wrapped: db_get_authinfo_for_subscr(): rc = 0 -wrapped: db_get_lastauthtuple_for_subscr(): rc = 0 -wrapped: db_sync_lastauthtuple_for_subscr(): rc = 0 -auth_get_tuple_for_subscr(key_seq=4) --> auth_action == AUTH_DO_AUTH_THEN_CIPH +Nothing being tested! diff --git a/openbsc/tests/subscr/Makefile.am b/openbsc/tests/subscr/Makefile.am index 6342444ff..5b770bcb2 100644 --- a/openbsc/tests/subscr/Makefile.am +++ b/openbsc/tests/subscr/Makefile.am @@ -18,32 +18,14 @@ AM_LDFLAGS = \ $(NULL) EXTRA_DIST = \ - subscr_test.ok \ bsc_subscr_test.ok \ bsc_subscr_test.err \ $(NULL) noinst_PROGRAMS = \ - subscr_test \ bsc_subscr_test \ $(NULL) -subscr_test_SOURCES = \ - subscr_test.c \ - $(NULL) - -subscr_test_LDADD = \ - $(top_builddir)/src/libbsc/libbsc.a \ - $(top_builddir)/src/libcommon-cs/libcommon-cs.a \ - $(top_builddir)/src/libtrau/libtrau.a \ - $(top_builddir)/src/libcommon/libcommon.a \ - $(LIBOSMOCORE_LIBS) \ - $(LIBOSMOABIS_LIBS) \ - $(LIBOSMOGSM_LIBS) \ - $(LIBSMPP34_LIBS) \ - $(LIBOSMOVTY_LIBS) \ - $(NULL) - bsc_subscr_test_SOURCES = \ bsc_subscr_test.c \ $(NULL) diff --git a/openbsc/tests/subscr/subscr_test.c b/openbsc/tests/subscr/subscr_test.c deleted file mode 100644 index 2a5d0e1c2..000000000 --- a/openbsc/tests/subscr/subscr_test.c +++ /dev/null @@ -1,117 +0,0 @@ -/* (C) 2008 by Jan Luebbe <jluebbe@debian.org> - * (C) 2009 by Holger Hans Peter Freyther <zecke@selfish.org> - * (C) 2014 by Alexander Chemeris <Alexander.Chemeris@fairwaves.co> - * 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 <openbsc/debug.h> -#include <openbsc/db.h> -#include <openbsc/gsm_subscriber.h> -#include <openbsc/gsm_04_11.h> - -#include <osmocom/core/application.h> - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <inttypes.h> - -static struct gsm_network dummy_net; -static struct gsm_subscriber_group dummy_sgrp; - -static void test_subscr(void) -{ - struct gsm_subscriber *subscr; - const char *imsi = "1234567890"; - - printf("Test subscriber allocation and deletion\n"); - - /* Don't keep subscr */ - - dummy_sgrp.keep_subscr = 0; - - OSMO_ASSERT(llist_empty(&active_subscribers)); - - subscr = subscr_get_or_create(&dummy_sgrp, imsi); - - OSMO_ASSERT(!llist_empty(&active_subscribers)); - OSMO_ASSERT(subscr->use_count == 1); - - subscr_put(subscr); - - OSMO_ASSERT(llist_empty(&active_subscribers)); - - /* Keep subscr */ - - dummy_sgrp.keep_subscr = 1; - - subscr = subscr_get_or_create(&dummy_sgrp, imsi); - - OSMO_ASSERT(!llist_empty(&active_subscribers)); - OSMO_ASSERT(subscr->use_count == 1); - - subscr_put(subscr); - OSMO_ASSERT(!llist_empty(&active_subscribers)); - OSMO_ASSERT(subscr->use_count == 0); - - subscr_get(subscr); - OSMO_ASSERT(subscr->use_count == 1); - - subscr_purge_inactive(&dummy_sgrp); - - OSMO_ASSERT(!llist_empty(&active_subscribers)); - OSMO_ASSERT(subscr->use_count == 1); - - subscr_put(subscr); - OSMO_ASSERT(!llist_empty(&active_subscribers)); - OSMO_ASSERT(subscr->use_count == 0); - - subscr_purge_inactive(&dummy_sgrp); - - OSMO_ASSERT(llist_empty(&active_subscribers)); - - /* Test force_no_keep */ - - dummy_sgrp.keep_subscr = 0; - - subscr = subscr_get_or_create(&dummy_sgrp, imsi); - OSMO_ASSERT(subscr); - subscr->keep_in_ram = 1; - - OSMO_ASSERT(!llist_empty(&active_subscribers)); - OSMO_ASSERT(subscr->use_count == 1); - - subscr->keep_in_ram = 0; - - subscr_put(subscr); - OSMO_ASSERT(llist_empty(&active_subscribers)); -} - -int main() -{ - printf("Testing subscriber core code.\n"); - osmo_init_logging(&log_info); - log_set_print_filename(osmo_stderr_target, 0); - - dummy_net.subscr_group = &dummy_sgrp; - dummy_sgrp.net = &dummy_net; - - test_subscr(); - - printf("Done\n"); - return 0; -} diff --git a/openbsc/tests/subscr/subscr_test.ok b/openbsc/tests/subscr/subscr_test.ok deleted file mode 100644 index 72a376944..000000000 --- a/openbsc/tests/subscr/subscr_test.ok +++ /dev/null @@ -1,3 +0,0 @@ -Testing subscriber core code. -Test subscriber allocation and deletion -Done diff --git a/openbsc/tests/testsuite.at b/openbsc/tests/testsuite.at index 280aeb2ed..cc627dc18 100644 --- a/openbsc/tests/testsuite.at +++ b/openbsc/tests/testsuite.at @@ -7,12 +7,6 @@ cat $abs_srcdir/gsm0408/gsm0408_test.ok > expout AT_CHECK([$abs_top_builddir/tests/gsm0408/gsm0408_test], [], [expout], [ignore]) AT_CLEANUP -AT_SETUP([subscr]) -AT_KEYWORDS([subscr]) -cat $abs_srcdir/subscr/subscr_test.ok > expout -AT_CHECK([$abs_top_builddir/tests/subscr/subscr_test], [], [expout], [ignore]) -AT_CLEANUP - AT_SETUP([bsc_subscr]) AT_KEYWORDS([bsc_subscr]) cat $abs_srcdir/subscr/bsc_subscr_test.ok > expout @@ -20,14 +14,6 @@ cat $abs_srcdir/subscr/bsc_subscr_test.err > experr AT_CHECK([$abs_top_builddir/tests/subscr/bsc_subscr_test], [], [expout], [experr]) AT_CLEANUP -AT_SETUP([db]) -AT_KEYWORDS([db]) -cat $abs_srcdir/db/db_test.ok > expout -cat $abs_srcdir/db/db_test.err > experr -cat $abs_srcdir/db/hlr.sqlite3 > hlr.sqlite3 -AT_CHECK([$abs_top_builddir/tests/db/db_test], [], [expout], [experr]) -AT_CLEANUP - AT_SETUP([channel]) AT_KEYWORDS([channel]) cat $abs_srcdir/channel/channel_test.ok > expout diff --git a/openbsc/tests/vty_test_runner.py b/openbsc/tests/vty_test_runner.py index 87b9eba97..d27e915c5 100644 --- a/openbsc/tests/vty_test_runner.py +++ b/openbsc/tests/vty_test_runner.py @@ -247,8 +247,10 @@ class TestVTYNITB(TestVTYGenericBSC): self.vty.command("end") self.vty.command("configure terminal") self.vty.command("nitb") - self.assertTrue(self.vty.verify("subscriber-create-on-demand", [''])) - self.assertTrue(self.vty.verify("subscriber-create-on-demand no-extension", [''])) + self.assertTrue(self.vty.verify('subscriber-create-on-demand', + ["% 'subscriber-create-on-demand' is no longer supported.", '% This is now up to osmo-hlr.'])) + self.assertTrue(self.vty.verify("subscriber-create-on-demand no-extension", + ["% 'subscriber-create-on-demand' is no longer supported.", '% This is now up to osmo-hlr.'])) self.vty.command("end") def testSi2Q(self): @@ -364,42 +366,6 @@ class TestVTYNITB(TestVTYGenericBSC): if classNum != 10: self.assertEquals(res.find("rach access-control-class " + str(classNum) + " barred"), -1) - def testSubscriberCreateDeleteTwice(self): - """ - OS#1657 indicates that there might be an issue creating the - same subscriber twice. This test will use the VTY command to - create a subscriber and then issue a second create command - with the same IMSI. The test passes if the VTY continues to - respond to VTY commands. - """ - self.vty.enable() - - imsi = "204300854013739" - - # Initially we don't have this subscriber - self.vty.verify('show subscriber imsi '+imsi, ['% No subscriber found for imsi '+imsi]) - - # Lets create one - res = self.vty.command('subscriber create imsi '+imsi) - self.assert_(res.find(" IMSI: "+imsi) > 0) - # And now create one again. - res2 = self.vty.command('subscriber create imsi '+imsi) - self.assert_(res2.find(" IMSI: "+imsi) > 0) - self.assertEqual(res, res2) - - # Verify it has been created - res = self.vty.command('show subscriber imsi '+imsi) - self.assert_(res.find(" IMSI: "+imsi) > 0) - - # Delete it - res = self.vty.command('subscriber imsi ' + imsi + ' delete') - self.assert_("" == res) - - # Now it should not be there anymore - res = self.vty.command('show subscriber imsi '+imsi) - self.assert_(('% No subscriber found for imsi ' + imsi) == res) - - def testSubscriberCreateDelete(self): self.vty.enable() @@ -409,118 +375,24 @@ class TestVTYNITB(TestVTYGenericBSC): imsi4 = "444583744053764" # Initially we don't have this subscriber - self.vty.verify('show subscriber imsi '+imsi, ['% No subscriber found for imsi '+imsi]) - - # Lets create one - res = self.vty.command('subscriber create imsi '+imsi) - self.assert_(res.find(" IMSI: "+imsi) > 0) - self.assert_(res.find("Extension") > 0) - - # Now we have it - res = self.vty.command('show subscriber imsi '+imsi) - self.assert_(res.find(" IMSI: "+imsi) > 0) + self.assertTrue(self.vty.verify('show subscriber imsi '+imsi, ['% No subscriber found for imsi '+imsi])) - # With narrow random interval - self.vty.command("configure terminal") - self.vty.command("nitb") - self.assertTrue(self.vty.verify("subscriber-create-on-demand", [''])) - # wrong interval - res = self.vty.command("subscriber-create-on-demand random 221 122") - # error string will contain arguments - self.assert_(res.find("122") > 0) - self.assert_(res.find("221") > 0) - # correct interval - silent ok - self.assertTrue(self.vty.verify("subscriber-create-on-demand random 221 222", [''])) - self.vty.command("end") - - res = self.vty.command('subscriber create imsi ' + imsi2) - self.assert_(res.find(" IMSI: " + imsi2) > 0) - self.assert_(res.find("221") > 0 or res.find("222") > 0) - self.assert_(res.find(" Extension: ") > 0) - - # Without extension - self.vty.command("configure terminal") - self.vty.command("nitb") - self.assertTrue(self.vty.verify("subscriber-create-on-demand no-extension", [''])) - self.vty.command("end") - res = self.vty.command('subscriber create imsi ' + imsi3) - self.assert_(res.find(" IMSI: " + imsi3) > 0) - self.assertEquals(res.find("Extension"), -1) - - # With extension again - self.vty.command("configure terminal") - self.vty.command("nitb") - self.assertTrue(self.vty.verify("no subscriber-create-on-demand", [''])) - self.assertTrue(self.vty.verify("subscriber-create-on-demand", [''])) - self.assertTrue(self.vty.verify("subscriber-create-on-demand random 221 666", [''])) - self.vty.command("end") - - res = self.vty.command('subscriber create imsi ' + imsi4) - self.assert_(res.find(" IMSI: " + imsi4) > 0) - self.assert_(res.find(" Extension: ") > 0) - - # Delete it - res = self.vty.command('subscriber imsi ' + imsi + ' delete') - self.assert_("" == res) - res = self.vty.command('subscriber imsi ' + imsi2 + ' delete') - self.assert_("" == res) - res = self.vty.command('subscriber imsi ' + imsi3 + ' delete') - self.assert_("" == res) - res = self.vty.command('subscriber imsi ' + imsi4 + ' delete') - self.assert_("" == res) - - # Now it should not be there anymore - res = self.vty.command('show subscriber imsi '+imsi) - self.assert_(('% No subscriber found for imsi ' + imsi) == res) + # deprecated + self.assertTrue(self.vty.verify('subscriber create imsi '+imsi, ["% 'subscriber create' now needs to be done at osmo-hlr"])) def testSubscriberSettings(self): self.vty.enable() imsi = "204300854013739" - imsi2 = "204301824913769" - wrong_imsi = "204300999999999" - - # Lets create one - res = self.vty.command('subscriber create imsi '+imsi) - self.assert_(res.find(" IMSI: "+imsi) > 0) - self.assert_(res.find("Extension") > 0) - - self.vty.verify('subscriber imsi '+wrong_imsi+' name wrong', ['% No subscriber found for imsi '+wrong_imsi]) - res = self.vty.command('subscriber imsi '+imsi+' name '+('X' * 160)) - self.assert_(res.find("NAME is too long") > 0) - self.vty.verify('subscriber imsi '+imsi+' name '+('G' * 159), ['']) - - self.vty.verify('subscriber imsi '+wrong_imsi+' extension 840', ['% No subscriber found for imsi '+wrong_imsi]) - res = self.vty.command('subscriber imsi '+imsi+' extension '+('9' * 15)) - self.assert_(res.find("EXTENSION is too long") > 0) - - self.vty.verify('subscriber imsi '+imsi+' extension '+('1' * 14), ['']) + self.assertTrue(self.vty.verify('subscriber imsi '+imsi+' name foo', ["% 'subscriber name' is no longer supported.", '% This is now up to osmo-hlr.'])) + self.assertTrue(self.vty.verify('subscriber imsi '+imsi+' extension 1234', ["% 'subscriber extension' is no longer supported.", '% This is now up to osmo-hlr.'])) + self.assertTrue(self.vty.verify('subscriber imsi '+imsi+' delete', ["% 'subscriber delete' is no longer supported.", '% This is now up to osmo-hlr.'])) # With narrow random interval self.vty.command("configure terminal") self.vty.command("nitb") - self.assertTrue(self.vty.verify("subscriber-create-on-demand", [''])) - # wrong interval - res = self.vty.command("subscriber-create-on-demand random 221 122") - self.assert_(res.find("122") > 0) - self.assert_(res.find("221") > 0) - # correct interval - self.assertTrue(self.vty.verify("subscriber-create-on-demand random 221 222", [''])) - self.vty.command("end") - - # create subscriber with extension in a configured interval - res = self.vty.command('subscriber create imsi ' + imsi2) - self.assert_(res.find(" IMSI: " + imsi2) > 0) - self.assert_(res.find("221") > 0 or res.find("222") > 0) - self.assert_(res.find(" Extension: ") > 0) - - # Delete it - res = self.vty.command('subscriber imsi ' + imsi + ' delete') - self.assert_(res != "") - # imsi2 is inactive so deletion should succeed - res = self.vty.command('subscriber imsi ' + imsi2 + ' delete') - self.assert_("" == res) + self.assertTrue(self.vty.verify('subscriber-create-on-demand', ["% 'subscriber-create-on-demand' is no longer supported.", '% This is now up to osmo-hlr.'])) def testShowPagingGroup(self): res = self.vty.command("show paging-group 255 1234567") |