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.6.7">
<title>Test Plan for CAPIF Api Invoker Management - ETSI SDG OCF Documentation</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.8608ea7d.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.2 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.2 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
</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>
<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>
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
</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
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
</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">
Features
</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>
Features
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../vendor-ext/vendor-ext/" class="md-nav__link">
<span class="md-ellipsis">
Vendor Extensibility
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../api-status/api-status/" class="md-nav__link">
<span class="md-ellipsis">
Api Status
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../event-filter/event-filter/" class="md-nav__link">
<span class="md-ellipsis">
Event Filter
</span>
</a>
</li>
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
</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">
SDK
</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>
SDK
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../sdk/sdk/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
557
558
559
560
561
562
563
564
565
566
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
</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_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Example Clients
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Example Clients
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../example-clients/example-clients/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
</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_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_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_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<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_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_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_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<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>
<li class="md-nav__item">
<a href="../../../FAQ/" class="md-nav__link">
<span class="md-ellipsis">
FAQ
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
</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>