Skip to content
index.html 37.2 KiB
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>
    
      

    
    
    
  </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>
  </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>
  </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>
  

              
            
          </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">
  </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>
          </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">
    <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">
  <a href="#test-case-2-onboard-network-app-already-onboarded" class="md-nav__link">
      Test Case 2: Onboard Network App Already onboarded
  <a href="#test-case-3-update-onboarded-network-app" class="md-nav__link">
      Test Case 3: Update Onboarded Network App
  <a href="#test-case-4-update-not-onboarded-network-app" class="md-nav__link">
      Test Case 4: Update Not Onboarded Network App
  <a href="#test-case-5-offboard-network-app" class="md-nav__link">
  <a href="#test-case-6-offboard-not-previsouly-onboarded-network-app" class="md-nav__link">
      Test Case 6: Offboard Not previsouly Onboarded Network App
  <a href="#test-case-7-update-onboarded-network-app-certificate" class="md-nav__link">
      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>
<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>
<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>
<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"-&gt;"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-&gt;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>
<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>
<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>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"-&gt;"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-&gt;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>
<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>
<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-&gt;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>
<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>
<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>
<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>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>
<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>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>
<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>
<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>