From 2dee60ef443343a297ffc1bfdb9321c6f7e07a3d Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Thu, 23 Nov 2017 15:27:50 +0100 Subject: db_test: also test db_get_auc() return values Verify that it returns -ENOENT on non-existing IMSI and -ENOKEY for no auth data. Move the auc_compute_vectors() stub to the top near the db_get_auc() call, and just return num_vec to get a successful return value when auth data is present. Change-Id: Ic0158228afbd78b8ca21f62dffa9f868674682b9 --- tests/db/db_test.c | 33 ++++++++++++++++++++++++++++----- tests/db/db_test.err | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/tests/db/db_test.c b/tests/db/db_test.c index 1a5d7e0..6bf7a86 100644 --- a/tests/db/db_test.c +++ b/tests/db/db_test.c @@ -100,6 +100,22 @@ static void _fill_invalid(void *dest, size_t size) fprintf(stderr, "\n"); \ } while (0) +#define N_VECTORS 3 + +#define ASSERT_DB_GET_AUC(imsi, expect_rc) \ + do { \ + struct osmo_auth_vector vec[N_VECTORS]; \ + ASSERT_RC(db_get_auc(dbc, imsi, 3, vec, N_VECTORS, NULL, NULL), expect_rc); \ + } while (0) + +/* Not linking the real auc_compute_vectors(), just returning num_vec. + * This gets called by db_get_auc(), but we're only interested in its rc. */ +int auc_compute_vectors(struct osmo_auth_vector *vec, unsigned int num_vec, + struct osmo_sub_auth_data *aud2g, + struct osmo_sub_auth_data *aud3g, + const uint8_t *rand_auts, const uint8_t *auts) +{ return num_vec; } + static struct db_context *dbc = NULL; static void *ctx = NULL; static struct hlr_subscriber g_subscr; @@ -457,6 +473,7 @@ static void test_subscr_aud() comment("Get auth data for non-existent subscriber"); ASSERT_SEL_AUD(unknown_imsi, -ENOENT, 0); + ASSERT_DB_GET_AUC(imsi0, -ENOENT); comment("Create subscriber"); @@ -465,6 +482,7 @@ static void test_subscr_aud() id = g_subscr.id; ASSERT_SEL_AUD(imsi0, -ENOKEY, id); + ASSERT_DB_GET_AUC(imsi0, -ENOKEY); comment("Set auth data, 2G only"); @@ -473,6 +491,7 @@ static void test_subscr_aud() mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")), 0); ASSERT_SEL_AUD(imsi0, 0, id); + ASSERT_DB_GET_AUC(imsi0, N_VECTORS); /* same again */ ASSERT_RC(db_subscr_update_aud_by_id(dbc, id, @@ -501,6 +520,7 @@ static void test_subscr_aud() mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)), 0); ASSERT_SEL_AUD(imsi0, -ENOKEY, id); + ASSERT_DB_GET_AUC(imsi0, -ENOKEY); /* Removing nothing results in -ENOENT */ ASSERT_RC(db_subscr_update_aud_by_id(dbc, id, @@ -516,6 +536,7 @@ static void test_subscr_aud() mk_aud_2g(OSMO_AUTH_ALG_NONE, "f000000000000f00000000000f000000")), 0); ASSERT_SEL_AUD(imsi0, -ENOKEY, id); + ASSERT_DB_GET_AUC(imsi0, -ENOKEY); comment("Set auth data, 3G only"); @@ -526,6 +547,7 @@ static void test_subscr_aud() "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)), 0); ASSERT_SEL_AUD(imsi0, 0, id); + ASSERT_DB_GET_AUC(imsi0, N_VECTORS); /* same again */ ASSERT_RC(db_subscr_update_aud_by_id(dbc, id, @@ -563,6 +585,7 @@ static void test_subscr_aud() mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)), 0); ASSERT_SEL_AUD(imsi0, -ENOKEY, id); + ASSERT_DB_GET_AUC(imsi0, -ENOKEY); /* Removing nothing results in -ENOENT */ ASSERT_RC(db_subscr_update_aud_by_id(dbc, id, @@ -575,6 +598,7 @@ static void test_subscr_aud() "BeefedCafeFaceAcedAddedDecadeFee", 5)), 0); ASSERT_SEL_AUD(imsi0, 0, id); + ASSERT_DB_GET_AUC(imsi0, N_VECTORS); ASSERT_RC(db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, @@ -582,6 +606,7 @@ static void test_subscr_aud() "asdfasdfasdf", 99999)), 0); ASSERT_SEL_AUD(imsi0, -ENOKEY, id); + ASSERT_DB_GET_AUC(imsi0, -ENOKEY); comment("Set auth data, 2G and 3G"); @@ -595,6 +620,7 @@ static void test_subscr_aud() "DeafBeddedBabeAcceededFadedDecaf", 5)), 0); ASSERT_SEL_AUD(imsi0, 0, id); + ASSERT_DB_GET_AUC(imsi0, N_VECTORS); comment("Set invalid auth data"); @@ -670,9 +696,11 @@ static void test_subscr_aud() * and make sure there are no auth data leftovers for this ID. */ OSMO_ASSERT(id == g_subscr.id); ASSERT_SEL_AUD(imsi0, -ENOKEY, id); + ASSERT_DB_GET_AUC(imsi0, -ENOKEY); ASSERT_RC(db_subscr_delete_by_id(dbc, id), 0); ASSERT_SEL(imsi, imsi0, -ENOENT); + ASSERT_DB_GET_AUC(imsi0, -ENOENT); comment_end(); } @@ -835,11 +863,6 @@ int main(int argc, char **argv) } /* stubs */ -int auc_compute_vectors(struct osmo_auth_vector *vec, unsigned int num_vec, - struct osmo_sub_auth_data *aud2g, - struct osmo_sub_auth_data *aud3g, - const uint8_t *rand_auts, const uint8_t *auts) -{ OSMO_ASSERT(false); return -1; } void *lu_op_alloc_conn(void *conn) { OSMO_ASSERT(false); return NULL; } void lu_op_tx_del_subscr_data(void *luop) diff --git a/tests/db/db_test.err b/tests/db/db_test.err index c5e5bac..1d34045 100644 --- a/tests/db/db_test.err +++ b/tests/db/db_test.err @@ -715,6 +715,9 @@ db_get_auth_data(dbc, unknown_imsi, &g_aud2g, &g_aud3g, &g_id) --> -2 DAUC IMSI='999999999': No such subscriber +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -2 +DAUC IMSI='123456789000000': No such subscriber + --- Create subscriber @@ -731,6 +734,10 @@ DAUC IMSI='123456789000000': No 2G Auth Data DAUC IMSI='123456789000000': No 3G Auth Data +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126 +DAUC IMSI='123456789000000': No 2G Auth Data +DAUC IMSI='123456789000000': No 3G Auth Data + --- Set auth data, 2G only @@ -746,6 +753,11 @@ DAUC IMSI='123456789000000': No 3G Auth Data } 3G: none +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3 +DAUC IMSI='123456789000000': No 3G Auth Data +DAUC IMSI='123456789000000': Calling to generate 3 vectors +DAUC IMSI='123456789000000': Generated 3 vectors + db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0 db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0 @@ -804,6 +816,10 @@ DAUC IMSI='123456789000000': No 2G Auth Data DAUC IMSI='123456789000000': No 3G Auth Data +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126 +DAUC IMSI='123456789000000': No 2G Auth Data +DAUC IMSI='123456789000000': No 3G Auth Data + db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> -ENOENT db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0 @@ -825,6 +841,10 @@ DAUC IMSI='123456789000000': No 2G Auth Data DAUC IMSI='123456789000000': No 3G Auth Data +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126 +DAUC IMSI='123456789000000': No 2G Auth Data +DAUC IMSI='123456789000000': No 3G Auth Data + --- Set auth data, 3G only @@ -844,6 +864,12 @@ DAUC IMSI='123456789000000': No 2G Auth Data .u.umts.ind_bitlen = 5, } +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3 +DAUC IMSI='123456789000000': No 2G Auth Data +DAUC IMSI='123456789000000': Calling to generate 3 vectors +DAUC IMSI='123456789000000': Generated 3 vectors +DAUC IMSI='123456789000000': Updating SQN=0 in DB + db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0 db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0 @@ -917,6 +943,10 @@ DAUC IMSI='123456789000000': No 2G Auth Data DAUC IMSI='123456789000000': No 3G Auth Data +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126 +DAUC IMSI='123456789000000': No 2G Auth Data +DAUC IMSI='123456789000000': No 3G Auth Data + db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> -ENOENT db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0 @@ -935,6 +965,12 @@ DAUC IMSI='123456789000000': No 2G Auth Data .u.umts.ind_bitlen = 5, } +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3 +DAUC IMSI='123456789000000': No 2G Auth Data +DAUC IMSI='123456789000000': Calling to generate 3 vectors +DAUC IMSI='123456789000000': Generated 3 vectors +DAUC IMSI='123456789000000': Updating SQN=0 in DB + db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, "asdfasdfasd", false, "asdfasdfasdf", 99999)) --> 0 db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126 @@ -942,6 +978,10 @@ DAUC IMSI='123456789000000': No 2G Auth Data DAUC IMSI='123456789000000': No 3G Auth Data +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126 +DAUC IMSI='123456789000000': No 2G Auth Data +DAUC IMSI='123456789000000': No 3G Auth Data + --- Set auth data, 2G and 3G @@ -966,6 +1006,11 @@ db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0 .u.umts.ind_bitlen = 5, } +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3 +DAUC IMSI='123456789000000': Calling to generate 3 vectors +DAUC IMSI='123456789000000': Generated 3 vectors +DAUC IMSI='123456789000000': Updating SQN=0 in DB + --- Set invalid auth data @@ -1179,11 +1224,18 @@ DAUC IMSI='123456789000000': No 2G Auth Data DAUC IMSI='123456789000000': No 3G Auth Data +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126 +DAUC IMSI='123456789000000': No 2G Auth Data +DAUC IMSI='123456789000000': No 3G Auth Data + db_subscr_delete_by_id(dbc, id) --> 0 db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber +db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -2 +DAUC IMSI='123456789000000': No such subscriber + ===== test_subscr_aud: SUCCESS -- cgit v1.2.3