blob: 0b09583eb2fd3178dde1ac639ba591990601dd18 [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
31DDB (2067) abort at 18 in [INSERT INTO subscriber (imsi) VALUES ($imsi)]: UNIQUE constraint failed: subscriber.imsi
Neels Hofmeyr98509462017-10-09 17:28:53 +020032DAUC IMSI='123456789000000': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
33
34db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
35struct hlr_subscriber {
36 .id = 1,
37 .imsi = '123456789000000',
38}
39
40db_subscr_create(dbc, imsi1) --> -EIO
41DDB (2067) abort at 18 in [INSERT INTO subscriber (imsi) VALUES ($imsi)]: UNIQUE constraint failed: subscriber.imsi
Neels Hofmeyr98509462017-10-09 17:28:53 +020042DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
43
44db_subscr_create(dbc, imsi1) --> -EIO
45DDB (2067) abort at 18 in [INSERT INTO subscriber (imsi) VALUES ($imsi)]: UNIQUE constraint failed: subscriber.imsi
Neels Hofmeyr98509462017-10-09 17:28:53 +020046DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
47
48db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
49struct hlr_subscriber {
50 .id = 2,
51 .imsi = '123456789000001',
52}
53
54db_subscr_create(dbc, imsi2) --> -EIO
55DDB (2067) abort at 18 in [INSERT INTO subscriber (imsi) VALUES ($imsi)]: UNIQUE constraint failed: subscriber.imsi
Neels Hofmeyr98509462017-10-09 17:28:53 +020056DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
57
58db_subscr_create(dbc, imsi2) --> -EIO
59DDB (2067) abort at 18 in [INSERT INTO subscriber (imsi) VALUES ($imsi)]: UNIQUE constraint failed: subscriber.imsi
Neels Hofmeyr98509462017-10-09 17:28:53 +020060DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
61
62db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
63struct hlr_subscriber {
64 .id = 3,
65 .imsi = '123456789000002',
66}
67
68db_subscr_create(dbc, "123456789 000003") --> -EINVAL
69DAUC Cannot create subscriber: invalid IMSI: '123456789 000003'
70
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020071db_subscr_get_by_imsi(dbc, "123456789000003", &g_subscr) --> -ENOENT
72DAUC Cannot read subscriber from db: IMSI='123456789000003': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020073
74db_subscr_create(dbc, "123456789000002123456") --> -EINVAL
75DAUC Cannot create subscriber: invalid IMSI: '123456789000002123456'
76
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020077db_subscr_get_by_imsi(dbc, "123456789000002123456", &g_subscr) --> -ENOENT
78DAUC Cannot read subscriber from db: IMSI='123456789000002123456': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020079
80db_subscr_create(dbc, "foobar123") --> -EINVAL
81DAUC Cannot create subscriber: invalid IMSI: 'foobar123'
82
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020083db_subscr_get_by_imsi(dbc, "foobar123", &g_subscr) --> -ENOENT
84DAUC Cannot read subscriber from db: IMSI='foobar123': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020085
86db_subscr_create(dbc, "123") --> -EINVAL
87DAUC Cannot create subscriber: invalid IMSI: '123'
88
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020089db_subscr_get_by_imsi(dbc, "123", &g_subscr) --> -ENOENT
90DAUC Cannot read subscriber from db: IMSI='123': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020091
92db_subscr_create(dbc, short_imsi) --> 0
93
94db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
95struct hlr_subscriber {
96 .id = 4,
97 .imsi = '123456',
98}
99
100
101--- Set valid / invalid MSISDN
102
103db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
104struct hlr_subscriber {
105 .id = 1,
106 .imsi = '123456789000000',
107}
108
109db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321") --> 0
110
111db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
112struct hlr_subscriber {
113 .id = 1,
114 .imsi = '123456789000000',
115 .msisdn = '54321',
116}
117
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200118db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
119struct hlr_subscriber {
120 .id = 1,
121 .imsi = '123456789000000',
122 .msisdn = '54321',
123}
124
Neels Hofmeyr98509462017-10-09 17:28:53 +0200125db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321012345678912345678") --> -EINVAL
126DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '54321012345678912345678'
127
128db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
129struct hlr_subscriber {
130 .id = 1,
131 .imsi = '123456789000000',
132 .msisdn = '54321',
133}
134
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200135db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
136struct hlr_subscriber {
137 .id = 1,
138 .imsi = '123456789000000',
139 .msisdn = '54321',
140}
141
142db_subscr_get_by_msisdn(dbc, "54321012345678912345678", &g_subscr) --> -ENOENT
143DAUC Cannot read subscriber from db: MSISDN='54321012345678912345678': No such subscriber
144
Neels Hofmeyr98509462017-10-09 17:28:53 +0200145db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543 21") --> -EINVAL
146DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '543 21'
147
148db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
149struct hlr_subscriber {
150 .id = 1,
151 .imsi = '123456789000000',
152 .msisdn = '54321',
153}
154
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200155db_subscr_get_by_msisdn(dbc, "543 21", &g_subscr) --> -ENOENT
156DAUC Cannot read subscriber from db: MSISDN='543 21': No such subscriber
157
Neels Hofmeyr98509462017-10-09 17:28:53 +0200158db_subscr_update_msisdn_by_imsi(dbc, imsi0, "foobar123") --> -EINVAL
159DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: 'foobar123'
160
161db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
162struct hlr_subscriber {
163 .id = 1,
164 .imsi = '123456789000000',
165 .msisdn = '54321',
166}
167
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200168db_subscr_get_by_msisdn(dbc, "foobar123", &g_subscr) --> -ENOENT
169DAUC Cannot read subscriber from db: MSISDN='foobar123': No such subscriber
170
Neels Hofmeyr98509462017-10-09 17:28:53 +0200171db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5") --> 0
172
173db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
174struct hlr_subscriber {
175 .id = 1,
176 .imsi = '123456789000000',
177 .msisdn = '5',
178}
179
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200180db_subscr_get_by_msisdn(dbc, "5", &g_subscr) --> 0
181struct hlr_subscriber {
182 .id = 1,
183 .imsi = '123456789000000',
184 .msisdn = '5',
185}
186
187db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> -ENOENT
188DAUC Cannot read subscriber from db: MSISDN='54321': No such subscriber
189
Neels Hofmeyr98509462017-10-09 17:28:53 +0200190db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543210123456789") --> 0
191
192db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
193struct hlr_subscriber {
194 .id = 1,
195 .imsi = '123456789000000',
196 .msisdn = '543210123456789',
197}
198
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200199db_subscr_get_by_msisdn(dbc, "543210123456789", &g_subscr) --> 0
200struct hlr_subscriber {
201 .id = 1,
202 .imsi = '123456789000000',
203 .msisdn = '543210123456789',
204}
205
Neels Hofmeyr98509462017-10-09 17:28:53 +0200206db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5432101234567891") --> -EINVAL
207DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '5432101234567891'
208
209db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
210struct hlr_subscriber {
211 .id = 1,
212 .imsi = '123456789000000',
213 .msisdn = '543210123456789',
214}
215
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200216db_subscr_get_by_msisdn(dbc, "5432101234567891", &g_subscr) --> -ENOENT
217DAUC Cannot read subscriber from db: MSISDN='5432101234567891': No such subscriber
218
Neels Hofmeyr98509462017-10-09 17:28:53 +0200219
220--- Set MSISDN on non-existent / invalid IMSI
221
222db_subscr_update_msisdn_by_imsi(dbc, unknown_imsi, "99") --> -ENOENT
223DAUC Cannot update MSISDN: no such subscriber: IMSI='999999999'
224
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200225db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
226DAUC Cannot read subscriber from db: MSISDN='99': No such subscriber
227
Neels Hofmeyr98509462017-10-09 17:28:53 +0200228db_subscr_update_msisdn_by_imsi(dbc, "foobar", "99") --> -ENOENT
229DAUC Cannot update MSISDN: no such subscriber: IMSI='foobar'
230
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200231db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
232DAUC Cannot read subscriber from db: MSISDN='99': No such subscriber
233
Neels Hofmeyr98509462017-10-09 17:28:53 +0200234
Neels Hofmeyre8ccd502017-10-06 04:10:06 +0200235--- Set / unset nam_cs and nam_ps
236
237db_subscr_nam(dbc, imsi0, false, true) --> 0
238
239db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
240struct hlr_subscriber {
241 .id = 1,
242 .imsi = '123456789000000',
243 .msisdn = '543210123456789',
244 .nam_ps = false,
245}
246
247db_subscr_nam(dbc, imsi0, false, false) --> 0
248
249db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
250struct hlr_subscriber {
251 .id = 1,
252 .imsi = '123456789000000',
253 .msisdn = '543210123456789',
254 .nam_cs = false,
255 .nam_ps = false,
256}
257
258db_subscr_nam(dbc, imsi0, true, false) --> 0
259
260db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
261struct hlr_subscriber {
262 .id = 1,
263 .imsi = '123456789000000',
264 .msisdn = '543210123456789',
265 .nam_ps = false,
266}
267
268db_subscr_nam(dbc, imsi0, true, true) --> 0
269
270db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
271struct hlr_subscriber {
272 .id = 1,
273 .imsi = '123456789000000',
274 .msisdn = '543210123456789',
275}
276
277
278--- Set / unset nam_cs and nam_ps *again*
279
280db_subscr_nam(dbc, imsi0, false, true) --> 0
281
282db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
283struct hlr_subscriber {
284 .id = 1,
285 .imsi = '123456789000000',
286 .msisdn = '543210123456789',
287 .nam_ps = false,
288}
289
290db_subscr_nam(dbc, imsi0, false, true) --> 0
291
292db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
293struct hlr_subscriber {
294 .id = 1,
295 .imsi = '123456789000000',
296 .msisdn = '543210123456789',
297 .nam_ps = false,
298}
299
300db_subscr_nam(dbc, imsi0, false, false) --> 0
301
302db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
303struct hlr_subscriber {
304 .id = 1,
305 .imsi = '123456789000000',
306 .msisdn = '543210123456789',
307 .nam_cs = false,
308 .nam_ps = false,
309}
310
311db_subscr_nam(dbc, imsi0, false, false) --> 0
312
313db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
314struct hlr_subscriber {
315 .id = 1,
316 .imsi = '123456789000000',
317 .msisdn = '543210123456789',
318 .nam_cs = false,
319 .nam_ps = false,
320}
321
322db_subscr_nam(dbc, imsi0, true, true) --> 0
323
324db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
325struct hlr_subscriber {
326 .id = 1,
327 .imsi = '123456789000000',
328 .msisdn = '543210123456789',
329 .nam_cs = false,
330}
331
332db_subscr_nam(dbc, imsi0, true, true) --> 0
333
334db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
335struct hlr_subscriber {
336 .id = 1,
337 .imsi = '123456789000000',
338 .msisdn = '543210123456789',
339 .nam_cs = false,
340}
341
342db_subscr_nam(dbc, imsi0, true, false) --> 0
343
344db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
345struct hlr_subscriber {
346 .id = 1,
347 .imsi = '123456789000000',
348 .msisdn = '543210123456789',
349}
350
351db_subscr_nam(dbc, imsi0, true, false) --> 0
352
353db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
354struct hlr_subscriber {
355 .id = 1,
356 .imsi = '123456789000000',
357 .msisdn = '543210123456789',
358}
359
360
361--- Set nam_cs and nam_ps on non-existent / invalid IMSI
362
363db_subscr_nam(dbc, unknown_imsi, false, true) --> -ENOENT
364DAUC Cannot disable PS: no such subscriber: IMSI='999999999'
365
366db_subscr_nam(dbc, unknown_imsi, false, false) --> -ENOENT
367DAUC Cannot disable CS: no such subscriber: IMSI='999999999'
368
369db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
370DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
371
372db_subscr_nam(dbc, "foobar", false, true) --> -ENOENT
373DAUC Cannot disable PS: no such subscriber: IMSI='foobar'
374
375db_subscr_nam(dbc, "foobar", false, false) --> -ENOENT
376DAUC Cannot disable CS: no such subscriber: IMSI='foobar'
377
378
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200379--- Record LU for PS and CS (SGSN and VLR names)
380
381db_subscr_lu(dbc, id0, "5952", true) --> 0
382
383db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
384struct hlr_subscriber {
385 .id = 1,
386 .imsi = '123456789000000',
387 .msisdn = '543210123456789',
388 .sgsn_number = '5952',
389}
390
391db_subscr_lu(dbc, id0, "712", false) --> 0
392
393db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
394struct hlr_subscriber {
395 .id = 1,
396 .imsi = '123456789000000',
397 .msisdn = '543210123456789',
398 .vlr_number = '712',
399 .sgsn_number = '5952',
400}
401
402
403--- Record LU for PS and CS (SGSN and VLR names) *again*
404
405db_subscr_lu(dbc, id0, "111", true) --> 0
406
407db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
408struct hlr_subscriber {
409 .id = 1,
410 .imsi = '123456789000000',
411 .msisdn = '543210123456789',
412 .vlr_number = '712',
413 .sgsn_number = '111',
414}
415
416db_subscr_lu(dbc, id0, "111", true) --> 0
417
418db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
419struct hlr_subscriber {
420 .id = 1,
421 .imsi = '123456789000000',
422 .msisdn = '543210123456789',
423 .vlr_number = '712',
424 .sgsn_number = '111',
425}
426
427db_subscr_lu(dbc, id0, "222", false) --> 0
428
429db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
430struct hlr_subscriber {
431 .id = 1,
432 .imsi = '123456789000000',
433 .msisdn = '543210123456789',
434 .vlr_number = '222',
435 .sgsn_number = '111',
436}
437
438db_subscr_lu(dbc, id0, "222", false) --> 0
439
440db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
441struct hlr_subscriber {
442 .id = 1,
443 .imsi = '123456789000000',
444 .msisdn = '543210123456789',
445 .vlr_number = '222',
446 .sgsn_number = '111',
447}
448
449
450--- Unset LU info for PS and CS (SGSN and VLR names)
451
452db_subscr_lu(dbc, id0, "", true) --> 0
453
454db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
455struct hlr_subscriber {
456 .id = 1,
457 .imsi = '123456789000000',
458 .msisdn = '543210123456789',
459 .vlr_number = '222',
460}
461
462db_subscr_lu(dbc, id0, "", false) --> 0
463
464db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
465struct hlr_subscriber {
466 .id = 1,
467 .imsi = '123456789000000',
468 .msisdn = '543210123456789',
469}
470
471db_subscr_lu(dbc, id0, "111", true) --> 0
472
473db_subscr_lu(dbc, id0, "222", false) --> 0
474
475db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
476struct hlr_subscriber {
477 .id = 1,
478 .imsi = '123456789000000',
479 .msisdn = '543210123456789',
480 .vlr_number = '222',
481 .sgsn_number = '111',
482}
483
484db_subscr_lu(dbc, id0, NULL, true) --> 0
485
486db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
487struct hlr_subscriber {
488 .id = 1,
489 .imsi = '123456789000000',
490 .msisdn = '543210123456789',
491 .vlr_number = '222',
492}
493
494db_subscr_lu(dbc, id0, NULL, false) --> 0
495
496db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
497struct hlr_subscriber {
498 .id = 1,
499 .imsi = '123456789000000',
500 .msisdn = '543210123456789',
501}
502
503
504--- Record LU for non-existent ID
505
506db_subscr_lu(dbc, 99999, "5952", true) --> -ENOENT
507DAUC Cannot update SGSN number for subscriber ID=99999: no such subscriber
508
509db_subscr_lu(dbc, 99999, "712", false) --> -ENOENT
510DAUC Cannot update VLR number for subscriber ID=99999: no such subscriber
511
512db_subscr_get_by_id(dbc, 99999, &g_subscr) --> -ENOENT
513DAUC Cannot read subscriber from db: ID=99999: No such subscriber
514
515
Neels Hofmeyre50121e2017-10-09 17:48:51 +0200516--- Purge and un-purge PS and CS
517
518db_subscr_purge(dbc, imsi0, true, true) --> 0
519
520db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
521struct hlr_subscriber {
522 .id = 1,
523 .imsi = '123456789000000',
524 .msisdn = '543210123456789',
525 .ms_purged_ps = true,
526}
527
528db_subscr_purge(dbc, imsi0, true, false) --> 0
529
530db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
531struct hlr_subscriber {
532 .id = 1,
533 .imsi = '123456789000000',
534 .msisdn = '543210123456789',
535 .ms_purged_cs = true,
536 .ms_purged_ps = true,
537}
538
539db_subscr_purge(dbc, imsi0, false, false) --> 0
540
541db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
542struct hlr_subscriber {
543 .id = 1,
544 .imsi = '123456789000000',
545 .msisdn = '543210123456789',
546 .ms_purged_ps = true,
547}
548
549db_subscr_purge(dbc, imsi0, false, true) --> 0
550
551db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
552struct hlr_subscriber {
553 .id = 1,
554 .imsi = '123456789000000',
555 .msisdn = '543210123456789',
556}
557
558
559--- Purge PS and CS *again*
560
561db_subscr_purge(dbc, imsi0, true, true) --> 0
562
563db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
564struct hlr_subscriber {
565 .id = 1,
566 .imsi = '123456789000000',
567 .msisdn = '543210123456789',
568 .ms_purged_ps = true,
569}
570
571db_subscr_purge(dbc, imsi0, true, true) --> 0
572
573db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
574struct hlr_subscriber {
575 .id = 1,
576 .imsi = '123456789000000',
577 .msisdn = '543210123456789',
578 .ms_purged_ps = true,
579}
580
581db_subscr_purge(dbc, imsi0, false, true) --> 0
582
583db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
584struct hlr_subscriber {
585 .id = 1,
586 .imsi = '123456789000000',
587 .msisdn = '543210123456789',
588}
589
590db_subscr_purge(dbc, imsi0, false, true) --> 0
591
592db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
593struct hlr_subscriber {
594 .id = 1,
595 .imsi = '123456789000000',
596 .msisdn = '543210123456789',
597}
598
599db_subscr_purge(dbc, imsi0, true, false) --> 0
600
601db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
602struct hlr_subscriber {
603 .id = 1,
604 .imsi = '123456789000000',
605 .msisdn = '543210123456789',
606 .ms_purged_cs = true,
607}
608
609db_subscr_purge(dbc, imsi0, true, false) --> 0
610
611db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
612struct hlr_subscriber {
613 .id = 1,
614 .imsi = '123456789000000',
615 .msisdn = '543210123456789',
616 .ms_purged_cs = true,
617}
618
619db_subscr_purge(dbc, imsi0, false, false) --> 0
620
621db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
622struct hlr_subscriber {
623 .id = 1,
624 .imsi = '123456789000000',
625 .msisdn = '543210123456789',
626}
627
628db_subscr_purge(dbc, imsi0, false, false) --> 0
629
630db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
631struct hlr_subscriber {
632 .id = 1,
633 .imsi = '123456789000000',
634 .msisdn = '543210123456789',
635}
636
637
638--- Purge on non-existent / invalid IMSI
639
640db_subscr_purge(dbc, unknown_imsi, true, true) --> -ENOENT
641DAUC Cannot purge PS: no such subscriber: IMSI='999999999'
642
643db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
644DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
645
646db_subscr_purge(dbc, unknown_imsi, true, false) --> -ENOENT
647DAUC Cannot purge CS: no such subscriber: IMSI='999999999'
648
649db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
650DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
651
652
Neels Hofmeyr98509462017-10-09 17:28:53 +0200653--- Delete non-existent / invalid IDs
654
655db_subscr_delete_by_id(dbc, 999) --> -ENOENT
656DAUC Cannot delete: no such subscriber: ID=999
657
658db_subscr_delete_by_id(dbc, -10) --> -ENOENT
659DAUC Cannot delete: no such subscriber: ID=-10
660
661
662--- Delete subscribers
663
664db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
665struct hlr_subscriber {
666 .id = 1,
667 .imsi = '123456789000000',
668 .msisdn = '543210123456789',
669}
670
671db_subscr_delete_by_id(dbc, id0) --> 0
672
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200673db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
674DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200675
676db_subscr_delete_by_id(dbc, id0) --> -ENOENT
677DAUC Cannot delete: no such subscriber: ID=1
678
679db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
680struct hlr_subscriber {
681 .id = 2,
682 .imsi = '123456789000001',
683}
684
685db_subscr_delete_by_id(dbc, id1) --> 0
686
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200687db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> -ENOENT
688DAUC Cannot read subscriber from db: IMSI='123456789000001': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200689
690db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
691struct hlr_subscriber {
692 .id = 3,
693 .imsi = '123456789000002',
694}
695
696db_subscr_delete_by_id(dbc, id2) --> 0
697
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200698db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> -ENOENT
699DAUC Cannot read subscriber from db: IMSI='123456789000002': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200700
701db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
702struct hlr_subscriber {
703 .id = 4,
704 .imsi = '123456',
705}
706
707db_subscr_delete_by_id(dbc, id_short) --> 0
708
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200709db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> -ENOENT
710DAUC Cannot read subscriber from db: IMSI='123456': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200711
712===== test_subscr_create_update_sel_delete: SUCCESS
713
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200714
715===== test_subscr_aud
716
717--- Get auth data for non-existent subscriber
718
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200719db_get_auth_data(dbc, unknown_imsi, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200720DAUC IMSI='999999999': No such subscriber
721
722
723
724--- Create subscriber
725
726db_subscr_create(dbc, imsi0) --> 0
727
728db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
729struct hlr_subscriber {
730 .id = 1,
731 .imsi = '123456789000000',
732}
733
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200734db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200735DAUC IMSI='123456789000000': No 2G Auth Data
736DAUC IMSI='123456789000000': No 3G Auth Data
737
738
739
740--- Set auth data, 2G only
741
742db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
743
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200744db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200745DAUC IMSI='123456789000000': No 3G Auth Data
746
7472G: struct osmo_sub_auth_data {
748 .type = GSM,
749 .algo = COMP128v1,
750 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
751}
7523G: none
753
754db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
755
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200756db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200757DAUC IMSI='123456789000000': No 3G Auth Data
758
7592G: struct osmo_sub_auth_data {
760 .type = GSM,
761 .algo = COMP128v1,
762 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
763}
7643G: none
765
766db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v2, "BeadedBeeAced1EbbedDefacedFacade")) --> 0
767
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200768db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200769DAUC IMSI='123456789000000': No 3G Auth Data
770
7712G: struct osmo_sub_auth_data {
772 .type = GSM,
773 .algo = COMP128v2,
774 .u.gsm.ki = 'beadedbeeaced1ebbeddefacedfacade',
775}
7763G: none
777
778db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "DeafBeddedBabeAcceededFadedDecaf")) --> 0
779
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200780db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200781DAUC IMSI='123456789000000': No 3G Auth Data
782
7832G: struct osmo_sub_auth_data {
784 .type = GSM,
785 .algo = COMP128v3,
786 .u.gsm.ki = 'deafbeddedbabeacceededfadeddecaf',
787}
7883G: none
789
790db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
791
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200792db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200793DAUC IMSI='123456789000000': No 3G Auth Data
794
7952G: struct osmo_sub_auth_data {
796 .type = GSM,
797 .algo = XOR,
798 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
799}
8003G: none
801
802
803--- Remove 2G auth data
804
805db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
806
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200807db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200808DAUC IMSI='123456789000000': No 2G Auth Data
809DAUC IMSI='123456789000000': No 3G Auth Data
810
811
812db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> -ENOENT
813
814db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
815
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200816db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200817DAUC IMSI='123456789000000': No 3G Auth Data
818
8192G: struct osmo_sub_auth_data {
820 .type = GSM,
821 .algo = XOR,
822 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
823}
8243G: none
825
826db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, "f000000000000f00000000000f000000")) --> 0
827
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200828db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200829DAUC IMSI='123456789000000': No 2G Auth Data
830DAUC IMSI='123456789000000': No 3G Auth Data
831
832
833
834--- Set auth data, 3G only
835
836db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
837
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200838db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200839DAUC IMSI='123456789000000': No 2G Auth Data
840
8412G: none
8423G: struct osmo_sub_auth_data {
843 .type = UMTS,
844 .algo = MILENAGE,
845 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
846 .u.umts.opc_is_op = 1,
847 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
848 .u.umts.amf = '0000',
849 .u.umts.ind_bitlen = 5,
850}
851
852db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
853
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200854db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200855DAUC IMSI='123456789000000': No 2G Auth Data
856
8572G: none
8583G: struct osmo_sub_auth_data {
859 .type = UMTS,
860 .algo = MILENAGE,
861 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
862 .u.umts.opc_is_op = 1,
863 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
864 .u.umts.amf = '0000',
865 .u.umts.ind_bitlen = 5,
866}
867
868db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "Deaf0ff1ceD0d0DabbedD1ced1ceF00d", true, "F1bbed0afD0eF0bD0ffed0ddF1fe0b0e", 0)) --> 0
869
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200870db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200871DAUC IMSI='123456789000000': No 2G Auth Data
872
8732G: none
8743G: struct osmo_sub_auth_data {
875 .type = UMTS,
876 .algo = MILENAGE,
877 .u.umts.opc = 'deaf0ff1ced0d0dabbedd1ced1cef00d',
878 .u.umts.opc_is_op = 1,
879 .u.umts.k = 'f1bbed0afd0ef0bd0ffed0ddf1fe0b0e',
880 .u.umts.amf = '0000',
881}
882
883db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", OSMO_MILENAGE_IND_BITLEN_MAX)) --> 0
884
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200885db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200886DAUC IMSI='123456789000000': No 2G Auth Data
887
8882G: none
8893G: struct osmo_sub_auth_data {
890 .type = UMTS,
891 .algo = MILENAGE,
892 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
893 .u.umts.opc_is_op = 0,
894 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
895 .u.umts.amf = '0000',
896 .u.umts.ind_bitlen = 28,
897}
898
899db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
900
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200901db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200902DAUC IMSI='123456789000000': No 2G Auth Data
903
9042G: none
9053G: struct osmo_sub_auth_data {
906 .type = UMTS,
907 .algo = MILENAGE,
908 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
909 .u.umts.opc_is_op = 0,
910 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
911 .u.umts.amf = '0000',
912 .u.umts.ind_bitlen = 5,
913}
914
915
916--- Remove 3G auth data
917
918db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> 0
919
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200920db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200921DAUC IMSI='123456789000000': No 2G Auth Data
922DAUC IMSI='123456789000000': No 3G Auth Data
923
924
925db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> -ENOENT
926
927db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
928
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200929db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200930DAUC IMSI='123456789000000': No 2G Auth Data
931
9322G: none
9333G: struct osmo_sub_auth_data {
934 .type = UMTS,
935 .algo = MILENAGE,
936 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
937 .u.umts.opc_is_op = 0,
938 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
939 .u.umts.amf = '0000',
940 .u.umts.ind_bitlen = 5,
941}
942
943db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, "asdfasdfasd", false, "asdfasdfasdf", 99999)) --> 0
944
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200945db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200946DAUC IMSI='123456789000000': No 2G Auth Data
947DAUC IMSI='123456789000000': No 3G Auth Data
948
949
950
951--- Set auth data, 2G and 3G
952
953db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "CededEffacedAceFacedBadFadedBeef")) --> 0
954
955db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", 5)) --> 0
956
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200957db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200958
9592G: struct osmo_sub_auth_data {
960 .type = GSM,
961 .algo = COMP128v3,
962 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
963}
9643G: struct osmo_sub_auth_data {
965 .type = UMTS,
966 .algo = MILENAGE,
967 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
968 .u.umts.opc_is_op = 0,
969 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
970 .u.umts.amf = '0000',
971 .u.umts.ind_bitlen = 5,
972}
973
974
975--- Set invalid auth data
976
977db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(99999, "f000000000000f00000000000f000000")) --> -EINVAL
978DAUC Cannot update auth tokens: Unknown auth algo: 99999
979
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200980db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200981
9822G: struct osmo_sub_auth_data {
983 .type = GSM,
984 .algo = COMP128v3,
985 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
986}
9873G: struct osmo_sub_auth_data {
988 .type = UMTS,
989 .algo = MILENAGE,
990 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
991 .u.umts.opc_is_op = 0,
992 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
993 .u.umts.amf = '0000',
994 .u.umts.ind_bitlen = 5,
995}
996
997db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f000000000000f00000000000f000000f00000000")) --> -EINVAL
998DAUC Cannot update auth tokens: Invalid KI: 'f000000000000f00000000000f000000f00000000'
999
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001000db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001001
10022G: struct osmo_sub_auth_data {
1003 .type = GSM,
1004 .algo = COMP128v3,
1005 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1006}
10073G: struct osmo_sub_auth_data {
1008 .type = UMTS,
1009 .algo = MILENAGE,
1010 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1011 .u.umts.opc_is_op = 0,
1012 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1013 .u.umts.amf = '0000',
1014 .u.umts.ind_bitlen = 5,
1015}
1016
1017db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f00")) --> -EINVAL
1018DAUC Cannot update auth tokens: Invalid KI: 'f00'
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_MILENAGE, "0123456789abcdef0123456789abcdef")) --> -EINVAL
1038DAUC Cannot update auth tokens: auth algo not suited for 2G: MILENAGE
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_3g(OSMO_AUTH_ALG_MILENAGE, "0f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1058DAUC Cannot update auth tokens: Invalid OP/OPC: '0f000000000000f00000000000f000000'
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_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "000000000000f00000000000f000000", 5)) --> -EINVAL
1078DAUC Cannot update auth tokens: Invalid K: '000000000000f00000000000f000000'
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, "f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", OSMO_MILENAGE_IND_BITLEN_MAX + 1)) --> -EINVAL
1098DAUC Cannot update auth tokens: Invalid ind_bitlen: 29
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, "X000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1118DAUC Cannot update auth tokens: Invalid OP/OPC: 'X000000000000f00000000000f000000'
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, "f000000000000 f00000000000 f000000", 5)) --> -EINVAL
1138DAUC Cannot update auth tokens: Invalid K: 'f000000000000 f00000000000 f000000'
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
1157
1158--- Delete subscriber
1159
1160db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1161struct hlr_subscriber {
1162 .id = 1,
1163 .imsi = '123456789000000',
1164}
1165
1166db_subscr_delete_by_id(dbc, id) --> 0
1167
1168db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1169DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1170
1171
1172--- Re-add subscriber and verify auth data didn't come back
1173
1174db_subscr_create(dbc, imsi0) --> 0
1175
1176db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1177struct hlr_subscriber {
1178 .id = 1,
1179 .imsi = '123456789000000',
1180}
1181
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001182db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001183DAUC IMSI='123456789000000': No 2G Auth Data
1184DAUC IMSI='123456789000000': No 3G Auth Data
1185
1186
1187db_subscr_delete_by_id(dbc, id) --> 0
1188
1189db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1190DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1191
1192===== test_subscr_aud: SUCCESS
1193
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001194
1195===== test_subscr_sqn
1196
1197--- Set SQN for unknown subscriber
1198
1199db_update_sqn(dbc, 99, 999) --> -ENOENT
1200DAUC Cannot update SQN for subscriber ID=99: no auc_3g entry for such subscriber
1201
1202db_subscr_get_by_id(dbc, 99, &g_subscr) --> -ENOENT
1203DAUC Cannot read subscriber from db: ID=99: No such subscriber
1204
1205db_update_sqn(dbc, 9999, 99) --> -ENOENT
1206DAUC Cannot update SQN for subscriber ID=9999: no auc_3g entry for such subscriber
1207
1208db_subscr_get_by_id(dbc, 9999, &g_subscr) --> -ENOENT
1209DAUC Cannot read subscriber from db: ID=9999: No such subscriber
1210
1211
1212--- Create subscriber
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
1222db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
1223DAUC IMSI='123456789000000': No 2G Auth Data
1224DAUC IMSI='123456789000000': No 3G Auth Data
1225
1226
1227
1228--- Set SQN, but no 3G auth data present
1229
1230db_update_sqn(dbc, id, 123) --> -ENOENT
1231DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1232
1233db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
1234DAUC IMSI='123456789000000': No 2G Auth Data
1235DAUC IMSI='123456789000000': No 3G Auth Data
1236
1237
1238db_update_sqn(dbc, id, 543) --> -ENOENT
1239DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1240
1241db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -2
1242DAUC IMSI='123456789000000': No 2G Auth Data
1243DAUC IMSI='123456789000000': No 3G Auth Data
1244
1245
1246
1247--- Set auth 3G data
1248
1249db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1250
1251db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1252DAUC IMSI='123456789000000': No 2G Auth Data
1253
12542G: none
12553G: struct osmo_sub_auth_data {
1256 .type = UMTS,
1257 .algo = MILENAGE,
1258 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1259 .u.umts.opc_is_op = 1,
1260 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1261 .u.umts.amf = '0000',
1262 .u.umts.ind_bitlen = 5,
1263}
1264
1265
1266--- Set SQN
1267
1268db_update_sqn(dbc, id, 23315) --> 0
1269
1270db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1271DAUC IMSI='123456789000000': No 2G Auth Data
1272
12732G: none
12743G: struct osmo_sub_auth_data {
1275 .type = UMTS,
1276 .algo = MILENAGE,
1277 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1278 .u.umts.opc_is_op = 1,
1279 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1280 .u.umts.amf = '0000',
1281 .u.umts.sqn = 23315,
1282 .u.umts.sqn = 0x5b13,
1283 .u.umts.ind_bitlen = 5,
1284}
1285
1286db_update_sqn(dbc, id, 23315) --> 0
1287
1288db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1289DAUC IMSI='123456789000000': No 2G Auth Data
1290
12912G: none
12923G: struct osmo_sub_auth_data {
1293 .type = UMTS,
1294 .algo = MILENAGE,
1295 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1296 .u.umts.opc_is_op = 1,
1297 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1298 .u.umts.amf = '0000',
1299 .u.umts.sqn = 23315,
1300 .u.umts.sqn = 0x5b13,
1301 .u.umts.ind_bitlen = 5,
1302}
1303
1304db_update_sqn(dbc, id, 423) --> 0
1305
1306db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1307DAUC IMSI='123456789000000': No 2G Auth Data
1308
13092G: none
13103G: struct osmo_sub_auth_data {
1311 .type = UMTS,
1312 .algo = MILENAGE,
1313 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1314 .u.umts.opc_is_op = 1,
1315 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1316 .u.umts.amf = '0000',
1317 .u.umts.sqn = 423,
1318 .u.umts.sqn = 0x1a7,
1319 .u.umts.ind_bitlen = 5,
1320}
1321
1322
1323--- Set SQN: thru uint64_t range, using the int64_t SQLite bind
1324
1325db_update_sqn(dbc, id, 0) --> 0
1326
1327db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1328DAUC IMSI='123456789000000': No 2G Auth Data
1329
13302G: none
13313G: struct osmo_sub_auth_data {
1332 .type = UMTS,
1333 .algo = MILENAGE,
1334 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1335 .u.umts.opc_is_op = 1,
1336 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1337 .u.umts.amf = '0000',
1338 .u.umts.ind_bitlen = 5,
1339}
1340
1341db_update_sqn(dbc, id, INT64_MAX) --> 0
1342
1343db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1344DAUC IMSI='123456789000000': No 2G Auth Data
1345
13462G: none
13473G: struct osmo_sub_auth_data {
1348 .type = UMTS,
1349 .algo = MILENAGE,
1350 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1351 .u.umts.opc_is_op = 1,
1352 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1353 .u.umts.amf = '0000',
1354 .u.umts.sqn = 9223372036854775807,
1355 .u.umts.sqn = 0x7fffffffffffffff,
1356 .u.umts.ind_bitlen = 5,
1357}
1358
1359db_update_sqn(dbc, id, INT64_MIN) --> 0
1360
1361db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1362DAUC IMSI='123456789000000': No 2G Auth Data
1363
13642G: none
13653G: struct osmo_sub_auth_data {
1366 .type = UMTS,
1367 .algo = MILENAGE,
1368 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1369 .u.umts.opc_is_op = 1,
1370 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1371 .u.umts.amf = '0000',
1372 .u.umts.sqn = 9223372036854775808,
1373 .u.umts.sqn = 0x8000000000000000,
1374 .u.umts.ind_bitlen = 5,
1375}
1376
1377db_update_sqn(dbc, id, UINT64_MAX) --> 0
1378
1379db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1380DAUC IMSI='123456789000000': No 2G Auth Data
1381
13822G: none
13833G: struct osmo_sub_auth_data {
1384 .type = UMTS,
1385 .algo = MILENAGE,
1386 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1387 .u.umts.opc_is_op = 1,
1388 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1389 .u.umts.amf = '0000',
1390 .u.umts.sqn = 18446744073709551615,
1391 .u.umts.sqn = 0xffffffffffffffff,
1392 .u.umts.ind_bitlen = 5,
1393}
1394
1395
1396--- Delete subscriber
1397
1398db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1399struct hlr_subscriber {
1400 .id = 1,
1401 .imsi = '123456789000000',
1402}
1403
1404db_subscr_delete_by_id(dbc, id) --> 0
1405
1406db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1407DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1408
1409===== test_subscr_sqn: SUCCESS
1410