aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/tests
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-01-10 00:49:56 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-02-25 01:25:22 +0000
commit0e5d807297f4fd1222fafece864519c70f7965a3 (patch)
treee0842d19808a545e07ff8ce411f2a23739f0cf43 /openbsc/tests
parenta369e24cb9a583ef9906a8ef9125f6ca8c6f80bf (diff)
add struct gprs_subscr, separating gprs from gsm_subscriber
Prepare for replacing gsm_subscriber with vlr_subscriber. vlr_subscriber will not make sense to be used in gprs, so have a dedicated GPRS subscriber struct. (Could change if the gprs code were to use libvlr; is currently independent). Related: OS#1592 Change-Id: Ia8b391ee009c8545763cba04505be3947835120e
Diffstat (limited to 'openbsc/tests')
-rw-r--r--openbsc/tests/sgsn/sgsn_test.c93
-rw-r--r--openbsc/tests/sgsn/sgsn_test.ok8
2 files changed, 61 insertions, 40 deletions
diff --git a/openbsc/tests/sgsn/sgsn_test.c b/openbsc/tests/sgsn/sgsn_test.c
index ff07978c0..6eabddefd 100644
--- a/openbsc/tests/sgsn/sgsn_test.c
+++ b/openbsc/tests/sgsn/sgsn_test.c
@@ -23,7 +23,7 @@
#include <openbsc/sgsn.h>
#include <openbsc/gprs_gmm.h>
#include <openbsc/debug.h>
-#include <openbsc/gsm_subscriber.h>
+#include <openbsc/gprs_subscriber.h>
#include <osmocom/gsm/gsup.h>
#include <openbsc/gsup_client.h>
#include <openbsc/gprs_utils.h>
@@ -248,7 +248,7 @@ static void test_llme(void)
cleanup_test();
}
-struct gsm_subscriber *last_updated_subscr = NULL;
+struct gprs_subscr *last_updated_subscr = NULL;
void my_dummy_sgsn_update_subscriber_data(struct sgsn_mm_ctx *mmctx)
{
OSMO_ASSERT(mmctx);
@@ -257,23 +257,23 @@ void my_dummy_sgsn_update_subscriber_data(struct sgsn_mm_ctx *mmctx)
last_updated_subscr = mmctx->subscr;
}
-static void assert_subscr(const struct gsm_subscriber *subscr, const char *imsi)
+static void assert_subscr(const struct gprs_subscr *subscr, const char *imsi)
{
- struct gsm_subscriber *sfound;
+ struct gprs_subscr *sfound;
OSMO_ASSERT(subscr);
OSMO_ASSERT(strcmp(subscr->imsi, imsi) == 0);
sfound = gprs_subscr_get_by_imsi(imsi);
OSMO_ASSERT(sfound == subscr);
- subscr_put(sfound);
+ gprs_subscr_put(sfound);
}
static void show_subscrs(FILE *out)
{
- struct gsm_subscriber *subscr;
+ struct gprs_subscr *subscr;
- llist_for_each_entry(subscr, &active_subscribers, entry) {
+ llist_for_each_entry(subscr, gprs_subscribers, entry) {
fprintf(out, " Subscriber: %s, "
"use count: %d\n",
subscr->imsi, subscr->use_count);
@@ -284,12 +284,18 @@ static void assert_no_subscrs()
{
show_subscrs(stdout);
fflush(stdout);
- OSMO_ASSERT(llist_empty(&active_subscribers));
+ OSMO_ASSERT(llist_empty(gprs_subscribers));
}
+#define VERBOSE_ASSERT(val, expect_op, fmt) \
+ do { \
+ printf(#val " == " fmt "\n", (val)); \
+ OSMO_ASSERT((val) expect_op); \
+ } while (0);
+
static void test_subscriber(void)
{
- struct gsm_subscriber *s1, *s2, *s3, *sfound;
+ struct gprs_subscr *s1, *s2, *s3;
const char *imsi1 = "1234567890";
const char *imsi2 = "9876543210";
const char *imsi3 = "5656565656";
@@ -302,19 +308,24 @@ static void test_subscriber(void)
OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi1) == NULL);
OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi2) == NULL);
OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi3) == NULL);
+ VERBOSE_ASSERT(llist_count(gprs_subscribers), == 0, "%d");
/* Allocate entry 1 */
s1 = gprs_subscr_get_or_create(imsi1);
- s1->flags |= GSM_SUBSCRIBER_FIRST_CONTACT;
+ VERBOSE_ASSERT(llist_count(gprs_subscribers), == 1, "%d");
+ s1->flags |= GPRS_SUBSCRIBER_FIRST_CONTACT;
assert_subscr(s1, imsi1);
+ VERBOSE_ASSERT(llist_count(gprs_subscribers), == 1, "%d");
OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi2) == NULL);
/* Allocate entry 2 */
s2 = gprs_subscr_get_or_create(imsi2);
- s2->flags |= GSM_SUBSCRIBER_FIRST_CONTACT;
+ VERBOSE_ASSERT(llist_count(gprs_subscribers), == 2, "%d");
+ s2->flags |= GPRS_SUBSCRIBER_FIRST_CONTACT;
/* Allocate entry 3 */
s3 = gprs_subscr_get_or_create(imsi3);
+ VERBOSE_ASSERT(llist_count(gprs_subscribers), == 3, "%d");
/* Check entries */
assert_subscr(s1, imsi1);
@@ -326,33 +337,35 @@ static void test_subscriber(void)
gprs_subscr_update(s1);
OSMO_ASSERT(last_updated_subscr == NULL);
OSMO_ASSERT(s1->sgsn_data->mm == NULL);
- OSMO_ASSERT((s1->flags & GSM_SUBSCRIBER_FIRST_CONTACT) == 0);
+ OSMO_ASSERT((s1->flags & GPRS_SUBSCRIBER_FIRST_CONTACT) == 0);
/* There is no subscriber cache. Verify it */
gprs_subscr_cleanup(s1);
- subscr_put(s1);
+ gprs_subscr_put(s1);
s1 = NULL;
- sfound = gprs_subscr_get_by_imsi(imsi1);
- OSMO_ASSERT(sfound == NULL);
+ VERBOSE_ASSERT(llist_count(gprs_subscribers), == 2, "%d");
+ OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi1) == NULL);
assert_subscr(s2, imsi2);
assert_subscr(s3, imsi3);
- /* Free entry 2 (GSM_SUBSCRIBER_FIRST_CONTACT is set) */
+ /* Free entry 2 (GPRS_SUBSCRIBER_FIRST_CONTACT is set) */
gprs_subscr_cleanup(s2);
- subscr_put(s2);
+ gprs_subscr_put(s2);
s2 = NULL;
+ VERBOSE_ASSERT(llist_count(gprs_subscribers), == 1, "%d");
OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi1) == NULL);
OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi2) == NULL);
assert_subscr(s3, imsi3);
/* Try to delete entry 3 */
gprs_subscr_cleanup(s3);
- subscr_put(s3);
+ gprs_subscr_put(s3);
s3 = NULL;
+ VERBOSE_ASSERT(llist_count(gprs_subscribers), == 0, "%d");
OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi3) == NULL);
- OSMO_ASSERT(llist_empty(&active_subscribers));
+ OSMO_ASSERT(llist_empty(gprs_subscribers));
update_subscriber_data_cb = __real_sgsn_update_subscriber_data;
@@ -361,7 +374,7 @@ static void test_subscriber(void)
static void test_auth_triplets(void)
{
- struct gsm_subscriber *s1, *s1found;
+ struct gprs_subscr *s1, *s1found;
const char *imsi1 = "1234567890";
struct gsm_auth_tuple *at;
struct sgsn_mm_ctx *ctx;
@@ -375,17 +388,17 @@ static void test_auth_triplets(void)
/* Allocate entry 1 */
s1 = gprs_subscr_get_or_create(imsi1);
- s1->flags |= GSM_SUBSCRIBER_FIRST_CONTACT;
+ s1->flags |= GPRS_SUBSCRIBER_FIRST_CONTACT;
s1found = gprs_subscr_get_by_imsi(imsi1);
OSMO_ASSERT(s1found == s1);
- subscr_put(s1found);
+ gprs_subscr_put(s1found);
/* Create a context */
OSMO_ASSERT(count(gprs_llme_list()) == 0);
ctx = alloc_mm_ctx(local_tlli, &raid);
/* Attach s1 to ctx */
- ctx->subscr = subscr_get(s1);
+ ctx->subscr = gprs_subscr_get(s1);
ctx->subscr->sgsn_data->mm = ctx;
/* Try to get auth tuple */
@@ -414,7 +427,7 @@ static void test_auth_triplets(void)
OSMO_ASSERT(at == NULL);
/* Free MM context and subscriber */
- subscr_put(s1);
+ gprs_subscr_put(s1);
sgsn_mm_ctx_cleanup_free(ctx);
s1found = gprs_subscr_get_by_imsi(imsi1);
OSMO_ASSERT(s1found == NULL);
@@ -441,7 +454,7 @@ static int rx_gsup_message(const uint8_t *data, size_t data_len)
static void test_subscriber_gsup(void)
{
- struct gsm_subscriber *s1, *s1found;
+ struct gprs_subscr *s1, *s1found;
const char *imsi1 = "1234567890";
struct sgsn_mm_ctx *ctx;
struct gprs_ra_id raid = { 0, };
@@ -563,17 +576,17 @@ static void test_subscriber_gsup(void)
/* Allocate entry 1 */
s1 = gprs_subscr_get_or_create(imsi1);
- s1->flags |= GSM_SUBSCRIBER_FIRST_CONTACT;
+ s1->flags |= GPRS_SUBSCRIBER_FIRST_CONTACT;
s1found = gprs_subscr_get_by_imsi(imsi1);
OSMO_ASSERT(s1found == s1);
- subscr_put(s1found);
+ gprs_subscr_put(s1found);
/* Create a context */
OSMO_ASSERT(count(gprs_llme_list()) == 0);
ctx = alloc_mm_ctx(local_tlli, &raid);
/* Attach s1 to ctx */
- ctx->subscr = subscr_get(s1);
+ ctx->subscr = gprs_subscr_get(s1);
ctx->subscr->sgsn_data->mm = ctx;
/* Inject SendAuthInfoReq GSUP message */
@@ -675,7 +688,7 @@ static void test_subscriber_gsup(void)
/* Free MM context and subscriber */
OSMO_ASSERT(ctx->subscr == NULL);
sgsn_mm_ctx_cleanup_free(ctx);
- subscr_put(s1);
+ gprs_subscr_put(s1);
s1found = gprs_subscr_get_by_imsi(imsi1);
OSMO_ASSERT(s1found == NULL);
@@ -1090,7 +1103,7 @@ int my_subscr_request_auth_info(struct sgsn_mm_ctx *mmctx) {
static void test_gmm_attach_subscr(void)
{
const enum sgsn_auth_policy saved_auth_policy = sgsn->cfg.auth_policy;
- struct gsm_subscriber *subscr;
+ struct gprs_subscr *subscr;
sgsn_inst.cfg.auth_policy = SGSN_AUTH_POLICY_REMOTE;
subscr_request_update_location_cb = my_subscr_request_update_location;
@@ -1101,7 +1114,7 @@ static void test_gmm_attach_subscr(void)
printf("Auth policy 'remote': ");
test_gmm_attach(0);
- subscr_put(subscr);
+ gprs_subscr_put(subscr);
assert_no_subscrs();
sgsn->cfg.auth_policy = saved_auth_policy;
@@ -1124,7 +1137,7 @@ int my_subscr_request_auth_info_fake_auth(struct sgsn_mm_ctx *mmctx)
static void test_gmm_attach_subscr_fake_auth(void)
{
const enum sgsn_auth_policy saved_auth_policy = sgsn->cfg.auth_policy;
- struct gsm_subscriber *subscr;
+ struct gprs_subscr *subscr;
sgsn_inst.cfg.auth_policy = SGSN_AUTH_POLICY_REMOTE;
subscr_request_update_location_cb = my_subscr_request_update_location;
@@ -1137,7 +1150,7 @@ static void test_gmm_attach_subscr_fake_auth(void)
printf("Auth policy 'remote', auth faked: ");
test_gmm_attach(0);
- subscr_put(subscr);
+ gprs_subscr_put(subscr);
assert_no_subscrs();
sgsn->cfg.auth_policy = saved_auth_policy;
@@ -1166,7 +1179,7 @@ int my_subscr_request_auth_info_real_auth(struct sgsn_mm_ctx *mmctx)
static void test_gmm_attach_subscr_real_auth(void)
{
const enum sgsn_auth_policy saved_auth_policy = sgsn->cfg.auth_policy;
- struct gsm_subscriber *subscr;
+ struct gprs_subscr *subscr;
sgsn_inst.cfg.auth_policy = SGSN_AUTH_POLICY_REMOTE;
subscr_request_update_location_cb = my_subscr_request_update_location;
@@ -1180,7 +1193,7 @@ static void test_gmm_attach_subscr_real_auth(void)
printf("Auth policy 'remote', triplet based auth: ");
test_gmm_attach(0);
- subscr_put(subscr);
+ gprs_subscr_put(subscr);
assert_no_subscrs();
sgsn->cfg.auth_policy = saved_auth_policy;
@@ -1254,7 +1267,7 @@ int my_subscr_request_update_gsup_auth(struct sgsn_mm_ctx *mmctx) {
static void test_gmm_attach_subscr_gsup_auth(int retry)
{
const enum sgsn_auth_policy saved_auth_policy = sgsn->cfg.auth_policy;
- struct gsm_subscriber *subscr;
+ struct gprs_subscr *subscr;
sgsn_inst.cfg.auth_policy = SGSN_AUTH_POLICY_REMOTE;
subscr_request_update_location_cb = my_subscr_request_update_gsup_auth;
@@ -1268,7 +1281,7 @@ static void test_gmm_attach_subscr_gsup_auth(int retry)
subscr->authorized = 1;
sgsn->cfg.require_authentication = 1;
sgsn->cfg.require_update_location = 1;
- subscr_put(subscr);
+ gprs_subscr_put(subscr);
printf("Auth policy 'remote', GSUP based auth: ");
test_gmm_attach(retry);
@@ -1337,7 +1350,7 @@ int my_gsup_client_send(struct gsup_client *gsupc, struct msgb *msg)
static void test_gmm_attach_subscr_real_gsup_auth(int retry)
{
const enum sgsn_auth_policy saved_auth_policy = sgsn->cfg.auth_policy;
- struct gsm_subscriber *subscr;
+ struct gprs_subscr *subscr;
sgsn_inst.cfg.auth_policy = SGSN_AUTH_POLICY_REMOTE;
gsup_client_send_cb = my_gsup_client_send;
@@ -2228,7 +2241,7 @@ static void test_ggsn_selection(void)
{
struct apn_ctx *actxs[4];
struct sgsn_ggsn_ctx *ggc, *ggcs[3];
- struct gsm_subscriber *s1;
+ struct gprs_subscr *s1;
const char *imsi1 = "1234567890";
struct sgsn_mm_ctx *ctx;
struct gprs_ra_id raid = { 0, };
@@ -2347,7 +2360,7 @@ static void test_ggsn_selection(void)
/* Cleanup */
- subscr_put(s1);
+ gprs_subscr_put(s1);
sgsn_mm_ctx_cleanup_free(ctx);
assert_no_subscrs();
diff --git a/openbsc/tests/sgsn/sgsn_test.ok b/openbsc/tests/sgsn/sgsn_test.ok
index c7a53b9e5..f38d7309d 100644
--- a/openbsc/tests/sgsn/sgsn_test.ok
+++ b/openbsc/tests/sgsn/sgsn_test.ok
@@ -1,5 +1,13 @@
Testing LLME allocations
Testing core subscriber data API
+llist_count(gprs_subscribers) == 0
+llist_count(gprs_subscribers) == 1
+llist_count(gprs_subscribers) == 1
+llist_count(gprs_subscribers) == 2
+llist_count(gprs_subscribers) == 3
+llist_count(gprs_subscribers) == 2
+llist_count(gprs_subscribers) == 1
+llist_count(gprs_subscribers) == 0
Testing authentication triplet handling
Testing subscriber GSUP handling
Testing GMM detach