blob: 1d34045f2378a787652db93e2500c67b5a1de68f [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
6db_subscr_create(dbc, imsi0) --> 0
7
8db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
9struct hlr_subscriber {
10 .id = 1,
11 .imsi = '123456789000000',
12}
13
14db_subscr_create(dbc, imsi1) --> 0
15
16db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
17struct hlr_subscriber {
18 .id = 2,
19 .imsi = '123456789000001',
20}
21
22db_subscr_create(dbc, imsi2) --> 0
23
24db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
25struct hlr_subscriber {
26 .id = 3,
27 .imsi = '123456789000002',
28}
29
30db_subscr_create(dbc, imsi0) --> -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
39db_subscr_create(dbc, imsi1) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020040DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
41
42db_subscr_create(dbc, imsi1) --> -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
51db_subscr_create(dbc, imsi2) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020052DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
53
54db_subscr_create(dbc, imsi2) --> -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
63db_subscr_create(dbc, "123456789 000003") --> -EINVAL
64DAUC 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
69db_subscr_create(dbc, "123456789000002123456") --> -EINVAL
70DAUC 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
75db_subscr_create(dbc, "foobar123") --> -EINVAL
76DAUC 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
81db_subscr_create(dbc, "123") --> -EINVAL
82DAUC 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
87db_subscr_create(dbc, short_imsi) --> 0
88
89db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
90struct hlr_subscriber {
91 .id = 4,
92 .imsi = '123456',
93}
94
95
96--- Set valid / invalid MSISDN
97
98db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
99struct hlr_subscriber {
100 .id = 1,
101 .imsi = '123456789000000',
102}
103
104db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321") --> 0
105
106db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
107struct hlr_subscriber {
108 .id = 1,
109 .imsi = '123456789000000',
110 .msisdn = '54321',
111}
112
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200113db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
114struct hlr_subscriber {
115 .id = 1,
116 .imsi = '123456789000000',
117 .msisdn = '54321',
118}
119
Neels Hofmeyr98509462017-10-09 17:28:53 +0200120db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321012345678912345678") --> -EINVAL
121DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '54321012345678912345678'
122
123db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
124struct hlr_subscriber {
125 .id = 1,
126 .imsi = '123456789000000',
127 .msisdn = '54321',
128}
129
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200130db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
131struct hlr_subscriber {
132 .id = 1,
133 .imsi = '123456789000000',
134 .msisdn = '54321',
135}
136
137db_subscr_get_by_msisdn(dbc, "54321012345678912345678", &g_subscr) --> -ENOENT
138DAUC Cannot read subscriber from db: MSISDN='54321012345678912345678': No such subscriber
139
Neels Hofmeyr98509462017-10-09 17:28:53 +0200140db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543 21") --> -EINVAL
141DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '543 21'
142
143db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
144struct hlr_subscriber {
145 .id = 1,
146 .imsi = '123456789000000',
147 .msisdn = '54321',
148}
149
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200150db_subscr_get_by_msisdn(dbc, "543 21", &g_subscr) --> -ENOENT
151DAUC Cannot read subscriber from db: MSISDN='543 21': No such subscriber
152
Neels Hofmeyr98509462017-10-09 17:28:53 +0200153db_subscr_update_msisdn_by_imsi(dbc, imsi0, "foobar123") --> -EINVAL
154DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: 'foobar123'
155
156db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
157struct hlr_subscriber {
158 .id = 1,
159 .imsi = '123456789000000',
160 .msisdn = '54321',
161}
162
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200163db_subscr_get_by_msisdn(dbc, "foobar123", &g_subscr) --> -ENOENT
164DAUC Cannot read subscriber from db: MSISDN='foobar123': No such subscriber
165
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
183DAUC Cannot read subscriber from db: MSISDN='54321': No such subscriber
184
Neels Hofmeyr98509462017-10-09 17:28:53 +0200185db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543210123456789") --> 0
186
187db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
188struct hlr_subscriber {
189 .id = 1,
190 .imsi = '123456789000000',
191 .msisdn = '543210123456789',
192}
193
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200194db_subscr_get_by_msisdn(dbc, "543210123456789", &g_subscr) --> 0
195struct hlr_subscriber {
196 .id = 1,
197 .imsi = '123456789000000',
198 .msisdn = '543210123456789',
199}
200
Neels Hofmeyr98509462017-10-09 17:28:53 +0200201db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5432101234567891") --> -EINVAL
202DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '5432101234567891'
203
204db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
205struct hlr_subscriber {
206 .id = 1,
207 .imsi = '123456789000000',
208 .msisdn = '543210123456789',
209}
210
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200211db_subscr_get_by_msisdn(dbc, "5432101234567891", &g_subscr) --> -ENOENT
212DAUC Cannot read subscriber from db: MSISDN='5432101234567891': No such subscriber
213
Neels Hofmeyr98509462017-10-09 17:28:53 +0200214
215--- Set MSISDN on non-existent / invalid IMSI
216
217db_subscr_update_msisdn_by_imsi(dbc, unknown_imsi, "99") --> -ENOENT
218DAUC Cannot update MSISDN: no such subscriber: IMSI='999999999'
219
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200220db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
221DAUC Cannot read subscriber from db: MSISDN='99': No such subscriber
222
Neels Hofmeyr98509462017-10-09 17:28:53 +0200223db_subscr_update_msisdn_by_imsi(dbc, "foobar", "99") --> -ENOENT
224DAUC Cannot update MSISDN: no such subscriber: IMSI='foobar'
225
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200226db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
227DAUC Cannot read subscriber from db: MSISDN='99': No such subscriber
228
Neels Hofmeyr98509462017-10-09 17:28:53 +0200229
Neels Hofmeyre8ccd502017-10-06 04:10:06 +0200230--- Set / unset nam_cs and nam_ps
231
232db_subscr_nam(dbc, imsi0, false, true) --> 0
233
234db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
235struct hlr_subscriber {
236 .id = 1,
237 .imsi = '123456789000000',
238 .msisdn = '543210123456789',
239 .nam_ps = false,
240}
241
242db_subscr_nam(dbc, imsi0, false, false) --> 0
243
244db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
245struct hlr_subscriber {
246 .id = 1,
247 .imsi = '123456789000000',
248 .msisdn = '543210123456789',
249 .nam_cs = false,
250 .nam_ps = false,
251}
252
253db_subscr_nam(dbc, imsi0, true, false) --> 0
254
255db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
256struct hlr_subscriber {
257 .id = 1,
258 .imsi = '123456789000000',
259 .msisdn = '543210123456789',
260 .nam_ps = false,
261}
262
263db_subscr_nam(dbc, imsi0, true, true) --> 0
264
265db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
266struct hlr_subscriber {
267 .id = 1,
268 .imsi = '123456789000000',
269 .msisdn = '543210123456789',
270}
271
272
273--- Set / unset nam_cs and nam_ps *again*
274
275db_subscr_nam(dbc, imsi0, false, true) --> 0
276
277db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
278struct hlr_subscriber {
279 .id = 1,
280 .imsi = '123456789000000',
281 .msisdn = '543210123456789',
282 .nam_ps = false,
283}
284
285db_subscr_nam(dbc, imsi0, false, true) --> 0
286
287db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
288struct hlr_subscriber {
289 .id = 1,
290 .imsi = '123456789000000',
291 .msisdn = '543210123456789',
292 .nam_ps = false,
293}
294
295db_subscr_nam(dbc, imsi0, false, false) --> 0
296
297db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
298struct hlr_subscriber {
299 .id = 1,
300 .imsi = '123456789000000',
301 .msisdn = '543210123456789',
302 .nam_cs = false,
303 .nam_ps = false,
304}
305
306db_subscr_nam(dbc, imsi0, false, false) --> 0
307
308db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
309struct hlr_subscriber {
310 .id = 1,
311 .imsi = '123456789000000',
312 .msisdn = '543210123456789',
313 .nam_cs = false,
314 .nam_ps = false,
315}
316
317db_subscr_nam(dbc, imsi0, true, true) --> 0
318
319db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
320struct hlr_subscriber {
321 .id = 1,
322 .imsi = '123456789000000',
323 .msisdn = '543210123456789',
324 .nam_cs = false,
325}
326
327db_subscr_nam(dbc, imsi0, true, true) --> 0
328
329db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
330struct hlr_subscriber {
331 .id = 1,
332 .imsi = '123456789000000',
333 .msisdn = '543210123456789',
334 .nam_cs = false,
335}
336
337db_subscr_nam(dbc, imsi0, true, false) --> 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}
345
346db_subscr_nam(dbc, imsi0, true, false) --> 0
347
348db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
349struct hlr_subscriber {
350 .id = 1,
351 .imsi = '123456789000000',
352 .msisdn = '543210123456789',
353}
354
355
356--- Set nam_cs and nam_ps on non-existent / invalid IMSI
357
358db_subscr_nam(dbc, unknown_imsi, false, true) --> -ENOENT
359DAUC Cannot disable PS: no such subscriber: IMSI='999999999'
360
361db_subscr_nam(dbc, unknown_imsi, false, false) --> -ENOENT
362DAUC Cannot disable CS: no such subscriber: IMSI='999999999'
363
364db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
365DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
366
367db_subscr_nam(dbc, "foobar", false, true) --> -ENOENT
368DAUC Cannot disable PS: no such subscriber: IMSI='foobar'
369
370db_subscr_nam(dbc, "foobar", false, false) --> -ENOENT
371DAUC Cannot disable CS: no such subscriber: IMSI='foobar'
372
373
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200374--- Record LU for PS and CS (SGSN and VLR names)
375
376db_subscr_lu(dbc, id0, "5952", true) --> 0
377
378db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
379struct hlr_subscriber {
380 .id = 1,
381 .imsi = '123456789000000',
382 .msisdn = '543210123456789',
383 .sgsn_number = '5952',
384}
385
386db_subscr_lu(dbc, id0, "712", false) --> 0
387
388db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
389struct hlr_subscriber {
390 .id = 1,
391 .imsi = '123456789000000',
392 .msisdn = '543210123456789',
393 .vlr_number = '712',
394 .sgsn_number = '5952',
395}
396
397
398--- Record LU for PS and CS (SGSN and VLR names) *again*
399
400db_subscr_lu(dbc, id0, "111", true) --> 0
401
402db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
403struct hlr_subscriber {
404 .id = 1,
405 .imsi = '123456789000000',
406 .msisdn = '543210123456789',
407 .vlr_number = '712',
408 .sgsn_number = '111',
409}
410
411db_subscr_lu(dbc, id0, "111", true) --> 0
412
413db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
414struct hlr_subscriber {
415 .id = 1,
416 .imsi = '123456789000000',
417 .msisdn = '543210123456789',
418 .vlr_number = '712',
419 .sgsn_number = '111',
420}
421
422db_subscr_lu(dbc, id0, "222", false) --> 0
423
424db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
425struct hlr_subscriber {
426 .id = 1,
427 .imsi = '123456789000000',
428 .msisdn = '543210123456789',
429 .vlr_number = '222',
430 .sgsn_number = '111',
431}
432
433db_subscr_lu(dbc, id0, "222", false) --> 0
434
435db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
436struct hlr_subscriber {
437 .id = 1,
438 .imsi = '123456789000000',
439 .msisdn = '543210123456789',
440 .vlr_number = '222',
441 .sgsn_number = '111',
442}
443
444
445--- Unset LU info for PS and CS (SGSN and VLR names)
446
447db_subscr_lu(dbc, id0, "", true) --> 0
448
449db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
450struct hlr_subscriber {
451 .id = 1,
452 .imsi = '123456789000000',
453 .msisdn = '543210123456789',
454 .vlr_number = '222',
455}
456
457db_subscr_lu(dbc, id0, "", false) --> 0
458
459db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
460struct hlr_subscriber {
461 .id = 1,
462 .imsi = '123456789000000',
463 .msisdn = '543210123456789',
464}
465
466db_subscr_lu(dbc, id0, "111", true) --> 0
467
468db_subscr_lu(dbc, id0, "222", false) --> 0
469
470db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
471struct hlr_subscriber {
472 .id = 1,
473 .imsi = '123456789000000',
474 .msisdn = '543210123456789',
475 .vlr_number = '222',
476 .sgsn_number = '111',
477}
478
479db_subscr_lu(dbc, id0, NULL, true) --> 0
480
481db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
482struct hlr_subscriber {
483 .id = 1,
484 .imsi = '123456789000000',
485 .msisdn = '543210123456789',
486 .vlr_number = '222',
487}
488
489db_subscr_lu(dbc, id0, NULL, false) --> 0
490
491db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
492struct hlr_subscriber {
493 .id = 1,
494 .imsi = '123456789000000',
495 .msisdn = '543210123456789',
496}
497
498
499--- Record LU for non-existent ID
500
501db_subscr_lu(dbc, 99999, "5952", true) --> -ENOENT
502DAUC Cannot update SGSN number for subscriber ID=99999: no such subscriber
503
504db_subscr_lu(dbc, 99999, "712", false) --> -ENOENT
505DAUC Cannot update VLR number for subscriber ID=99999: no such subscriber
506
507db_subscr_get_by_id(dbc, 99999, &g_subscr) --> -ENOENT
508DAUC Cannot read subscriber from db: ID=99999: No such subscriber
509
510
Neels Hofmeyre50121e2017-10-09 17:48:51 +0200511--- Purge and un-purge PS and CS
512
513db_subscr_purge(dbc, imsi0, true, true) --> 0
514
515db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
516struct hlr_subscriber {
517 .id = 1,
518 .imsi = '123456789000000',
519 .msisdn = '543210123456789',
520 .ms_purged_ps = true,
521}
522
523db_subscr_purge(dbc, imsi0, true, false) --> 0
524
525db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
526struct hlr_subscriber {
527 .id = 1,
528 .imsi = '123456789000000',
529 .msisdn = '543210123456789',
530 .ms_purged_cs = true,
531 .ms_purged_ps = true,
532}
533
534db_subscr_purge(dbc, imsi0, false, false) --> 0
535
536db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
537struct hlr_subscriber {
538 .id = 1,
539 .imsi = '123456789000000',
540 .msisdn = '543210123456789',
541 .ms_purged_ps = true,
542}
543
544db_subscr_purge(dbc, imsi0, false, true) --> 0
545
546db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
547struct hlr_subscriber {
548 .id = 1,
549 .imsi = '123456789000000',
550 .msisdn = '543210123456789',
551}
552
553
554--- Purge PS and CS *again*
555
556db_subscr_purge(dbc, imsi0, true, true) --> 0
557
558db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
559struct hlr_subscriber {
560 .id = 1,
561 .imsi = '123456789000000',
562 .msisdn = '543210123456789',
563 .ms_purged_ps = true,
564}
565
566db_subscr_purge(dbc, imsi0, true, true) --> 0
567
568db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
569struct hlr_subscriber {
570 .id = 1,
571 .imsi = '123456789000000',
572 .msisdn = '543210123456789',
573 .ms_purged_ps = true,
574}
575
576db_subscr_purge(dbc, imsi0, false, true) --> 0
577
578db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
579struct hlr_subscriber {
580 .id = 1,
581 .imsi = '123456789000000',
582 .msisdn = '543210123456789',
583}
584
585db_subscr_purge(dbc, imsi0, false, true) --> 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}
593
594db_subscr_purge(dbc, imsi0, true, false) --> 0
595
596db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
597struct hlr_subscriber {
598 .id = 1,
599 .imsi = '123456789000000',
600 .msisdn = '543210123456789',
601 .ms_purged_cs = true,
602}
603
604db_subscr_purge(dbc, imsi0, true, false) --> 0
605
606db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
607struct hlr_subscriber {
608 .id = 1,
609 .imsi = '123456789000000',
610 .msisdn = '543210123456789',
611 .ms_purged_cs = true,
612}
613
614db_subscr_purge(dbc, imsi0, false, false) --> 0
615
616db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
617struct hlr_subscriber {
618 .id = 1,
619 .imsi = '123456789000000',
620 .msisdn = '543210123456789',
621}
622
623db_subscr_purge(dbc, imsi0, false, false) --> 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
632
633--- Purge on non-existent / invalid IMSI
634
635db_subscr_purge(dbc, unknown_imsi, true, true) --> -ENOENT
636DAUC Cannot purge PS: no such subscriber: IMSI='999999999'
637
638db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
639DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
640
641db_subscr_purge(dbc, unknown_imsi, true, false) --> -ENOENT
642DAUC Cannot purge CS: no such subscriber: IMSI='999999999'
643
644db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
645DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
646
647
Neels Hofmeyr98509462017-10-09 17:28:53 +0200648--- Delete non-existent / invalid IDs
649
650db_subscr_delete_by_id(dbc, 999) --> -ENOENT
651DAUC Cannot delete: no such subscriber: ID=999
652
653db_subscr_delete_by_id(dbc, -10) --> -ENOENT
654DAUC Cannot delete: no such subscriber: ID=-10
655
656
657--- Delete subscribers
658
659db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
660struct hlr_subscriber {
661 .id = 1,
662 .imsi = '123456789000000',
663 .msisdn = '543210123456789',
664}
665
666db_subscr_delete_by_id(dbc, id0) --> 0
667
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200668db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
669DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200670
671db_subscr_delete_by_id(dbc, id0) --> -ENOENT
672DAUC Cannot delete: no such subscriber: ID=1
673
674db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
675struct hlr_subscriber {
676 .id = 2,
677 .imsi = '123456789000001',
678}
679
680db_subscr_delete_by_id(dbc, id1) --> 0
681
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200682db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> -ENOENT
683DAUC Cannot read subscriber from db: IMSI='123456789000001': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200684
685db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
686struct hlr_subscriber {
687 .id = 3,
688 .imsi = '123456789000002',
689}
690
691db_subscr_delete_by_id(dbc, id2) --> 0
692
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200693db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> -ENOENT
694DAUC Cannot read subscriber from db: IMSI='123456789000002': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200695
696db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
697struct hlr_subscriber {
698 .id = 4,
699 .imsi = '123456',
700}
701
702db_subscr_delete_by_id(dbc, id_short) --> 0
703
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200704db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> -ENOENT
705DAUC Cannot read subscriber from db: IMSI='123456': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200706
707===== test_subscr_create_update_sel_delete: SUCCESS
708
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200709
710===== test_subscr_aud
711
712--- Get auth data for non-existent subscriber
713
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200714db_get_auth_data(dbc, unknown_imsi, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200715DAUC IMSI='999999999': No such subscriber
716
717
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100718db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -2
719DAUC IMSI='123456789000000': No such subscriber
720
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200721
722--- Create subscriber
723
724db_subscr_create(dbc, imsi0) --> 0
725
726db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
727struct hlr_subscriber {
728 .id = 1,
729 .imsi = '123456789000000',
730}
731
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +0100732db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200733DAUC IMSI='123456789000000': No 2G Auth Data
734DAUC IMSI='123456789000000': No 3G Auth Data
735
736
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100737db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
738DAUC IMSI='123456789000000': No 2G Auth Data
739DAUC IMSI='123456789000000': No 3G Auth Data
740
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200741
742--- Set auth data, 2G only
743
744db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
745
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200746db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200747DAUC IMSI='123456789000000': No 3G Auth Data
748
7492G: struct osmo_sub_auth_data {
750 .type = GSM,
751 .algo = COMP128v1,
752 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
753}
7543G: none
755
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100756db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3
757DAUC IMSI='123456789000000': No 3G Auth Data
758DAUC IMSI='123456789000000': Calling to generate 3 vectors
759DAUC IMSI='123456789000000': Generated 3 vectors
760
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200761db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
762
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200763db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200764DAUC IMSI='123456789000000': No 3G Auth Data
765
7662G: struct osmo_sub_auth_data {
767 .type = GSM,
768 .algo = COMP128v1,
769 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
770}
7713G: none
772
773db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v2, "BeadedBeeAced1EbbedDefacedFacade")) --> 0
774
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200775db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200776DAUC IMSI='123456789000000': No 3G Auth Data
777
7782G: struct osmo_sub_auth_data {
779 .type = GSM,
780 .algo = COMP128v2,
781 .u.gsm.ki = 'beadedbeeaced1ebbeddefacedfacade',
782}
7833G: none
784
785db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "DeafBeddedBabeAcceededFadedDecaf")) --> 0
786
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200787db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200788DAUC IMSI='123456789000000': No 3G Auth Data
789
7902G: struct osmo_sub_auth_data {
791 .type = GSM,
792 .algo = COMP128v3,
793 .u.gsm.ki = 'deafbeddedbabeacceededfadeddecaf',
794}
7953G: none
796
797db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
798
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200799db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200800DAUC IMSI='123456789000000': No 3G Auth Data
801
8022G: struct osmo_sub_auth_data {
803 .type = GSM,
804 .algo = XOR,
805 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
806}
8073G: none
808
809
810--- Remove 2G auth data
811
812db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
813
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +0100814db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200815DAUC IMSI='123456789000000': No 2G Auth Data
816DAUC IMSI='123456789000000': No 3G Auth Data
817
818
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100819db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
820DAUC IMSI='123456789000000': No 2G Auth Data
821DAUC IMSI='123456789000000': No 3G Auth Data
822
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200823db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> -ENOENT
824
825db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
826
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200827db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200828DAUC IMSI='123456789000000': No 3G Auth Data
829
8302G: struct osmo_sub_auth_data {
831 .type = GSM,
832 .algo = XOR,
833 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
834}
8353G: none
836
837db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, "f000000000000f00000000000f000000")) --> 0
838
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +0100839db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200840DAUC IMSI='123456789000000': No 2G Auth Data
841DAUC IMSI='123456789000000': No 3G Auth Data
842
843
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100844db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
845DAUC IMSI='123456789000000': No 2G Auth Data
846DAUC IMSI='123456789000000': No 3G Auth Data
847
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200848
849--- Set auth data, 3G only
850
851db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 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 2G Auth Data
855
8562G: none
8573G: struct osmo_sub_auth_data {
858 .type = UMTS,
859 .algo = MILENAGE,
860 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
861 .u.umts.opc_is_op = 1,
862 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
863 .u.umts.amf = '0000',
864 .u.umts.ind_bitlen = 5,
865}
866
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100867db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3
868DAUC IMSI='123456789000000': No 2G Auth Data
869DAUC IMSI='123456789000000': Calling to generate 3 vectors
870DAUC IMSI='123456789000000': Generated 3 vectors
871DAUC IMSI='123456789000000': Updating SQN=0 in DB
872
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200873db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
874
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200875db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200876DAUC IMSI='123456789000000': No 2G Auth Data
877
8782G: none
8793G: struct osmo_sub_auth_data {
880 .type = UMTS,
881 .algo = MILENAGE,
882 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
883 .u.umts.opc_is_op = 1,
884 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
885 .u.umts.amf = '0000',
886 .u.umts.ind_bitlen = 5,
887}
888
889db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "Deaf0ff1ceD0d0DabbedD1ced1ceF00d", true, "F1bbed0afD0eF0bD0ffed0ddF1fe0b0e", 0)) --> 0
890
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200891db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200892DAUC IMSI='123456789000000': No 2G Auth Data
893
8942G: none
8953G: struct osmo_sub_auth_data {
896 .type = UMTS,
897 .algo = MILENAGE,
898 .u.umts.opc = 'deaf0ff1ced0d0dabbedd1ced1cef00d',
899 .u.umts.opc_is_op = 1,
900 .u.umts.k = 'f1bbed0afd0ef0bd0ffed0ddf1fe0b0e',
901 .u.umts.amf = '0000',
902}
903
904db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", OSMO_MILENAGE_IND_BITLEN_MAX)) --> 0
905
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200906db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200907DAUC IMSI='123456789000000': No 2G Auth Data
908
9092G: none
9103G: struct osmo_sub_auth_data {
911 .type = UMTS,
912 .algo = MILENAGE,
913 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
914 .u.umts.opc_is_op = 0,
915 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
916 .u.umts.amf = '0000',
917 .u.umts.ind_bitlen = 28,
918}
919
920db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
921
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200922db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200923DAUC IMSI='123456789000000': No 2G Auth Data
924
9252G: none
9263G: struct osmo_sub_auth_data {
927 .type = UMTS,
928 .algo = MILENAGE,
929 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
930 .u.umts.opc_is_op = 0,
931 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
932 .u.umts.amf = '0000',
933 .u.umts.ind_bitlen = 5,
934}
935
936
937--- Remove 3G auth data
938
939db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> 0
940
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +0100941db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200942DAUC IMSI='123456789000000': No 2G Auth Data
943DAUC IMSI='123456789000000': No 3G Auth Data
944
945
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100946db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
947DAUC IMSI='123456789000000': No 2G Auth Data
948DAUC IMSI='123456789000000': No 3G Auth Data
949
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200950db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> -ENOENT
951
952db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
953
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200954db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200955DAUC IMSI='123456789000000': No 2G Auth Data
956
9572G: none
9583G: struct osmo_sub_auth_data {
959 .type = UMTS,
960 .algo = MILENAGE,
961 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
962 .u.umts.opc_is_op = 0,
963 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
964 .u.umts.amf = '0000',
965 .u.umts.ind_bitlen = 5,
966}
967
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100968db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3
969DAUC IMSI='123456789000000': No 2G Auth Data
970DAUC IMSI='123456789000000': Calling to generate 3 vectors
971DAUC IMSI='123456789000000': Generated 3 vectors
972DAUC IMSI='123456789000000': Updating SQN=0 in DB
973
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200974db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, "asdfasdfasd", false, "asdfasdfasdf", 99999)) --> 0
975
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +0100976db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200977DAUC IMSI='123456789000000': No 2G Auth Data
978DAUC IMSI='123456789000000': No 3G Auth Data
979
980
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100981db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
982DAUC IMSI='123456789000000': No 2G Auth Data
983DAUC IMSI='123456789000000': No 3G Auth Data
984
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200985
986--- Set auth data, 2G and 3G
987
988db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "CededEffacedAceFacedBadFadedBeef")) --> 0
989
990db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", 5)) --> 0
991
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200992db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200993
9942G: struct osmo_sub_auth_data {
995 .type = GSM,
996 .algo = COMP128v3,
997 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
998}
9993G: struct osmo_sub_auth_data {
1000 .type = UMTS,
1001 .algo = MILENAGE,
1002 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1003 .u.umts.opc_is_op = 0,
1004 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1005 .u.umts.amf = '0000',
1006 .u.umts.ind_bitlen = 5,
1007}
1008
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001009db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3
1010DAUC IMSI='123456789000000': Calling to generate 3 vectors
1011DAUC IMSI='123456789000000': Generated 3 vectors
1012DAUC IMSI='123456789000000': Updating SQN=0 in DB
1013
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001014
1015--- Set invalid auth data
1016
1017db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(99999, "f000000000000f00000000000f000000")) --> -EINVAL
1018DAUC Cannot update auth tokens: Unknown auth algo: 99999
1019
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001020db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001021
10222G: struct osmo_sub_auth_data {
1023 .type = GSM,
1024 .algo = COMP128v3,
1025 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1026}
10273G: struct osmo_sub_auth_data {
1028 .type = UMTS,
1029 .algo = MILENAGE,
1030 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1031 .u.umts.opc_is_op = 0,
1032 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1033 .u.umts.amf = '0000',
1034 .u.umts.ind_bitlen = 5,
1035}
1036
1037db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f000000000000f00000000000f000000f00000000")) --> -EINVAL
1038DAUC Cannot update auth tokens: Invalid KI: 'f000000000000f00000000000f000000f00000000'
1039
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001040db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001041
10422G: struct osmo_sub_auth_data {
1043 .type = GSM,
1044 .algo = COMP128v3,
1045 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1046}
10473G: struct osmo_sub_auth_data {
1048 .type = UMTS,
1049 .algo = MILENAGE,
1050 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1051 .u.umts.opc_is_op = 0,
1052 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1053 .u.umts.amf = '0000',
1054 .u.umts.ind_bitlen = 5,
1055}
1056
1057db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f00")) --> -EINVAL
1058DAUC Cannot update auth tokens: Invalid KI: 'f00'
1059
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001060db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001061
10622G: struct osmo_sub_auth_data {
1063 .type = GSM,
1064 .algo = COMP128v3,
1065 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1066}
10673G: struct osmo_sub_auth_data {
1068 .type = UMTS,
1069 .algo = MILENAGE,
1070 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1071 .u.umts.opc_is_op = 0,
1072 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1073 .u.umts.amf = '0000',
1074 .u.umts.ind_bitlen = 5,
1075}
1076
1077db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_MILENAGE, "0123456789abcdef0123456789abcdef")) --> -EINVAL
1078DAUC Cannot update auth tokens: auth algo not suited for 2G: MILENAGE
1079
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001080db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001081
10822G: struct osmo_sub_auth_data {
1083 .type = GSM,
1084 .algo = COMP128v3,
1085 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1086}
10873G: struct osmo_sub_auth_data {
1088 .type = UMTS,
1089 .algo = MILENAGE,
1090 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1091 .u.umts.opc_is_op = 0,
1092 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1093 .u.umts.amf = '0000',
1094 .u.umts.ind_bitlen = 5,
1095}
1096
1097db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "0f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1098DAUC Cannot update auth tokens: Invalid OP/OPC: '0f000000000000f00000000000f000000'
1099
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001100db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001101
11022G: struct osmo_sub_auth_data {
1103 .type = GSM,
1104 .algo = COMP128v3,
1105 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1106}
11073G: struct osmo_sub_auth_data {
1108 .type = UMTS,
1109 .algo = MILENAGE,
1110 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1111 .u.umts.opc_is_op = 0,
1112 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1113 .u.umts.amf = '0000',
1114 .u.umts.ind_bitlen = 5,
1115}
1116
1117db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "000000000000f00000000000f000000", 5)) --> -EINVAL
1118DAUC Cannot update auth tokens: Invalid K: '000000000000f00000000000f000000'
1119
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001120db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001121
11222G: struct osmo_sub_auth_data {
1123 .type = GSM,
1124 .algo = COMP128v3,
1125 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1126}
11273G: struct osmo_sub_auth_data {
1128 .type = UMTS,
1129 .algo = MILENAGE,
1130 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1131 .u.umts.opc_is_op = 0,
1132 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1133 .u.umts.amf = '0000',
1134 .u.umts.ind_bitlen = 5,
1135}
1136
1137db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", OSMO_MILENAGE_IND_BITLEN_MAX + 1)) --> -EINVAL
1138DAUC Cannot update auth tokens: Invalid ind_bitlen: 29
1139
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001140db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001141
11422G: struct osmo_sub_auth_data {
1143 .type = GSM,
1144 .algo = COMP128v3,
1145 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1146}
11473G: struct osmo_sub_auth_data {
1148 .type = UMTS,
1149 .algo = MILENAGE,
1150 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1151 .u.umts.opc_is_op = 0,
1152 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1153 .u.umts.amf = '0000',
1154 .u.umts.ind_bitlen = 5,
1155}
1156
1157db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "X000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1158DAUC Cannot update auth tokens: Invalid OP/OPC: 'X000000000000f00000000000f000000'
1159
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001160db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001161
11622G: struct osmo_sub_auth_data {
1163 .type = GSM,
1164 .algo = COMP128v3,
1165 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1166}
11673G: struct osmo_sub_auth_data {
1168 .type = UMTS,
1169 .algo = MILENAGE,
1170 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1171 .u.umts.opc_is_op = 0,
1172 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1173 .u.umts.amf = '0000',
1174 .u.umts.ind_bitlen = 5,
1175}
1176
1177db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000 f00000000000 f000000", 5)) --> -EINVAL
1178DAUC Cannot update auth tokens: Invalid K: 'f000000000000 f00000000000 f000000'
1179
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001180db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001181
11822G: struct osmo_sub_auth_data {
1183 .type = GSM,
1184 .algo = COMP128v3,
1185 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1186}
11873G: struct osmo_sub_auth_data {
1188 .type = UMTS,
1189 .algo = MILENAGE,
1190 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1191 .u.umts.opc_is_op = 0,
1192 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1193 .u.umts.amf = '0000',
1194 .u.umts.ind_bitlen = 5,
1195}
1196
1197
1198--- Delete subscriber
1199
1200db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1201struct hlr_subscriber {
1202 .id = 1,
1203 .imsi = '123456789000000',
1204}
1205
1206db_subscr_delete_by_id(dbc, id) --> 0
1207
1208db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1209DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1210
1211
1212--- Re-add subscriber and verify auth data didn't come back
1213
1214db_subscr_create(dbc, imsi0) --> 0
1215
1216db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1217struct hlr_subscriber {
1218 .id = 1,
1219 .imsi = '123456789000000',
1220}
1221
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001222db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001223DAUC IMSI='123456789000000': No 2G Auth Data
1224DAUC IMSI='123456789000000': No 3G Auth Data
1225
1226
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001227db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
1228DAUC IMSI='123456789000000': No 2G Auth Data
1229DAUC IMSI='123456789000000': No 3G Auth Data
1230
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001231db_subscr_delete_by_id(dbc, id) --> 0
1232
1233db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1234DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1235
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001236db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -2
1237DAUC IMSI='123456789000000': No such subscriber
1238
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001239===== test_subscr_aud: SUCCESS
1240
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001241
1242===== test_subscr_sqn
1243
1244--- Set SQN for unknown subscriber
1245
1246db_update_sqn(dbc, 99, 999) --> -ENOENT
1247DAUC Cannot update SQN for subscriber ID=99: no auc_3g entry for such subscriber
1248
1249db_subscr_get_by_id(dbc, 99, &g_subscr) --> -ENOENT
1250DAUC Cannot read subscriber from db: ID=99: No such subscriber
1251
1252db_update_sqn(dbc, 9999, 99) --> -ENOENT
1253DAUC Cannot update SQN for subscriber ID=9999: no auc_3g entry for such subscriber
1254
1255db_subscr_get_by_id(dbc, 9999, &g_subscr) --> -ENOENT
1256DAUC Cannot read subscriber from db: ID=9999: No such subscriber
1257
1258
1259--- Create subscriber
1260
1261db_subscr_create(dbc, imsi0) --> 0
1262
1263db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1264struct hlr_subscriber {
1265 .id = 1,
1266 .imsi = '123456789000000',
1267}
1268
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001269db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001270DAUC IMSI='123456789000000': No 2G Auth Data
1271DAUC IMSI='123456789000000': No 3G Auth Data
1272
1273
1274
1275--- Set SQN, but no 3G auth data present
1276
1277db_update_sqn(dbc, id, 123) --> -ENOENT
1278DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1279
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001280db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001281DAUC IMSI='123456789000000': No 2G Auth Data
1282DAUC IMSI='123456789000000': No 3G Auth Data
1283
1284
1285db_update_sqn(dbc, id, 543) --> -ENOENT
1286DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1287
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001288db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001289DAUC IMSI='123456789000000': No 2G Auth Data
1290DAUC IMSI='123456789000000': No 3G Auth Data
1291
1292
1293
1294--- Set auth 3G data
1295
1296db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1297
1298db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1299DAUC IMSI='123456789000000': No 2G Auth Data
1300
13012G: none
13023G: struct osmo_sub_auth_data {
1303 .type = UMTS,
1304 .algo = MILENAGE,
1305 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1306 .u.umts.opc_is_op = 1,
1307 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1308 .u.umts.amf = '0000',
1309 .u.umts.ind_bitlen = 5,
1310}
1311
1312
1313--- Set SQN
1314
1315db_update_sqn(dbc, id, 23315) --> 0
1316
1317db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1318DAUC IMSI='123456789000000': No 2G Auth Data
1319
13202G: none
13213G: struct osmo_sub_auth_data {
1322 .type = UMTS,
1323 .algo = MILENAGE,
1324 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1325 .u.umts.opc_is_op = 1,
1326 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1327 .u.umts.amf = '0000',
1328 .u.umts.sqn = 23315,
1329 .u.umts.sqn = 0x5b13,
1330 .u.umts.ind_bitlen = 5,
1331}
1332
1333db_update_sqn(dbc, id, 23315) --> 0
1334
1335db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1336DAUC IMSI='123456789000000': No 2G Auth Data
1337
13382G: none
13393G: struct osmo_sub_auth_data {
1340 .type = UMTS,
1341 .algo = MILENAGE,
1342 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1343 .u.umts.opc_is_op = 1,
1344 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1345 .u.umts.amf = '0000',
1346 .u.umts.sqn = 23315,
1347 .u.umts.sqn = 0x5b13,
1348 .u.umts.ind_bitlen = 5,
1349}
1350
1351db_update_sqn(dbc, id, 423) --> 0
1352
1353db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1354DAUC IMSI='123456789000000': No 2G Auth Data
1355
13562G: none
13573G: struct osmo_sub_auth_data {
1358 .type = UMTS,
1359 .algo = MILENAGE,
1360 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1361 .u.umts.opc_is_op = 1,
1362 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1363 .u.umts.amf = '0000',
1364 .u.umts.sqn = 423,
1365 .u.umts.sqn = 0x1a7,
1366 .u.umts.ind_bitlen = 5,
1367}
1368
1369
1370--- Set SQN: thru uint64_t range, using the int64_t SQLite bind
1371
1372db_update_sqn(dbc, id, 0) --> 0
1373
1374db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1375DAUC IMSI='123456789000000': No 2G Auth Data
1376
13772G: none
13783G: struct osmo_sub_auth_data {
1379 .type = UMTS,
1380 .algo = MILENAGE,
1381 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1382 .u.umts.opc_is_op = 1,
1383 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1384 .u.umts.amf = '0000',
1385 .u.umts.ind_bitlen = 5,
1386}
1387
1388db_update_sqn(dbc, id, INT64_MAX) --> 0
1389
1390db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1391DAUC IMSI='123456789000000': No 2G Auth Data
1392
13932G: none
13943G: struct osmo_sub_auth_data {
1395 .type = UMTS,
1396 .algo = MILENAGE,
1397 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1398 .u.umts.opc_is_op = 1,
1399 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1400 .u.umts.amf = '0000',
1401 .u.umts.sqn = 9223372036854775807,
1402 .u.umts.sqn = 0x7fffffffffffffff,
1403 .u.umts.ind_bitlen = 5,
1404}
1405
1406db_update_sqn(dbc, id, INT64_MIN) --> 0
1407
1408db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1409DAUC IMSI='123456789000000': No 2G Auth Data
1410
14112G: none
14123G: struct osmo_sub_auth_data {
1413 .type = UMTS,
1414 .algo = MILENAGE,
1415 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1416 .u.umts.opc_is_op = 1,
1417 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1418 .u.umts.amf = '0000',
1419 .u.umts.sqn = 9223372036854775808,
1420 .u.umts.sqn = 0x8000000000000000,
1421 .u.umts.ind_bitlen = 5,
1422}
1423
1424db_update_sqn(dbc, id, UINT64_MAX) --> 0
1425
1426db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1427DAUC IMSI='123456789000000': No 2G Auth Data
1428
14292G: none
14303G: struct osmo_sub_auth_data {
1431 .type = UMTS,
1432 .algo = MILENAGE,
1433 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1434 .u.umts.opc_is_op = 1,
1435 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1436 .u.umts.amf = '0000',
1437 .u.umts.sqn = 18446744073709551615,
1438 .u.umts.sqn = 0xffffffffffffffff,
1439 .u.umts.ind_bitlen = 5,
1440}
1441
1442
1443--- Delete subscriber
1444
1445db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1446struct hlr_subscriber {
1447 .id = 1,
1448 .imsi = '123456789000000',
1449}
1450
1451db_subscr_delete_by_id(dbc, id) --> 0
1452
1453db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1454DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1455
1456===== test_subscr_sqn: SUCCESS
1457