blob: 0701089ef4ba22a3ea22d5b3c2e11f48b890b183 [file] [log] [blame]
Neels Hofmeyr98509462017-10-09 17:28:53 +02001
2===== test_subscr_create_update_sel_delete
3
4--- Create with valid / invalid IMSI
5
Oliver Smithcd2af5e2019-03-06 13:17:39 +01006db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +02007
8db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
9struct hlr_subscriber {
10 .id = 1,
11 .imsi = '123456789000000',
12}
13
Oliver Smithcd2af5e2019-03-06 13:17:39 +010014db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +020015
16db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
17struct hlr_subscriber {
18 .id = 2,
19 .imsi = '123456789000001',
20}
21
Oliver Smithcd2af5e2019-03-06 13:17:39 +010022db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +020023
24db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
25struct hlr_subscriber {
26 .id = 3,
27 .imsi = '123456789000002',
28}
29
Oliver Smithcd2af5e2019-03-06 13:17:39 +010030db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020031DAUC IMSI='123456789000000': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
32
33db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
34struct hlr_subscriber {
35 .id = 1,
36 .imsi = '123456789000000',
37}
38
Oliver Smithcd2af5e2019-03-06 13:17:39 +010039db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020040DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
41
Oliver Smithcd2af5e2019-03-06 13:17:39 +010042db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020043DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
44
45db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
46struct hlr_subscriber {
47 .id = 2,
48 .imsi = '123456789000001',
49}
50
Oliver Smithcd2af5e2019-03-06 13:17:39 +010051db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020052DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
53
Oliver Smithcd2af5e2019-03-06 13:17:39 +010054db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EIO
Neels Hofmeyr98509462017-10-09 17:28:53 +020055DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) UNIQUE constraint failed: subscriber.imsi
56
57db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
58struct hlr_subscriber {
59 .id = 3,
60 .imsi = '123456789000002',
61}
62
Oliver Smithcd2af5e2019-03-06 13:17:39 +010063db_subscr_create(dbc, "123456789 000003", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020064DAUC Cannot create subscriber: invalid IMSI: '123456789 000003'
65
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020066db_subscr_get_by_imsi(dbc, "123456789000003", &g_subscr) --> -ENOENT
67DAUC Cannot read subscriber from db: IMSI='123456789000003': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020068
Oliver Smithcd2af5e2019-03-06 13:17:39 +010069db_subscr_create(dbc, "123456789000002123456", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020070DAUC Cannot create subscriber: invalid IMSI: '123456789000002123456'
71
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020072db_subscr_get_by_imsi(dbc, "123456789000002123456", &g_subscr) --> -ENOENT
73DAUC Cannot read subscriber from db: IMSI='123456789000002123456': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020074
Oliver Smithcd2af5e2019-03-06 13:17:39 +010075db_subscr_create(dbc, "foobar123", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020076DAUC Cannot create subscriber: invalid IMSI: 'foobar123'
77
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020078db_subscr_get_by_imsi(dbc, "foobar123", &g_subscr) --> -ENOENT
79DAUC Cannot read subscriber from db: IMSI='foobar123': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020080
Oliver Smithcd2af5e2019-03-06 13:17:39 +010081db_subscr_create(dbc, "123", DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> -EINVAL
Neels Hofmeyr98509462017-10-09 17:28:53 +020082DAUC Cannot create subscriber: invalid IMSI: '123'
83
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +020084db_subscr_get_by_imsi(dbc, "123", &g_subscr) --> -ENOENT
85DAUC Cannot read subscriber from db: IMSI='123': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +020086
Oliver Smithcd2af5e2019-03-06 13:17:39 +010087db_subscr_create(dbc, short_imsi, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr98509462017-10-09 17:28:53 +020088
89db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
90struct hlr_subscriber {
91 .id = 4,
92 .imsi = '123456',
93}
94
95
Oliver Smith6b73fd92019-03-06 13:49:05 +010096--- Check if subscriber exists (by IMSI)
97
98db_subscr_exists_by_imsi(dbc, imsi0) --> 0
99
100db_subscr_exists_by_imsi(dbc, unknown_imsi) --> -ENOENT
101
102
Neels Hofmeyr98509462017-10-09 17:28:53 +0200103--- Set valid / invalid MSISDN
104
105db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
106struct hlr_subscriber {
107 .id = 1,
108 .imsi = '123456789000000',
109}
110
111db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321") --> 0
112
113db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
114struct hlr_subscriber {
115 .id = 1,
116 .imsi = '123456789000000',
117 .msisdn = '54321',
118}
119
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200120db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
121struct hlr_subscriber {
122 .id = 1,
123 .imsi = '123456789000000',
124 .msisdn = '54321',
125}
126
Neels Hofmeyr98509462017-10-09 17:28:53 +0200127db_subscr_update_msisdn_by_imsi(dbc, imsi0, "54321012345678912345678") --> -EINVAL
128DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '54321012345678912345678'
129
130db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
131struct hlr_subscriber {
132 .id = 1,
133 .imsi = '123456789000000',
134 .msisdn = '54321',
135}
136
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200137db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> 0
138struct hlr_subscriber {
139 .id = 1,
140 .imsi = '123456789000000',
141 .msisdn = '54321',
142}
143
144db_subscr_get_by_msisdn(dbc, "54321012345678912345678", &g_subscr) --> -ENOENT
145DAUC Cannot read subscriber from db: MSISDN='54321012345678912345678': No such subscriber
146
Neels Hofmeyr98509462017-10-09 17:28:53 +0200147db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543 21") --> -EINVAL
148DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '543 21'
149
150db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
151struct hlr_subscriber {
152 .id = 1,
153 .imsi = '123456789000000',
154 .msisdn = '54321',
155}
156
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200157db_subscr_get_by_msisdn(dbc, "543 21", &g_subscr) --> -ENOENT
158DAUC Cannot read subscriber from db: MSISDN='543 21': No such subscriber
159
Neels Hofmeyr98509462017-10-09 17:28:53 +0200160db_subscr_update_msisdn_by_imsi(dbc, imsi0, "foobar123") --> -EINVAL
161DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: 'foobar123'
162
163db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
164struct hlr_subscriber {
165 .id = 1,
166 .imsi = '123456789000000',
167 .msisdn = '54321',
168}
169
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200170db_subscr_get_by_msisdn(dbc, "foobar123", &g_subscr) --> -ENOENT
171DAUC Cannot read subscriber from db: MSISDN='foobar123': No such subscriber
172
Neels Hofmeyr98509462017-10-09 17:28:53 +0200173db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5") --> 0
174
175db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
176struct hlr_subscriber {
177 .id = 1,
178 .imsi = '123456789000000',
179 .msisdn = '5',
180}
181
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200182db_subscr_get_by_msisdn(dbc, "5", &g_subscr) --> 0
183struct hlr_subscriber {
184 .id = 1,
185 .imsi = '123456789000000',
186 .msisdn = '5',
187}
188
189db_subscr_get_by_msisdn(dbc, "54321", &g_subscr) --> -ENOENT
190DAUC Cannot read subscriber from db: MSISDN='54321': No such subscriber
191
Neels Hofmeyr98509462017-10-09 17:28:53 +0200192db_subscr_update_msisdn_by_imsi(dbc, imsi0, "543210123456789") --> 0
193
194db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
195struct hlr_subscriber {
196 .id = 1,
197 .imsi = '123456789000000',
198 .msisdn = '543210123456789',
199}
200
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200201db_subscr_get_by_msisdn(dbc, "543210123456789", &g_subscr) --> 0
202struct hlr_subscriber {
203 .id = 1,
204 .imsi = '123456789000000',
205 .msisdn = '543210123456789',
206}
207
Neels Hofmeyr98509462017-10-09 17:28:53 +0200208db_subscr_update_msisdn_by_imsi(dbc, imsi0, "5432101234567891") --> -EINVAL
209DAUC IMSI='123456789000000': Cannot update subscriber: invalid MSISDN: '5432101234567891'
210
211db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
212struct hlr_subscriber {
213 .id = 1,
214 .imsi = '123456789000000',
215 .msisdn = '543210123456789',
216}
217
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200218db_subscr_get_by_msisdn(dbc, "5432101234567891", &g_subscr) --> -ENOENT
219DAUC Cannot read subscriber from db: MSISDN='5432101234567891': No such subscriber
220
Neels Hofmeyr98509462017-10-09 17:28:53 +0200221
222--- Set MSISDN on non-existent / invalid IMSI
223
224db_subscr_update_msisdn_by_imsi(dbc, unknown_imsi, "99") --> -ENOENT
225DAUC Cannot update MSISDN: no such subscriber: IMSI='999999999'
226
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200227db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
228DAUC Cannot read subscriber from db: MSISDN='99': No such subscriber
229
Neels Hofmeyr98509462017-10-09 17:28:53 +0200230db_subscr_update_msisdn_by_imsi(dbc, "foobar", "99") --> -ENOENT
231DAUC Cannot update MSISDN: no such subscriber: IMSI='foobar'
232
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200233db_subscr_get_by_msisdn(dbc, "99", &g_subscr) --> -ENOENT
234DAUC Cannot read subscriber from db: MSISDN='99': No such subscriber
235
Neels Hofmeyr98509462017-10-09 17:28:53 +0200236
Oliver Smith81db3892019-01-09 12:03:51 +0100237--- Set valid / invalid IMEI
238
239db_subscr_update_imei_by_imsi(dbc, imsi0, "12345678901234") --> 0
240
241db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
242struct hlr_subscriber {
243 .id = 1,
244 .imsi = '123456789000000',
245 .msisdn = '543210123456789',
246 .imei = '12345678901234',
247}
248
249db_subscr_update_imei_by_imsi(dbc, imsi0, "123456789012345") --> -EINVAL
250DAUC Cannot update subscriber IMSI='123456789000000': invalid IMEI: '123456789012345'
251
252db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
253struct hlr_subscriber {
254 .id = 1,
255 .imsi = '123456789000000',
256 .msisdn = '543210123456789',
257 .imei = '12345678901234',
258}
259
260db_subscr_get_by_imei(dbc, "123456789012345", &g_subscr) --> -ENOENT
261DAUC Cannot read subscriber from db: IMEI=123456789012345: No such subscriber
262
263
264--- Set the same IMEI again
265
266db_subscr_update_imei_by_imsi(dbc, imsi0, "12345678901234") --> 0
267
268db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> 0
269struct hlr_subscriber {
270 .id = 1,
271 .imsi = '123456789000000',
272 .msisdn = '543210123456789',
273 .imei = '12345678901234',
274}
275
276
277--- Remove IMEI
278
279db_subscr_update_imei_by_imsi(dbc, imsi0, NULL) --> 0
280
281db_subscr_get_by_imei(dbc, "12345678901234", &g_subscr) --> -ENOENT
282DAUC Cannot read subscriber from db: IMEI=12345678901234: No such subscriber
283
284
Neels Hofmeyre8ccd502017-10-06 04:10:06 +0200285--- Set / unset nam_cs and nam_ps
286
287db_subscr_nam(dbc, imsi0, false, true) --> 0
288
289db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
290struct hlr_subscriber {
291 .id = 1,
292 .imsi = '123456789000000',
293 .msisdn = '543210123456789',
294 .nam_ps = false,
295}
296
297db_subscr_nam(dbc, imsi0, false, false) --> 0
298
299db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
300struct hlr_subscriber {
301 .id = 1,
302 .imsi = '123456789000000',
303 .msisdn = '543210123456789',
304 .nam_cs = false,
305 .nam_ps = false,
306}
307
308db_subscr_nam(dbc, imsi0, true, false) --> 0
309
310db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
311struct hlr_subscriber {
312 .id = 1,
313 .imsi = '123456789000000',
314 .msisdn = '543210123456789',
315 .nam_ps = false,
316}
317
318db_subscr_nam(dbc, imsi0, true, true) --> 0
319
320db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
321struct hlr_subscriber {
322 .id = 1,
323 .imsi = '123456789000000',
324 .msisdn = '543210123456789',
325}
326
327
328--- Set / unset nam_cs and nam_ps *again*
329
330db_subscr_nam(dbc, imsi0, false, true) --> 0
331
332db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
333struct hlr_subscriber {
334 .id = 1,
335 .imsi = '123456789000000',
336 .msisdn = '543210123456789',
337 .nam_ps = false,
338}
339
340db_subscr_nam(dbc, imsi0, false, true) --> 0
341
342db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
343struct hlr_subscriber {
344 .id = 1,
345 .imsi = '123456789000000',
346 .msisdn = '543210123456789',
347 .nam_ps = false,
348}
349
350db_subscr_nam(dbc, imsi0, false, false) --> 0
351
352db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
353struct hlr_subscriber {
354 .id = 1,
355 .imsi = '123456789000000',
356 .msisdn = '543210123456789',
357 .nam_cs = false,
358 .nam_ps = false,
359}
360
361db_subscr_nam(dbc, imsi0, false, false) --> 0
362
363db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
364struct hlr_subscriber {
365 .id = 1,
366 .imsi = '123456789000000',
367 .msisdn = '543210123456789',
368 .nam_cs = false,
369 .nam_ps = false,
370}
371
372db_subscr_nam(dbc, imsi0, true, true) --> 0
373
374db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
375struct hlr_subscriber {
376 .id = 1,
377 .imsi = '123456789000000',
378 .msisdn = '543210123456789',
379 .nam_cs = false,
380}
381
382db_subscr_nam(dbc, imsi0, true, true) --> 0
383
384db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
385struct hlr_subscriber {
386 .id = 1,
387 .imsi = '123456789000000',
388 .msisdn = '543210123456789',
389 .nam_cs = false,
390}
391
392db_subscr_nam(dbc, imsi0, true, false) --> 0
393
394db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
395struct hlr_subscriber {
396 .id = 1,
397 .imsi = '123456789000000',
398 .msisdn = '543210123456789',
399}
400
401db_subscr_nam(dbc, imsi0, true, false) --> 0
402
403db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
404struct hlr_subscriber {
405 .id = 1,
406 .imsi = '123456789000000',
407 .msisdn = '543210123456789',
408}
409
410
411--- Set nam_cs and nam_ps on non-existent / invalid IMSI
412
413db_subscr_nam(dbc, unknown_imsi, false, true) --> -ENOENT
414DAUC Cannot disable PS: no such subscriber: IMSI='999999999'
415
416db_subscr_nam(dbc, unknown_imsi, false, false) --> -ENOENT
417DAUC Cannot disable CS: no such subscriber: IMSI='999999999'
418
419db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
420DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
421
422db_subscr_nam(dbc, "foobar", false, true) --> -ENOENT
423DAUC Cannot disable PS: no such subscriber: IMSI='foobar'
424
425db_subscr_nam(dbc, "foobar", false, false) --> -ENOENT
426DAUC Cannot disable CS: no such subscriber: IMSI='foobar'
427
428
Neels Hofmeyrdd783052017-10-09 17:36:08 +0200429--- Record LU for PS and CS (SGSN and VLR names)
430
431db_subscr_lu(dbc, id0, "5952", true) --> 0
432
433db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
434struct hlr_subscriber {
435 .id = 1,
436 .imsi = '123456789000000',
437 .msisdn = '543210123456789',
438 .sgsn_number = '5952',
439}
440
441db_subscr_lu(dbc, id0, "712", false) --> 0
442
443db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
444struct hlr_subscriber {
445 .id = 1,
446 .imsi = '123456789000000',
447 .msisdn = '543210123456789',
448 .vlr_number = '712',
449 .sgsn_number = '5952',
450}
451
452
453--- Record LU for PS and CS (SGSN and VLR names) *again*
454
455db_subscr_lu(dbc, id0, "111", true) --> 0
456
457db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
458struct hlr_subscriber {
459 .id = 1,
460 .imsi = '123456789000000',
461 .msisdn = '543210123456789',
462 .vlr_number = '712',
463 .sgsn_number = '111',
464}
465
466db_subscr_lu(dbc, id0, "111", true) --> 0
467
468db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
469struct hlr_subscriber {
470 .id = 1,
471 .imsi = '123456789000000',
472 .msisdn = '543210123456789',
473 .vlr_number = '712',
474 .sgsn_number = '111',
475}
476
477db_subscr_lu(dbc, id0, "222", false) --> 0
478
479db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
480struct hlr_subscriber {
481 .id = 1,
482 .imsi = '123456789000000',
483 .msisdn = '543210123456789',
484 .vlr_number = '222',
485 .sgsn_number = '111',
486}
487
488db_subscr_lu(dbc, id0, "222", false) --> 0
489
490db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
491struct hlr_subscriber {
492 .id = 1,
493 .imsi = '123456789000000',
494 .msisdn = '543210123456789',
495 .vlr_number = '222',
496 .sgsn_number = '111',
497}
498
499
500--- Unset LU info for PS and CS (SGSN and VLR names)
501
502db_subscr_lu(dbc, id0, "", true) --> 0
503
504db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
505struct hlr_subscriber {
506 .id = 1,
507 .imsi = '123456789000000',
508 .msisdn = '543210123456789',
509 .vlr_number = '222',
510}
511
512db_subscr_lu(dbc, id0, "", false) --> 0
513
514db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
515struct hlr_subscriber {
516 .id = 1,
517 .imsi = '123456789000000',
518 .msisdn = '543210123456789',
519}
520
521db_subscr_lu(dbc, id0, "111", true) --> 0
522
523db_subscr_lu(dbc, id0, "222", false) --> 0
524
525db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
526struct hlr_subscriber {
527 .id = 1,
528 .imsi = '123456789000000',
529 .msisdn = '543210123456789',
530 .vlr_number = '222',
531 .sgsn_number = '111',
532}
533
534db_subscr_lu(dbc, id0, NULL, true) --> 0
535
536db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
537struct hlr_subscriber {
538 .id = 1,
539 .imsi = '123456789000000',
540 .msisdn = '543210123456789',
541 .vlr_number = '222',
542}
543
544db_subscr_lu(dbc, id0, NULL, false) --> 0
545
546db_subscr_get_by_id(dbc, id0, &g_subscr) --> 0
547struct hlr_subscriber {
548 .id = 1,
549 .imsi = '123456789000000',
550 .msisdn = '543210123456789',
551}
552
553
554--- Record LU for non-existent ID
555
556db_subscr_lu(dbc, 99999, "5952", true) --> -ENOENT
557DAUC Cannot update SGSN number for subscriber ID=99999: no such subscriber
558
559db_subscr_lu(dbc, 99999, "712", false) --> -ENOENT
560DAUC Cannot update VLR number for subscriber ID=99999: no such subscriber
561
562db_subscr_get_by_id(dbc, 99999, &g_subscr) --> -ENOENT
563DAUC Cannot read subscriber from db: ID=99999: No such subscriber
564
565
Neels Hofmeyre50121e2017-10-09 17:48:51 +0200566--- Purge and un-purge PS and CS
567
568db_subscr_purge(dbc, imsi0, true, true) --> 0
569
570db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
571struct hlr_subscriber {
572 .id = 1,
573 .imsi = '123456789000000',
574 .msisdn = '543210123456789',
575 .ms_purged_ps = true,
576}
577
578db_subscr_purge(dbc, imsi0, true, false) --> 0
579
580db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
581struct hlr_subscriber {
582 .id = 1,
583 .imsi = '123456789000000',
584 .msisdn = '543210123456789',
585 .ms_purged_cs = true,
586 .ms_purged_ps = true,
587}
588
589db_subscr_purge(dbc, imsi0, false, false) --> 0
590
591db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
592struct hlr_subscriber {
593 .id = 1,
594 .imsi = '123456789000000',
595 .msisdn = '543210123456789',
596 .ms_purged_ps = true,
597}
598
599db_subscr_purge(dbc, imsi0, false, true) --> 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}
607
608
609--- Purge PS and CS *again*
610
611db_subscr_purge(dbc, imsi0, true, true) --> 0
612
613db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
614struct hlr_subscriber {
615 .id = 1,
616 .imsi = '123456789000000',
617 .msisdn = '543210123456789',
618 .ms_purged_ps = true,
619}
620
621db_subscr_purge(dbc, imsi0, true, true) --> 0
622
623db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
624struct hlr_subscriber {
625 .id = 1,
626 .imsi = '123456789000000',
627 .msisdn = '543210123456789',
628 .ms_purged_ps = true,
629}
630
631db_subscr_purge(dbc, imsi0, false, true) --> 0
632
633db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
634struct hlr_subscriber {
635 .id = 1,
636 .imsi = '123456789000000',
637 .msisdn = '543210123456789',
638}
639
640db_subscr_purge(dbc, imsi0, false, true) --> 0
641
642db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
643struct hlr_subscriber {
644 .id = 1,
645 .imsi = '123456789000000',
646 .msisdn = '543210123456789',
647}
648
649db_subscr_purge(dbc, imsi0, true, false) --> 0
650
651db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
652struct hlr_subscriber {
653 .id = 1,
654 .imsi = '123456789000000',
655 .msisdn = '543210123456789',
656 .ms_purged_cs = true,
657}
658
659db_subscr_purge(dbc, imsi0, true, false) --> 0
660
661db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
662struct hlr_subscriber {
663 .id = 1,
664 .imsi = '123456789000000',
665 .msisdn = '543210123456789',
666 .ms_purged_cs = true,
667}
668
669db_subscr_purge(dbc, imsi0, false, false) --> 0
670
671db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
672struct hlr_subscriber {
673 .id = 1,
674 .imsi = '123456789000000',
675 .msisdn = '543210123456789',
676}
677
678db_subscr_purge(dbc, imsi0, false, false) --> 0
679
680db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
681struct hlr_subscriber {
682 .id = 1,
683 .imsi = '123456789000000',
684 .msisdn = '543210123456789',
685}
686
687
688--- Purge on non-existent / invalid IMSI
689
690db_subscr_purge(dbc, unknown_imsi, true, true) --> -ENOENT
691DAUC Cannot purge PS: no such subscriber: IMSI='999999999'
692
693db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
694DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
695
696db_subscr_purge(dbc, unknown_imsi, true, false) --> -ENOENT
697DAUC Cannot purge CS: no such subscriber: IMSI='999999999'
698
699db_subscr_get_by_imsi(dbc, unknown_imsi, &g_subscr) --> -ENOENT
700DAUC Cannot read subscriber from db: IMSI='999999999': No such subscriber
701
702
Neels Hofmeyr98509462017-10-09 17:28:53 +0200703--- Delete non-existent / invalid IDs
704
705db_subscr_delete_by_id(dbc, 999) --> -ENOENT
706DAUC Cannot delete: no such subscriber: ID=999
707
708db_subscr_delete_by_id(dbc, -10) --> -ENOENT
709DAUC Cannot delete: no such subscriber: ID=-10
710
711
712--- Delete subscribers
713
714db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
715struct hlr_subscriber {
716 .id = 1,
717 .imsi = '123456789000000',
718 .msisdn = '543210123456789',
719}
720
721db_subscr_delete_by_id(dbc, id0) --> 0
722
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200723db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
724DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200725
726db_subscr_delete_by_id(dbc, id0) --> -ENOENT
727DAUC Cannot delete: no such subscriber: ID=1
728
729db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
730struct hlr_subscriber {
731 .id = 2,
732 .imsi = '123456789000001',
733}
734
735db_subscr_delete_by_id(dbc, id1) --> 0
736
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200737db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> -ENOENT
738DAUC Cannot read subscriber from db: IMSI='123456789000001': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200739
740db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
741struct hlr_subscriber {
742 .id = 3,
743 .imsi = '123456789000002',
744}
745
746db_subscr_delete_by_id(dbc, id2) --> 0
747
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200748db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> -ENOENT
749DAUC Cannot read subscriber from db: IMSI='123456789000002': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200750
751db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> 0
752struct hlr_subscriber {
753 .id = 4,
754 .imsi = '123456',
755}
756
757db_subscr_delete_by_id(dbc, id_short) --> 0
758
Neels Hofmeyr9c2bbc82017-10-09 17:30:32 +0200759db_subscr_get_by_imsi(dbc, short_imsi, &g_subscr) --> -ENOENT
760DAUC Cannot read subscriber from db: IMSI='123456': No such subscriber
Neels Hofmeyr98509462017-10-09 17:28:53 +0200761
Oliver Smithcd2af5e2019-03-06 13:17:39 +0100762
763--- Create and delete subscribers with non-default nam_cs and nam_ps
764
765db_subscr_create(dbc, imsi0, 0x00) --> 0
766
767db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
768struct hlr_subscriber {
769 .id = 1,
770 .imsi = '123456789000000',
771 .nam_cs = false,
772 .nam_ps = false,
773}
774
775db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS) --> 0
776
777db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
778struct hlr_subscriber {
779 .id = 2,
780 .imsi = '123456789000001',
781 .nam_ps = false,
782}
783
784db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_PS) --> 0
785
786db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0
787struct hlr_subscriber {
788 .id = 3,
789 .imsi = '123456789000002',
790 .nam_cs = false,
791}
792
793db_subscr_delete_by_id(dbc, id0) --> 0
794
795db_subscr_delete_by_id(dbc, id1) --> 0
796
797db_subscr_delete_by_id(dbc, id2) --> 0
798
Neels Hofmeyr98509462017-10-09 17:28:53 +0200799===== test_subscr_create_update_sel_delete: SUCCESS
800
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200801
802===== test_subscr_aud
803
804--- Get auth data for non-existent subscriber
805
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200806db_get_auth_data(dbc, unknown_imsi, &g_aud2g, &g_aud3g, &g_id) --> -2
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200807DAUC IMSI='999999999': No such subscriber
808
809
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100810db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -2
811DAUC IMSI='123456789000000': No such subscriber
812
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200813
814--- Create subscriber
815
Oliver Smithcd2af5e2019-03-06 13:17:39 +0100816db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200817
818db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
819struct hlr_subscriber {
820 .id = 1,
821 .imsi = '123456789000000',
822}
823
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +0100824db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200825DAUC IMSI='123456789000000': No 2G Auth Data
826DAUC IMSI='123456789000000': No 3G Auth Data
827
828
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100829db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
830DAUC IMSI='123456789000000': No 2G Auth Data
831DAUC IMSI='123456789000000': No 3G Auth Data
832
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200833
834--- Set auth data, 2G only
835
836db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 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 3G Auth Data
840
8412G: struct osmo_sub_auth_data {
842 .type = GSM,
843 .algo = COMP128v1,
844 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
845}
8463G: none
847
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100848db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3
849DAUC IMSI='123456789000000': No 3G Auth Data
850DAUC IMSI='123456789000000': Calling to generate 3 vectors
851DAUC IMSI='123456789000000': Generated 3 vectors
852
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200853db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v1, "0123456789abcdef0123456789abcdef")) --> 0
854
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200855db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200856DAUC IMSI='123456789000000': No 3G Auth Data
857
8582G: struct osmo_sub_auth_data {
859 .type = GSM,
860 .algo = COMP128v1,
861 .u.gsm.ki = '0123456789abcdef0123456789abcdef',
862}
8633G: none
864
865db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v2, "BeadedBeeAced1EbbedDefacedFacade")) --> 0
866
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200867db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200868DAUC IMSI='123456789000000': No 3G Auth Data
869
8702G: struct osmo_sub_auth_data {
871 .type = GSM,
872 .algo = COMP128v2,
873 .u.gsm.ki = 'beadedbeeaced1ebbeddefacedfacade',
874}
8753G: none
876
877db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "DeafBeddedBabeAcceededFadedDecaf")) --> 0
878
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200879db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200880DAUC IMSI='123456789000000': No 3G Auth Data
881
8822G: struct osmo_sub_auth_data {
883 .type = GSM,
884 .algo = COMP128v3,
885 .u.gsm.ki = 'deafbeddedbabeacceededfadeddecaf',
886}
8873G: none
888
889db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
890
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200891db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200892DAUC IMSI='123456789000000': No 3G Auth Data
893
8942G: struct osmo_sub_auth_data {
895 .type = GSM,
896 .algo = XOR,
897 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
898}
8993G: none
900
901
902--- Remove 2G auth data
903
904db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> 0
905
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +0100906db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200907DAUC IMSI='123456789000000': No 2G Auth Data
908DAUC IMSI='123456789000000': No 3G Auth Data
909
910
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100911db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
912DAUC IMSI='123456789000000': No 2G Auth Data
913DAUC IMSI='123456789000000': No 3G Auth Data
914
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200915db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, NULL)) --> -ENOENT
916
917db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "CededEffacedAceFacedBadFadedBeef")) --> 0
918
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200919db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200920DAUC IMSI='123456789000000': No 3G Auth Data
921
9222G: struct osmo_sub_auth_data {
923 .type = GSM,
924 .algo = XOR,
925 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
926}
9273G: none
928
929db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_NONE, "f000000000000f00000000000f000000")) --> 0
930
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +0100931db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200932DAUC IMSI='123456789000000': No 2G Auth Data
933DAUC IMSI='123456789000000': No 3G Auth Data
934
935
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100936db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
937DAUC IMSI='123456789000000': No 2G Auth Data
938DAUC IMSI='123456789000000': No 3G Auth Data
939
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200940
941--- Set auth data, 3G only
942
943db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
944
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200945db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200946DAUC IMSI='123456789000000': No 2G Auth Data
947
9482G: none
9493G: struct osmo_sub_auth_data {
950 .type = UMTS,
951 .algo = MILENAGE,
952 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
953 .u.umts.opc_is_op = 1,
954 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
955 .u.umts.amf = '0000',
956 .u.umts.ind_bitlen = 5,
957}
958
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +0100959db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3
960DAUC IMSI='123456789000000': No 2G Auth Data
961DAUC IMSI='123456789000000': Calling to generate 3 vectors
962DAUC IMSI='123456789000000': Generated 3 vectors
963DAUC IMSI='123456789000000': Updating SQN=0 in DB
964
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200965db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
966
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200967db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200968DAUC IMSI='123456789000000': No 2G Auth Data
969
9702G: none
9713G: struct osmo_sub_auth_data {
972 .type = UMTS,
973 .algo = MILENAGE,
974 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
975 .u.umts.opc_is_op = 1,
976 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
977 .u.umts.amf = '0000',
978 .u.umts.ind_bitlen = 5,
979}
980
981db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "Deaf0ff1ceD0d0DabbedD1ced1ceF00d", true, "F1bbed0afD0eF0bD0ffed0ddF1fe0b0e", 0)) --> 0
982
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200983db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200984DAUC IMSI='123456789000000': No 2G Auth Data
985
9862G: none
9873G: struct osmo_sub_auth_data {
988 .type = UMTS,
989 .algo = MILENAGE,
990 .u.umts.opc = 'deaf0ff1ced0d0dabbedd1ced1cef00d',
991 .u.umts.opc_is_op = 1,
992 .u.umts.k = 'f1bbed0afd0ef0bd0ffed0ddf1fe0b0e',
993 .u.umts.amf = '0000',
994}
995
996db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", OSMO_MILENAGE_IND_BITLEN_MAX)) --> 0
997
Neels Hofmeyr57a87922017-10-09 17:51:13 +0200998db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +0200999DAUC IMSI='123456789000000': No 2G Auth Data
1000
10012G: none
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 = 28,
1010}
1011
1012db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
1013
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001014db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001015DAUC IMSI='123456789000000': No 2G Auth Data
1016
10172G: none
10183G: struct osmo_sub_auth_data {
1019 .type = UMTS,
1020 .algo = MILENAGE,
1021 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
1022 .u.umts.opc_is_op = 0,
1023 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
1024 .u.umts.amf = '0000',
1025 .u.umts.ind_bitlen = 5,
1026}
1027
1028
1029--- Remove 3G auth data
1030
1031db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> 0
1032
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001033db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001034DAUC IMSI='123456789000000': No 2G Auth Data
1035DAUC IMSI='123456789000000': No 3G Auth Data
1036
1037
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001038db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
1039DAUC IMSI='123456789000000': No 2G Auth Data
1040DAUC IMSI='123456789000000': No 3G Auth Data
1041
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001042db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, NULL, false, NULL, 0)) --> -ENOENT
1043
1044db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "CededEffacedAceFacedBadFadedBeef", false, "BeefedCafeFaceAcedAddedDecadeFee", 5)) --> 0
1045
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001046db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001047DAUC IMSI='123456789000000': No 2G Auth Data
1048
10492G: none
10503G: struct osmo_sub_auth_data {
1051 .type = UMTS,
1052 .algo = MILENAGE,
1053 .u.umts.opc = 'cededeffacedacefacedbadfadedbeef',
1054 .u.umts.opc_is_op = 0,
1055 .u.umts.k = 'beefedcafefaceacedaddeddecadefee',
1056 .u.umts.amf = '0000',
1057 .u.umts.ind_bitlen = 5,
1058}
1059
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001060db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3
1061DAUC IMSI='123456789000000': No 2G Auth Data
1062DAUC IMSI='123456789000000': Calling to generate 3 vectors
1063DAUC IMSI='123456789000000': Generated 3 vectors
1064DAUC IMSI='123456789000000': Updating SQN=0 in DB
1065
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001066db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_NONE, "asdfasdfasd", false, "asdfasdfasdf", 99999)) --> 0
1067
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001068db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001069DAUC IMSI='123456789000000': No 2G Auth Data
1070DAUC IMSI='123456789000000': No 3G Auth Data
1071
1072
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001073db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
1074DAUC IMSI='123456789000000': No 2G Auth Data
1075DAUC IMSI='123456789000000': No 3G Auth Data
1076
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001077
1078--- Set auth data, 2G and 3G
1079
1080db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_COMP128v3, "CededEffacedAceFacedBadFadedBeef")) --> 0
1081
1082db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", false, "DeafBeddedBabeAcceededFadedDecaf", 5)) --> 0
1083
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001084db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001085
10862G: struct osmo_sub_auth_data {
1087 .type = GSM,
1088 .algo = COMP128v3,
1089 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1090}
10913G: struct osmo_sub_auth_data {
1092 .type = UMTS,
1093 .algo = MILENAGE,
1094 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1095 .u.umts.opc_is_op = 0,
1096 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1097 .u.umts.amf = '0000',
1098 .u.umts.ind_bitlen = 5,
1099}
1100
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001101db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> 3
1102DAUC IMSI='123456789000000': Calling to generate 3 vectors
1103DAUC IMSI='123456789000000': Generated 3 vectors
1104DAUC IMSI='123456789000000': Updating SQN=0 in DB
1105
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001106
1107--- Set invalid auth data
1108
1109db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(99999, "f000000000000f00000000000f000000")) --> -EINVAL
1110DAUC Cannot update auth tokens: Unknown auth algo: 99999
1111
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001112db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001113
11142G: struct osmo_sub_auth_data {
1115 .type = GSM,
1116 .algo = COMP128v3,
1117 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1118}
11193G: struct osmo_sub_auth_data {
1120 .type = UMTS,
1121 .algo = MILENAGE,
1122 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1123 .u.umts.opc_is_op = 0,
1124 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1125 .u.umts.amf = '0000',
1126 .u.umts.ind_bitlen = 5,
1127}
1128
1129db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f000000000000f00000000000f000000f00000000")) --> -EINVAL
1130DAUC Cannot update auth tokens: Invalid KI: 'f000000000000f00000000000f000000f00000000'
1131
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001132db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001133
11342G: struct osmo_sub_auth_data {
1135 .type = GSM,
1136 .algo = COMP128v3,
1137 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1138}
11393G: struct osmo_sub_auth_data {
1140 .type = UMTS,
1141 .algo = MILENAGE,
1142 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1143 .u.umts.opc_is_op = 0,
1144 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1145 .u.umts.amf = '0000',
1146 .u.umts.ind_bitlen = 5,
1147}
1148
1149db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_XOR, "f00")) --> -EINVAL
1150DAUC Cannot update auth tokens: Invalid KI: 'f00'
1151
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001152db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001153
11542G: struct osmo_sub_auth_data {
1155 .type = GSM,
1156 .algo = COMP128v3,
1157 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1158}
11593G: struct osmo_sub_auth_data {
1160 .type = UMTS,
1161 .algo = MILENAGE,
1162 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1163 .u.umts.opc_is_op = 0,
1164 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1165 .u.umts.amf = '0000',
1166 .u.umts.ind_bitlen = 5,
1167}
1168
1169db_subscr_update_aud_by_id(dbc, id, mk_aud_2g(OSMO_AUTH_ALG_MILENAGE, "0123456789abcdef0123456789abcdef")) --> -EINVAL
1170DAUC Cannot update auth tokens: auth algo not suited for 2G: MILENAGE
1171
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001172db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001173
11742G: struct osmo_sub_auth_data {
1175 .type = GSM,
1176 .algo = COMP128v3,
1177 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1178}
11793G: struct osmo_sub_auth_data {
1180 .type = UMTS,
1181 .algo = MILENAGE,
1182 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1183 .u.umts.opc_is_op = 0,
1184 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1185 .u.umts.amf = '0000',
1186 .u.umts.ind_bitlen = 5,
1187}
1188
1189db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "0f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1190DAUC Cannot update auth tokens: Invalid OP/OPC: '0f000000000000f00000000000f000000'
1191
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001192db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001193
11942G: struct osmo_sub_auth_data {
1195 .type = GSM,
1196 .algo = COMP128v3,
1197 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1198}
11993G: struct osmo_sub_auth_data {
1200 .type = UMTS,
1201 .algo = MILENAGE,
1202 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1203 .u.umts.opc_is_op = 0,
1204 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1205 .u.umts.amf = '0000',
1206 .u.umts.ind_bitlen = 5,
1207}
1208
1209db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "000000000000f00000000000f000000", 5)) --> -EINVAL
1210DAUC Cannot update auth tokens: Invalid K: '000000000000f00000000000f000000'
1211
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001212db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001213
12142G: struct osmo_sub_auth_data {
1215 .type = GSM,
1216 .algo = COMP128v3,
1217 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1218}
12193G: struct osmo_sub_auth_data {
1220 .type = UMTS,
1221 .algo = MILENAGE,
1222 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1223 .u.umts.opc_is_op = 0,
1224 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1225 .u.umts.amf = '0000',
1226 .u.umts.ind_bitlen = 5,
1227}
1228
1229db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", OSMO_MILENAGE_IND_BITLEN_MAX + 1)) --> -EINVAL
1230DAUC Cannot update auth tokens: Invalid ind_bitlen: 29
1231
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001232db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001233
12342G: struct osmo_sub_auth_data {
1235 .type = GSM,
1236 .algo = COMP128v3,
1237 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1238}
12393G: struct osmo_sub_auth_data {
1240 .type = UMTS,
1241 .algo = MILENAGE,
1242 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1243 .u.umts.opc_is_op = 0,
1244 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1245 .u.umts.amf = '0000',
1246 .u.umts.ind_bitlen = 5,
1247}
1248
1249db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "X000000000000f00000000000f000000", false, "f000000000000f00000000000f000000", 5)) --> -EINVAL
1250DAUC Cannot update auth tokens: Invalid OP/OPC: 'X000000000000f00000000000f000000'
1251
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001252db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001253
12542G: struct osmo_sub_auth_data {
1255 .type = GSM,
1256 .algo = COMP128v3,
1257 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1258}
12593G: struct osmo_sub_auth_data {
1260 .type = UMTS,
1261 .algo = MILENAGE,
1262 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1263 .u.umts.opc_is_op = 0,
1264 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1265 .u.umts.amf = '0000',
1266 .u.umts.ind_bitlen = 5,
1267}
1268
1269db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "f000000000000f00000000000f000000", false, "f000000000000 f00000000000 f000000", 5)) --> -EINVAL
1270DAUC Cannot update auth tokens: Invalid K: 'f000000000000 f00000000000 f000000'
1271
Neels Hofmeyr57a87922017-10-09 17:51:13 +02001272db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001273
12742G: struct osmo_sub_auth_data {
1275 .type = GSM,
1276 .algo = COMP128v3,
1277 .u.gsm.ki = 'cededeffacedacefacedbadfadedbeef',
1278}
12793G: struct osmo_sub_auth_data {
1280 .type = UMTS,
1281 .algo = MILENAGE,
1282 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1283 .u.umts.opc_is_op = 0,
1284 .u.umts.k = 'deafbeddedbabeacceededfadeddecaf',
1285 .u.umts.amf = '0000',
1286 .u.umts.ind_bitlen = 5,
1287}
1288
1289
1290--- Delete subscriber
1291
1292db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1293struct hlr_subscriber {
1294 .id = 1,
1295 .imsi = '123456789000000',
1296}
1297
1298db_subscr_delete_by_id(dbc, id) --> 0
1299
1300db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1301DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1302
1303
1304--- Re-add subscriber and verify auth data didn't come back
1305
Oliver Smithcd2af5e2019-03-06 13:17:39 +01001306db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001307
1308db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1309struct hlr_subscriber {
1310 .id = 1,
1311 .imsi = '123456789000000',
1312}
1313
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001314db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001315DAUC IMSI='123456789000000': No 2G Auth Data
1316DAUC IMSI='123456789000000': No 3G Auth Data
1317
1318
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001319db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -126
1320DAUC IMSI='123456789000000': No 2G Auth Data
1321DAUC IMSI='123456789000000': No 3G Auth Data
1322
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001323db_subscr_delete_by_id(dbc, id) --> 0
1324
1325db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1326DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1327
Neels Hofmeyr2dee60e2017-11-23 15:27:50 +01001328db_get_auc(dbc, imsi0, 3, vec, N_VECTORS, NULL, NULL) --> -2
1329DAUC IMSI='123456789000000': No such subscriber
1330
Neels Hofmeyr1332a172017-10-10 02:25:00 +02001331===== test_subscr_aud: SUCCESS
1332
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001333
1334===== test_subscr_sqn
1335
1336--- Set SQN for unknown subscriber
1337
1338db_update_sqn(dbc, 99, 999) --> -ENOENT
1339DAUC Cannot update SQN for subscriber ID=99: no auc_3g entry for such subscriber
1340
1341db_subscr_get_by_id(dbc, 99, &g_subscr) --> -ENOENT
1342DAUC Cannot read subscriber from db: ID=99: No such subscriber
1343
1344db_update_sqn(dbc, 9999, 99) --> -ENOENT
1345DAUC Cannot update SQN for subscriber ID=9999: no auc_3g entry for such subscriber
1346
1347db_subscr_get_by_id(dbc, 9999, &g_subscr) --> -ENOENT
1348DAUC Cannot read subscriber from db: ID=9999: No such subscriber
1349
1350
1351--- Create subscriber
1352
Oliver Smithcd2af5e2019-03-06 13:17:39 +01001353db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) --> 0
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001354
1355db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1356struct hlr_subscriber {
1357 .id = 1,
1358 .imsi = '123456789000000',
1359}
1360
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001361db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001362DAUC IMSI='123456789000000': No 2G Auth Data
1363DAUC IMSI='123456789000000': No 3G Auth Data
1364
1365
1366
1367--- Set SQN, but no 3G auth data present
1368
1369db_update_sqn(dbc, id, 123) --> -ENOENT
1370DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1371
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001372db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001373DAUC IMSI='123456789000000': No 2G Auth Data
1374DAUC IMSI='123456789000000': No 3G Auth Data
1375
1376
1377db_update_sqn(dbc, id, 543) --> -ENOENT
1378DAUC Cannot update SQN for subscriber ID=1: no auc_3g entry for such subscriber
1379
Neels Hofmeyrbd1dca02017-11-23 15:25:30 +01001380db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> -126
Neels Hofmeyr1cbdb702017-10-09 23:03:57 +02001381DAUC IMSI='123456789000000': No 2G Auth Data
1382DAUC IMSI='123456789000000': No 3G Auth Data
1383
1384
1385
1386--- Set auth 3G data
1387
1388db_subscr_update_aud_by_id(dbc, id, mk_aud_3g(OSMO_AUTH_ALG_MILENAGE, "BeefedCafeFaceAcedAddedDecadeFee", true, "C01ffedC1cadaeAc1d1f1edAcac1aB0a", 5)) --> 0
1389
1390db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1391DAUC IMSI='123456789000000': No 2G Auth Data
1392
13932G: none
13943G: struct osmo_sub_auth_data {
1395 .type = UMTS,
1396 .algo = MILENAGE,
1397 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1398 .u.umts.opc_is_op = 1,
1399 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1400 .u.umts.amf = '0000',
1401 .u.umts.ind_bitlen = 5,
1402}
1403
1404
1405--- Set SQN
1406
1407db_update_sqn(dbc, id, 23315) --> 0
1408
1409db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1410DAUC IMSI='123456789000000': No 2G Auth Data
1411
14122G: none
14133G: struct osmo_sub_auth_data {
1414 .type = UMTS,
1415 .algo = MILENAGE,
1416 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1417 .u.umts.opc_is_op = 1,
1418 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1419 .u.umts.amf = '0000',
1420 .u.umts.sqn = 23315,
1421 .u.umts.sqn = 0x5b13,
1422 .u.umts.ind_bitlen = 5,
1423}
1424
1425db_update_sqn(dbc, id, 23315) --> 0
1426
1427db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1428DAUC IMSI='123456789000000': No 2G Auth Data
1429
14302G: none
14313G: struct osmo_sub_auth_data {
1432 .type = UMTS,
1433 .algo = MILENAGE,
1434 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1435 .u.umts.opc_is_op = 1,
1436 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1437 .u.umts.amf = '0000',
1438 .u.umts.sqn = 23315,
1439 .u.umts.sqn = 0x5b13,
1440 .u.umts.ind_bitlen = 5,
1441}
1442
1443db_update_sqn(dbc, id, 423) --> 0
1444
1445db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1446DAUC IMSI='123456789000000': No 2G Auth Data
1447
14482G: none
14493G: struct osmo_sub_auth_data {
1450 .type = UMTS,
1451 .algo = MILENAGE,
1452 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1453 .u.umts.opc_is_op = 1,
1454 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1455 .u.umts.amf = '0000',
1456 .u.umts.sqn = 423,
1457 .u.umts.sqn = 0x1a7,
1458 .u.umts.ind_bitlen = 5,
1459}
1460
1461
1462--- Set SQN: thru uint64_t range, using the int64_t SQLite bind
1463
1464db_update_sqn(dbc, id, 0) --> 0
1465
1466db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1467DAUC IMSI='123456789000000': No 2G Auth Data
1468
14692G: none
14703G: struct osmo_sub_auth_data {
1471 .type = UMTS,
1472 .algo = MILENAGE,
1473 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1474 .u.umts.opc_is_op = 1,
1475 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1476 .u.umts.amf = '0000',
1477 .u.umts.ind_bitlen = 5,
1478}
1479
1480db_update_sqn(dbc, id, INT64_MAX) --> 0
1481
1482db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1483DAUC IMSI='123456789000000': No 2G Auth Data
1484
14852G: none
14863G: struct osmo_sub_auth_data {
1487 .type = UMTS,
1488 .algo = MILENAGE,
1489 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1490 .u.umts.opc_is_op = 1,
1491 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1492 .u.umts.amf = '0000',
1493 .u.umts.sqn = 9223372036854775807,
1494 .u.umts.sqn = 0x7fffffffffffffff,
1495 .u.umts.ind_bitlen = 5,
1496}
1497
1498db_update_sqn(dbc, id, INT64_MIN) --> 0
1499
1500db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1501DAUC IMSI='123456789000000': No 2G Auth Data
1502
15032G: none
15043G: struct osmo_sub_auth_data {
1505 .type = UMTS,
1506 .algo = MILENAGE,
1507 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1508 .u.umts.opc_is_op = 1,
1509 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1510 .u.umts.amf = '0000',
1511 .u.umts.sqn = 9223372036854775808,
1512 .u.umts.sqn = 0x8000000000000000,
1513 .u.umts.ind_bitlen = 5,
1514}
1515
1516db_update_sqn(dbc, id, UINT64_MAX) --> 0
1517
1518db_get_auth_data(dbc, imsi0, &g_aud2g, &g_aud3g, &g_id) --> 0
1519DAUC IMSI='123456789000000': No 2G Auth Data
1520
15212G: none
15223G: struct osmo_sub_auth_data {
1523 .type = UMTS,
1524 .algo = MILENAGE,
1525 .u.umts.opc = 'beefedcafefaceacedaddeddecadefee',
1526 .u.umts.opc_is_op = 1,
1527 .u.umts.k = 'c01ffedc1cadaeac1d1f1edacac1ab0a',
1528 .u.umts.amf = '0000',
1529 .u.umts.sqn = 18446744073709551615,
1530 .u.umts.sqn = 0xffffffffffffffff,
1531 .u.umts.ind_bitlen = 5,
1532}
1533
1534
1535--- Delete subscriber
1536
1537db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
1538struct hlr_subscriber {
1539 .id = 1,
1540 .imsi = '123456789000000',
1541}
1542
1543db_subscr_delete_by_id(dbc, id) --> 0
1544
1545db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> -ENOENT
1546DAUC Cannot read subscriber from db: IMSI='123456789000000': No such subscriber
1547
1548===== test_subscr_sqn: SUCCESS
1549