blob: b4373cd9c41ff892cbc5e20eccc9c77bb7a31d05 [file] [log] [blame]
Neels Hofmeyr98509462017-10-09 17:28:53 +02001
2===== test_subscr_create_update_sel_delete
3
4--- Create with valid / invalid IMSI
5
Oliver Smithcd2af5e2019-03-06 13:17:39 +01006db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +02007
8db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
9struct hlr_subscriber {
10 .id = 1,
11 .imsi = '123456789000000',
12}
13
Oliver Smithcd2af5e2019-03-06 13:17:39 +010014db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +020015
16db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
17struct hlr_subscriber {
18 .id = 2,
19 .imsi = '123456789000001',
20}
21
Oliver Smithcd2af5e2019-03-06 13:17:39 +010022db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +020023
24db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
25struct hlr_subscriber {
26 .id = 3,
27 .imsi = '123456789000002',
28}
29
Pau Espin Pedrold456fce2022-06-17 17:56:56 +020030db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EEXIST
Neels Hofmeyr98509462017-10-09 17:28:53 +020031DAUC IMSI='123456789000000': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
32
33db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
34struct hlr_subscriber {
35 .id = 1,
36 .imsi = '123456789000000',
37}
38
Pau Espin Pedrold456fce2022-06-17 17:56:56 +020039db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EEXIST
Neels Hofmeyr98509462017-10-09 17:28:53 +020040DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
41
Pau Espin Pedrold456fce2022-06-17 17:56:56 +020042db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EEXIST
Neels Hofmeyr98509462017-10-09 17:28:53 +020043DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
44
45db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
46struct hlr_subscriber {
47 .id = 2,
48 .imsi = '123456789000001',
49}
50
Pau Espin Pedrold456fce2022-06-17 17:56:56 +020051db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EEXIST
Neels Hofmeyr98509462017-10-09 17:28:53 +020052DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
53
Pau Espin Pedrold456fce2022-06-17 17:56:56 +020054db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EEXIST
Neels Hofmeyr98509462017-10-09 17:28:53 +020055DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
56
57db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
58struct hlr_subscriber {
59 .id = 3,
60 .imsi = '123456789000002',
61}
62
Oliver Smithcd2af5e2019-03-06 13:17:39 +010063db_subscr_create(dbc, "123456789 000003", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020064DAUC Cannot create subscriber: invalid IMSI: '123456789 000003'
65
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020066db_subscr_get_by_imsi(dbc, "123456789000003", &g_subscr) --> -ENOENT
Neels Hofmeyr98509462017-10-09 17:28:53 +020067
Oliver Smithcd2af5e2019-03-06 13:17:39 +010068db_subscr_create(dbc, "123456789000002123456", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020069DAUC Cannot create subscriber: invalid IMSI: '123456789000002123456'
70
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020071db_subscr_get_by_imsi(dbc, "123456789000002123456", &g_subscr) --> -ENOENT
Neels Hofmeyr98509462017-10-09 17:28:53 +020072
Oliver Smithcd2af5e2019-03-06 13:17:39 +010073db_subscr_create(dbc, "foobar123", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020074DAUC Cannot create subscriber: invalid IMSI: 'foobar123'
75
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020076db_subscr_get_by_imsi(dbc, "foobar123", &g_subscr) --> -ENOENT
Neels Hofmeyr98509462017-10-09 17:28:53 +020077
Oliver Smithcd2af5e2019-03-06 13:17:39 +010078db_subscr_create(dbc, "123", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020079DAUC Cannot create subscriber: invalid IMSI: '123'
80
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020081db_subscr_get_by_imsi(dbc, "123", &g_subscr) --> -ENOENT
Neels Hofmeyr98509462017-10-09 17:28:53 +020082
Oliver Smithcd2af5e2019-03-06 13:17:39 +010083db_subscr_create(dbc, short_imsi, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +020084
85db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
86struct hlr_subscriber {
87 .id = 4,
88 .imsi = '123456',
89}
90
91
Oliver Smith6b73fd92019-03-06 13:49:05 +010092--- Check if subscriber exists (by IMSI)
93
94db_subscr_exists_by_imsi(dbc, imsi0) --> 0
95
96db_subscr_exists_by_imsi(dbc, unknown_imsi) --> -ENOENT
97
98
Neels Hofmeyr98509462017-10-09 17:28:53 +020099--- Set valid / invalid MSISDN
100
101db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
102struct hlr_subscriber {
103 .id = 1,
104 .imsi = '123456789000000',
105}
106
107db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321") --> 0
108
109db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
110struct hlr_subscriber {
111 .id = 1,
112 .imsi = '123456789000000',
113 .msisdn = '54321',
114}
115
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200116db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
117struct hlr_subscriber {
118 .id = 1,
119 .imsi = '123456789000000',
120 .msisdn = '54321',
121}
122
Neels Hofmeyr98509462017-10-09 17:28:53 +0200123db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321012345678912345678") --> -EINVAL
124DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '54321012345678912345678'
125
126db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
127struct hlr_subscriber {
128 .id = 1,
129 .imsi = '123456789000000',
130 .msisdn = '54321',
131}
132
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200133db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
134struct hlr_subscriber {
135 .id = 1,
136 .imsi = '123456789000000',
137 .msisdn = '54321',
138}
139
140db_subscr_get_by_msisdn(dbc, "54321012345678912345678", &g_subscr) --> -ENOENT
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200141
Neels Hofmeyr98509462017-10-09 17:28:53 +0200142db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543 21") --> -EINVAL
143DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '543 21'
144
145db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
146struct hlr_subscriber {
147 .id = 1,
148 .imsi = '123456789000000',
149 .msisdn = '54321',
150}
151
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200152db_subscr_get_by_msisdn(dbc, "543 21", &g_subscr) --> -ENOENT
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200153
Neels Hofmeyr98509462017-10-09 17:28:53 +0200154db_subscr_update_msisdn_by_imsi(dbc, imsi0, "foobar123") --> -EINVAL
155DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: 'foobar123'
156
157db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
158struct hlr_subscriber {
159 .id = 1,
160 .imsi = '123456789000000',
161 .msisdn = '54321',
162}
163
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200164db_subscr_get_by_msisdn(dbc, "foobar123", &g_subscr) --> -ENOENT
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200165
Neels Hofmeyr98509462017-10-09 17:28:53 +0200166db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5") --> 0
167
168db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
169struct hlr_subscriber {
170 .id = 1,
171 .imsi = '123456789000000',
172 .msisdn = '5',
173}
174
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200175db_subscr_get_by_msisdn(dbc, "5", &g_subscr) --> 0
176struct hlr_subscriber {
177 .id = 1,
178 .imsi = '123456789000000',
179 .msisdn = '5',
180}
181
182db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> -ENOENT
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200183
Neels Hofmeyr98509462017-10-09 17:28:53 +0200184db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543210123456789") --> 0
185
186db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
187struct hlr_subscriber {
188 .id = 1,
189 .imsi = '123456789000000',
190 .msisdn = '543210123456789',
191}
192
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200193db_subscr_get_by_msisdn(dbc, "543210123456789", &g_subscr) --> 0
194struct hlr_subscriber {
195 .id = 1,
196 .imsi = '123456789000000',
197 .msisdn = '543210123456789',
198}
199
Neels Hofmeyr98509462017-10-09 17:28:53 +0200200db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5432101234567891") --> -EINVAL
201DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '5432101234567891'
202
203db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
204struct hlr_subscriber {
205 .id = 1,
206 .imsi = '123456789000000',
207 .msisdn = '543210123456789',
208}
209
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200210db_subscr_get_by_msisdn(dbc, "5432101234567891", &g_subscr) --> -ENOENT
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200211
Neels Hofmeyr98509462017-10-09 17:28:53 +0200212
Vadim Yanitskiyc13599d2019-03-30 17:03:42 +0700213--- Check if subscriber exists (by MSISDN)
214
215db_subscr_exists_by_msisdn(dbc, "543210123456789") --> 0
216
217db_subscr_exists_by_msisdn(dbc, "5432101234567891") --> -ENOENT
218
219
Neels Hofmeyr98509462017-10-09 17:28:53 +0200220--- Set MSISDN on non-existent / invalid IMSI
221
222db_subscr_update_msisdn_by_imsi(dbc, unknown_imsi, "99") --> -ENOENT
223DAUC Cannot update MSISDN: no such subscriber: IMSI='999999999'
224
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200225db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200226
Neels Hofmeyr98509462017-10-09 17:28:53 +0200227db_subscr_update_msisdn_by_imsi(dbc, "foobar", "99") --> -ENOENT
228DAUC Cannot update MSISDN: no such subscriber: IMSI='foobar'
229
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200230db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200231
Neels Hofmeyr98509462017-10-09 17:28:53 +0200232
Oliver Smith81db3892019-01-09 12:03:51 +0100233--- Set valid / invalid IMEI
234
235db_subscr_update_imei_by_imsi(dbc, imsi0, "12345678901234") --> 0
236
237db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
238struct hlr_subscriber {
239 .id = 1,
240 .imsi = '123456789000000',
241 .msisdn = '543210123456789',
242 .imei = '12345678901234',
243}
244
245db_subscr_update_imei_by_imsi(dbc, imsi0, "123456789012345") --> -EINVAL
246DAUC Cannot update subscriber IMSI='123456789000000': invalid IMEI: '123456789012345'
247
248db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
249struct hlr_subscriber {
250 .id = 1,
251 .imsi = '123456789000000',
252 .msisdn = '543210123456789',
253 .imei = '12345678901234',
254}
255
256db_subscr_get_by_imei(dbc, "123456789012345", &g_subscr) --> -ENOENT
Oliver Smith81db3892019-01-09 12:03:51 +0100257
258
259--- Set the same IMEI again
260
261db_subscr_update_imei_by_imsi(dbc, imsi0, "12345678901234") --> 0
262
263db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
264struct hlr_subscriber {
265 .id = 1,
266 .imsi = '123456789000000',
267 .msisdn = '543210123456789',
268 .imei = '12345678901234',
269}
270
271
272--- Remove IMEI
273
274db_subscr_update_imei_by_imsi(dbc, imsi0, NULL) --> 0
275
276db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> -ENOENT
Oliver Smith81db3892019-01-09 12:03:51 +0100277
278
Neels Hofmeyre8ccd502017-10-06 04:10:06 +0200279--- Set / unset nam_cs and nam_ps
280
281db_subscr_nam(dbc, imsi0, false, true) --> 0
282
283db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
284struct hlr_subscriber {
285 .id = 1,
286 .imsi = '123456789000000',
287 .msisdn = '543210123456789',
288 .nam_ps = false,
289}
290
291db_subscr_nam(dbc, imsi0, false, false) --> 0
292
293db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
294struct hlr_subscriber {
295 .id = 1,
296 .imsi = '123456789000000',
297 .msisdn = '543210123456789',
298 .nam_cs = false,
299 .nam_ps = false,
300}
301
302db_subscr_nam(dbc, imsi0, true, false) --> 0
303
304db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
305struct hlr_subscriber {
306 .id = 1,
307 .imsi = '123456789000000',
308 .msisdn = '543210123456789',
309 .nam_ps = false,
310}
311
312db_subscr_nam(dbc, imsi0, true, true) --> 0
313
314db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
315struct hlr_subscriber {
316 .id = 1,
317 .imsi = '123456789000000',
318 .msisdn = '543210123456789',
319}
320
321
322--- Set / unset nam_cs and nam_ps *again*
323
324db_subscr_nam(dbc, imsi0, false, true) --> 0
325
326db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
327struct hlr_subscriber {
328 .id = 1,
329 .imsi = '123456789000000',
330 .msisdn = '543210123456789',
331 .nam_ps = false,
332}
333
334db_subscr_nam(dbc, imsi0, false, true) --> 0
335
336db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
337struct hlr_subscriber {
338 .id = 1,
339 .imsi = '123456789000000',
340 .msisdn = '543210123456789',
341 .nam_ps = false,
342}
343
344db_subscr_nam(dbc, imsi0, false, false) --> 0
345
346db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
347struct hlr_subscriber {
348 .id = 1,
349 .imsi = '123456789000000',
350 .msisdn = '543210123456789',
351 .nam_cs = false,
352 .nam_ps = false,
353}
354
355db_subscr_nam(dbc, imsi0, false, false) --> 0
356
357db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
358struct hlr_subscriber {
359 .id = 1,
360 .imsi = '123456789000000',
361 .msisdn = '543210123456789',
362 .nam_cs = false,
363 .nam_ps = false,
364}
365
366db_subscr_nam(dbc, imsi0, true, true) --> 0
367
368db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
369struct hlr_subscriber {
370 .id = 1,
371 .imsi = '123456789000000',
372 .msisdn = '543210123456789',
373 .nam_cs = false,
374}
375
376db_subscr_nam(dbc, imsi0, true, true) --> 0
377
378db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
379struct hlr_subscriber {
380 .id = 1,
381 .imsi = '123456789000000',
382 .msisdn = '543210123456789',
383 .nam_cs = false,
384}
385
386db_subscr_nam(dbc, imsi0, true, false) --> 0
387
388db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
389struct hlr_subscriber {
390 .id = 1,
391 .imsi = '123456789000000',
392 .msisdn = '543210123456789',
393}
394
395db_subscr_nam(dbc, imsi0, true, false) --> 0
396
397db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
398struct hlr_subscriber {
399 .id = 1,
400 .imsi = '123456789000000',
401 .msisdn = '543210123456789',
402}
403
404
405--- Set nam_cs and nam_ps on non-existent / invalid IMSI
406
407db_subscr_nam(dbc, unknown_imsi, false, true) --> -ENOENT
408DAUC Cannot disable PS: no such subscriber: IMSI='999999999'
409
410db_subscr_nam(dbc, unknown_imsi, false, false) --> -ENOENT
411DAUC Cannot disable CS: no such subscriber: IMSI='999999999'
412
413db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
Neels Hofmeyre8ccd502017-10-06 04:10:06 +0200414
415db_subscr_nam(dbc, "foobar", false, true) --> -ENOENT
416DAUC Cannot disable PS: no such subscriber: IMSI='foobar'
417
418db_subscr_nam(dbc, "foobar", false, false) --> -ENOENT
419DAUC Cannot disable CS: no such subscriber: IMSI='foobar'
420
421
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200422--- Record LU for PS and CS (SGSN and VLR names)
423
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100424db_subscr_lu_str(dbc, id0, "5952", true) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200425
426db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
427struct hlr_subscriber {
428 .id = 1,
429 .imsi = '123456789000000',
430 .msisdn = '543210123456789',
431 .sgsn_number = '5952',
432}
433
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100434db_subscr_lu_str(dbc, id0, "712", false) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200435
436db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
437struct hlr_subscriber {
438 .id = 1,
439 .imsi = '123456789000000',
440 .msisdn = '543210123456789',
441 .vlr_number = '712',
442 .sgsn_number = '5952',
443}
444
445
446--- Record LU for PS and CS (SGSN and VLR names) *again*
447
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100448db_subscr_lu_str(dbc, id0, "111", true) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200449
450db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
451struct hlr_subscriber {
452 .id = 1,
453 .imsi = '123456789000000',
454 .msisdn = '543210123456789',
455 .vlr_number = '712',
456 .sgsn_number = '111',
457}
458
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100459db_subscr_lu_str(dbc, id0, "111", true) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200460
461db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
462struct hlr_subscriber {
463 .id = 1,
464 .imsi = '123456789000000',
465 .msisdn = '543210123456789',
466 .vlr_number = '712',
467 .sgsn_number = '111',
468}
469
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100470db_subscr_lu_str(dbc, id0, "222", false) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200471
472db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
473struct hlr_subscriber {
474 .id = 1,
475 .imsi = '123456789000000',
476 .msisdn = '543210123456789',
477 .vlr_number = '222',
478 .sgsn_number = '111',
479}
480
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100481db_subscr_lu_str(dbc, id0, "222", false) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200482
483db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
484struct hlr_subscriber {
485 .id = 1,
486 .imsi = '123456789000000',
487 .msisdn = '543210123456789',
488 .vlr_number = '222',
489 .sgsn_number = '111',
490}
491
492
493--- Unset LU info for PS and CS (SGSN and VLR names)
494
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100495db_subscr_lu_str(dbc, id0, "", true) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200496
497db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
498struct hlr_subscriber {
499 .id = 1,
500 .imsi = '123456789000000',
501 .msisdn = '543210123456789',
502 .vlr_number = '222',
503}
504
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100505db_subscr_lu_str(dbc, id0, "", false) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200506
507db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
508struct hlr_subscriber {
509 .id = 1,
510 .imsi = '123456789000000',
511 .msisdn = '543210123456789',
512}
513
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100514db_subscr_lu_str(dbc, id0, "111", true) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200515
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100516db_subscr_lu_str(dbc, id0, "222", false) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200517
518db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
519struct hlr_subscriber {
520 .id = 1,
521 .imsi = '123456789000000',
522 .msisdn = '543210123456789',
523 .vlr_number = '222',
524 .sgsn_number = '111',
525}
526
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100527db_subscr_lu_str(dbc, id0, NULL, true) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200528
529db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
530struct hlr_subscriber {
531 .id = 1,
532 .imsi = '123456789000000',
533 .msisdn = '543210123456789',
534 .vlr_number = '222',
535}
536
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100537db_subscr_lu_str(dbc, id0, NULL, false) --> 0
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200538
539db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
540struct hlr_subscriber {
541 .id = 1,
542 .imsi = '123456789000000',
543 .msisdn = '543210123456789',
544}
545
546
547--- Record LU for non-existent ID
548
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100549db_subscr_lu_str(dbc, 99999, "5952", true) --> -ENOENT
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200550DAUC Cannot update SGSN number for subscriber ID=99999: no such subscriber
551
Neels Hofmeyrad868e22019-11-20 02:36:45 +0100552db_subscr_lu_str(dbc, 99999, "712", false) --> -ENOENT
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200553DAUC Cannot update VLR number for subscriber ID=99999: no such subscriber
554
555db_subscr_get_by_id(dbc, 99999, &g_subscr) --> -ENOENT
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200556
557
Neels Hofmeyre50121e2017-10-09 17:48:51 +0200558--- Purge and un-purge PS and CS
559
560db_subscr_purge(dbc, imsi0, true, true) --> 0
561
562db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
563struct hlr_subscriber {
564 .id = 1,
565 .imsi = '123456789000000',
566 .msisdn = '543210123456789',
567 .ms_purged_ps = true,
568}
569
570db_subscr_purge(dbc, imsi0, true, false) --> 0
571
572db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
573struct hlr_subscriber {
574 .id = 1,
575 .imsi = '123456789000000',
576 .msisdn = '543210123456789',
577 .ms_purged_cs = true,
578 .ms_purged_ps = true,
579}
580
581db_subscr_purge(dbc, imsi0, false, false) --> 0
582
583db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
584struct hlr_subscriber {
585 .id = 1,
586 .imsi = '123456789000000',
587 .msisdn = '543210123456789',
588 .ms_purged_ps = true,
589}
590
591db_subscr_purge(dbc, imsi0, false, true) --> 0
592
593db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
594struct hlr_subscriber {
595 .id = 1,
596 .imsi = '123456789000000',
597 .msisdn = '543210123456789',
598}
599
600
601--- Purge PS and CS *again*
602
603db_subscr_purge(dbc, imsi0, true, true) --> 0
604
605db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
606struct hlr_subscriber {
607 .id = 1,
608 .imsi = '123456789000000',
609 .msisdn = '543210123456789',
610 .ms_purged_ps = true,
611}
612
613db_subscr_purge(dbc, imsi0, true, true) --> 0
614
615db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
616struct hlr_subscriber {
617 .id = 1,
618 .imsi = '123456789000000',
619 .msisdn = '543210123456789',
620 .ms_purged_ps = true,
621}
622
623db_subscr_purge(dbc, imsi0, false, true) --> 0
624
625db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
626struct hlr_subscriber {
627 .id = 1,
628 .imsi = '123456789000000',
629 .msisdn = '543210123456789',
630}
631
632db_subscr_purge(dbc, imsi0, false, true) --> 0
633
634db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
635struct hlr_subscriber {
636 .id = 1,
637 .imsi = '123456789000000',
638 .msisdn = '543210123456789',
639}
640
641db_subscr_purge(dbc, imsi0, true, false) --> 0
642
643db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
644struct hlr_subscriber {
645 .id = 1,
646 .imsi = '123456789000000',
647 .msisdn = '543210123456789',
648 .ms_purged_cs = true,
649}
650
651db_subscr_purge(dbc, imsi0, true, false) --> 0
652
653db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
654struct hlr_subscriber {
655 .id = 1,
656 .imsi = '123456789000000',
657 .msisdn = '543210123456789',
658 .ms_purged_cs = true,
659}
660
661db_subscr_purge(dbc, imsi0, false, false) --> 0
662
663db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
664struct hlr_subscriber {
665 .id = 1,
666 .imsi = '123456789000000',
667 .msisdn = '543210123456789',
668}
669
670db_subscr_purge(dbc, imsi0, false, false) --> 0
671
672db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
673struct hlr_subscriber {
674 .id = 1,
675 .imsi = '123456789000000',
676 .msisdn = '543210123456789',
677}
678
679
680--- Purge on non-existent / invalid IMSI
681
682db_subscr_purge(dbc, unknown_imsi, true, true) --> -ENOENT
683DAUC Cannot purge PS: no such subscriber: IMSI='999999999'
684
685db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
Neels Hofmeyre50121e2017-10-09 17:48:51 +0200686
687db_subscr_purge(dbc, unknown_imsi, true, false) --> -ENOENT
688DAUC Cannot purge CS: no such subscriber: IMSI='999999999'
689
690db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
Neels Hofmeyre50121e2017-10-09 17:48:51 +0200691
692
Neels Hofmeyr98509462017-10-09 17:28:53 +0200693--- Delete non-existent / invalid IDs
694
695db_subscr_delete_by_id(dbc, 999) --> -ENOENT
696DAUC Cannot delete: no such subscriber: ID=999
697
698db_subscr_delete_by_id(dbc, -10) --> -ENOENT
699DAUC Cannot delete: no such subscriber: ID=-10
700
701
702--- Delete subscribers
703
704db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
705struct hlr_subscriber {
706 .id = 1,
707 .imsi = '123456789000000',
708 .msisdn = '543210123456789',
709}
710
711db_subscr_delete_by_id(dbc, id0) --> 0
712
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200713db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
Neels Hofmeyr98509462017-10-09 17:28:53 +0200714
715db_subscr_delete_by_id(dbc, id0) --> -ENOENT
716DAUC Cannot delete: no such subscriber: ID=1
717
718db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
719struct hlr_subscriber {
720 .id = 2,
721 .imsi = '123456789000001',
722}
723
724db_subscr_delete_by_id(dbc, id1) --> 0
725
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200726db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> -ENOENT
Neels Hofmeyr98509462017-10-09 17:28:53 +0200727
728db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
729struct hlr_subscriber {
730 .id = 3,
731 .imsi = '123456789000002',
732}
733
734db_subscr_delete_by_id(dbc, id2) --> 0
735
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200736db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> -ENOENT
Neels Hofmeyr98509462017-10-09 17:28:53 +0200737
738db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
739struct hlr_subscriber {
740 .id = 4,
741 .imsi = '123456',
742}
743
744db_subscr_delete_by_id(dbc, id_short) --> 0
745
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200746db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> -ENOENT
Neels Hofmeyr98509462017-10-09 17:28:53 +0200747
Oliver Smithcd2af5e2019-03-06 13:17:39 +0100748
749--- Create and delete subscribers with non-default nam_cs and nam_ps
750
751db_subscr_create(dbc, imsi0, 0x00) --> 0
752
753db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
754struct hlr_subscriber {
755 .id = 1,
756 .imsi = '123456789000000',
757 .nam_cs = false,
758 .nam_ps = false,
759}
760
761db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS) --> 0
762
763db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
764struct hlr_subscriber {
765 .id = 2,
766 .imsi = '123456789000001',
767 .nam_ps = false,
768}
769
770db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_PS) --> 0
771
772db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
773struct hlr_subscriber {
774 .id = 3,
775 .imsi = '123456789000002',
776 .nam_cs = false,
777}
778
779db_subscr_delete_by_id(dbc, id0) --> 0
780
781db_subscr_delete_by_id(dbc, id1) --> 0
782
783db_subscr_delete_by_id(dbc, id2) --> 0
784
Neels Hofmeyr98509462017-10-09 17:28:53 +0200785===== test_subscr_create_update_sel_delete: SUCCESS
786
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200787
788===== test_subscr_aud
789
790--- Get auth data for non-existent subscriber
791
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200792db_get_auth_data(dbc, unknown_imsi, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200793DAUC IMSI='999999999': No such subscriber
794
795
Harald Welte06f5af22019-08-21 20:01:31 +0200796db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -2
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100797DAUC IMSI='123456789000000': No such subscriber
798
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200799
800--- Create subscriber
801
Oliver Smithcd2af5e2019-03-06 13:17:39 +0100802db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200803
804db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
805struct hlr_subscriber {
806 .id = 1,
807 .imsi = '123456789000000',
808}
809
Ruben Undheim8b860e52018-11-16 08:47:26 +0100810db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200811DAUC IMSI='123456789000000': No 2G Auth Data
812DAUC IMSI='123456789000000': No 3G Auth Data
813
814
Harald Welte06f5af22019-08-21 20:01:31 +0200815db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100816DAUC IMSI='123456789000000': No 2G Auth Data
817DAUC IMSI='123456789000000': No 3G Auth Data
818
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200819
820--- Set auth data, 2G only
821
822db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
823
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200824db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200825DAUC IMSI='123456789000000': No 3G Auth Data
826
8272G: struct osmo_sub_auth_data {
828 .type = GSM,
829 .algo = COMP128v1,
830 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
831}
8323G: none
833
Harald Welte06f5af22019-08-21 20:01:31 +0200834db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 3
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100835DAUC IMSI='123456789000000': No 3G Auth Data
836DAUC IMSI='123456789000000': Calling to generate 3 vectors
837DAUC IMSI='123456789000000': Generated 3 vectors
838
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200839db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
840
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200841db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200842DAUC IMSI='123456789000000': No 3G Auth Data
843
8442G: struct osmo_sub_auth_data {
845 .type = GSM,
846 .algo = COMP128v1,
847 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
848}
8493G: none
850
851db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v2, "BeadedBeeAced1EbbedDefacedFacade")) --> 0
852
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200853db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200854DAUC IMSI='123456789000000': No 3G Auth Data
855
8562G: struct osmo_sub_auth_data {
857 .type = GSM,
858 .algo = COMP128v2,
859 .u.gsm.ki = 'beadedbeeaced1ebbeddefacedfacade',
860}
8613G: none
862
863db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "DeafBeddedBabeAcceededFadedDecaf")) --> 0
864
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200865db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200866DAUC IMSI='123456789000000': No 3G Auth Data
867
8682G: struct osmo_sub_auth_data {
869 .type = GSM,
870 .algo = COMP128v3,
871 .u.gsm.ki = 'deafbeddedbabeacceededfadeddecaf',
872}
8733G: none
874
875db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
876
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200877db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200878DAUC IMSI='123456789000000': No 3G Auth Data
879
8802G: struct osmo_sub_auth_data {
881 .type = GSM,
Oliver Smitha55e63b2023-02-22 16:55:16 +0100882 .algo = XOR-3G,
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200883 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
884}
8853G: none
886
887
888--- Remove 2G auth data
889
890db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
891
Ruben Undheim8b860e52018-11-16 08:47:26 +0100892db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200893DAUC IMSI='123456789000000': No 2G Auth Data
894DAUC IMSI='123456789000000': No 3G Auth Data
895
896
Harald Welte06f5af22019-08-21 20:01:31 +0200897db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100898DAUC IMSI='123456789000000': No 2G Auth Data
899DAUC IMSI='123456789000000': No 3G Auth Data
900
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200901db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> -ENOENT
902
903db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
904
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200905db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200906DAUC IMSI='123456789000000': No 3G Auth Data
907
9082G: struct osmo_sub_auth_data {
909 .type = GSM,
Oliver Smitha55e63b2023-02-22 16:55:16 +0100910 .algo = XOR-3G,
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200911 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
912}
9133G: none
914
915db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, "f000000000000f00000000000f000000")) --> 0
916
Ruben Undheim8b860e52018-11-16 08:47:26 +0100917db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200918DAUC IMSI='123456789000000': No 2G Auth Data
919DAUC IMSI='123456789000000': No 3G Auth Data
920
921
Harald Welte06f5af22019-08-21 20:01:31 +0200922db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100923DAUC IMSI='123456789000000': No 2G Auth Data
924DAUC IMSI='123456789000000': No 3G Auth Data
925
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200926
927--- Set auth data, 3G only
928
929db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
930
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200931db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200932DAUC IMSI='123456789000000': No 2G Auth Data
933
9342G: none
9353G: struct osmo_sub_auth_data {
936 .type = UMTS,
937 .algo = MILENAGE,
938 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
939 .u.umts.opc_is_op = 1,
940 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
941 .u.umts.amf = '0000',
942 .u.umts.ind_bitlen = 5,
943}
944
Harald Welte06f5af22019-08-21 20:01:31 +0200945db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 3
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100946DAUC IMSI='123456789000000': No 2G Auth Data
947DAUC IMSI='123456789000000': Calling to generate 3 vectors
948DAUC IMSI='123456789000000': Generated 3 vectors
949DAUC IMSI='123456789000000': Updating SQN=0 in DB
950
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200951db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
952
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200953db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200954DAUC IMSI='123456789000000': No 2G Auth Data
955
9562G: none
9573G: struct osmo_sub_auth_data {
958 .type = UMTS,
959 .algo = MILENAGE,
960 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
961 .u.umts.opc_is_op = 1,
962 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
963 .u.umts.amf = '0000',
964 .u.umts.ind_bitlen = 5,
965}
966
967db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "Deaf0ff1ceD0d0DabbedD1ced1ceF00d", true, "F1bbed0afD0eF0bD0ffed0ddF1fe0b0e", 0)) --> 0
968
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200969db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200970DAUC IMSI='123456789000000': No 2G Auth Data
971
9722G: none
9733G: struct osmo_sub_auth_data {
974 .type = UMTS,
975 .algo = MILENAGE,
976 .u.umts.opc = 'deaf0ff1ced0d0dabbedd1ced1cef00d',
977 .u.umts.opc_is_op = 1,
978 .u.umts.k = 'f1bbed0afd0ef0bd0ffed0ddf1fe0b0e',
979 .u.umts.amf = '0000',
980}
981
982db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", OSMO_MILENAGE_IND_BITLEN_MAX)) --> 0
983
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200984db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200985DAUC IMSI='123456789000000': No 2G Auth Data
986
9872G: none
9883G: struct osmo_sub_auth_data {
989 .type = UMTS,
990 .algo = MILENAGE,
991 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
992 .u.umts.opc_is_op = 0,
993 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
994 .u.umts.amf = '0000',
995 .u.umts.ind_bitlen = 28,
996}
997
998db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
999
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001000db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001001DAUC IMSI='123456789000000': No 2G Auth Data
1002
10032G: none
10043G: struct osmo_sub_auth_data {
1005 .type = UMTS,
1006 .algo = MILENAGE,
1007 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
1008 .u.umts.opc_is_op = 0,
1009 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
1010 .u.umts.amf = '0000',
1011 .u.umts.ind_bitlen = 5,
1012}
1013
1014
1015--- Remove 3G auth data
1016
1017db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> 0
1018
Ruben Undheim8b860e52018-11-16 08:47:26 +01001019db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001020DAUC IMSI='123456789000000': No 2G Auth Data
1021DAUC IMSI='123456789000000': No 3G Auth Data
1022
1023
Harald Welte06f5af22019-08-21 20:01:31 +02001024db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001025DAUC IMSI='123456789000000': No 2G Auth Data
1026DAUC IMSI='123456789000000': No 3G Auth Data
1027
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001028db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> -ENOENT
1029
1030db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
1031
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001032db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001033DAUC IMSI='123456789000000': No 2G Auth Data
1034
10352G: none
10363G: struct osmo_sub_auth_data {
1037 .type = UMTS,
1038 .algo = MILENAGE,
1039 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
1040 .u.umts.opc_is_op = 0,
1041 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
1042 .u.umts.amf = '0000',
1043 .u.umts.ind_bitlen = 5,
1044}
1045
Harald Welte06f5af22019-08-21 20:01:31 +02001046db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 3
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001047DAUC IMSI='123456789000000': No 2G Auth Data
1048DAUC IMSI='123456789000000': Calling to generate 3 vectors
1049DAUC IMSI='123456789000000': Generated 3 vectors
1050DAUC IMSI='123456789000000': Updating SQN=0 in DB
1051
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001052db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, "asdfasdfasd", false, "asdfasdfasdf", 99999)) --> 0
1053
Ruben Undheim8b860e52018-11-16 08:47:26 +01001054db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001055DAUC IMSI='123456789000000': No 2G Auth Data
1056DAUC IMSI='123456789000000': No 3G Auth Data
1057
1058
Harald Welte06f5af22019-08-21 20:01:31 +02001059db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001060DAUC IMSI='123456789000000': No 2G Auth Data
1061DAUC IMSI='123456789000000': No 3G Auth Data
1062
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001063
1064--- Set auth data, 2G and 3G
1065
1066db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "CededEffacedAceFacedBadFadedBeef")) --> 0
1067
1068db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", 5)) --> 0
1069
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001070db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001071
10722G: struct osmo_sub_auth_data {
1073 .type = GSM,
1074 .algo = COMP128v3,
1075 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1076}
10773G: struct osmo_sub_auth_data {
1078 .type = UMTS,
1079 .algo = MILENAGE,
1080 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1081 .u.umts.opc_is_op = 0,
1082 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1083 .u.umts.amf = '0000',
1084 .u.umts.ind_bitlen = 5,
1085}
1086
Harald Welte06f5af22019-08-21 20:01:31 +02001087db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 3
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001088DAUC IMSI='123456789000000': Calling to generate 3 vectors
1089DAUC IMSI='123456789000000': Generated 3 vectors
1090DAUC IMSI='123456789000000': Updating SQN=0 in DB
1091
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001092
1093--- Set invalid auth data
1094
1095db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(99999, "f000000000000f00000000000f000000")) --> -EINVAL
1096DAUC Cannot update auth tokens: Unknown auth algo: 99999
1097
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001098db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001099
11002G: struct osmo_sub_auth_data {
1101 .type = GSM,
1102 .algo = COMP128v3,
1103 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1104}
11053G: struct osmo_sub_auth_data {
1106 .type = UMTS,
1107 .algo = MILENAGE,
1108 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1109 .u.umts.opc_is_op = 0,
1110 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1111 .u.umts.amf = '0000',
1112 .u.umts.ind_bitlen = 5,
1113}
1114
1115db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f000000000000f00000000000f000000f00000000")) --> -EINVAL
1116DAUC Cannot update auth tokens: Invalid KI: 'f000000000000f00000000000f000000f00000000'
1117
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001118db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001119
11202G: struct osmo_sub_auth_data {
1121 .type = GSM,
1122 .algo = COMP128v3,
1123 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1124}
11253G: struct osmo_sub_auth_data {
1126 .type = UMTS,
1127 .algo = MILENAGE,
1128 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1129 .u.umts.opc_is_op = 0,
1130 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1131 .u.umts.amf = '0000',
1132 .u.umts.ind_bitlen = 5,
1133}
1134
1135db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f00")) --> -EINVAL
1136DAUC Cannot update auth tokens: Invalid KI: 'f00'
1137
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001138db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001139
11402G: struct osmo_sub_auth_data {
1141 .type = GSM,
1142 .algo = COMP128v3,
1143 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1144}
11453G: struct osmo_sub_auth_data {
1146 .type = UMTS,
1147 .algo = MILENAGE,
1148 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1149 .u.umts.opc_is_op = 0,
1150 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1151 .u.umts.amf = '0000',
1152 .u.umts.ind_bitlen = 5,
1153}
1154
1155db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_MILENAGE, "0123456789abcdef0123456789abcdef")) --> -EINVAL
1156DAUC Cannot update auth tokens: auth algo not suited for 2G: MILENAGE
1157
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001158db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001159
11602G: struct osmo_sub_auth_data {
1161 .type = GSM,
1162 .algo = COMP128v3,
1163 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1164}
11653G: struct osmo_sub_auth_data {
1166 .type = UMTS,
1167 .algo = MILENAGE,
1168 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1169 .u.umts.opc_is_op = 0,
1170 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1171 .u.umts.amf = '0000',
1172 .u.umts.ind_bitlen = 5,
1173}
1174
1175db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "0f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1176DAUC Cannot update auth tokens: Invalid OP/OPC: '0f000000000000f00000000000f000000'
1177
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001178db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001179
11802G: struct osmo_sub_auth_data {
1181 .type = GSM,
1182 .algo = COMP128v3,
1183 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1184}
11853G: struct osmo_sub_auth_data {
1186 .type = UMTS,
1187 .algo = MILENAGE,
1188 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1189 .u.umts.opc_is_op = 0,
1190 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1191 .u.umts.amf = '0000',
1192 .u.umts.ind_bitlen = 5,
1193}
1194
1195db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "000000000000f00000000000f000000", 5)) --> -EINVAL
1196DAUC Cannot update auth tokens: Invalid K: '000000000000f00000000000f000000'
1197
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001198db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001199
12002G: struct osmo_sub_auth_data {
1201 .type = GSM,
1202 .algo = COMP128v3,
1203 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1204}
12053G: struct osmo_sub_auth_data {
1206 .type = UMTS,
1207 .algo = MILENAGE,
1208 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1209 .u.umts.opc_is_op = 0,
1210 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1211 .u.umts.amf = '0000',
1212 .u.umts.ind_bitlen = 5,
1213}
1214
1215db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", OSMO_MILENAGE_IND_BITLEN_MAX + 1)) --> -EINVAL
1216DAUC Cannot update auth tokens: Invalid ind_bitlen: 29
1217
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001218db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001219
12202G: struct osmo_sub_auth_data {
1221 .type = GSM,
1222 .algo = COMP128v3,
1223 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1224}
12253G: struct osmo_sub_auth_data {
1226 .type = UMTS,
1227 .algo = MILENAGE,
1228 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1229 .u.umts.opc_is_op = 0,
1230 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1231 .u.umts.amf = '0000',
1232 .u.umts.ind_bitlen = 5,
1233}
1234
1235db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "X000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1236DAUC Cannot update auth tokens: Invalid OP/OPC: 'X000000000000f00000000000f000000'
1237
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001238db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001239
12402G: struct osmo_sub_auth_data {
1241 .type = GSM,
1242 .algo = COMP128v3,
1243 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1244}
12453G: struct osmo_sub_auth_data {
1246 .type = UMTS,
1247 .algo = MILENAGE,
1248 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1249 .u.umts.opc_is_op = 0,
1250 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1251 .u.umts.amf = '0000',
1252 .u.umts.ind_bitlen = 5,
1253}
1254
1255db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000 f00000000000 f000000", 5)) --> -EINVAL
1256DAUC Cannot update auth tokens: Invalid K: 'f000000000000 f00000000000 f000000'
1257
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001258db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001259
12602G: struct osmo_sub_auth_data {
1261 .type = GSM,
1262 .algo = COMP128v3,
1263 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1264}
12653G: struct osmo_sub_auth_data {
1266 .type = UMTS,
1267 .algo = MILENAGE,
1268 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1269 .u.umts.opc_is_op = 0,
1270 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1271 .u.umts.amf = '0000',
1272 .u.umts.ind_bitlen = 5,
1273}
1274
1275
1276--- Delete subscriber
1277
1278db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1279struct hlr_subscriber {
1280 .id = 1,
1281 .imsi = '123456789000000',
1282}
1283
1284db_subscr_delete_by_id(dbc, id) --> 0
1285
1286db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001287
1288
1289--- Re-add subscriber and verify auth data didn't come back
1290
Oliver Smithcd2af5e2019-03-06 13:17:39 +01001291db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001292
1293db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1294struct hlr_subscriber {
1295 .id = 1,
1296 .imsi = '123456789000000',
1297}
1298
Ruben Undheim8b860e52018-11-16 08:47:26 +01001299db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001300DAUC IMSI='123456789000000': No 2G Auth Data
1301DAUC IMSI='123456789000000': No 3G Auth Data
1302
1303
Harald Welte06f5af22019-08-21 20:01:31 +02001304db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001305DAUC IMSI='123456789000000': No 2G Auth Data
1306DAUC IMSI='123456789000000': No 3G Auth Data
1307
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001308db_subscr_delete_by_id(dbc, id) --> 0
1309
1310db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001311
Harald Welte06f5af22019-08-21 20:01:31 +02001312db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -2
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001313DAUC IMSI='123456789000000': No such subscriber
1314
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001315===== test_subscr_aud: SUCCESS
1316
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001317
Oliver Smith6401b902019-07-24 11:32:45 +02001318===== test_subscr_aud_invalid_len
1319
1320--- Create subscriber
1321
1322db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
1323
1324db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1325struct hlr_subscriber {
1326 .id = 1,
1327 .imsi = '123456789000000',
1328}
1329
1330
1331--- Set auth data, 2G only, with invalid Ki length
1332
1333db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
1334
1335raw SQL: UPDATE auc_2g SET ki = '0123456789abcdef0123456789abcde'
1336sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
1337
1338sqlite3_step(stmt) --> SQLITE_DONE
1339
Pau Espin Pedrol28f07742019-08-13 11:59:01 +02001340db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Oliver Smith6401b902019-07-24 11:32:45 +02001341DAUC IMSI='123456789000000': Error reading Ki, expected length 16 but has length 15
1342DAUC IMSI='123456789000000': No 3G Auth Data
1343
1344
1345
1346--- Remove 2G auth data
1347
1348db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
1349
1350
1351--- Set auth data, 3G only, with invalid K length
1352
1353db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1354
1355raw SQL: UPDATE auc_3g SET k = 'C01ffedC1cadaeAc1d1f1edAcac1aB0'
1356sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
1357
1358sqlite3_step(stmt) --> SQLITE_DONE
1359
1360db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
1361DAUC IMSI='123456789000000': No 2G Auth Data
1362DAUC IMSI='123456789000000': Error reading K, expected length 16 but has length 15
1363
1364
1365
1366--- Set auth data, 3G only, with invalid OP length
1367
1368db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1369
1370raw SQL: UPDATE auc_3g SET op = 'BeefedCafeFaceAcedAddedDecadeFe'
1371sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
1372
1373sqlite3_step(stmt) --> SQLITE_DONE
1374
1375db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
1376DAUC IMSI='123456789000000': No 2G Auth Data
1377DAUC IMSI='123456789000000': Error reading OP, expected length 16 but has length 15
1378
1379
1380
1381--- Set auth data, 3G only, with invalid OPC length
1382
1383db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1384
1385raw SQL: UPDATE auc_3g SET opc = 'BeefedCafeFaceAcedAddedDecadeFe'
1386sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
1387
1388sqlite3_step(stmt) --> SQLITE_DONE
1389
1390db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
1391DAUC IMSI='123456789000000': No 2G Auth Data
1392DAUC IMSI='123456789000000': Error reading OPC, expected length 16 but has length 15
1393
1394
1395
1396--- Delete subscriber
1397
1398db_subscr_delete_by_id(dbc, id) --> 0
1399
1400===== test_subscr_aud_invalid_len: SUCCESS
1401
1402
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001403===== test_subscr_sqn
1404
1405--- Set SQN for unknown subscriber
1406
1407db_update_sqn(dbc, 99, 999) --> -ENOENT
1408DAUC Cannot update SQN for subscriber ID=99: no auc_3g entry for such subscriber
1409
1410db_subscr_get_by_id(dbc, 99, &g_subscr) --> -ENOENT
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001411
1412db_update_sqn(dbc, 9999, 99) --> -ENOENT
1413DAUC Cannot update SQN for subscriber ID=9999: no auc_3g entry for such subscriber
1414
1415db_subscr_get_by_id(dbc, 9999, &g_subscr) --> -ENOENT
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001416
1417
1418--- Create subscriber
1419
Oliver Smithcd2af5e2019-03-06 13:17:39 +01001420db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001421
1422db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1423struct hlr_subscriber {
1424 .id = 1,
1425 .imsi = '123456789000000',
1426}
1427
Ruben Undheim8b860e52018-11-16 08:47:26 +01001428db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001429DAUC IMSI='123456789000000': No 2G Auth Data
1430DAUC IMSI='123456789000000': No 3G Auth Data
1431
1432
1433
1434--- Set SQN, but no 3G auth data present
1435
1436db_update_sqn(dbc, id, 123) --> -ENOENT
1437DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1438
Ruben Undheim8b860e52018-11-16 08:47:26 +01001439db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001440DAUC IMSI='123456789000000': No 2G Auth Data
1441DAUC IMSI='123456789000000': No 3G Auth Data
1442
1443
1444db_update_sqn(dbc, id, 543) --> -ENOENT
1445DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1446
Ruben Undheim8b860e52018-11-16 08:47:26 +01001447db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001448DAUC IMSI='123456789000000': No 2G Auth Data
1449DAUC IMSI='123456789000000': No 3G Auth Data
1450
1451
1452
1453--- Set auth 3G data
1454
1455db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1456
1457db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1458DAUC IMSI='123456789000000': No 2G Auth Data
1459
14602G: none
14613G: struct osmo_sub_auth_data {
1462 .type = UMTS,
1463 .algo = MILENAGE,
1464 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1465 .u.umts.opc_is_op = 1,
1466 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1467 .u.umts.amf = '0000',
1468 .u.umts.ind_bitlen = 5,
1469}
1470
1471
1472--- Set SQN
1473
1474db_update_sqn(dbc, id, 23315) --> 0
1475
1476db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1477DAUC IMSI='123456789000000': No 2G Auth Data
1478
14792G: none
14803G: struct osmo_sub_auth_data {
1481 .type = UMTS,
1482 .algo = MILENAGE,
1483 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1484 .u.umts.opc_is_op = 1,
1485 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1486 .u.umts.amf = '0000',
1487 .u.umts.sqn = 23315,
1488 .u.umts.sqn = 0x5b13,
1489 .u.umts.ind_bitlen = 5,
1490}
1491
1492db_update_sqn(dbc, id, 23315) --> 0
1493
1494db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1495DAUC IMSI='123456789000000': No 2G Auth Data
1496
14972G: none
14983G: struct osmo_sub_auth_data {
1499 .type = UMTS,
1500 .algo = MILENAGE,
1501 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1502 .u.umts.opc_is_op = 1,
1503 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1504 .u.umts.amf = '0000',
1505 .u.umts.sqn = 23315,
1506 .u.umts.sqn = 0x5b13,
1507 .u.umts.ind_bitlen = 5,
1508}
1509
1510db_update_sqn(dbc, id, 423) --> 0
1511
1512db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1513DAUC IMSI='123456789000000': No 2G Auth Data
1514
15152G: none
15163G: struct osmo_sub_auth_data {
1517 .type = UMTS,
1518 .algo = MILENAGE,
1519 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1520 .u.umts.opc_is_op = 1,
1521 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1522 .u.umts.amf = '0000',
1523 .u.umts.sqn = 423,
1524 .u.umts.sqn = 0x1a7,
1525 .u.umts.ind_bitlen = 5,
1526}
1527
1528
1529--- Set SQN: thru uint64_t range, using the int64_t SQLite bind
1530
1531db_update_sqn(dbc, id, 0) --> 0
1532
1533db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1534DAUC IMSI='123456789000000': No 2G Auth Data
1535
15362G: none
15373G: struct osmo_sub_auth_data {
1538 .type = UMTS,
1539 .algo = MILENAGE,
1540 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1541 .u.umts.opc_is_op = 1,
1542 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1543 .u.umts.amf = '0000',
1544 .u.umts.ind_bitlen = 5,
1545}
1546
1547db_update_sqn(dbc, id, INT64_MAX) --> 0
1548
1549db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1550DAUC IMSI='123456789000000': No 2G Auth Data
1551
15522G: none
15533G: struct osmo_sub_auth_data {
1554 .type = UMTS,
1555 .algo = MILENAGE,
1556 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1557 .u.umts.opc_is_op = 1,
1558 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1559 .u.umts.amf = '0000',
1560 .u.umts.sqn = 9223372036854775807,
1561 .u.umts.sqn = 0x7fffffffffffffff,
1562 .u.umts.ind_bitlen = 5,
1563}
1564
1565db_update_sqn(dbc, id, INT64_MIN) --> 0
1566
1567db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1568DAUC IMSI='123456789000000': No 2G Auth Data
1569
15702G: none
15713G: struct osmo_sub_auth_data {
1572 .type = UMTS,
1573 .algo = MILENAGE,
1574 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1575 .u.umts.opc_is_op = 1,
1576 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1577 .u.umts.amf = '0000',
1578 .u.umts.sqn = 9223372036854775808,
1579 .u.umts.sqn = 0x8000000000000000,
1580 .u.umts.ind_bitlen = 5,
1581}
1582
1583db_update_sqn(dbc, id, UINT64_MAX) --> 0
1584
1585db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1586DAUC IMSI='123456789000000': No 2G Auth Data
1587
15882G: none
15893G: struct osmo_sub_auth_data {
1590 .type = UMTS,
1591 .algo = MILENAGE,
1592 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1593 .u.umts.opc_is_op = 1,
1594 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1595 .u.umts.amf = '0000',
1596 .u.umts.sqn = 18446744073709551615,
1597 .u.umts.sqn = 0xffffffffffffffff,
1598 .u.umts.ind_bitlen = 5,
1599}
1600
1601
1602--- Delete subscriber
1603
1604db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1605struct hlr_subscriber {
1606 .id = 1,
1607 .imsi = '123456789000000',
1608}
1609
1610db_subscr_delete_by_id(dbc, id) --> 0
1611
1612db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001613
1614===== test_subscr_sqn: SUCCESS
1615
Neels Hofmeyr3f9d1972019-12-12 04:04:53 +01001616
1617===== test_ind
1618db_ind(dbc, &vlr, &ind) --> 0
1619
1620"msc-23\0" ind = 1
1621
1622db_ind(dbc, &vlr, &ind) --> 0
1623
1624"sgsn-11\0" ind = 2
1625
1626db_ind(dbc, &vlr, &ind) --> 0
1627
1628"msc-42\0" ind = 3
1629
1630db_ind(dbc, &vlr, &ind) --> 0
1631
1632"sgsn-22\0" ind = 4
1633
1634db_ind(dbc, &vlr, &ind) --> 0
1635
1636"msc-0x17\0" ind = 5
1637
1638db_ind(dbc, &vlr, &ind) --> 0
1639
1640"sgsn-0xaa\0" ind = 6
1641
1642db_ind(dbc, &vlr, &ind) --> 0
1643
1644"msc-42\0" ind = 3
1645
1646db_ind(dbc, &vlr, &ind) --> 0
1647
1648"sgsn-22\0" ind = 4
1649
1650db_ind(dbc, &vlr, &ind) --> 0
1651
1652"msc-0x17\0" ind = 5
1653
1654db_ind(dbc, &vlr, &ind) --> 0
1655
1656"sgsn-0xaa\0" ind = 6
1657
1658db_ind(dbc, &vlr, &ind) --> 0
1659
1660"sgsn-0xbb\0" ind = 7
1661
1662db_ind(dbc, &vlr, &ind) --> 0
1663
1664"msc-0x2a\0" ind = 8
1665
1666db_ind(dbc, &vlr, &ind) --> 0
1667
1668"msc-42\0" ind = 3
1669
1670db_ind(dbc, &vlr, &ind) --> 0
1671
1672"sgsn-22\0" ind = 4
1673
1674db_ind(dbc, &vlr, &ind) --> 0
1675
1676"msc-23\0" ind = 1
1677
1678db_ind(dbc, &vlr, &ind) --> 0
1679
1680"sgsn-11\0" ind = 2
1681
1682db_ind_del(dbc, &vlr) --> 0
1683
1684"msc-0x17\0" ind deleted
1685
1686db_ind(dbc, &vlr, &ind) --> 0
1687
1688"msc-0x2a\0" ind = 8
1689
1690db_ind(dbc, &vlr, &ind) --> 0
1691
1692"any-unknown\0" ind = 9
1693
1694===== test_ind: SUCCESS
1695