osmo-hlr/tests/db/db_test.err

1696 lines
44 KiB
Plaintext

===== test_subscr_create_update_sel_delete
--- Create with valid / invalid IMSI
db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
struct hlr_subscriber {
.id = 2,
.imsi = '123456789000001',
}
db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
struct hlr_subscriber {
.id = 3,
.imsi = '123456789000002',
}
db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
DAUC IMSI='123456789000000': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
struct hlr_subscriber {
.id = 2,
.imsi = '123456789000001',
}
db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
struct hlr_subscriber {
.id = 3,
.imsi = '123456789000002',
}
db_subscr_create(dbc, "123456789 000003", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
DAUC Cannot create subscriber: invalid IMSI: '123456789 000003'
db_subscr_get_by_imsi(dbc, "123456789000003", &g_subscr) --> -ENOENT
db_subscr_create(dbc, "123456789000002123456", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
DAUC Cannot create subscriber: invalid IMSI: '123456789000002123456'
db_subscr_get_by_imsi(dbc, "123456789000002123456", &g_subscr) --> -ENOENT
db_subscr_create(dbc, "foobar123", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
DAUC Cannot create subscriber: invalid IMSI: 'foobar123'
db_subscr_get_by_imsi(dbc, "foobar123", &g_subscr) --> -ENOENT
db_subscr_create(dbc, "123", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
DAUC Cannot create subscriber: invalid IMSI: '123'
db_subscr_get_by_imsi(dbc, "123", &g_subscr) --> -ENOENT
db_subscr_create(dbc, short_imsi, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
struct hlr_subscriber {
.id = 4,
.imsi = '123456',
}
--- Check if subscriber exists (by IMSI)
db_subscr_exists_by_imsi(dbc, imsi0) --> 0
db_subscr_exists_by_imsi(dbc, unknown_imsi) --> -ENOENT
--- Set valid / invalid MSISDN
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321") --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '54321',
}
db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '54321',
}
db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321012345678912345678") --> -EINVAL
DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '54321012345678912345678'
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '54321',
}
db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '54321',
}
db_subscr_get_by_msisdn(dbc, "54321012345678912345678", &g_subscr) --> -ENOENT
db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543 21") --> -EINVAL
DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '543 21'
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '54321',
}
db_subscr_get_by_msisdn(dbc, "543 21", &g_subscr) --> -ENOENT
db_subscr_update_msisdn_by_imsi(dbc, imsi0, "foobar123") --> -EINVAL
DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: 'foobar123'
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '54321',
}
db_subscr_get_by_msisdn(dbc, "foobar123", &g_subscr) --> -ENOENT
db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5") --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '5',
}
db_subscr_get_by_msisdn(dbc, "5", &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '5',
}
db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> -ENOENT
db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543210123456789") --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_get_by_msisdn(dbc, "543210123456789", &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5432101234567891") --> -EINVAL
DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '5432101234567891'
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_get_by_msisdn(dbc, "5432101234567891", &g_subscr) --> -ENOENT
--- Check if subscriber exists (by MSISDN)
db_subscr_exists_by_msisdn(dbc, "543210123456789") --> 0
db_subscr_exists_by_msisdn(dbc, "5432101234567891") --> -ENOENT
--- Set MSISDN on non-existent / invalid IMSI
db_subscr_update_msisdn_by_imsi(dbc, unknown_imsi, "99") --> -ENOENT
DAUC Cannot update MSISDN: no such subscriber: IMSI='999999999'
db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
db_subscr_update_msisdn_by_imsi(dbc, "foobar", "99") --> -ENOENT
DAUC Cannot update MSISDN: no such subscriber: IMSI='foobar'
db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
--- Set valid / invalid IMEI
db_subscr_update_imei_by_imsi(dbc, imsi0, "12345678901234") --> 0
db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.imei = '12345678901234',
}
db_subscr_update_imei_by_imsi(dbc, imsi0, "123456789012345") --> -EINVAL
DAUC Cannot update subscriber IMSI='123456789000000': invalid IMEI: '123456789012345'
db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.imei = '12345678901234',
}
db_subscr_get_by_imei(dbc, "123456789012345", &g_subscr) --> -ENOENT
--- Set the same IMEI again
db_subscr_update_imei_by_imsi(dbc, imsi0, "12345678901234") --> 0
db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.imei = '12345678901234',
}
--- Remove IMEI
db_subscr_update_imei_by_imsi(dbc, imsi0, NULL) --> 0
db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> -ENOENT
--- Set / unset nam_cs and nam_ps
db_subscr_nam(dbc, imsi0, false, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_ps = false,
}
db_subscr_nam(dbc, imsi0, false, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_cs = false,
.nam_ps = false,
}
db_subscr_nam(dbc, imsi0, true, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_ps = false,
}
db_subscr_nam(dbc, imsi0, true, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
--- Set / unset nam_cs and nam_ps *again*
db_subscr_nam(dbc, imsi0, false, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_ps = false,
}
db_subscr_nam(dbc, imsi0, false, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_ps = false,
}
db_subscr_nam(dbc, imsi0, false, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_cs = false,
.nam_ps = false,
}
db_subscr_nam(dbc, imsi0, false, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_cs = false,
.nam_ps = false,
}
db_subscr_nam(dbc, imsi0, true, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_cs = false,
}
db_subscr_nam(dbc, imsi0, true, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.nam_cs = false,
}
db_subscr_nam(dbc, imsi0, true, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_nam(dbc, imsi0, true, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
--- Set nam_cs and nam_ps on non-existent / invalid IMSI
db_subscr_nam(dbc, unknown_imsi, false, true) --> -ENOENT
DAUC Cannot disable PS: no such subscriber: IMSI='999999999'
db_subscr_nam(dbc, unknown_imsi, false, false) --> -ENOENT
DAUC Cannot disable CS: no such subscriber: IMSI='999999999'
db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
db_subscr_nam(dbc, "foobar", false, true) --> -ENOENT
DAUC Cannot disable PS: no such subscriber: IMSI='foobar'
db_subscr_nam(dbc, "foobar", false, false) --> -ENOENT
DAUC Cannot disable CS: no such subscriber: IMSI='foobar'
--- Record LU for PS and CS (SGSN and VLR names)
db_subscr_lu_str(dbc, id0, "5952", true) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.sgsn_number = '5952',
}
db_subscr_lu_str(dbc, id0, "712", false) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.vlr_number = '712',
.sgsn_number = '5952',
}
--- Record LU for PS and CS (SGSN and VLR names) *again*
db_subscr_lu_str(dbc, id0, "111", true) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.vlr_number = '712',
.sgsn_number = '111',
}
db_subscr_lu_str(dbc, id0, "111", true) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.vlr_number = '712',
.sgsn_number = '111',
}
db_subscr_lu_str(dbc, id0, "222", false) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.vlr_number = '222',
.sgsn_number = '111',
}
db_subscr_lu_str(dbc, id0, "222", false) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.vlr_number = '222',
.sgsn_number = '111',
}
--- Unset LU info for PS and CS (SGSN and VLR names)
db_subscr_lu_str(dbc, id0, "", true) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.vlr_number = '222',
}
db_subscr_lu_str(dbc, id0, "", false) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_lu_str(dbc, id0, "111", true) --> 0
db_subscr_lu_str(dbc, id0, "222", false) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.vlr_number = '222',
.sgsn_number = '111',
}
db_subscr_lu_str(dbc, id0, NULL, true) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.vlr_number = '222',
}
db_subscr_lu_str(dbc, id0, NULL, false) --> 0
db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
--- Record LU for non-existent ID
db_subscr_lu_str(dbc, 99999, "5952", true) --> -ENOENT
DAUC Cannot update SGSN number for subscriber ID=99999: no such subscriber
db_subscr_lu_str(dbc, 99999, "712", false) --> -ENOENT
DAUC Cannot update VLR number for subscriber ID=99999: no such subscriber
db_subscr_get_by_id(dbc, 99999, &g_subscr) --> -ENOENT
--- Purge and un-purge PS and CS
db_subscr_purge(dbc, imsi0, true, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.ms_purged_ps = true,
}
db_subscr_purge(dbc, imsi0, true, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.ms_purged_cs = true,
.ms_purged_ps = true,
}
db_subscr_purge(dbc, imsi0, false, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.ms_purged_ps = true,
}
db_subscr_purge(dbc, imsi0, false, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
--- Purge PS and CS *again*
db_subscr_purge(dbc, imsi0, true, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.ms_purged_ps = true,
}
db_subscr_purge(dbc, imsi0, true, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.ms_purged_ps = true,
}
db_subscr_purge(dbc, imsi0, false, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_purge(dbc, imsi0, false, true) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_purge(dbc, imsi0, true, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.ms_purged_cs = true,
}
db_subscr_purge(dbc, imsi0, true, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
.ms_purged_cs = true,
}
db_subscr_purge(dbc, imsi0, false, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_purge(dbc, imsi0, false, false) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
--- Purge on non-existent / invalid IMSI
db_subscr_purge(dbc, unknown_imsi, true, true) --> -ENOENT
DAUC Cannot purge PS: no such subscriber: IMSI='999999999'
db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
db_subscr_purge(dbc, unknown_imsi, true, false) --> -ENOENT
DAUC Cannot purge CS: no such subscriber: IMSI='999999999'
db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
--- Delete non-existent / invalid IDs
db_subscr_delete_by_id(dbc, 999) --> -ENOENT
DAUC Cannot delete: no such subscriber: ID=999
db_subscr_delete_by_id(dbc, -10) --> -ENOENT
DAUC Cannot delete: no such subscriber: ID=-10
--- Delete subscribers
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.msisdn = '543210123456789',
}
db_subscr_delete_by_id(dbc, id0) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
db_subscr_delete_by_id(dbc, id0) --> -ENOENT
DAUC Cannot delete: no such subscriber: ID=1
db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
struct hlr_subscriber {
.id = 2,
.imsi = '123456789000001',
}
db_subscr_delete_by_id(dbc, id1) --> 0
db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> -ENOENT
db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
struct hlr_subscriber {
.id = 3,
.imsi = '123456789000002',
}
db_subscr_delete_by_id(dbc, id2) --> 0
db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> -ENOENT
db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
struct hlr_subscriber {
.id = 4,
.imsi = '123456',
}
db_subscr_delete_by_id(dbc, id_short) --> 0
db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> -ENOENT
--- Create and delete subscribers with non-default nam_cs and nam_ps
db_subscr_create(dbc, imsi0, 0x00) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
.nam_cs = false,
.nam_ps = false,
}
db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS) --> 0
db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
struct hlr_subscriber {
.id = 2,
.imsi = '123456789000001',
.nam_ps = false,
}
db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
struct hlr_subscriber {
.id = 3,
.imsi = '123456789000002',
.nam_cs = false,
}
db_subscr_delete_by_id(dbc, id0) --> 0
db_subscr_delete_by_id(dbc, id1) --> 0
db_subscr_delete_by_id(dbc, id2) --> 0
===== test_subscr_create_update_sel_delete: SUCCESS
===== test_subscr_aud
--- Get auth data for non-existent subscriber
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, false) --> -2
DAUC IMSI='123456789000000': No such subscriber
--- Create subscriber
db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
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, false) --> -ENOKEY
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': No 3G Auth Data
--- Set auth data, 2G only
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
DAUC IMSI='123456789000000': No 3G Auth Data
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v1,
.u.gsm.ki = '0123456789abcdef0123456789abcdef',
}
3G: none
db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 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
DAUC IMSI='123456789000000': No 3G Auth Data
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v1,
.u.gsm.ki = '0123456789abcdef0123456789abcdef',
}
3G: none
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v2, "BeadedBeeAced1EbbedDefacedFacade")) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 3G Auth Data
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v2,
.u.gsm.ki = 'beadedbeeaced1ebbeddefacedfacade',
}
3G: none
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "DeafBeddedBabeAcceededFadedDecaf")) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 3G Auth Data
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'deafbeddedbabeacceededfadeddecaf',
}
3G: none
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 3G Auth Data
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = XOR,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: none
--- Remove 2G auth data
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
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, false) --> -ENOKEY
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
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 3G Auth Data
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = XOR,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: none
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, "f000000000000f00000000000f000000")) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
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, false) --> -ENOKEY
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': No 3G Auth Data
--- Set auth data, 3G only
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
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 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
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "Deaf0ff1ceD0d0DabbedD1ced1ceF00d", true, "F1bbed0afD0eF0bD0ffed0ddF1fe0b0e", 0)) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'deaf0ff1ced0d0dabbedd1ced1cef00d',
.u.umts.opc_is_op = 1,
.u.umts.k = 'f1bbed0afd0ef0bd0ffed0ddf1fe0b0e',
.u.umts.amf = '0000',
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", OSMO_MILENAGE_IND_BITLEN_MAX)) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 28,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
.u.umts.opc_is_op = 0,
.u.umts.k = 'beefedcafefaceacedaddeddecadefee',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
--- Remove 3G auth data
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
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, false) --> -ENOKEY
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
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
.u.umts.opc_is_op = 0,
.u.umts.k = 'beefedcafefaceacedaddeddecadefee',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 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) --> -ENOKEY
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, false) --> -ENOKEY
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': No 3G Auth Data
--- Set auth data, 2G and 3G
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "CededEffacedAceFacedBadFadedBeef")) --> 0
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", 5)) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 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
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(99999, "f000000000000f00000000000f000000")) --> -EINVAL
DAUC Cannot update auth tokens: Unknown auth algo: 99999
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f000000000000f00000000000f000000f00000000")) --> -EINVAL
DAUC Cannot update auth tokens: Invalid KI: 'f000000000000f00000000000f000000f00000000'
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f00")) --> -EINVAL
DAUC Cannot update auth tokens: Invalid KI: 'f00'
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_MILENAGE, "0123456789abcdef0123456789abcdef")) --> -EINVAL
DAUC Cannot update auth tokens: auth algo not suited for 2G: MILENAGE
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "0f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
DAUC Cannot update auth tokens: Invalid OP/OPC: '0f000000000000f00000000000f000000'
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "000000000000f00000000000f000000", 5)) --> -EINVAL
DAUC Cannot update auth tokens: Invalid K: '000000000000f00000000000f000000'
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", OSMO_MILENAGE_IND_BITLEN_MAX + 1)) --> -EINVAL
DAUC Cannot update auth tokens: Invalid ind_bitlen: 29
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "X000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
DAUC Cannot update auth tokens: Invalid OP/OPC: 'X000000000000f00000000000f000000'
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000 f00000000000 f000000", 5)) --> -EINVAL
DAUC Cannot update auth tokens: Invalid K: 'f000000000000 f00000000000 f000000'
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
2G: struct osmo_sub_auth_data {
.type = GSM,
.algo = COMP128v3,
.u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
}
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 0,
.u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
--- Delete subscriber
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
db_subscr_delete_by_id(dbc, id) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
--- Re-add subscriber and verify auth data didn't come back
db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
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, false) --> -ENOKEY
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
db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -2
DAUC IMSI='123456789000000': No such subscriber
===== test_subscr_aud: SUCCESS
===== test_subscr_aud_invalid_len
--- Create subscriber
db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
--- Set auth data, 2G only, with invalid Ki length
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
raw SQL: UPDATE auc_2g SET ki = '0123456789abcdef0123456789abcde'
sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
sqlite3_step(stmt) --> SQLITE_DONE
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
DAUC IMSI='123456789000000': Error reading Ki, expected length 16 but has length 15
DAUC IMSI='123456789000000': No 3G Auth Data
--- Remove 2G auth data
db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
--- Set auth data, 3G only, with invalid K length
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
raw SQL: UPDATE auc_3g SET k = 'C01ffedC1cadaeAc1d1f1edAcac1aB0'
sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
sqlite3_step(stmt) --> SQLITE_DONE
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': Error reading K, expected length 16 but has length 15
--- Set auth data, 3G only, with invalid OP length
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
raw SQL: UPDATE auc_3g SET op = 'BeefedCafeFaceAcedAddedDecadeFe'
sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
sqlite3_step(stmt) --> SQLITE_DONE
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': Error reading OP, expected length 16 but has length 15
--- Set auth data, 3G only, with invalid OPC length
db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
raw SQL: UPDATE auc_3g SET opc = 'BeefedCafeFaceAcedAddedDecadeFe'
sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
sqlite3_step(stmt) --> SQLITE_DONE
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': Error reading OPC, expected length 16 but has length 15
--- Delete subscriber
db_subscr_delete_by_id(dbc, id) --> 0
===== test_subscr_aud_invalid_len: SUCCESS
===== test_subscr_sqn
--- Set SQN for unknown subscriber
db_update_sqn(dbc, 99, 999) --> -ENOENT
DAUC Cannot update SQN for subscriber ID=99: no auc_3g entry for such subscriber
db_subscr_get_by_id(dbc, 99, &g_subscr) --> -ENOENT
db_update_sqn(dbc, 9999, 99) --> -ENOENT
DAUC Cannot update SQN for subscriber ID=9999: no auc_3g entry for such subscriber
db_subscr_get_by_id(dbc, 9999, &g_subscr) --> -ENOENT
--- Create subscriber
db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': No 3G Auth Data
--- Set SQN, but no 3G auth data present
db_update_sqn(dbc, id, 123) --> -ENOENT
DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': No 3G Auth Data
db_update_sqn(dbc, id, 543) --> -ENOENT
DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
DAUC IMSI='123456789000000': No 2G Auth Data
DAUC IMSI='123456789000000': No 3G Auth Data
--- Set auth 3G data
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
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
--- Set SQN
db_update_sqn(dbc, id, 23315) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.sqn = 23315,
.u.umts.sqn = 0x5b13,
.u.umts.ind_bitlen = 5,
}
db_update_sqn(dbc, id, 23315) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.sqn = 23315,
.u.umts.sqn = 0x5b13,
.u.umts.ind_bitlen = 5,
}
db_update_sqn(dbc, id, 423) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.sqn = 423,
.u.umts.sqn = 0x1a7,
.u.umts.ind_bitlen = 5,
}
--- Set SQN: thru uint64_t range, using the int64_t SQLite bind
db_update_sqn(dbc, id, 0) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.ind_bitlen = 5,
}
db_update_sqn(dbc, id, INT64_MAX) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.sqn = 9223372036854775807,
.u.umts.sqn = 0x7fffffffffffffff,
.u.umts.ind_bitlen = 5,
}
db_update_sqn(dbc, id, INT64_MIN) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.sqn = 9223372036854775808,
.u.umts.sqn = 0x8000000000000000,
.u.umts.ind_bitlen = 5,
}
db_update_sqn(dbc, id, UINT64_MAX) --> 0
db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
DAUC IMSI='123456789000000': No 2G Auth Data
2G: none
3G: struct osmo_sub_auth_data {
.type = UMTS,
.algo = MILENAGE,
.u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
.u.umts.opc_is_op = 1,
.u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
.u.umts.amf = '0000',
.u.umts.sqn = 18446744073709551615,
.u.umts.sqn = 0xffffffffffffffff,
.u.umts.ind_bitlen = 5,
}
--- Delete subscriber
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
struct hlr_subscriber {
.id = 1,
.imsi = '123456789000000',
}
db_subscr_delete_by_id(dbc, id) --> 0
db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
===== test_subscr_sqn: SUCCESS
===== test_ind
db_ind(dbc, &vlr, &ind) --> 0
"msc-23\0" ind = 1
db_ind(dbc, &vlr, &ind) --> 0
"sgsn-11\0" ind = 2
db_ind(dbc, &vlr, &ind) --> 0
"msc-42\0" ind = 3
db_ind(dbc, &vlr, &ind) --> 0
"sgsn-22\0" ind = 4
db_ind(dbc, &vlr, &ind) --> 0
"msc-0x17\0" ind = 5
db_ind(dbc, &vlr, &ind) --> 0
"sgsn-0xaa\0" ind = 6
db_ind(dbc, &vlr, &ind) --> 0
"msc-42\0" ind = 3
db_ind(dbc, &vlr, &ind) --> 0
"sgsn-22\0" ind = 4
db_ind(dbc, &vlr, &ind) --> 0
"msc-0x17\0" ind = 5
db_ind(dbc, &vlr, &ind) --> 0
"sgsn-0xaa\0" ind = 6
db_ind(dbc, &vlr, &ind) --> 0
"sgsn-0xbb\0" ind = 7
db_ind(dbc, &vlr, &ind) --> 0
"msc-0x2a\0" ind = 8
db_ind(dbc, &vlr, &ind) --> 0
"msc-42\0" ind = 3
db_ind(dbc, &vlr, &ind) --> 0
"sgsn-22\0" ind = 4
db_ind(dbc, &vlr, &ind) --> 0
"msc-23\0" ind = 1
db_ind(dbc, &vlr, &ind) --> 0
"sgsn-11\0" ind = 2
db_ind_del(dbc, &vlr) --> 0
"msc-0x17\0" ind deleted
db_ind(dbc, &vlr, &ind) --> 0
"msc-0x2a\0" ind = 8
db_ind(dbc, &vlr, &ind) --> 0
"any-unknown\0" ind = 9
===== test_ind: SUCCESS