blob: f7acfecb0550e0d24aa0991e01821c4cf1b63741 [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
718
719--- Create subscriber
720
721db_subscr_create(dbc, imsi0) --> 0
722
723db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
724struct hlr_subscriber {
725 .id = 1,
726 .imsi = '123456789000000',
727}
728
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200729db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200730DAUC IMSI='123456789000000': No 2G Auth Data
731DAUC IMSI='123456789000000': No 3G Auth Data
732
733
734
735--- Set auth data, 2G only
736
737db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
738
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200739db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200740DAUC IMSI='123456789000000': No 3G Auth Data
741
7422G: struct osmo_sub_auth_data {
743 .type = GSM,
744 .algo = COMP128v1,
745 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
746}
7473G: none
748
749db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
750
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200751db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200752DAUC IMSI='123456789000000': No 3G Auth Data
753
7542G: struct osmo_sub_auth_data {
755 .type = GSM,
756 .algo = COMP128v1,
757 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
758}
7593G: none
760
761db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v2, "BeadedBeeAced1EbbedDefacedFacade")) --> 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 = COMP128v2,
769 .u.gsm.ki = 'beadedbeeaced1ebbeddefacedfacade',
770}
7713G: none
772
773db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "DeafBeddedBabeAcceededFadedDecaf")) --> 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 = COMP128v3,
781 .u.gsm.ki = 'deafbeddedbabeacceededfadeddecaf',
782}
7833G: none
784
785db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 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 = XOR,
793 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
794}
7953G: none
796
797
798--- Remove 2G auth data
799
800db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
801
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200802db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200803DAUC IMSI='123456789000000': No 2G Auth Data
804DAUC IMSI='123456789000000': No 3G Auth Data
805
806
807db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> -ENOENT
808
809db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
810
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200811db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200812DAUC IMSI='123456789000000': No 3G Auth Data
813
8142G: struct osmo_sub_auth_data {
815 .type = GSM,
816 .algo = XOR,
817 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
818}
8193G: none
820
821db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, "f000000000000f00000000000f000000")) --> 0
822
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200823db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200824DAUC IMSI='123456789000000': No 2G Auth Data
825DAUC IMSI='123456789000000': No 3G Auth Data
826
827
828
829--- Set auth data, 3G only
830
831db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
832
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200833db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200834DAUC IMSI='123456789000000': No 2G Auth Data
835
8362G: none
8373G: struct osmo_sub_auth_data {
838 .type = UMTS,
839 .algo = MILENAGE,
840 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
841 .u.umts.opc_is_op = 1,
842 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
843 .u.umts.amf = '0000',
844 .u.umts.ind_bitlen = 5,
845}
846
847db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
848
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200849db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200850DAUC IMSI='123456789000000': No 2G Auth Data
851
8522G: none
8533G: struct osmo_sub_auth_data {
854 .type = UMTS,
855 .algo = MILENAGE,
856 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
857 .u.umts.opc_is_op = 1,
858 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
859 .u.umts.amf = '0000',
860 .u.umts.ind_bitlen = 5,
861}
862
863db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "Deaf0ff1ceD0d0DabbedD1ced1ceF00d", true, "F1bbed0afD0eF0bD0ffed0ddF1fe0b0e", 0)) --> 0
864
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200865db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200866DAUC IMSI='123456789000000': No 2G Auth Data
867
8682G: none
8693G: struct osmo_sub_auth_data {
870 .type = UMTS,
871 .algo = MILENAGE,
872 .u.umts.opc = 'deaf0ff1ced0d0dabbedd1ced1cef00d',
873 .u.umts.opc_is_op = 1,
874 .u.umts.k = 'f1bbed0afd0ef0bd0ffed0ddf1fe0b0e',
875 .u.umts.amf = '0000',
876}
877
878db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", OSMO_MILENAGE_IND_BITLEN_MAX)) --> 0
879
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200880db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200881DAUC IMSI='123456789000000': No 2G Auth Data
882
8832G: none
8843G: struct osmo_sub_auth_data {
885 .type = UMTS,
886 .algo = MILENAGE,
887 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
888 .u.umts.opc_is_op = 0,
889 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
890 .u.umts.amf = '0000',
891 .u.umts.ind_bitlen = 28,
892}
893
894db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
895
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200896db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200897DAUC IMSI='123456789000000': No 2G Auth Data
898
8992G: none
9003G: struct osmo_sub_auth_data {
901 .type = UMTS,
902 .algo = MILENAGE,
903 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
904 .u.umts.opc_is_op = 0,
905 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
906 .u.umts.amf = '0000',
907 .u.umts.ind_bitlen = 5,
908}
909
910
911--- Remove 3G auth data
912
913db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> 0
914
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200915db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200916DAUC IMSI='123456789000000': No 2G Auth Data
917DAUC IMSI='123456789000000': No 3G Auth Data
918
919
920db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> -ENOENT
921
922db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
923
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200924db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200925DAUC IMSI='123456789000000': No 2G Auth Data
926
9272G: none
9283G: struct osmo_sub_auth_data {
929 .type = UMTS,
930 .algo = MILENAGE,
931 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
932 .u.umts.opc_is_op = 0,
933 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
934 .u.umts.amf = '0000',
935 .u.umts.ind_bitlen = 5,
936}
937
938db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, "asdfasdfasd", false, "asdfasdfasdf", 99999)) --> 0
939
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200940db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200941DAUC IMSI='123456789000000': No 2G Auth Data
942DAUC IMSI='123456789000000': No 3G Auth Data
943
944
945
946--- Set auth data, 2G and 3G
947
948db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "CededEffacedAceFacedBadFadedBeef")) --> 0
949
950db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", 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 +0200953
9542G: struct osmo_sub_auth_data {
955 .type = GSM,
956 .algo = COMP128v3,
957 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
958}
9593G: struct osmo_sub_auth_data {
960 .type = UMTS,
961 .algo = MILENAGE,
962 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
963 .u.umts.opc_is_op = 0,
964 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
965 .u.umts.amf = '0000',
966 .u.umts.ind_bitlen = 5,
967}
968
969
970--- Set invalid auth data
971
972db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(99999, "f000000000000f00000000000f000000")) --> -EINVAL
973DAUC Cannot update auth tokens: Unknown auth algo: 99999
974
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200975db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200976
9772G: struct osmo_sub_auth_data {
978 .type = GSM,
979 .algo = COMP128v3,
980 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
981}
9823G: struct osmo_sub_auth_data {
983 .type = UMTS,
984 .algo = MILENAGE,
985 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
986 .u.umts.opc_is_op = 0,
987 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
988 .u.umts.amf = '0000',
989 .u.umts.ind_bitlen = 5,
990}
991
992db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f000000000000f00000000000f000000f00000000")) --> -EINVAL
993DAUC Cannot update auth tokens: Invalid KI: 'f000000000000f00000000000f000000f00000000'
994
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200995db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200996
9972G: struct osmo_sub_auth_data {
998 .type = GSM,
999 .algo = COMP128v3,
1000 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1001}
10023G: struct osmo_sub_auth_data {
1003 .type = UMTS,
1004 .algo = MILENAGE,
1005 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1006 .u.umts.opc_is_op = 0,
1007 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1008 .u.umts.amf = '0000',
1009 .u.umts.ind_bitlen = 5,
1010}
1011
1012db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f00")) --> -EINVAL
1013DAUC Cannot update auth tokens: Invalid KI: 'f00'
1014
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001015db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001016
10172G: struct osmo_sub_auth_data {
1018 .type = GSM,
1019 .algo = COMP128v3,
1020 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1021}
10223G: struct osmo_sub_auth_data {
1023 .type = UMTS,
1024 .algo = MILENAGE,
1025 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1026 .u.umts.opc_is_op = 0,
1027 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1028 .u.umts.amf = '0000',
1029 .u.umts.ind_bitlen = 5,
1030}
1031
1032db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_MILENAGE, "0123456789abcdef0123456789abcdef")) --> -EINVAL
1033DAUC Cannot update auth tokens: auth algo not suited for 2G: MILENAGE
1034
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001035db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001036
10372G: struct osmo_sub_auth_data {
1038 .type = GSM,
1039 .algo = COMP128v3,
1040 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1041}
10423G: struct osmo_sub_auth_data {
1043 .type = UMTS,
1044 .algo = MILENAGE,
1045 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1046 .u.umts.opc_is_op = 0,
1047 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1048 .u.umts.amf = '0000',
1049 .u.umts.ind_bitlen = 5,
1050}
1051
1052db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "0f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1053DAUC Cannot update auth tokens: Invalid OP/OPC: '0f000000000000f00000000000f000000'
1054
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001055db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001056
10572G: struct osmo_sub_auth_data {
1058 .type = GSM,
1059 .algo = COMP128v3,
1060 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1061}
10623G: struct osmo_sub_auth_data {
1063 .type = UMTS,
1064 .algo = MILENAGE,
1065 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1066 .u.umts.opc_is_op = 0,
1067 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1068 .u.umts.amf = '0000',
1069 .u.umts.ind_bitlen = 5,
1070}
1071
1072db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "000000000000f00000000000f000000", 5)) --> -EINVAL
1073DAUC Cannot update auth tokens: Invalid K: '000000000000f00000000000f000000'
1074
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001075db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001076
10772G: struct osmo_sub_auth_data {
1078 .type = GSM,
1079 .algo = COMP128v3,
1080 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1081}
10823G: struct osmo_sub_auth_data {
1083 .type = UMTS,
1084 .algo = MILENAGE,
1085 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1086 .u.umts.opc_is_op = 0,
1087 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1088 .u.umts.amf = '0000',
1089 .u.umts.ind_bitlen = 5,
1090}
1091
1092db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", OSMO_MILENAGE_IND_BITLEN_MAX + 1)) --> -EINVAL
1093DAUC Cannot update auth tokens: Invalid ind_bitlen: 29
1094
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001095db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001096
10972G: struct osmo_sub_auth_data {
1098 .type = GSM,
1099 .algo = COMP128v3,
1100 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1101}
11023G: struct osmo_sub_auth_data {
1103 .type = UMTS,
1104 .algo = MILENAGE,
1105 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1106 .u.umts.opc_is_op = 0,
1107 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1108 .u.umts.amf = '0000',
1109 .u.umts.ind_bitlen = 5,
1110}
1111
1112db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "X000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1113DAUC Cannot update auth tokens: Invalid OP/OPC: 'X000000000000f00000000000f000000'
1114
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001115db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001116
11172G: struct osmo_sub_auth_data {
1118 .type = GSM,
1119 .algo = COMP128v3,
1120 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1121}
11223G: struct osmo_sub_auth_data {
1123 .type = UMTS,
1124 .algo = MILENAGE,
1125 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1126 .u.umts.opc_is_op = 0,
1127 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1128 .u.umts.amf = '0000',
1129 .u.umts.ind_bitlen = 5,
1130}
1131
1132db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000 f00000000000 f000000", 5)) --> -EINVAL
1133DAUC Cannot update auth tokens: Invalid K: 'f000000000000 f00000000000 f000000'
1134
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001135db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001136
11372G: struct osmo_sub_auth_data {
1138 .type = GSM,
1139 .algo = COMP128v3,
1140 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1141}
11423G: struct osmo_sub_auth_data {
1143 .type = UMTS,
1144 .algo = MILENAGE,
1145 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1146 .u.umts.opc_is_op = 0,
1147 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1148 .u.umts.amf = '0000',
1149 .u.umts.ind_bitlen = 5,
1150}
1151
1152
1153--- Delete subscriber
1154
1155db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1156struct hlr_subscriber {
1157 .id = 1,
1158 .imsi = '123456789000000',
1159}
1160
1161db_subscr_delete_by_id(dbc, id) --> 0
1162
1163db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1164DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1165
1166
1167--- Re-add subscriber and verify auth data didn't come back
1168
1169db_subscr_create(dbc, imsi0) --> 0
1170
1171db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1172struct hlr_subscriber {
1173 .id = 1,
1174 .imsi = '123456789000000',
1175}
1176
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001177db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001178DAUC IMSI='123456789000000': No 2G Auth Data
1179DAUC IMSI='123456789000000': No 3G Auth Data
1180
1181
1182db_subscr_delete_by_id(dbc, id) --> 0
1183
1184db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1185DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1186
1187===== test_subscr_aud: SUCCESS
1188
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001189
1190===== test_subscr_sqn
1191
1192--- Set SQN for unknown subscriber
1193
1194db_update_sqn(dbc, 99, 999) --> -ENOENT
1195DAUC Cannot update SQN for subscriber ID=99: no auc_3g entry for such subscriber
1196
1197db_subscr_get_by_id(dbc, 99, &g_subscr) --> -ENOENT
1198DAUC Cannot read subscriber from db: ID=99: No such subscriber
1199
1200db_update_sqn(dbc, 9999, 99) --> -ENOENT
1201DAUC Cannot update SQN for subscriber ID=9999: no auc_3g entry for such subscriber
1202
1203db_subscr_get_by_id(dbc, 9999, &g_subscr) --> -ENOENT
1204DAUC Cannot read subscriber from db: ID=9999: No such subscriber
1205
1206
1207--- Create subscriber
1208
1209db_subscr_create(dbc, imsi0) --> 0
1210
1211db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1212struct hlr_subscriber {
1213 .id = 1,
1214 .imsi = '123456789000000',
1215}
1216
1217db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
1218DAUC IMSI='123456789000000': No 2G Auth Data
1219DAUC IMSI='123456789000000': No 3G Auth Data
1220
1221
1222
1223--- Set SQN, but no 3G auth data present
1224
1225db_update_sqn(dbc, id, 123) --> -ENOENT
1226DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1227
1228db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
1229DAUC IMSI='123456789000000': No 2G Auth Data
1230DAUC IMSI='123456789000000': No 3G Auth Data
1231
1232
1233db_update_sqn(dbc, id, 543) --> -ENOENT
1234DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1235
1236db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
1237DAUC IMSI='123456789000000': No 2G Auth Data
1238DAUC IMSI='123456789000000': No 3G Auth Data
1239
1240
1241
1242--- Set auth 3G data
1243
1244db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1245
1246db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1247DAUC IMSI='123456789000000': No 2G Auth Data
1248
12492G: none
12503G: struct osmo_sub_auth_data {
1251 .type = UMTS,
1252 .algo = MILENAGE,
1253 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1254 .u.umts.opc_is_op = 1,
1255 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1256 .u.umts.amf = '0000',
1257 .u.umts.ind_bitlen = 5,
1258}
1259
1260
1261--- Set SQN
1262
1263db_update_sqn(dbc, id, 23315) --> 0
1264
1265db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1266DAUC IMSI='123456789000000': No 2G Auth Data
1267
12682G: none
12693G: struct osmo_sub_auth_data {
1270 .type = UMTS,
1271 .algo = MILENAGE,
1272 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1273 .u.umts.opc_is_op = 1,
1274 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1275 .u.umts.amf = '0000',
1276 .u.umts.sqn = 23315,
1277 .u.umts.sqn = 0x5b13,
1278 .u.umts.ind_bitlen = 5,
1279}
1280
1281db_update_sqn(dbc, id, 23315) --> 0
1282
1283db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1284DAUC IMSI='123456789000000': No 2G Auth Data
1285
12862G: none
12873G: struct osmo_sub_auth_data {
1288 .type = UMTS,
1289 .algo = MILENAGE,
1290 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1291 .u.umts.opc_is_op = 1,
1292 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1293 .u.umts.amf = '0000',
1294 .u.umts.sqn = 23315,
1295 .u.umts.sqn = 0x5b13,
1296 .u.umts.ind_bitlen = 5,
1297}
1298
1299db_update_sqn(dbc, id, 423) --> 0
1300
1301db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1302DAUC IMSI='123456789000000': No 2G Auth Data
1303
13042G: none
13053G: struct osmo_sub_auth_data {
1306 .type = UMTS,
1307 .algo = MILENAGE,
1308 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1309 .u.umts.opc_is_op = 1,
1310 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1311 .u.umts.amf = '0000',
1312 .u.umts.sqn = 423,
1313 .u.umts.sqn = 0x1a7,
1314 .u.umts.ind_bitlen = 5,
1315}
1316
1317
1318--- Set SQN: thru uint64_t range, using the int64_t SQLite bind
1319
1320db_update_sqn(dbc, id, 0) --> 0
1321
1322db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1323DAUC IMSI='123456789000000': No 2G Auth Data
1324
13252G: none
13263G: struct osmo_sub_auth_data {
1327 .type = UMTS,
1328 .algo = MILENAGE,
1329 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1330 .u.umts.opc_is_op = 1,
1331 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1332 .u.umts.amf = '0000',
1333 .u.umts.ind_bitlen = 5,
1334}
1335
1336db_update_sqn(dbc, id, INT64_MAX) --> 0
1337
1338db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1339DAUC IMSI='123456789000000': No 2G Auth Data
1340
13412G: none
13423G: struct osmo_sub_auth_data {
1343 .type = UMTS,
1344 .algo = MILENAGE,
1345 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1346 .u.umts.opc_is_op = 1,
1347 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1348 .u.umts.amf = '0000',
1349 .u.umts.sqn = 9223372036854775807,
1350 .u.umts.sqn = 0x7fffffffffffffff,
1351 .u.umts.ind_bitlen = 5,
1352}
1353
1354db_update_sqn(dbc, id, INT64_MIN) --> 0
1355
1356db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1357DAUC IMSI='123456789000000': No 2G Auth Data
1358
13592G: none
13603G: struct osmo_sub_auth_data {
1361 .type = UMTS,
1362 .algo = MILENAGE,
1363 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1364 .u.umts.opc_is_op = 1,
1365 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1366 .u.umts.amf = '0000',
1367 .u.umts.sqn = 9223372036854775808,
1368 .u.umts.sqn = 0x8000000000000000,
1369 .u.umts.ind_bitlen = 5,
1370}
1371
1372db_update_sqn(dbc, id, UINT64_MAX) --> 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.sqn = 18446744073709551615,
1386 .u.umts.sqn = 0xffffffffffffffff,
1387 .u.umts.ind_bitlen = 5,
1388}
1389
1390
1391--- Delete subscriber
1392
1393db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1394struct hlr_subscriber {
1395 .id = 1,
1396 .imsi = '123456789000000',
1397}
1398
1399db_subscr_delete_by_id(dbc, id) --> 0
1400
1401db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1402DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1403
1404===== test_subscr_sqn: SUCCESS
1405