blob: 64235505d98bb7e4042ca4d5db99f33445006876 [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
Oliver Smithcd2af5e2019-03-06 13:17:39 +010030db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
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
Oliver Smithcd2af5e2019-03-06 13:17:39 +010039db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020040DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
41
Oliver Smithcd2af5e2019-03-06 13:17:39 +010042db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
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
Oliver Smithcd2af5e2019-03-06 13:17:39 +010051db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020052DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
53
Oliver Smithcd2af5e2019-03-06 13:17:39 +010054db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
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
67DAUC Cannot read subscriber from db: IMSI='123456789000003': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020068
Oliver Smithcd2af5e2019-03-06 13:17:39 +010069db_subscr_create(dbc, "123456789000002123456", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020070DAUC Cannot create subscriber: invalid IMSI: '123456789000002123456'
71
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020072db_subscr_get_by_imsi(dbc, "123456789000002123456", &g_subscr) --> -ENOENT
73DAUC Cannot read subscriber from db: IMSI='123456789000002123456': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020074
Oliver Smithcd2af5e2019-03-06 13:17:39 +010075db_subscr_create(dbc, "foobar123", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020076DAUC Cannot create subscriber: invalid IMSI: 'foobar123'
77
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020078db_subscr_get_by_imsi(dbc, "foobar123", &g_subscr) --> -ENOENT
79DAUC Cannot read subscriber from db: IMSI='foobar123': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020080
Oliver Smithcd2af5e2019-03-06 13:17:39 +010081db_subscr_create(dbc, "123", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020082DAUC Cannot create subscriber: invalid IMSI: '123'
83
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020084db_subscr_get_by_imsi(dbc, "123", &g_subscr) --> -ENOENT
85DAUC Cannot read subscriber from db: IMSI='123': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020086
Oliver Smithcd2af5e2019-03-06 13:17:39 +010087db_subscr_create(dbc, short_imsi, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +020088
89db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
90struct hlr_subscriber {
91 .id = 4,
92 .imsi = '123456',
93}
94
95
Oliver Smith6b73fd92019-03-06 13:49:05 +010096--- Check if subscriber exists (by IMSI)
97
98db_subscr_exists_by_imsi(dbc, imsi0) --> 0
99
100db_subscr_exists_by_imsi(dbc, unknown_imsi) --> -ENOENT
101
102
Neels Hofmeyr98509462017-10-09 17:28:53 +0200103--- Set valid / invalid MSISDN
104
105db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
106struct hlr_subscriber {
107 .id = 1,
108 .imsi = '123456789000000',
109}
110
111db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321") --> 0
112
113db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
114struct hlr_subscriber {
115 .id = 1,
116 .imsi = '123456789000000',
117 .msisdn = '54321',
118}
119
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200120db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
121struct hlr_subscriber {
122 .id = 1,
123 .imsi = '123456789000000',
124 .msisdn = '54321',
125}
126
Neels Hofmeyr98509462017-10-09 17:28:53 +0200127db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321012345678912345678") --> -EINVAL
128DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '54321012345678912345678'
129
130db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
131struct hlr_subscriber {
132 .id = 1,
133 .imsi = '123456789000000',
134 .msisdn = '54321',
135}
136
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200137db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
138struct hlr_subscriber {
139 .id = 1,
140 .imsi = '123456789000000',
141 .msisdn = '54321',
142}
143
144db_subscr_get_by_msisdn(dbc, "54321012345678912345678", &g_subscr) --> -ENOENT
145DAUC Cannot read subscriber from db: MSISDN='54321012345678912345678': No such subscriber
146
Neels Hofmeyr98509462017-10-09 17:28:53 +0200147db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543 21") --> -EINVAL
148DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '543 21'
149
150db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
151struct hlr_subscriber {
152 .id = 1,
153 .imsi = '123456789000000',
154 .msisdn = '54321',
155}
156
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200157db_subscr_get_by_msisdn(dbc, "543 21", &g_subscr) --> -ENOENT
158DAUC Cannot read subscriber from db: MSISDN='543 21': No such subscriber
159
Neels Hofmeyr98509462017-10-09 17:28:53 +0200160db_subscr_update_msisdn_by_imsi(dbc, imsi0, "foobar123") --> -EINVAL
161DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: 'foobar123'
162
163db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
164struct hlr_subscriber {
165 .id = 1,
166 .imsi = '123456789000000',
167 .msisdn = '54321',
168}
169
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200170db_subscr_get_by_msisdn(dbc, "foobar123", &g_subscr) --> -ENOENT
171DAUC Cannot read subscriber from db: MSISDN='foobar123': No such subscriber
172
Neels Hofmeyr98509462017-10-09 17:28:53 +0200173db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5") --> 0
174
175db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
176struct hlr_subscriber {
177 .id = 1,
178 .imsi = '123456789000000',
179 .msisdn = '5',
180}
181
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200182db_subscr_get_by_msisdn(dbc, "5", &g_subscr) --> 0
183struct hlr_subscriber {
184 .id = 1,
185 .imsi = '123456789000000',
186 .msisdn = '5',
187}
188
189db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> -ENOENT
190DAUC Cannot read subscriber from db: MSISDN='54321': No such subscriber
191
Neels Hofmeyr98509462017-10-09 17:28:53 +0200192db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543210123456789") --> 0
193
194db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
195struct hlr_subscriber {
196 .id = 1,
197 .imsi = '123456789000000',
198 .msisdn = '543210123456789',
199}
200
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200201db_subscr_get_by_msisdn(dbc, "543210123456789", &g_subscr) --> 0
202struct hlr_subscriber {
203 .id = 1,
204 .imsi = '123456789000000',
205 .msisdn = '543210123456789',
206}
207
Neels Hofmeyr98509462017-10-09 17:28:53 +0200208db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5432101234567891") --> -EINVAL
209DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '5432101234567891'
210
211db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
212struct hlr_subscriber {
213 .id = 1,
214 .imsi = '123456789000000',
215 .msisdn = '543210123456789',
216}
217
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200218db_subscr_get_by_msisdn(dbc, "5432101234567891", &g_subscr) --> -ENOENT
219DAUC Cannot read subscriber from db: MSISDN='5432101234567891': No such subscriber
220
Neels Hofmeyr98509462017-10-09 17:28:53 +0200221
Vadim Yanitskiyc13599d2019-03-30 17:03:42 +0700222--- Check if subscriber exists (by MSISDN)
223
224db_subscr_exists_by_msisdn(dbc, "543210123456789") --> 0
225
226db_subscr_exists_by_msisdn(dbc, "5432101234567891") --> -ENOENT
227
228
Neels Hofmeyr98509462017-10-09 17:28:53 +0200229--- Set MSISDN on non-existent / invalid IMSI
230
231db_subscr_update_msisdn_by_imsi(dbc, unknown_imsi, "99") --> -ENOENT
232DAUC Cannot update MSISDN: no such subscriber: IMSI='999999999'
233
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200234db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
235DAUC Cannot read subscriber from db: MSISDN='99': No such subscriber
236
Neels Hofmeyr98509462017-10-09 17:28:53 +0200237db_subscr_update_msisdn_by_imsi(dbc, "foobar", "99") --> -ENOENT
238DAUC Cannot update MSISDN: no such subscriber: IMSI='foobar'
239
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200240db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
241DAUC Cannot read subscriber from db: MSISDN='99': No such subscriber
242
Neels Hofmeyr98509462017-10-09 17:28:53 +0200243
Oliver Smith81db3892019-01-09 12:03:51 +0100244--- Set valid / invalid IMEI
245
246db_subscr_update_imei_by_imsi(dbc, imsi0, "12345678901234") --> 0
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_update_imei_by_imsi(dbc, imsi0, "123456789012345") --> -EINVAL
257DAUC Cannot update subscriber IMSI='123456789000000': invalid IMEI: '123456789012345'
258
259db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
260struct hlr_subscriber {
261 .id = 1,
262 .imsi = '123456789000000',
263 .msisdn = '543210123456789',
264 .imei = '12345678901234',
265}
266
267db_subscr_get_by_imei(dbc, "123456789012345", &g_subscr) --> -ENOENT
268DAUC Cannot read subscriber from db: IMEI=123456789012345: No such subscriber
269
270
271--- Set the same IMEI again
272
273db_subscr_update_imei_by_imsi(dbc, imsi0, "12345678901234") --> 0
274
275db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
276struct hlr_subscriber {
277 .id = 1,
278 .imsi = '123456789000000',
279 .msisdn = '543210123456789',
280 .imei = '12345678901234',
281}
282
283
284--- Remove IMEI
285
286db_subscr_update_imei_by_imsi(dbc, imsi0, NULL) --> 0
287
288db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> -ENOENT
289DAUC Cannot read subscriber from db: IMEI=12345678901234: No such subscriber
290
291
Neels Hofmeyre8ccd502017-10-06 04:10:06 +0200292--- Set / unset nam_cs and nam_ps
293
294db_subscr_nam(dbc, imsi0, false, true) --> 0
295
296db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
297struct hlr_subscriber {
298 .id = 1,
299 .imsi = '123456789000000',
300 .msisdn = '543210123456789',
301 .nam_ps = false,
302}
303
304db_subscr_nam(dbc, imsi0, false, false) --> 0
305
306db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
307struct hlr_subscriber {
308 .id = 1,
309 .imsi = '123456789000000',
310 .msisdn = '543210123456789',
311 .nam_cs = false,
312 .nam_ps = false,
313}
314
315db_subscr_nam(dbc, imsi0, true, false) --> 0
316
317db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
318struct hlr_subscriber {
319 .id = 1,
320 .imsi = '123456789000000',
321 .msisdn = '543210123456789',
322 .nam_ps = false,
323}
324
325db_subscr_nam(dbc, imsi0, true, true) --> 0
326
327db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
328struct hlr_subscriber {
329 .id = 1,
330 .imsi = '123456789000000',
331 .msisdn = '543210123456789',
332}
333
334
335--- Set / unset nam_cs and nam_ps *again*
336
337db_subscr_nam(dbc, imsi0, false, true) --> 0
338
339db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
340struct hlr_subscriber {
341 .id = 1,
342 .imsi = '123456789000000',
343 .msisdn = '543210123456789',
344 .nam_ps = false,
345}
346
347db_subscr_nam(dbc, imsi0, false, true) --> 0
348
349db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
350struct hlr_subscriber {
351 .id = 1,
352 .imsi = '123456789000000',
353 .msisdn = '543210123456789',
354 .nam_ps = false,
355}
356
357db_subscr_nam(dbc, imsi0, false, false) --> 0
358
359db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
360struct hlr_subscriber {
361 .id = 1,
362 .imsi = '123456789000000',
363 .msisdn = '543210123456789',
364 .nam_cs = false,
365 .nam_ps = false,
366}
367
368db_subscr_nam(dbc, imsi0, false, false) --> 0
369
370db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
371struct hlr_subscriber {
372 .id = 1,
373 .imsi = '123456789000000',
374 .msisdn = '543210123456789',
375 .nam_cs = false,
376 .nam_ps = false,
377}
378
379db_subscr_nam(dbc, imsi0, true, true) --> 0
380
381db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
382struct hlr_subscriber {
383 .id = 1,
384 .imsi = '123456789000000',
385 .msisdn = '543210123456789',
386 .nam_cs = false,
387}
388
389db_subscr_nam(dbc, imsi0, true, true) --> 0
390
391db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
392struct hlr_subscriber {
393 .id = 1,
394 .imsi = '123456789000000',
395 .msisdn = '543210123456789',
396 .nam_cs = false,
397}
398
399db_subscr_nam(dbc, imsi0, true, false) --> 0
400
401db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
402struct hlr_subscriber {
403 .id = 1,
404 .imsi = '123456789000000',
405 .msisdn = '543210123456789',
406}
407
408db_subscr_nam(dbc, imsi0, true, false) --> 0
409
410db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
411struct hlr_subscriber {
412 .id = 1,
413 .imsi = '123456789000000',
414 .msisdn = '543210123456789',
415}
416
417
418--- Set nam_cs and nam_ps on non-existent / invalid IMSI
419
420db_subscr_nam(dbc, unknown_imsi, false, true) --> -ENOENT
421DAUC Cannot disable PS: no such subscriber: IMSI='999999999'
422
423db_subscr_nam(dbc, unknown_imsi, false, false) --> -ENOENT
424DAUC Cannot disable CS: no such subscriber: IMSI='999999999'
425
426db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
427DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
428
429db_subscr_nam(dbc, "foobar", false, true) --> -ENOENT
430DAUC Cannot disable PS: no such subscriber: IMSI='foobar'
431
432db_subscr_nam(dbc, "foobar", false, false) --> -ENOENT
433DAUC Cannot disable CS: no such subscriber: IMSI='foobar'
434
435
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200436--- Record LU for PS and CS (SGSN and VLR names)
437
438db_subscr_lu(dbc, id0, "5952", true) --> 0
439
440db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
441struct hlr_subscriber {
442 .id = 1,
443 .imsi = '123456789000000',
444 .msisdn = '543210123456789',
445 .sgsn_number = '5952',
446}
447
448db_subscr_lu(dbc, id0, "712", false) --> 0
449
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 = '5952',
457}
458
459
460--- Record LU for PS and CS (SGSN and VLR names) *again*
461
462db_subscr_lu(dbc, id0, "111", true) --> 0
463
464db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
465struct hlr_subscriber {
466 .id = 1,
467 .imsi = '123456789000000',
468 .msisdn = '543210123456789',
469 .vlr_number = '712',
470 .sgsn_number = '111',
471}
472
473db_subscr_lu(dbc, id0, "111", true) --> 0
474
475db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
476struct hlr_subscriber {
477 .id = 1,
478 .imsi = '123456789000000',
479 .msisdn = '543210123456789',
480 .vlr_number = '712',
481 .sgsn_number = '111',
482}
483
484db_subscr_lu(dbc, id0, "222", false) --> 0
485
486db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
487struct hlr_subscriber {
488 .id = 1,
489 .imsi = '123456789000000',
490 .msisdn = '543210123456789',
491 .vlr_number = '222',
492 .sgsn_number = '111',
493}
494
495db_subscr_lu(dbc, id0, "222", false) --> 0
496
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 .sgsn_number = '111',
504}
505
506
507--- Unset LU info for PS and CS (SGSN and VLR names)
508
509db_subscr_lu(dbc, id0, "", true) --> 0
510
511db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
512struct hlr_subscriber {
513 .id = 1,
514 .imsi = '123456789000000',
515 .msisdn = '543210123456789',
516 .vlr_number = '222',
517}
518
519db_subscr_lu(dbc, id0, "", false) --> 0
520
521db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
522struct hlr_subscriber {
523 .id = 1,
524 .imsi = '123456789000000',
525 .msisdn = '543210123456789',
526}
527
528db_subscr_lu(dbc, id0, "111", true) --> 0
529
530db_subscr_lu(dbc, id0, "222", false) --> 0
531
532db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
533struct hlr_subscriber {
534 .id = 1,
535 .imsi = '123456789000000',
536 .msisdn = '543210123456789',
537 .vlr_number = '222',
538 .sgsn_number = '111',
539}
540
541db_subscr_lu(dbc, id0, NULL, true) --> 0
542
543db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
544struct hlr_subscriber {
545 .id = 1,
546 .imsi = '123456789000000',
547 .msisdn = '543210123456789',
548 .vlr_number = '222',
549}
550
551db_subscr_lu(dbc, id0, NULL, false) --> 0
552
553db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
554struct hlr_subscriber {
555 .id = 1,
556 .imsi = '123456789000000',
557 .msisdn = '543210123456789',
558}
559
560
561--- Record LU for non-existent ID
562
563db_subscr_lu(dbc, 99999, "5952", true) --> -ENOENT
564DAUC Cannot update SGSN number for subscriber ID=99999: no such subscriber
565
566db_subscr_lu(dbc, 99999, "712", false) --> -ENOENT
567DAUC Cannot update VLR number for subscriber ID=99999: no such subscriber
568
569db_subscr_get_by_id(dbc, 99999, &g_subscr) --> -ENOENT
570DAUC Cannot read subscriber from db: ID=99999: No such subscriber
571
572
Neels Hofmeyre50121e2017-10-09 17:48:51 +0200573--- Purge and un-purge PS and CS
574
575db_subscr_purge(dbc, imsi0, true, true) --> 0
576
577db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
578struct hlr_subscriber {
579 .id = 1,
580 .imsi = '123456789000000',
581 .msisdn = '543210123456789',
582 .ms_purged_ps = true,
583}
584
585db_subscr_purge(dbc, imsi0, true, false) --> 0
586
587db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
588struct hlr_subscriber {
589 .id = 1,
590 .imsi = '123456789000000',
591 .msisdn = '543210123456789',
592 .ms_purged_cs = true,
593 .ms_purged_ps = true,
594}
595
596db_subscr_purge(dbc, imsi0, false, false) --> 0
597
598db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
599struct hlr_subscriber {
600 .id = 1,
601 .imsi = '123456789000000',
602 .msisdn = '543210123456789',
603 .ms_purged_ps = true,
604}
605
606db_subscr_purge(dbc, imsi0, false, true) --> 0
607
608db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
609struct hlr_subscriber {
610 .id = 1,
611 .imsi = '123456789000000',
612 .msisdn = '543210123456789',
613}
614
615
616--- Purge PS and CS *again*
617
618db_subscr_purge(dbc, imsi0, true, true) --> 0
619
620db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
621struct hlr_subscriber {
622 .id = 1,
623 .imsi = '123456789000000',
624 .msisdn = '543210123456789',
625 .ms_purged_ps = true,
626}
627
628db_subscr_purge(dbc, imsi0, true, true) --> 0
629
630db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
631struct hlr_subscriber {
632 .id = 1,
633 .imsi = '123456789000000',
634 .msisdn = '543210123456789',
635 .ms_purged_ps = true,
636}
637
638db_subscr_purge(dbc, imsi0, false, true) --> 0
639
640db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
641struct hlr_subscriber {
642 .id = 1,
643 .imsi = '123456789000000',
644 .msisdn = '543210123456789',
645}
646
647db_subscr_purge(dbc, imsi0, false, true) --> 0
648
649db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
650struct hlr_subscriber {
651 .id = 1,
652 .imsi = '123456789000000',
653 .msisdn = '543210123456789',
654}
655
656db_subscr_purge(dbc, imsi0, true, false) --> 0
657
658db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
659struct hlr_subscriber {
660 .id = 1,
661 .imsi = '123456789000000',
662 .msisdn = '543210123456789',
663 .ms_purged_cs = true,
664}
665
666db_subscr_purge(dbc, imsi0, true, false) --> 0
667
668db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
669struct hlr_subscriber {
670 .id = 1,
671 .imsi = '123456789000000',
672 .msisdn = '543210123456789',
673 .ms_purged_cs = true,
674}
675
676db_subscr_purge(dbc, imsi0, false, false) --> 0
677
678db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
679struct hlr_subscriber {
680 .id = 1,
681 .imsi = '123456789000000',
682 .msisdn = '543210123456789',
683}
684
685db_subscr_purge(dbc, imsi0, false, false) --> 0
686
687db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
688struct hlr_subscriber {
689 .id = 1,
690 .imsi = '123456789000000',
691 .msisdn = '543210123456789',
692}
693
694
695--- Purge on non-existent / invalid IMSI
696
697db_subscr_purge(dbc, unknown_imsi, true, true) --> -ENOENT
698DAUC Cannot purge PS: no such subscriber: IMSI='999999999'
699
700db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
701DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
702
703db_subscr_purge(dbc, unknown_imsi, true, false) --> -ENOENT
704DAUC Cannot purge CS: no such subscriber: IMSI='999999999'
705
706db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
707DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
708
709
Neels Hofmeyr98509462017-10-09 17:28:53 +0200710--- Delete non-existent / invalid IDs
711
712db_subscr_delete_by_id(dbc, 999) --> -ENOENT
713DAUC Cannot delete: no such subscriber: ID=999
714
715db_subscr_delete_by_id(dbc, -10) --> -ENOENT
716DAUC Cannot delete: no such subscriber: ID=-10
717
718
719--- Delete subscribers
720
721db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
722struct hlr_subscriber {
723 .id = 1,
724 .imsi = '123456789000000',
725 .msisdn = '543210123456789',
726}
727
728db_subscr_delete_by_id(dbc, id0) --> 0
729
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200730db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
731DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200732
733db_subscr_delete_by_id(dbc, id0) --> -ENOENT
734DAUC Cannot delete: no such subscriber: ID=1
735
736db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
737struct hlr_subscriber {
738 .id = 2,
739 .imsi = '123456789000001',
740}
741
742db_subscr_delete_by_id(dbc, id1) --> 0
743
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200744db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> -ENOENT
745DAUC Cannot read subscriber from db: IMSI='123456789000001': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200746
747db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
748struct hlr_subscriber {
749 .id = 3,
750 .imsi = '123456789000002',
751}
752
753db_subscr_delete_by_id(dbc, id2) --> 0
754
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200755db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> -ENOENT
756DAUC Cannot read subscriber from db: IMSI='123456789000002': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200757
758db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
759struct hlr_subscriber {
760 .id = 4,
761 .imsi = '123456',
762}
763
764db_subscr_delete_by_id(dbc, id_short) --> 0
765
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200766db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> -ENOENT
767DAUC Cannot read subscriber from db: IMSI='123456': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200768
Oliver Smithcd2af5e2019-03-06 13:17:39 +0100769
770--- Create and delete subscribers with non-default nam_cs and nam_ps
771
772db_subscr_create(dbc, imsi0, 0x00) --> 0
773
774db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
775struct hlr_subscriber {
776 .id = 1,
777 .imsi = '123456789000000',
778 .nam_cs = false,
779 .nam_ps = false,
780}
781
782db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS) --> 0
783
784db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
785struct hlr_subscriber {
786 .id = 2,
787 .imsi = '123456789000001',
788 .nam_ps = false,
789}
790
791db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_PS) --> 0
792
793db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
794struct hlr_subscriber {
795 .id = 3,
796 .imsi = '123456789000002',
797 .nam_cs = false,
798}
799
800db_subscr_delete_by_id(dbc, id0) --> 0
801
802db_subscr_delete_by_id(dbc, id1) --> 0
803
804db_subscr_delete_by_id(dbc, id2) --> 0
805
Neels Hofmeyr98509462017-10-09 17:28:53 +0200806===== test_subscr_create_update_sel_delete: SUCCESS
807
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200808
809===== test_subscr_aud
810
811--- Get auth data for non-existent subscriber
812
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200813db_get_auth_data(dbc, unknown_imsi, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200814DAUC IMSI='999999999': No such subscriber
815
816
Harald Welte06f5af22019-08-21 20:01:31 +0200817db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -2
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100818DAUC IMSI='123456789000000': No such subscriber
819
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200820
821--- Create subscriber
822
Oliver Smithcd2af5e2019-03-06 13:17:39 +0100823db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200824
825db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
826struct hlr_subscriber {
827 .id = 1,
828 .imsi = '123456789000000',
829}
830
Ruben Undheim8b860e52018-11-16 08:47:26 +0100831db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200832DAUC IMSI='123456789000000': No 2G Auth Data
833DAUC IMSI='123456789000000': No 3G Auth Data
834
835
Harald Welte06f5af22019-08-21 20:01:31 +0200836db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100837DAUC IMSI='123456789000000': No 2G Auth Data
838DAUC IMSI='123456789000000': No 3G Auth Data
839
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200840
841--- Set auth data, 2G only
842
843db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
844
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200845db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200846DAUC IMSI='123456789000000': No 3G Auth Data
847
8482G: struct osmo_sub_auth_data {
849 .type = GSM,
850 .algo = COMP128v1,
851 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
852}
8533G: none
854
Harald Welte06f5af22019-08-21 20:01:31 +0200855db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 3
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100856DAUC IMSI='123456789000000': No 3G Auth Data
857DAUC IMSI='123456789000000': Calling to generate 3 vectors
858DAUC IMSI='123456789000000': Generated 3 vectors
859
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200860db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
861
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200862db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200863DAUC IMSI='123456789000000': No 3G Auth Data
864
8652G: struct osmo_sub_auth_data {
866 .type = GSM,
867 .algo = COMP128v1,
868 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
869}
8703G: none
871
872db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v2, "BeadedBeeAced1EbbedDefacedFacade")) --> 0
873
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200874db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200875DAUC IMSI='123456789000000': No 3G Auth Data
876
8772G: struct osmo_sub_auth_data {
878 .type = GSM,
879 .algo = COMP128v2,
880 .u.gsm.ki = 'beadedbeeaced1ebbeddefacedfacade',
881}
8823G: none
883
884db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "DeafBeddedBabeAcceededFadedDecaf")) --> 0
885
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200886db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200887DAUC IMSI='123456789000000': No 3G Auth Data
888
8892G: struct osmo_sub_auth_data {
890 .type = GSM,
891 .algo = COMP128v3,
892 .u.gsm.ki = 'deafbeddedbabeacceededfadeddecaf',
893}
8943G: none
895
896db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
897
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200898db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200899DAUC IMSI='123456789000000': No 3G Auth Data
900
9012G: struct osmo_sub_auth_data {
902 .type = GSM,
903 .algo = XOR,
904 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
905}
9063G: none
907
908
909--- Remove 2G auth data
910
911db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
912
Ruben Undheim8b860e52018-11-16 08:47:26 +0100913db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200914DAUC IMSI='123456789000000': No 2G Auth Data
915DAUC IMSI='123456789000000': No 3G Auth Data
916
917
Harald Welte06f5af22019-08-21 20:01:31 +0200918db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100919DAUC IMSI='123456789000000': No 2G Auth Data
920DAUC IMSI='123456789000000': No 3G Auth Data
921
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200922db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> -ENOENT
923
924db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
925
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200926db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200927DAUC IMSI='123456789000000': No 3G Auth Data
928
9292G: struct osmo_sub_auth_data {
930 .type = GSM,
931 .algo = XOR,
932 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
933}
9343G: none
935
936db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, "f000000000000f00000000000f000000")) --> 0
937
Ruben Undheim8b860e52018-11-16 08:47:26 +0100938db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200939DAUC IMSI='123456789000000': No 2G Auth Data
940DAUC IMSI='123456789000000': No 3G Auth Data
941
942
Harald Welte06f5af22019-08-21 20:01:31 +0200943db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100944DAUC IMSI='123456789000000': No 2G Auth Data
945DAUC IMSI='123456789000000': No 3G Auth Data
946
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200947
948--- Set auth data, 3G only
949
950db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
951
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200952db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200953DAUC IMSI='123456789000000': No 2G Auth Data
954
9552G: none
9563G: struct osmo_sub_auth_data {
957 .type = UMTS,
958 .algo = MILENAGE,
959 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
960 .u.umts.opc_is_op = 1,
961 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
962 .u.umts.amf = '0000',
963 .u.umts.ind_bitlen = 5,
964}
965
Harald Welte06f5af22019-08-21 20:01:31 +0200966db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 3
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100967DAUC IMSI='123456789000000': No 2G Auth Data
968DAUC IMSI='123456789000000': Calling to generate 3 vectors
969DAUC IMSI='123456789000000': Generated 3 vectors
970DAUC IMSI='123456789000000': Updating SQN=0 in DB
971
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200972db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
973
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200974db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200975DAUC IMSI='123456789000000': No 2G Auth Data
976
9772G: none
9783G: struct osmo_sub_auth_data {
979 .type = UMTS,
980 .algo = MILENAGE,
981 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
982 .u.umts.opc_is_op = 1,
983 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
984 .u.umts.amf = '0000',
985 .u.umts.ind_bitlen = 5,
986}
987
988db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "Deaf0ff1ceD0d0DabbedD1ced1ceF00d", true, "F1bbed0afD0eF0bD0ffed0ddF1fe0b0e", 0)) --> 0
989
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200990db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200991DAUC IMSI='123456789000000': No 2G Auth Data
992
9932G: none
9943G: struct osmo_sub_auth_data {
995 .type = UMTS,
996 .algo = MILENAGE,
997 .u.umts.opc = 'deaf0ff1ced0d0dabbedd1ced1cef00d',
998 .u.umts.opc_is_op = 1,
999 .u.umts.k = 'f1bbed0afd0ef0bd0ffed0ddf1fe0b0e',
1000 .u.umts.amf = '0000',
1001}
1002
1003db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", OSMO_MILENAGE_IND_BITLEN_MAX)) --> 0
1004
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001005db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001006DAUC IMSI='123456789000000': No 2G Auth Data
1007
10082G: none
10093G: struct osmo_sub_auth_data {
1010 .type = UMTS,
1011 .algo = MILENAGE,
1012 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1013 .u.umts.opc_is_op = 0,
1014 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1015 .u.umts.amf = '0000',
1016 .u.umts.ind_bitlen = 28,
1017}
1018
1019db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
1020
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001021db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001022DAUC IMSI='123456789000000': No 2G Auth Data
1023
10242G: none
10253G: struct osmo_sub_auth_data {
1026 .type = UMTS,
1027 .algo = MILENAGE,
1028 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
1029 .u.umts.opc_is_op = 0,
1030 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
1031 .u.umts.amf = '0000',
1032 .u.umts.ind_bitlen = 5,
1033}
1034
1035
1036--- Remove 3G auth data
1037
1038db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> 0
1039
Ruben Undheim8b860e52018-11-16 08:47:26 +01001040db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001041DAUC IMSI='123456789000000': No 2G Auth Data
1042DAUC IMSI='123456789000000': No 3G Auth Data
1043
1044
Harald Welte06f5af22019-08-21 20:01:31 +02001045db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001046DAUC IMSI='123456789000000': No 2G Auth Data
1047DAUC IMSI='123456789000000': No 3G Auth Data
1048
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001049db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> -ENOENT
1050
1051db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
1052
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001053db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001054DAUC IMSI='123456789000000': No 2G Auth Data
1055
10562G: none
10573G: struct osmo_sub_auth_data {
1058 .type = UMTS,
1059 .algo = MILENAGE,
1060 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
1061 .u.umts.opc_is_op = 0,
1062 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
1063 .u.umts.amf = '0000',
1064 .u.umts.ind_bitlen = 5,
1065}
1066
Harald Welte06f5af22019-08-21 20:01:31 +02001067db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 3
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001068DAUC IMSI='123456789000000': No 2G Auth Data
1069DAUC IMSI='123456789000000': Calling to generate 3 vectors
1070DAUC IMSI='123456789000000': Generated 3 vectors
1071DAUC IMSI='123456789000000': Updating SQN=0 in DB
1072
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001073db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, "asdfasdfasd", false, "asdfasdfasdf", 99999)) --> 0
1074
Ruben Undheim8b860e52018-11-16 08:47:26 +01001075db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001076DAUC IMSI='123456789000000': No 2G Auth Data
1077DAUC IMSI='123456789000000': No 3G Auth Data
1078
1079
Harald Welte06f5af22019-08-21 20:01:31 +02001080db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001081DAUC IMSI='123456789000000': No 2G Auth Data
1082DAUC IMSI='123456789000000': No 3G Auth Data
1083
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001084
1085--- Set auth data, 2G and 3G
1086
1087db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "CededEffacedAceFacedBadFadedBeef")) --> 0
1088
1089db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", 5)) --> 0
1090
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001091db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001092
10932G: struct osmo_sub_auth_data {
1094 .type = GSM,
1095 .algo = COMP128v3,
1096 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1097}
10983G: struct osmo_sub_auth_data {
1099 .type = UMTS,
1100 .algo = MILENAGE,
1101 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1102 .u.umts.opc_is_op = 0,
1103 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1104 .u.umts.amf = '0000',
1105 .u.umts.ind_bitlen = 5,
1106}
1107
Harald Welte06f5af22019-08-21 20:01:31 +02001108db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> 3
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001109DAUC IMSI='123456789000000': Calling to generate 3 vectors
1110DAUC IMSI='123456789000000': Generated 3 vectors
1111DAUC IMSI='123456789000000': Updating SQN=0 in DB
1112
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001113
1114--- Set invalid auth data
1115
1116db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(99999, "f000000000000f00000000000f000000")) --> -EINVAL
1117DAUC Cannot update auth tokens: Unknown auth algo: 99999
1118
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001119db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001120
11212G: struct osmo_sub_auth_data {
1122 .type = GSM,
1123 .algo = COMP128v3,
1124 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1125}
11263G: struct osmo_sub_auth_data {
1127 .type = UMTS,
1128 .algo = MILENAGE,
1129 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1130 .u.umts.opc_is_op = 0,
1131 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1132 .u.umts.amf = '0000',
1133 .u.umts.ind_bitlen = 5,
1134}
1135
1136db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f000000000000f00000000000f000000f00000000")) --> -EINVAL
1137DAUC Cannot update auth tokens: Invalid KI: 'f000000000000f00000000000f000000f00000000'
1138
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001139db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001140
11412G: struct osmo_sub_auth_data {
1142 .type = GSM,
1143 .algo = COMP128v3,
1144 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1145}
11463G: struct osmo_sub_auth_data {
1147 .type = UMTS,
1148 .algo = MILENAGE,
1149 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1150 .u.umts.opc_is_op = 0,
1151 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1152 .u.umts.amf = '0000',
1153 .u.umts.ind_bitlen = 5,
1154}
1155
1156db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f00")) --> -EINVAL
1157DAUC Cannot update auth tokens: Invalid KI: 'f00'
1158
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001159db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001160
11612G: struct osmo_sub_auth_data {
1162 .type = GSM,
1163 .algo = COMP128v3,
1164 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1165}
11663G: struct osmo_sub_auth_data {
1167 .type = UMTS,
1168 .algo = MILENAGE,
1169 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1170 .u.umts.opc_is_op = 0,
1171 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1172 .u.umts.amf = '0000',
1173 .u.umts.ind_bitlen = 5,
1174}
1175
1176db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_MILENAGE, "0123456789abcdef0123456789abcdef")) --> -EINVAL
1177DAUC Cannot update auth tokens: auth algo not suited for 2G: MILENAGE
1178
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001179db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001180
11812G: struct osmo_sub_auth_data {
1182 .type = GSM,
1183 .algo = COMP128v3,
1184 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1185}
11863G: struct osmo_sub_auth_data {
1187 .type = UMTS,
1188 .algo = MILENAGE,
1189 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1190 .u.umts.opc_is_op = 0,
1191 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1192 .u.umts.amf = '0000',
1193 .u.umts.ind_bitlen = 5,
1194}
1195
1196db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "0f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1197DAUC Cannot update auth tokens: Invalid OP/OPC: '0f000000000000f00000000000f000000'
1198
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001199db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001200
12012G: struct osmo_sub_auth_data {
1202 .type = GSM,
1203 .algo = COMP128v3,
1204 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1205}
12063G: struct osmo_sub_auth_data {
1207 .type = UMTS,
1208 .algo = MILENAGE,
1209 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1210 .u.umts.opc_is_op = 0,
1211 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1212 .u.umts.amf = '0000',
1213 .u.umts.ind_bitlen = 5,
1214}
1215
1216db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "000000000000f00000000000f000000", 5)) --> -EINVAL
1217DAUC Cannot update auth tokens: Invalid K: '000000000000f00000000000f000000'
1218
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001219db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001220
12212G: struct osmo_sub_auth_data {
1222 .type = GSM,
1223 .algo = COMP128v3,
1224 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1225}
12263G: struct osmo_sub_auth_data {
1227 .type = UMTS,
1228 .algo = MILENAGE,
1229 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1230 .u.umts.opc_is_op = 0,
1231 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1232 .u.umts.amf = '0000',
1233 .u.umts.ind_bitlen = 5,
1234}
1235
1236db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", OSMO_MILENAGE_IND_BITLEN_MAX + 1)) --> -EINVAL
1237DAUC Cannot update auth tokens: Invalid ind_bitlen: 29
1238
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001239db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001240
12412G: struct osmo_sub_auth_data {
1242 .type = GSM,
1243 .algo = COMP128v3,
1244 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1245}
12463G: struct osmo_sub_auth_data {
1247 .type = UMTS,
1248 .algo = MILENAGE,
1249 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1250 .u.umts.opc_is_op = 0,
1251 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1252 .u.umts.amf = '0000',
1253 .u.umts.ind_bitlen = 5,
1254}
1255
1256db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "X000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1257DAUC Cannot update auth tokens: Invalid OP/OPC: 'X000000000000f00000000000f000000'
1258
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001259db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001260
12612G: struct osmo_sub_auth_data {
1262 .type = GSM,
1263 .algo = COMP128v3,
1264 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1265}
12663G: struct osmo_sub_auth_data {
1267 .type = UMTS,
1268 .algo = MILENAGE,
1269 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1270 .u.umts.opc_is_op = 0,
1271 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1272 .u.umts.amf = '0000',
1273 .u.umts.ind_bitlen = 5,
1274}
1275
1276db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000 f00000000000 f000000", 5)) --> -EINVAL
1277DAUC Cannot update auth tokens: Invalid K: 'f000000000000 f00000000000 f000000'
1278
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001279db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001280
12812G: struct osmo_sub_auth_data {
1282 .type = GSM,
1283 .algo = COMP128v3,
1284 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1285}
12863G: struct osmo_sub_auth_data {
1287 .type = UMTS,
1288 .algo = MILENAGE,
1289 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1290 .u.umts.opc_is_op = 0,
1291 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1292 .u.umts.amf = '0000',
1293 .u.umts.ind_bitlen = 5,
1294}
1295
1296
1297--- Delete subscriber
1298
1299db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1300struct hlr_subscriber {
1301 .id = 1,
1302 .imsi = '123456789000000',
1303}
1304
1305db_subscr_delete_by_id(dbc, id) --> 0
1306
1307db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1308DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1309
1310
1311--- Re-add subscriber and verify auth data didn't come back
1312
Oliver Smithcd2af5e2019-03-06 13:17:39 +01001313db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001314
1315db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1316struct hlr_subscriber {
1317 .id = 1,
1318 .imsi = '123456789000000',
1319}
1320
Ruben Undheim8b860e52018-11-16 08:47:26 +01001321db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001322DAUC IMSI='123456789000000': No 2G Auth Data
1323DAUC IMSI='123456789000000': No 3G Auth Data
1324
1325
Harald Welte06f5af22019-08-21 20:01:31 +02001326db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -ENOKEY
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001327DAUC IMSI='123456789000000': No 2G Auth Data
1328DAUC IMSI='123456789000000': No 3G Auth Data
1329
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001330db_subscr_delete_by_id(dbc, id) --> 0
1331
1332db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1333DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1334
Harald Welte06f5af22019-08-21 20:01:31 +02001335db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL, false) --> -2
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001336DAUC IMSI='123456789000000': No such subscriber
1337
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001338===== test_subscr_aud: SUCCESS
1339
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001340
Oliver Smith6401b902019-07-24 11:32:45 +02001341===== test_subscr_aud_invalid_len
1342
1343--- Create subscriber
1344
1345db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
1346
1347db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1348struct hlr_subscriber {
1349 .id = 1,
1350 .imsi = '123456789000000',
1351}
1352
1353
1354--- Set auth data, 2G only, with invalid Ki length
1355
1356db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
1357
1358raw SQL: UPDATE auc_2g SET ki = '0123456789abcdef0123456789abcde'
1359sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
1360
1361sqlite3_step(stmt) --> SQLITE_DONE
1362
Pau Espin Pedrol28f07742019-08-13 11:59:01 +02001363db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Oliver Smith6401b902019-07-24 11:32:45 +02001364DAUC IMSI='123456789000000': Error reading Ki, expected length 16 but has length 15
1365DAUC IMSI='123456789000000': No 3G Auth Data
1366
1367
1368
1369--- Remove 2G auth data
1370
1371db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
1372
1373
1374--- Set auth data, 3G only, with invalid K length
1375
1376db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1377
1378raw SQL: UPDATE auc_3g SET k = 'C01ffedC1cadaeAc1d1f1edAcac1aB0'
1379sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
1380
1381sqlite3_step(stmt) --> SQLITE_DONE
1382
1383db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
1384DAUC IMSI='123456789000000': No 2G Auth Data
1385DAUC IMSI='123456789000000': Error reading K, expected length 16 but has length 15
1386
1387
1388
1389--- Set auth data, 3G only, with invalid OP length
1390
1391db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1392
1393raw SQL: UPDATE auc_3g SET op = 'BeefedCafeFaceAcedAddedDecadeFe'
1394sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
1395
1396sqlite3_step(stmt) --> SQLITE_DONE
1397
1398db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
1399DAUC IMSI='123456789000000': No 2G Auth Data
1400DAUC IMSI='123456789000000': Error reading OP, expected length 16 but has length 15
1401
1402
1403
1404--- Set auth data, 3G only, with invalid OPC length
1405
1406db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1407
1408raw SQL: UPDATE auc_3g SET opc = 'BeefedCafeFaceAcedAddedDecadeFe'
1409sqlite3_prepare_v2(dbc->db, sql, -1, &stmt, NULL) --> SQLITE_OK
1410
1411sqlite3_step(stmt) --> SQLITE_DONE
1412
1413db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -5
1414DAUC IMSI='123456789000000': No 2G Auth Data
1415DAUC IMSI='123456789000000': Error reading OPC, expected length 16 but has length 15
1416
1417
1418
1419--- Delete subscriber
1420
1421db_subscr_delete_by_id(dbc, id) --> 0
1422
1423===== test_subscr_aud_invalid_len: SUCCESS
1424
1425
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001426===== test_subscr_sqn
1427
1428--- Set SQN for unknown subscriber
1429
1430db_update_sqn(dbc, 99, 999) --> -ENOENT
1431DAUC Cannot update SQN for subscriber ID=99: no auc_3g entry for such subscriber
1432
1433db_subscr_get_by_id(dbc, 99, &g_subscr) --> -ENOENT
1434DAUC Cannot read subscriber from db: ID=99: No such subscriber
1435
1436db_update_sqn(dbc, 9999, 99) --> -ENOENT
1437DAUC Cannot update SQN for subscriber ID=9999: no auc_3g entry for such subscriber
1438
1439db_subscr_get_by_id(dbc, 9999, &g_subscr) --> -ENOENT
1440DAUC Cannot read subscriber from db: ID=9999: No such subscriber
1441
1442
1443--- Create subscriber
1444
Oliver Smithcd2af5e2019-03-06 13:17:39 +01001445db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001446
1447db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1448struct hlr_subscriber {
1449 .id = 1,
1450 .imsi = '123456789000000',
1451}
1452
Ruben Undheim8b860e52018-11-16 08:47:26 +01001453db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001454DAUC IMSI='123456789000000': No 2G Auth Data
1455DAUC IMSI='123456789000000': No 3G Auth Data
1456
1457
1458
1459--- Set SQN, but no 3G auth data present
1460
1461db_update_sqn(dbc, id, 123) --> -ENOENT
1462DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1463
Ruben Undheim8b860e52018-11-16 08:47:26 +01001464db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001465DAUC IMSI='123456789000000': No 2G Auth Data
1466DAUC IMSI='123456789000000': No 3G Auth Data
1467
1468
1469db_update_sqn(dbc, id, 543) --> -ENOENT
1470DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1471
Ruben Undheim8b860e52018-11-16 08:47:26 +01001472db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -ENOKEY
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001473DAUC IMSI='123456789000000': No 2G Auth Data
1474DAUC IMSI='123456789000000': No 3G Auth Data
1475
1476
1477
1478--- Set auth 3G data
1479
1480db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1481
1482db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1483DAUC IMSI='123456789000000': No 2G Auth Data
1484
14852G: none
14863G: struct osmo_sub_auth_data {
1487 .type = UMTS,
1488 .algo = MILENAGE,
1489 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1490 .u.umts.opc_is_op = 1,
1491 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1492 .u.umts.amf = '0000',
1493 .u.umts.ind_bitlen = 5,
1494}
1495
1496
1497--- Set SQN
1498
1499db_update_sqn(dbc, id, 23315) --> 0
1500
1501db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1502DAUC IMSI='123456789000000': No 2G Auth Data
1503
15042G: none
15053G: struct osmo_sub_auth_data {
1506 .type = UMTS,
1507 .algo = MILENAGE,
1508 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1509 .u.umts.opc_is_op = 1,
1510 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1511 .u.umts.amf = '0000',
1512 .u.umts.sqn = 23315,
1513 .u.umts.sqn = 0x5b13,
1514 .u.umts.ind_bitlen = 5,
1515}
1516
1517db_update_sqn(dbc, id, 23315) --> 0
1518
1519db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1520DAUC IMSI='123456789000000': No 2G Auth Data
1521
15222G: none
15233G: struct osmo_sub_auth_data {
1524 .type = UMTS,
1525 .algo = MILENAGE,
1526 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1527 .u.umts.opc_is_op = 1,
1528 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1529 .u.umts.amf = '0000',
1530 .u.umts.sqn = 23315,
1531 .u.umts.sqn = 0x5b13,
1532 .u.umts.ind_bitlen = 5,
1533}
1534
1535db_update_sqn(dbc, id, 423) --> 0
1536
1537db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1538DAUC IMSI='123456789000000': No 2G Auth Data
1539
15402G: none
15413G: struct osmo_sub_auth_data {
1542 .type = UMTS,
1543 .algo = MILENAGE,
1544 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1545 .u.umts.opc_is_op = 1,
1546 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1547 .u.umts.amf = '0000',
1548 .u.umts.sqn = 423,
1549 .u.umts.sqn = 0x1a7,
1550 .u.umts.ind_bitlen = 5,
1551}
1552
1553
1554--- Set SQN: thru uint64_t range, using the int64_t SQLite bind
1555
1556db_update_sqn(dbc, id, 0) --> 0
1557
1558db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1559DAUC IMSI='123456789000000': No 2G Auth Data
1560
15612G: none
15623G: struct osmo_sub_auth_data {
1563 .type = UMTS,
1564 .algo = MILENAGE,
1565 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1566 .u.umts.opc_is_op = 1,
1567 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1568 .u.umts.amf = '0000',
1569 .u.umts.ind_bitlen = 5,
1570}
1571
1572db_update_sqn(dbc, id, INT64_MAX) --> 0
1573
1574db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1575DAUC IMSI='123456789000000': No 2G Auth Data
1576
15772G: none
15783G: struct osmo_sub_auth_data {
1579 .type = UMTS,
1580 .algo = MILENAGE,
1581 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1582 .u.umts.opc_is_op = 1,
1583 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1584 .u.umts.amf = '0000',
1585 .u.umts.sqn = 9223372036854775807,
1586 .u.umts.sqn = 0x7fffffffffffffff,
1587 .u.umts.ind_bitlen = 5,
1588}
1589
1590db_update_sqn(dbc, id, INT64_MIN) --> 0
1591
1592db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1593DAUC IMSI='123456789000000': No 2G Auth Data
1594
15952G: none
15963G: struct osmo_sub_auth_data {
1597 .type = UMTS,
1598 .algo = MILENAGE,
1599 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1600 .u.umts.opc_is_op = 1,
1601 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1602 .u.umts.amf = '0000',
1603 .u.umts.sqn = 9223372036854775808,
1604 .u.umts.sqn = 0x8000000000000000,
1605 .u.umts.ind_bitlen = 5,
1606}
1607
1608db_update_sqn(dbc, id, UINT64_MAX) --> 0
1609
1610db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1611DAUC IMSI='123456789000000': No 2G Auth Data
1612
16132G: none
16143G: struct osmo_sub_auth_data {
1615 .type = UMTS,
1616 .algo = MILENAGE,
1617 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1618 .u.umts.opc_is_op = 1,
1619 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1620 .u.umts.amf = '0000',
1621 .u.umts.sqn = 18446744073709551615,
1622 .u.umts.sqn = 0xffffffffffffffff,
1623 .u.umts.ind_bitlen = 5,
1624}
1625
1626
1627--- Delete subscriber
1628
1629db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1630struct hlr_subscriber {
1631 .id = 1,
1632 .imsi = '123456789000000',
1633}
1634
1635db_subscr_delete_by_id(dbc, id) --> 0
1636
1637db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1638DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1639
1640===== test_subscr_sqn: SUCCESS
1641