Newer
Older
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="ETSI SDG OCF Documentation page">
<meta name="author" content="OpenCAPIF by ETSI">
<link rel="canonical" href="https://ocf.etsi.org/develop/testing/testplan/api_invoker_management/">
<link rel="icon" href="../../../images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
<title>Test Plan for CAPIF Api Invoker Management - ETSI SDG OCF Documentation</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.6f8fc17f.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../../stylesheets/extra.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#test-plan-for-capif-api-invoker-management" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="ETSI SDG OCF Documentation" class="md-header__button md-logo" aria-label="ETSI SDG OCF Documentation" data-md-component="logo">
<img src="../../../images/logos/Open CAPIF Logo Screen_B_W Slogan NEG.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
ETSI SDG OCF Documentation
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Test Plan for CAPIF Api Invoker Management
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://labs.etsi.org/rep/ocf" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81s-5.7.083-8.4 1.11c-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.1 18.1 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3s9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82"/></svg>
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
</div>
<div class="md-source__repository">
OCF GitLab
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="ETSI SDG OCF Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG OCF Documentation" data-md-component="logo">
<img src="../../../images/logos/Open CAPIF Logo Screen_B_W Slogan NEG.png" alt="logo">
</a>
ETSI SDG OCF Documentation
</label>
<div class="md-nav__source">
<a href="https://labs.etsi.org/rep/ocf" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81s-5.7.083-8.4 1.11c-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.1 18.1 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3s9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82"/></svg>
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
</div>
<div class="md-source__repository">
OCF GitLab
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" >
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
<span class="md-ellipsis">
Overview
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
Overview
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
<li class="md-nav__item">
<a href="../../../releasenotes/" class="md-nav__link">
<span class="md-ellipsis">
Release Notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../architecture/" class="md-nav__link">
<span class="md-ellipsis">
Architecture
</span>
</a>
</li>
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Getting Started
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Getting Started
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../gettingstarted/howtorun/" class="md-nav__link">
<span class="md-ellipsis">
How to Run
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../" class="md-nav__link">
<span class="md-ellipsis">
Test Plan
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../robotframework/" class="md-nav__link">
<span class="md-ellipsis">
Robot Framework
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../postman/" class="md-nav__link">
<span class="md-ellipsis">
Postman
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Contribute
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Contribute
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../contribute/documenting/" class="md-nav__link">
<span class="md-ellipsis">
Documenting
</span>
</a>
</li>
</ul>
</nav>
</li>
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
<li class="md-nav__item">
<a href="../../../FAQ/" class="md-nav__link">
<span class="md-ellipsis">
FAQ
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#test-case-1-onboard-network-app" class="md-nav__link">
<span class="md-ellipsis">
Test Case 1: Onboard Network App
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-case-2-onboard-network-app-already-onboarded" class="md-nav__link">
<span class="md-ellipsis">
Test Case 2: Onboard Network App Already onboarded
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-case-3-update-onboarded-network-app" class="md-nav__link">
<span class="md-ellipsis">
Test Case 3: Update Onboarded Network App
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-case-4-update-not-onboarded-network-app" class="md-nav__link">
<span class="md-ellipsis">
Test Case 4: Update Not Onboarded Network App
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-case-5-offboard-network-app" class="md-nav__link">
<span class="md-ellipsis">
Test Case 5: Offboard Network App
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-case-6-offboard-not-previsouly-onboarded-network-app" class="md-nav__link">
<span class="md-ellipsis">
Test Case 6: Offboard Not previsouly Onboarded Network App
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-case-7-update-onboarded-network-app-certificate" class="md-nav__link">
<span class="md-ellipsis">
Test Case 7: Update Onboarded Network App Certificate
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="test-plan-for-capif-api-invoker-management">Test Plan for CAPIF Api Invoker Management</h1>
<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>
<h2 id="test-case-1-onboard-network-app">Test Case 1: Onboard Network App</h2>
<p><strong>Test ID</strong>: <strong><em>capif_api_invoker_management-1</em></strong></p>
<p><strong>Description</strong>:</p>
<p>This test will try to register new Network App at CAPIF Core.</p>
<p><strong>Pre-Conditions</strong>:</p>
<ul>
<li>Network App was not registered previously</li>
<li>Network App was not onboarded previously</li>
<li><strong><em>Preconditions: The administrator must have previously registered the User.</em></strong></li>
</ul>
<p><strong>Execution Steps</strong>:</p>
<ol>
<li>Retrieve access_token by User from register</li>
<li>Onboard Invoker at CCF</li>
<li>Store signed Certificate</li>
</ol>
<p><strong>Information of Test</strong>:</p>
<ol>
<li>
<p>Create public and private key at invoker</p>
</li>
<li>
<p>Retrieve access_token by User:</p>
<ul>
<li>Send <strong>GET</strong> to <strong>https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</strong></li>
<li>Include basic Auth Header with Admin user/password</li>
<li>Retrieve <strong>access_token</strong> and the urls needed for next requests from response body <a href="../common_operations/user_getauth_response_body_example.json" title="User GetAuth response Body Example">user_getauth_response_body_example</a></li>
</ul>
</li>
<li>
<p>Onboard Invoker:</p>
<ul>
<li>Send <strong>POST</strong> to <strong>https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers</strong></li>
<li>Reference Request Body: <a href="invoker_details_post_example.json" title="API Invoker Request">invoker onboarding body</a></li>
<li>"onboardingInformation"->"apiInvokerPublicKey": must contain public key generated by Invoker.</li>
<li>Send in Authorization Header the Bearer access_token obtained previously (Authorization:Bearer ${access_token})</li>
</ul>
</li>
</ol>
<p><strong>Expected Result</strong>:</p>
<ol>
<li>Response to Onboard request must accomplish:<ol>
<li><strong>201 Created</strong></li>
<li>Response Body must follow <strong>APIInvokerEnrolmentDetails</strong> data structure with:<ul>
<li>apiInvokerId</li>
<li>onboardingInformation->apiInvokerCertificate must contain the public key signed.</li>
</ul>
</li>
<li>Response Header <strong>Location</strong> must be received with URI to new resource created, following this structure: <strong>{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</strong></li>
</ol>
</li>
</ol>
<h2 id="test-case-2-onboard-network-app-already-onboarded">Test Case 2: Onboard Network App Already onboarded</h2>
<p><strong>Test ID</strong>: <strong><em>capif_api_invoker_management-2</em></strong></p>
<p><strong>Description</strong>:</p>
<p>This test will check second onboard of same Network App is not allowed.</p>
<p><strong>Pre-Conditions</strong>:</p>
<ul>
<li>Network App was registered previously</li>
<li>Network App was onboarded previously</li>
</ul>
<p><strong>Execution Steps</strong>:</p>
<ol>
<li>Register Network App at CCF</li>
<li>Onboard Network App at CCF</li>
<li>Store signed Certificate at Network App</li>
<li>Onboard Again the Network App at CCF</li>
</ol>
<p><strong>Information of Test</strong>:</p>
<ol>
<li>
<p>Perform <a href="../common_operations/#onboard-an-invoker" title="Invoker Onboarding">Invoker Onboarding</a></p>
</li>
<li>
<p>Repeat Onboard Invoker:</p>
<ul>
<li>Send <strong>POST</strong> to <strong>https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers</strong></li>
<li>Reference Request Body: <a href="invoker_details_post_example.json" title="API Invoker Request">invoker onboarding body</a></li>
<li>"onboardingInformation"->"apiInvokerPublicKey": must contain public key generated by Invoker.</li>
<li>Send in Authorization Header the Bearer access_token obtained previously (Authorization:Bearer ${access_token})</li>
</ul>
</li>
</ol>
<p><strong>Expected Result</strong>:</p>
<ol>
<li>Response to Onboard request must accomplish:<ol>
<li><strong>201 Created</strong></li>
<li>Response Body must follow <strong>APIInvokerEnrolmentDetails</strong> data structure with:<ul>
<li>apiInvokerId</li>
<li>onboardingInformation->apiInvokerCertificate must contain the public key signed.</li>
</ul>
</li>
<li>Response Header <strong>Location</strong> must be received with URI to new resource created, following this structure: <strong>{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</strong></li>
</ol>
</li>
<li>Response to Second Onboard of Network App must accomplish:<ol>
<li><strong>403 Forbidden</strong></li>
<li>Error Response Body must accomplish with <strong>ProblemDetails</strong> data structure with:<ul>
<li>status 403</li>
<li>title with message "Forbidden"</li>
<li>detail with message "Invoker Already registered".</li>
<li>cause with message "Identical invoker public key".</li>
</ul>
</li>
</ol>
</li>
</ol>
<h2 id="test-case-3-update-onboarded-network-app">Test Case 3: Update Onboarded Network App</h2>
<p><strong>Test ID</strong>: <strong><em>capif_api_invoker_management-3</em></strong></p>
<p><strong>Description</strong>:</p>
<p>This test will try to update information of previous onboard Network App at CAPIF Core.</p>
<p><strong>Pre-Conditions</strong>:</p>
<ul>
<li>Network App was registered previously</li>
<li>Network App was onboarded previously with {onboardingId}</li>
</ul>
<p><strong>Execution Steps</strong>:</p>
<ol>
<li>Register Invoker at CCF</li>
<li>Onboard Invoker at CCF</li>
<li>Store signed Certificate</li>
<li>Update Onboarding Information at CCF with a minor change on "notificationDestination"</li>
</ol>
<p><strong>Information of Test</strong>:</p>
<ol>
<li>
<p>Perform <a href="../common_operations/#onboard-an-invoker" title="Invoker Onboarding">Invoker Onboarding</a></p>
</li>
<li>
<p>Update information of previously onboarded Invoker:</p>
<ul>
<li>Send <strong>PUT</strong> to <strong>https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</strong></li>
<li>Reference Request Body is: [put invoker onboarding body]</li>
<li>"notificationDestination": "<em>http://host.docker.internal:8086/netapp_new_callback</em>",</li>
</ul>
</li>
</ol>
<p><strong>Expected Result</strong>:</p>
<ol>
<li>Response to Onboard request must accomplish:<ol>
<li><strong>201 Created</strong></li>
<li>Response Body must follow <strong>APIInvokerEnrolmentDetails</strong> data structure with:<ul>
<li>apiInvokerId</li>
<li>onboardingInformation->apiInvokerCertificate must contain the public key signed.</li>
</ul>
</li>
<li>Response Header <strong>Location</strong> must be received with URI to new resource created, following this structure: <strong>{apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</strong></li>
</ol>
</li>
<li>Response to Update Request (PUT) with minor change must contain:<ol>
<li><strong>200 OK</strong> response.</li>
<li>notificationDestination on response must contain the new value</li>
</ol>
</li>
</ol>
<h2 id="test-case-4-update-not-onboarded-network-app">Test Case 4: Update Not Onboarded Network App</h2>
<p><strong>Test ID</strong>: <strong><em>capif_api_invoker_management-4</em></strong></p>
<p><strong>Description</strong>:</p>
<p>This test will try to update information of not onboarded Network App at CAPIF Core.</p>
<p><strong>Pre-Conditions</strong>:</p>
<ul>
<li>Network App was registered previously</li>
<li>Network App was not onboarded previously</li>
</ul>
<p><strong>Execution Steps</strong>:</p>
<ol>
<li>Register Invoker at CCF</li>
<li>Onboard Invoker at CCF</li>
<li>Update Onboarding Information at CCF of not onboarded</li>
</ol>
<p><strong>Information of Test</strong>:</p>
<ol>
<li>
<p>Perform <a href="../common_operations/#onboard-an-invoker" title="Invoker Onboarding">Invoker Onboarding</a></p>
</li>
<li>
<p>Update information of not onboarded Invoker:</p>
<ul>
<li>Send <strong>PUT</strong> to <strong>https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{INVOKER_NOT_REGISTERED}</strong></li>
<li>Reference Request Body is: [put invoker onboarding body]</li>
</ul>
</li>
</ol>
<p><strong>Expected Result</strong>:</p>
<ol>
<li>Response to Onboard request must accomplish:<ol>
<li><strong>201 Created</strong></li>
</ol>
</li>
<li>Response to Update Request (PUT) must contain:<ol>
<li><strong>404 Not Found</strong></li>
<li>Error Response Body must accomplish with <strong>ProblemDetails</strong> data structure with:<ul>
<li>status 404</li>
<li>title with message "Not Found"</li>
<li>detail with message "Please provide an existing Network App ID".</li>
<li>cause with message "Not exist Network App ID".</li>
</ul>
</li>
</ol>
</li>
</ol>
<h2 id="test-case-5-offboard-network-app">Test Case 5: Offboard Network App</h2>
<p><strong>Test ID</strong>: <strong><em>capif_api_invoker_management-5</em></strong></p>
<p><strong>Description</strong>:</p>
<p>This test case will check that a Registered Network App can be deleted.</p>
<p><strong>Pre-Conditions</strong>:</p>
<ul>
<li>Network App was registered previously</li>
<li>Network App was onboarded previously</li>
</ul>
<p><strong>Execution Steps</strong>:</p>
<ol>
<li>Register Invoker at CCF</li>
<li>Onboard Invoker at CCF</li>
<li>Offboard Invoker at CCF</li>
</ol>
<p><strong>Information of Test</strong>:</p>
<ol>
<li>
<p>Perform <a href="../common_operations/#onboard-an-invoker" title="Invoker Onboarding">Invoker Onboarding</a></p>
</li>
<li>
<p>Offboard:</p>
<ul>
<li>Send <strong>DELETE</strong> to <strong>https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</strong></li>
</ul>
</li>
</ol>
<p><strong>Expected Result</strong>:</p>
<ol>
<li>Response to Onboard request must accomplish:<ol>
<li><strong>201 Created</strong></li>
</ol>
</li>
<li>Response to Offboard Request (DELETE) must contain:<ol>
<li><strong>204 No Content</strong></li>
</ol>
</li>
</ol>
<h2 id="test-case-6-offboard-not-previsouly-onboarded-network-app">Test Case 6: Offboard Not previsouly Onboarded Network App</h2>
<p><strong>Test ID</strong>: <strong><em>capif_api_invoker_management-6</em></strong></p>
<p><strong>Description</strong>:</p>
<p>This test case will check that a Non-Registered Network App cannot be deleted</p>
<p><strong>Pre-Conditions</strong>:</p>
<ul>
<li>Network App was registered previously</li>
<li>Network App was not onboarded previously</li>
</ul>
<p><strong>Execution Steps</strong>:</p>
<ol>
<li>Register Invoker at CCF</li>
<li>Offboard Invoker at CCF</li>
</ol>
<p><strong>Information of Test</strong>:</p>
<ol>
<li>
<p>Perform <a href="../common_operations/#onboard-an-invoker" title="Invoker Onboarding">Invoker Onboarding</a></p>
</li>
<li>
<p>Offboard:</p>
<ul>
<li>Send <strong>DELETE</strong> to <strong>https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{INVOKER_NOT_REGISTERED}</strong></li>
</ul>
</li>
</ol>
<p><strong>Expected Result</strong>:</p>
<ol>
<li>Response to Offboard Request (DELETE) must contain:<ol>
<li><strong>404 Not Found</strong></li>
<li>Error Response Body must accomplish with <strong>ProblemDetails</strong> data structure with:<ul>
<li>status 404</li>
<li>title with message "Not Found"</li>
<li>detail with message "Please provide an existing Network App ID".</li>
<li>cause with message "Not exist Network App ID".</li>
</ul>
</li>
</ol>
</li>
</ol>
<h2 id="test-case-7-update-onboarded-network-app-certificate">Test Case 7: Update Onboarded Network App Certificate</h2>
<p><strong>Test ID</strong>: <strong><em>capif_api_invoker_management-7</em></strong></p>
<p><strong>Description</strong>:</p>
<p>This test will try to update public key and get a new signed certificate by CAPIF Core.</p>
<p><strong>Pre-Conditions</strong>:</p>
<ul>
<li>Network App was registered previously</li>
<li>Network App was onboarded previously with {onboardingId} and {public_key_1}</li>
</ul>
<p><strong>Execution Steps</strong>:</p>
<ol>
<li>Register Invoker at CCF</li>
<li>Onboard Invoker at CCF</li>
<li>Store signed Certificate</li>
<li>Update Onboarding Information at CCF with new public key</li>
<li>Update Onboarding Information at CCF with minor change</li>
</ol>
<p><strong>Information of Test</strong>:</p>
<ol>
<li>
<p>Perform <a href="../common_operations/#onboard-an-invoker" title="Invoker Onboarding">Invoker Onboarding</a> with public_key_1.</p>
</li>
<li>
<p>Create {public_key_2}</p>
</li>
<li>
<p>Update information of previously onboarded Invoker:</p>
<ul>
<li>Send <strong>PUT</strong> to <strong>https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</strong></li>
<li>Reference Request Body is: [put invoker onboarding body]</li>
<li>["onboardingInformation"]["apiInvokerPublicKey"]: {public_key_2},</li>
<li>Store new certificate.</li>
</ul>
</li>
<li>