From 32e986d0aabdd8e517b6e3bf21af9d85d0c811fd Mon Sep 17 00:00:00 2001
From: yangalicace1 <royer.yangali@etsi.org>
Date: Mon, 21 Oct 2024 13:26:34 +0000
Subject: [PATCH] Deployed 2ff5ac2 to develop in public with MkDocs 1.6.1 and
 mike 2.1.3

---
 public/develop/architecture/index.html        |   2 +-
 .../configure_your_machine/index.html         | 403 ------------
 .../openstack/index.html                      | 494 --------------
 .../oracle_virtual_box/index.html             | 542 ---------------
 .../physical_server/index.html                | 492 --------------
 .../vagrant_box/index.html                    | 615 ------------------
 .../vm_ware_fusion/index.html                 | 447 -------------
 .../deploy_TeraFlowSDN/index.html             | 536 ---------------
 .../install_micro_k8s/index.html              | 548 ----------------
 .../show_deployment_and_logs/index.html       | 422 ------------
 .../webUI_and_grafana_dashboards/index.html   | 410 ------------
 .../configure_environment/index.html          | 402 ------------
 .../java_quarkus/index.html                   | 442 -------------
 .../configure_environment/python/index.html   | 499 --------------
 .../architecture/CAPIF Core Function.png      | Bin 58316 -> 0 bytes
 .../architecture/CAPIF_Core_Function.png      | Bin 58316 -> 0 bytes
 .../images/architecture/New_Architecture.png  | Bin 173563 -> 0 bytes
 .../develop/images/architecture/msg_flow.png  | Bin 69966 -> 0 bytes
 .../develop/images/flows/01_Login_Admin.png   | Bin 28999 -> 0 bytes
 .../images/flows/02_Creation_of_user.png      | Bin 59335 -> 0 bytes
 .../flows/03_Register_of_AEF_GetAuth.png      | Bin 44751 -> 0 bytes
 .../04_AEF_API_Provider_registration.png      | Bin 51100 -> 0 bytes
 .../develop/images/flows/05_AEF_Publish.png   | Bin 43247 -> 0 bytes
 .../flows/06_Invoker_Register_GetAuth.png     | Bin 44751 -> 0 bytes
 .../images/flows/07_Invoker_Onboarding.png    | Bin 64059 -> 0 bytes
 .../images/flows/08_Invoker_Discover_AEF.png  | Bin 43087 -> 0 bytes
 .../09_Invoker_Create_Security_Context.png    | Bin 43568 -> 0 bytes
 .../images/flows/10_Invoker_Get_Token.png     | Bin 55546 -> 0 bytes
 ...nvoker_Send_Request_to_AEF_Service_API.png | Bin 26214 -> 0 bytes
 .../Open CAPIF Logo Screen_B_W Slogan NEG.png | Bin 22786 -> 0 bytes
 ...CAPIF Logo Screen_Colour Slogan NEG@3x.png | Bin 93037 -> 0 bytes
 public/develop/images/logos/OpenCAPIF.png     | Bin 24999 -> 0 bytes
 public/develop/images/logos/OpenCAPIF.webp    | Bin 7218 -> 0 bytes
 .../develop/images/logos/OpenCAPIF_Small.png  | Bin 3747 -> 0 bytes
 .../develop/images/logos/OpenCAPIF_Square.png | Bin 7831 -> 0 bytes
 .../images/logos/OpenCAPIF_Square.webp        | Bin 3068 -> 0 bytes
 public/develop/search/search_index.json       |   2 +-
 public/develop/sitemap.xml                    |  52 --
 public/develop/sitemap.xml.gz                 | Bin 559 -> 382 bytes
 39 files changed, 2 insertions(+), 6306 deletions(-)
 delete mode 100644 public/develop/deployment_guide/configure_your_machine/configure_your_machine/index.html
 delete mode 100644 public/develop/deployment_guide/configure_your_machine/openstack/index.html
 delete mode 100644 public/develop/deployment_guide/configure_your_machine/oracle_virtual_box/index.html
 delete mode 100644 public/develop/deployment_guide/configure_your_machine/physical_server/index.html
 delete mode 100644 public/develop/deployment_guide/configure_your_machine/vagrant_box/index.html
 delete mode 100644 public/develop/deployment_guide/configure_your_machine/vm_ware_fusion/index.html
 delete mode 100644 public/develop/deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/index.html
 delete mode 100644 public/develop/deployment_guide/install_micro_k8s/install_micro_k8s/index.html
 delete mode 100644 public/develop/deployment_guide/show_deployment_and_logs/show_deployment_and_logs/index.html
 delete mode 100644 public/develop/deployment_guide/webUI_and_grafana_dashboards/webUI_and_grafana_dashboards/index.html
 delete mode 100644 public/develop/development_guide/configure_environment/configure_environment/index.html
 delete mode 100644 public/develop/development_guide/configure_environment/java_quarkus/index.html
 delete mode 100644 public/develop/development_guide/configure_environment/python/index.html
 delete mode 100644 public/develop/images/architecture/CAPIF Core Function.png
 delete mode 100644 public/develop/images/architecture/CAPIF_Core_Function.png
 delete mode 100644 public/develop/images/architecture/New_Architecture.png
 delete mode 100644 public/develop/images/architecture/msg_flow.png
 delete mode 100644 public/develop/images/flows/01_Login_Admin.png
 delete mode 100644 public/develop/images/flows/02_Creation_of_user.png
 delete mode 100644 public/develop/images/flows/03_Register_of_AEF_GetAuth.png
 delete mode 100644 public/develop/images/flows/04_AEF_API_Provider_registration.png
 delete mode 100644 public/develop/images/flows/05_AEF_Publish.png
 delete mode 100644 public/develop/images/flows/06_Invoker_Register_GetAuth.png
 delete mode 100644 public/develop/images/flows/07_Invoker_Onboarding.png
 delete mode 100644 public/develop/images/flows/08_Invoker_Discover_AEF.png
 delete mode 100644 public/develop/images/flows/09_Invoker_Create_Security_Context.png
 delete mode 100644 public/develop/images/flows/10_Invoker_Get_Token.png
 delete mode 100644 public/develop/images/flows/11_Invoker_Send_Request_to_AEF_Service_API.png
 delete mode 100644 public/develop/images/logos/Open CAPIF Logo Screen_B_W Slogan NEG.png
 delete mode 100644 public/develop/images/logos/Open CAPIF Logo Screen_Colour Slogan NEG@3x.png
 delete mode 100644 public/develop/images/logos/OpenCAPIF.png
 delete mode 100644 public/develop/images/logos/OpenCAPIF.webp
 delete mode 100644 public/develop/images/logos/OpenCAPIF_Small.png
 delete mode 100644 public/develop/images/logos/OpenCAPIF_Square.png
 delete mode 100644 public/develop/images/logos/OpenCAPIF_Square.webp

diff --git a/public/develop/architecture/index.html b/public/develop/architecture/index.html
index 61f4e7f..3a22561 100644
--- a/public/develop/architecture/index.html
+++ b/public/develop/architecture/index.html
@@ -282,7 +282,7 @@
 <p><img src="../images/logos/TeraFlowSDN_tr.png" alt="drawing" width="200"/></p>
 <h1 id="architecture"><strong>Architecture</strong></h1>
 <p>The CAPIF architecture has three main components, Register Service, Vault and CCF, which are represented in the following image:</p>
-<p><img alt="New Architecture" src="../images/architecture/New_Architecture.png" /></p>
+<p><img alt="New Architecture" src="./images/architecture/New_Architecture.png" /></p>
 <p>Each component is separated into different namespaces and all communications between them use Rest APIs.</p>
 <p>Apart from the communication between components, there are 2 other entities that can use them:</p>
 <ul>
diff --git a/public/develop/deployment_guide/configure_your_machine/configure_your_machine/index.html b/public/develop/deployment_guide/configure_your_machine/configure_your_machine/index.html
deleted file mode 100644
index 903ae6c..0000000
--- a/public/develop/deployment_guide/configure_your_machine/configure_your_machine/index.html
+++ /dev/null
@@ -1,403 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/configure_your_machine/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Configure your machine - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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">
-      
-    </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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Configure your machine
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-  <h1>Configure your machine</h1>
-
-<p>In this section, we describe how to configure a machine (physical or virtual) to be used as the deployment, execution, and development environment for the ETSI TeraFlowSDN controller. Choose your preferred environment below and follow the instructions provided.</p>
-<p><strong>NOTE</strong>: If you already have a remote physical server fitting the requirements specified in this section feel free to use it instead of deploying a local VM. Check <a href="./1.1.-Configure-your-Machine/1.1.1.-Physical-Server">1.1.1. Physical Server</a> for further details.</p>
-<p>Virtualization platforms tested are:
-  - <a href="./1.1.-Configure-your-Machine/1.1.1.-Physical-Server">1.1.1. Physical Server</a>
-  - <a href="./1.1.-Configure-your-Machine/1.1.2.-Oracle-Virtual-Box">1.1.2. Oracle Virtual Box</a>
-  - <a href="./1.1.-Configure-your-Machine/1.1.3.-VMWare-Fusion">1.1.3. VMWare Fusion</a>
-  - <a href="./1.1.-Configure-your-Machine/1.1.4.-OpenStack">1.1.4. OpenStack</a>
-  - <a href="./1.1.-Configure-your-Machine/1.1.5.-Vagrant-Box">1.1.5. Vagrant Box</a></p>
-<p>Other virtualization environments might be used; in that case, you will need to adapt these instructions to your particular case. If you want to contribute with details on how you used other hypervisors or platforms, <a href="https://labs.etsi.org/rep/tfs/controller/-/wikis/home#contact">contact</a> the TFS team through Slack.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/configure_your_machine/openstack/index.html b/public/develop/deployment_guide/configure_your_machine/openstack/index.html
deleted file mode 100644
index 7a04089..0000000
--- a/public/develop/deployment_guide/configure_your_machine/openstack/index.html
+++ /dev/null
@@ -1,494 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/openstack/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Openstack - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#create-a-security-group-in-openstack" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Openstack
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-<p>This page describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using <a href="https://www.openstack.org/">OpenStack</a>. It has been tested with OpenStack Kolla up to Yoga version. </p>
-<h1 id="create-a-security-group-in-openstack">Create a Security Group in OpenStack</h1>
-<p>In OpenStack, go to Project - Network - Security Groups - Create Security Group with name TFS</p>
-<p>Add the following rules:</p>
-<table>
-<thead>
-<tr>
-<th>Direction</th>
-<th>Ether Type</th>
-<th>IP Protocol</th>
-<th>Port Range</th>
-<th>Remote IP Prefix</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>Ingress</td>
-<td>IPv4</td>
-<td>TCP</td>
-<td>22 (SSH)</td>
-<td>0.0.0.0/0</td>
-</tr>
-<tr>
-<td>Ingress</td>
-<td>IPv4</td>
-<td>TCP</td>
-<td>2200</td>
-<td>0.0.0.0/0</td>
-</tr>
-<tr>
-<td>Ingress</td>
-<td>IPv4</td>
-<td>TCP</td>
-<td>8080</td>
-<td>0.0.0.0/0</td>
-</tr>
-<tr>
-<td>Ingress</td>
-<td>IPv4</td>
-<td>TCP</td>
-<td>80</td>
-<td>0.0.0.0/0</td>
-</tr>
-<tr>
-<td>Egress</td>
-<td>IPv4</td>
-<td>Any</td>
-<td>Any</td>
-<td>0.0.0.0/0</td>
-</tr>
-<tr>
-<td>Egress</td>
-<td>IPv6</td>
-<td>Any</td>
-<td>Any</td>
-<td>::/0</td>
-</tr>
-</tbody>
-</table>
-<p><strong>Note</strong>: The IP address will be assigned depending on the network you have configured inside OpenStack. This IP will have to be modified in TeraFlow configuration files which by default use IP 10.0.2.10</p>
-<h1 id="create-a-flavour">Create a flavour</h1>
-<h2 id="from-dashboard-horizon">From dashboard (Horizon)</h2>
-<p>Go to Admin - Compute - Flavors and press Create Flavor</p>
-<ul>
-<li>Name: TFS</li>
-<li>VCPUs: 4</li>
-<li>RAM (MB): 8192</li>
-<li>Root Disk (GB): 60</li>
-</ul>
-<h2 id="from-cli">From CLI</h2>
-<pre><code> openstack flavor create TFS --id auto --ram 8192 --disk 60 --vcpus 8
-</code></pre>
-<h1 id="create-an-instance-in-openstack">Create an instance in OpenStack:</h1>
-<ul>
-<li>Instance name: TFS-VM</li>
-<li>Origin: [Ubuntu-22.04 cloud image] (https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img)</li>
-<li>Create new volume: No</li>
-<li>Flavor: TFS</li>
-<li>Networks: extnet </li>
-<li>Security Groups: TFS</li>
-<li>Configuration: Include the following cloud-config</li>
-</ul>
-<pre><code>#cloud-config
-# Modifies the password for the VM instance
-username: ubuntu
-password: &lt;your-password&gt;
-chpasswd: { expire: False }
-ssh_pwauth: True
-</code></pre>
-<h2 id="upgrade-the-ubuntu-distribution">Upgrade the Ubuntu distribution</h2>
-<pre><code class="language-bash">sudo apt-get update -y
-sudo apt-get dist-upgrade -y
-</code></pre>
-<ul>
-<li>If asked to restart services, restart the default ones proposed.</li>
-<li>Restart the VM when the installation is completed.</li>
-</ul>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/configure_your_machine/oracle_virtual_box/index.html b/public/develop/deployment_guide/configure_your_machine/oracle_virtual_box/index.html
deleted file mode 100644
index da54276..0000000
--- a/public/develop/deployment_guide/configure_your_machine/oracle_virtual_box/index.html
+++ /dev/null
@@ -1,542 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/oracle_virtual_box/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Oracle virtual box - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#create-a-nat-network-in-virtualbox" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Oracle virtual box
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-<p>This page describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using <a href="https://www.virtualbox.org/">Oracle VirtualBox</a>. It has been tested with VirtualBox up to version 6.1.40 r154048.</p>
-<h1 id="create-a-nat-network-in-virtualbox">Create a NAT Network in VirtualBox</h1>
-<p>In "Oracle VM VirtualBox Manager", Menu "File &gt; Preferences... &gt; Network", create a NAT 
-network with the following specifications:</p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>CIDR</th>
-<th>DHCP</th>
-<th>IPv6</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>TFS-NAT-Net</td>
-<td>10.0.2.0/24</td>
-<td>Disabled</td>
-<td>Disabled</td>
-</tr>
-</tbody>
-</table>
-<p>Within the newly created "TFS-NAT-Net" NAT network, configure the following IPv4 
-forwarding rules:</p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Protocol</th>
-<th>Host IP</th>
-<th>Host Port</th>
-<th>Guest IP</th>
-<th>Guest Port</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>SSH</td>
-<td>TCP</td>
-<td>127.0.0.1</td>
-<td>2200</td>
-<td>10.0.2.10</td>
-<td>22</td>
-</tr>
-<tr>
-<td>HTTP</td>
-<td>TCP</td>
-<td>127.0.0.1</td>
-<td>8080</td>
-<td>10.0.2.10</td>
-<td>80</td>
-</tr>
-</tbody>
-</table>
-<p><strong>Note</strong>: IP address 10.0.2.10 is the one that will be assigned to the VM.</p>
-<h1 id="create-vm-in-virtualbox">Create VM in VirtualBox:</h1>
-<ul>
-<li>Name: TFS-VM</li>
-<li>Type/Version: Linux / Ubuntu (64-bit)</li>
-<li>CPU (*): 4 vCPUs @ 100% execution capacity</li>
-<li>RAM: 8 GB</li>
-<li>Disk: 60 GB, Virtual Disk Image (VDI), Dynamically allocated</li>
-<li>Optical Drive ISO Image: "ubuntu-22.04.X-live-server-amd64.iso"</li>
-<li>Download the latest Long Term Support (LTS) version of the <em>Ubuntu Server</em> image from <a href="https://releases.ubuntu.com/22.04/">Ubuntu 22.04 LTS</a>, e.g., "ubuntu-22.04.X-live-server-amd64.iso".</li>
-<li><strong>Note</strong>: use Ubuntu Server image instead of Ubuntu Desktop to create a lightweight VM.</li>
-<li>Network Adapter 1 (*): enabled, attached to NAT Network "TFS-NAT-Net"</li>
-<li>Minor adjustments (*):</li>
-<li>Audio: disabled</li>
-<li>Boot order: disable "Floppy"</li>
-</ul>
-<p><strong>Note</strong>: (*) settings to be editing after the VM is created.</p>
-<h1 id="install-ubuntu-2204-lts-operating-system">Install Ubuntu 22.04 LTS Operating System</h1>
-<p>In "Oracle VM VirtualBox Manager", start the VM in normal mode, and follow the 
-installation procedure.
-Below we provide some installation guidelines:
-- Installation Language: English
-- Autodetect your keyboard
-- If asked, select "Ubuntu Server" (do not select "Ubuntu Server (minimized)").
-- Configure static network specifications:</p>
-<table>
-<thead>
-<tr>
-<th>Interface</th>
-<th>IPv4 Method</th>
-<th>Subnet</th>
-<th>Address</th>
-<th>Gateway</th>
-<th>Name servers</th>
-<th>Search domains</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>enp0s3</td>
-<td>Manual</td>
-<td>10.0.2.0/24</td>
-<td>10.0.2.10</td>
-<td>10.0.2.1</td>
-<td>8.8.8.8,8.8.4.4</td>
-<td><empty></td>
-</tr>
-</tbody>
-</table>
-<ul>
-<li>Leave proxy and mirror addresses as they are</li>
-<li>Let the installer self-upgrade (if asked).</li>
-<li>Use an entire disk for the installation</li>
-<li>Disable setup of the disk as LVM group</li>
-<li>Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.</li>
-<li>Configure your user and system names:</li>
-<li>User name: TeraFlowSDN</li>
-<li>Server's name: tfs-vm</li>
-<li>Username: tfs</li>
-<li>Password: tfs123</li>
-<li>Install Open SSH Server</li>
-<li>Import SSH keys, if any.</li>
-<li>Featured Server Snaps</li>
-<li>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</li>
-<li>Let the system install and upgrade the packages.</li>
-<li>This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</li>
-<li>Restart the VM when the installation is completed.</li>
-</ul>
-<h2 id="upgrade-the-ubuntu-distribution">Upgrade the Ubuntu distribution</h2>
-<pre><code class="language-bash">sudo apt-get update -y
-sudo apt-get dist-upgrade -y
-</code></pre>
-<ul>
-<li>If asked to restart services, restart the default ones proposed.</li>
-<li>Restart the VM when the installation is completed.</li>
-</ul>
-<h2 id="install-virtualbox-guest-additions">Install VirtualBox Guest Additions</h2>
-<p>On VirtualBox Manager, open the VM main screen. If you are running the VM in headless 
-mode, right click over the VM in the VirtualBox Manager window and click "Show".
-If a dialog informing about how to leave the interface of the VM is shown, confirm 
-pressing "Switch" button. The interface of the VM should appear.</p>
-<p>Click menu "Device &gt; Insert Guest Additions CD image..."</p>
-<p>On the VM terminal, type:</p>
-<pre><code class="language-bash">sudo apt-get install -y linux-headers-$(uname -r) build-essential dkms
-  # This command might take some minutes depending on your VM specs and your Internet access speed.
-sudo mount /dev/cdrom /mnt/
-cd /mnt/
-sudo ./VBoxLinuxAdditions.run
-  # This command might take some minutes depending on your VM specs.
-sudo reboot
-</code></pre>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/configure_your_machine/physical_server/index.html b/public/develop/deployment_guide/configure_your_machine/physical_server/index.html
deleted file mode 100644
index 09f63ab..0000000
--- a/public/develop/deployment_guide/configure_your_machine/physical_server/index.html
+++ /dev/null
@@ -1,492 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/physical_server/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Physical server - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#server-specifications" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Physical server
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-<p>This page describes how to configure a physical server for running ETSI TeraFlowSDN(TFS) controller.</p>
-<h1 id="server-specifications">Server Specifications</h1>
-<h4 id="minimum-server-specifications-for-development-and-basic-deployment">Minimum Server Specifications for development and basic deployment</h4>
-<ul>
-<li>CPU: 4 cores</li>
-<li>RAM: 8 GB</li>
-<li>Disk: 60 GB</li>
-<li>1 GbE NIC</li>
-</ul>
-<h4 id="recommended-server-specifications-for-development-and-basic-deployment">Recommended Server Specifications for development and basic deployment</h4>
-<ul>
-<li>CPU: 6 cores</li>
-<li>RAM: 12 GB</li>
-<li>Disk: 80 GB</li>
-<li>1 GbE NIC</li>
-</ul>
-<h4 id="server-specifications-for-best-development-and-deployment-experience">Server Specifications for best development and deployment experience</h4>
-<ul>
-<li>CPU: 8 cores</li>
-<li>RAM: 32 GB</li>
-<li>Disk: 120 GB</li>
-<li>1 GbE NIC</li>
-</ul>
-<p><strong>NOTE</strong>: the specifications listed above are provided as a reference. They depend also on the CPU clock frequency, the RAM memory, the disk technology and speed, etc.</p>
-<p>For development purposes, it is recommended to run the VSCode IDE (or the IDE of your choice) in a more powerful server, for instance, the recommended server specifications for development and basic deployment.</p>
-<p>Given that TeraFlowSDN follows a micro-services architecture, for the deployment, it might be better to use many clusterized servers with many slower cores than a single server with few highly performant cores.</p>
-<h1 id="clusterized-deployment">Clusterized Deployment</h1>
-<p>You might consider creating a cluster of machines each featuring, at least, the minimum server specifications. That solution brings you scalability in the future.</p>
-<h1 id="networking">Networking</h1>
-<p>No explicit indications are given in terms of networking besides that servers need access to the Internet for downloading dependencies, binaries, and packages while building and deploying the TeraFlowSDN components.</p>
-<p>Besides that, the network requirements are essentially the same than that required for running a classical Kubernetes environment. To facilitate the deployment, we extensively use <a href="https://microk8s.io/">MicroK8s</a>, thus the network requirements are, essentially, the same demanded by MicroK8s, especially, if you consider creating a Kubernetes cluster.</p>
-<p>As a reference, the other deployment solutions based on VMs assume the VM is connected to a virtual network configured with the IP range <code>10.0.2.0/24</code> and have the gateway at IP <code>10.0.2.1</code>. The VMs have the IP address <code>10.0.2.10</code>.</p>
-<p>The minimum required ports to be accessible are:
-- 22/SSH     : for management purposes
-- 80/HTTP    : for the TeraFlowSDN WebUI and Grafana dashboard
-- 8081/HTTPS : for the CockroachDB WebUI</p>
-<p>Other ports might be required if you consider to deploy addons such as Kubernetes observability, etc. The details on these ports are left appart given they might vary depending on the Kubernetes environment you use.</p>
-<h1 id="operating-system">Operating System</h1>
-<p>The recommended Operating System for deploying TeraFlowSDN is <a href="https://releases.ubuntu.com/jammy/">Ubuntu Server 22.04 LTS</a> or <a href="https://releases.ubuntu.com/focal/">Ubuntu Server 20.04 LTS</a>. Other version might work, but we have not tested them. We strongly recommend using Long Term Support (LTS) versions as they provide better stability.</p>
-<p>Below we provide some installation guidelines:
-- Installation Language: English
-- Autodetect your keyboard
-- If asked, select "Ubuntu Server" (do not select "Ubuntu Server (minimized)").
-- Configure static network specifications (adapt them based on your particular setup):</p>
-<table>
-<thead>
-<tr>
-<th>Interface</th>
-<th>IPv4 Method</th>
-<th>Subnet</th>
-<th>Address</th>
-<th>Gateway</th>
-<th>Name servers</th>
-<th>Search domains</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>enp0s3</td>
-<td>Manual</td>
-<td>10.0.2.0/24</td>
-<td>10.0.2.10</td>
-<td>10.0.2.1</td>
-<td>8.8.8.8,8.8.4.4</td>
-<td><empty></td>
-</tr>
-</tbody>
-</table>
-<ul>
-<li>Leave proxy and mirror addresses as they are</li>
-<li>Let the installer self-upgrade (if asked).</li>
-<li>Use an entire disk for the installation</li>
-<li>Disable setup of the disk as LVM group</li>
-<li>Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.</li>
-<li>Configure your user and system names:</li>
-<li>User name: <code>TeraFlowSDN</code></li>
-<li>Server's name: <code>tfs-vm</code></li>
-<li>Username: <code>tfs</code></li>
-<li>Password: <code>tfs123</code></li>
-<li>Install Open SSH Server</li>
-<li>Import SSH keys, if any.</li>
-<li>Featured Server Snaps</li>
-<li>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</li>
-<li>Let the system install and upgrade the packages.</li>
-<li>This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</li>
-<li>Restart the VM when the installation is completed.</li>
-</ul>
-<h2 id="upgrade-the-ubuntu-distribution">Upgrade the Ubuntu distribution</h2>
-<pre><code class="language-bash">sudo apt-get update -y
-sudo apt-get dist-upgrade -y
-</code></pre>
-<ul>
-<li>If asked to restart services, restart the default ones proposed.</li>
-<li>Restart the VM when the installation is completed.</li>
-</ul>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/configure_your_machine/vagrant_box/index.html b/public/develop/deployment_guide/configure_your_machine/vagrant_box/index.html
deleted file mode 100644
index 91cb3de..0000000
--- a/public/develop/deployment_guide/configure_your_machine/vagrant_box/index.html
+++ /dev/null
@@ -1,615 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/vagrant_box/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Vagrant box - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#virtual-machine-specifications" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Vagrant box
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-<p>This page describes how to create a Vagrant Box, using the base virtual machine configured in <a href="./1.1.2.-Oracle-Virtual-Box">Oracle Virtual Box</a>.</p>
-<h1 id="virtual-machine-specifications">Virtual Machine specifications</h1>
-<p>Most of the specifications can be as specified in the <a href="./1.1.2.-Oracle-Virtual-Box">Oracle Virtual Box</a> page, however, there are a few particularities to Vagrant that must be accommodated, such as:
-- Virtual Hard Disk
-  - Size: 60GB (at least)
-  - <strong>Type</strong>: VMDK</p>
-<p><img alt="spaces_huDzAu5hmjUdNzCGBBbL_uploads_jrerlmLyZWi5f2Tzb7xY_Screenshot_from_2023-07-10_18-13-43" src="uploads/23ff9a3d6884646f7859a29d8f5ab934/spaces_huDzAu5hmjUdNzCGBBbL_uploads_jrerlmLyZWi5f2Tzb7xY_Screenshot_from_2023-07-10_18-13-43.webp" /></p>
-<p>Also, before initiating the VM and installing the OS, we'll need to:
-- Disable Floppy in the 'Boot Order'
-- Disable audio
-- Disable USB
-- Ensure Network Adapter 1 is set to NAT</p>
-<h1 id="network-configurations">Network configurations</h1>
-<p>At Network Adapt 1, the following port-forwarding rule must be set.</p>
-<table>
-<thead>
-<tr>
-<th>Name</th>
-<th>Protocol</th>
-<th>Host IP</th>
-<th>Host Port</th>
-<th>Guest IP</th>
-<th>Guest Port</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>SSH</td>
-<td>TCP</td>
-<td></td>
-<td><strong>2222</strong></td>
-<td></td>
-<td>22</td>
-</tr>
-</tbody>
-</table>
-<p><img alt="Screenshot_from_2023-07-10_18-25-18" src="uploads/ced8e7b1133d6831e0c203801b6ba448/Screenshot_from_2023-07-10_18-25-18.png" /></p>
-<h1 id="installing-the-os">Installing the OS</h1>
-<p>For a Vagrant Box, it is generally suggested that the ISO's server version is used, as it is intended to be used via SSH, and any web GUI is expected to be forwarded to the host.</p>
-<p><img alt="Screenshot_from_2023-07-10_18-41-49" src="uploads/063d318dba47b72856ebb6d9a9b4390e/Screenshot_from_2023-07-10_18-41-49.png" /></p>
-<p><img alt="Screenshot_from_2023-07-10_18-42-30" src="uploads/9e3879f84786c891af526cbea2de58e7/Screenshot_from_2023-07-10_18-42-30.png" /></p>
-<p><img alt="Screenshot_from_2023-07-10_18-42-45" src="uploads/e615cc7a5e03623ffdf62a310ca86cd6/Screenshot_from_2023-07-10_18-42-45.png" /></p>
-<p>Make sure the disk is not configured as an LVM group!</p>
-<p><img alt="Screenshot_from_2023-07-10_18-43-16" src="uploads/7ab80c83d6c01c255969f4da1691eb85/Screenshot_from_2023-07-10_18-43-16.png" /></p>
-<h2 id="vagrant-ser">Vagrant ser</h2>
-<p>Vagrant expects by default, that in the box's OS exists the user <code>vagrant</code> with the password also being <code>vagrant</code>.</p>
-<p><img alt="Screenshot_from_2023-07-10_18-54-12" src="uploads/39e1b5868733d40c12d86bdde165ede0/Screenshot_from_2023-07-10_18-54-12.png" /></p>
-<h2 id="ssh">SSH</h2>
-<p>Vagrant uses SSH to connect to the boxes, so installing it now will save the hassle of doing it later.</p>
-<p><img alt="Screenshot_from_2023-07-10_18-54-48" src="uploads/5ecded27ab7966a4748ea5c25f98ab13/Screenshot_from_2023-07-10_18-54-48.png" /></p>
-<h2 id="features-server-snaps">Features server snaps</h2>
-<p>Do not install featured server snaps. It will be done manually <a href="./1.-Deployment-Guide/1.2.-Install-Microk8s">later</a> to illustrate how to uninstall and reinstall them in case of trouble with.</p>
-<h2 id="updates">Updates</h2>
-<p>Let the system install and upgrade the packages. This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</p>
-<h2 id="upgrade-the-ubuntu-distribution">Upgrade the Ubuntu distribution</h2>
-<pre><code class="language-bash">sudo apt-get update -y
-sudo apt-get dist-upgrade -y
-</code></pre>
-<ul>
-<li>If asked to restart services, restart the default ones proposed.</li>
-<li>Restart the VM when the installation is completed.</li>
-</ul>
-<h3 id="install-virtualbox-guest-additions">Install VirtualBox Guest Additions</h3>
-<p>On VirtualBox Manager, open the VM main screen. If you are running the VM in headless 
-mode, right-click over the VM in the VirtualBox Manager window, and click "Show".
-If a dialog informing about how to leave the interface of the VM is shown, confirm 
-by pressing the "Switch" button. The interface of the VM should appear.</p>
-<p>Click the menu "Device &gt; Insert Guest Additions CD image..."</p>
-<p>On the VM terminal, type:</p>
-<pre><code class="language-bash">sudo apt-get install -y linux-headers-$(uname -r) build-essential dkms
-  # This command might take some minutes depending on your VM specs and your Internet access speed.
-sudo mount /dev/cdrom /mnt/
-cd /mnt/
-sudo ./VBoxLinuxAdditions.run
-  # This command might take some minutes depending on your VM specs.
-sudo reboot
-</code></pre>
-<h1 id="etsi-tfs-installation">ETSI TFS Installation</h1>
-<p>After this, proceed to <a href="./1.-Deployment-Guide/1.2.-Install-Microk8s">1.2. Install Microk8s</a>, after which, return to this wiki to finish the Vagrant Box creation.</p>
-<h1 id="box-configuration-and-creation">Box configuration and creation</h1>
-<p>Make sure the ETSI TFS controller is correctly configured. <strong>You will not be able to change it after!</strong></p>
-<p>It is advisable to do the next configurations from a host's terminal, via a SSH connection.</p>
-<pre><code class="language-bash">ssh -p 2222 vagrant@127.0.0.1
-</code></pre>
-<h2 id="set-root-password">Set root password</h2>
-<p>Set the root password to <code>vagrant</code>.</p>
-<pre><code class="language-bash">sudo passwd root
-</code></pre>
-<h2 id="set-the-superuser">Set the superuser</h2>
-<p>Set up the Vagrant user so that it’s able to use sudo without being prompted for a password.
-Anything in the <code>/etc/sudoers.d/*</code> directory is included in the sudoers privileges when created by the root user.
-Create a new sudo file.</p>
-<pre><code class="language-bash">sudo visudo -f /etc/sudoers.d/vagrant
-</code></pre>
-<p>and add the following lines</p>
-<pre><code class="language-text"># add vagrant user
-vagrant ALL=(ALL) NOPASSWD:ALL
-</code></pre>
-<p>You can now test that it works by running a simple command.</p>
-<pre><code class="language-bash">sudo pwd
-</code></pre>
-<p>Issuing this command should result in an immediate response without a request for a password.</p>
-<h2 id="install-the-vagrant-key">Install the Vagrant key</h2>
-<p>Vagrant uses a default set of SSH keys for you to directly connect to boxes via the CLI command <code>vagrant ssh</code>, after which it creates a new set of SSH keys for your new box. Because of this, we need to load the default key to be able to access the box after created.</p>
-<pre><code class="language-bash">chmod 0700 /home/vagrant/.ssh
-wget --no-check-certificate https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys
-chmod 0600 /home/vagrant/.ssh/authorized_keys
-chown -R vagrant /home/vagrant/.ssh
-</code></pre>
-<h2 id="configure-the-openssh-server">Configure the OpenSSH Server</h2>
-<p>Edit the <code>/etc/ssh/sshd_config</code> file:</p>
-<pre><code class="language-bash">sudo vim /etc/ssh/sshd_config
-</code></pre>
-<p>And uncomment the following line:</p>
-<pre><code class="language-bash">AuthorizedKeysFile %h/.ssh/authorized_keys
-</code></pre>
-<p>Then restart SSH.</p>
-<pre><code class="language-bash">sudo service ssh restart
-</code></pre>
-<h2 id="package-the-box">Package the box</h2>
-<p>Before you package the box, if you intend to make your box public, it is best to clean your bash history with:</p>
-<pre><code class="language-bash">history -c
-</code></pre>
-<p>Exit the SSH connection, and <strong>at you're host machine</strong>, package the VM:</p>
-<pre><code class="language-bash">vagrant package --base teraflowsdncontroller --output teraflowsdncontroller.box
-</code></pre>
-<h2 id="test-run-the-box">Test run the box</h2>
-<p>Add the base box to you local Vagrant box list:</p>
-<pre><code class="language-bash">vagrant box add --name teraflowsdncontroller ./teraflowsdncontroller.box
-</code></pre>
-<p>Now you should try to run it, for that you'll need to create a <strong>Vagrantfile</strong>. For a simple run, this is the minimal required code for this box:</p>
-<pre><code class="language-ruby"># -*- mode: ruby -*-
-# vi: set ft=ruby :
-
-Vagrant.configure(&quot;2&quot;) do |config|
-  config.vm.box = &quot;teraflowsdncontroller&quot;
-  config.vm.box_version = &quot;1.1.0&quot;
-  config.vm.network :forwarded_port, host: 8080 ,guest: 80
-end
-</code></pre>
-<p>Now you'll be able to spin up the virtual machine by issuing the command:</p>
-<pre><code class="language-bash">vagrant up
-</code></pre>
-<p>And connect to the machine using:</p>
-<pre><code class="language-bash">vagrant ssh
-</code></pre>
-<h1 id="pre-configured-boxes">Pre-configured boxes</h1>
-<p>If you do not wish to create your own Vagrant Box, you can use one of the existing ones created by TFS contributors.
-- <a href="https://app.vagrantup.com/davidjosearaujo/boxes/teraflowsdncontroller">davidjosearaujo/teraflowsdncontroller</a>
-- ... <!-- Should create and host one at ETSI!! --></p>
-<p>To use them, you simply have to create a Vagrantfile and run <code>vagrant up controller</code> in the same directory. The following example Vagrantfile already allows you to do just that, with the bonus of exposing the multiple management GUIs to your <code>localhost</code>.</p>
-<pre><code class="language-ruby">Vagrant.configure(&quot;2&quot;) do |config|
-
-  config.vm.define &quot;controller&quot; do |controller|
-    controller.vm.box = &quot;davidjosearaujo/teraflowsdncontroller&quot;
-    controller.vm.network &quot;forwarded_port&quot;, guest: 80, host: 8080     # WebUI
-    controller.vm.network &quot;forwarded_port&quot;, guest: 8084, host: 50750  # Linkerd Viz Dashboard
-    controller.vm.network &quot;forwarded_port&quot;, guest: 8081, host: 8081   # CockroachDB Dashboard
-    controller.vm.network &quot;forwarded_port&quot;, guest: 8222, host: 8222   # NATS Dashboard
-    controller.vm.network &quot;forwarded_port&quot;, guest: 9000, host: 9000   # QuestDB Dashboard
-    controller.vm.network &quot;forwarded_port&quot;, guest: 9090, host: 9090   # Prometheus Dashboard
-
-    # Setup Linkerd Viz reverse proxy
-    ## Copy config file
-    controller.vm.provision &quot;file&quot; do |f|
-      f.source = &quot;./reverse-proxy-linkerdviz.sh&quot;
-      f.destination = &quot;./reverse-proxy-linkerdviz.sh&quot;
-    end
-    ## Execute configuration file
-    controller.vm.provision &quot;shell&quot; do |s|
-      s.inline = &quot;chmod +x ./reverse-proxy-linkerdviz.sh &amp;&amp; ./reverse-proxy-linkerdviz.sh&quot;
-    end
-
-    # Update controller source code to the desired branch
-    if ENV['BRANCH'] != nil
-      controller.vm.provision &quot;shell&quot; do |s|
-        s.inline = &quot;cd ./tfs-ctrl &amp;&amp; git pull &amp;&amp; git switch &quot; + ENV['BRANCH']
-      end
-    end
-
-  end
-end
-</code></pre>
-<p>This Vagrantfile also allows for <strong>optional repository updates</strong> on startup by running the command with a specified environment variable <code>BRANCH</code></p>
-<pre><code class="language-bash">BRANCH=develop vagrant up controller
-</code></pre>
-<h2 id="linkerd-dns-rebinding-bypass">Linkerd DNS rebinding bypass</h2>
-<p>Because of Linkerd's security measures against DNS rebinding, a reverse proxy, that modifies the request's header <code>Host</code> field, is needed to expose the GUI to the host. The previous Vagrantfile already deploys such configurations, for that, all you need to do is create the <code>reverse-proxy-linkerdviz.sh</code> file in the same directory. The content of this file is displayed below.</p>
-<pre><code class="language-bash"># Install NGINX
-sudo apt update &amp;&amp; sudo apt install nginx -y
-
-# NGINX reverse proxy configuration
-echo 'server {
-    listen 8084;
-
-    location / {
-        proxy_pass http://127.0.0.1:50750;
-        proxy_set_header Host localhost;
-        proxy_set_header X-Real-IP $remote_addr;
-        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-        proxy_set_header X-Forwarded-Proto $scheme;
-    }
-}' &gt; /home/vagrant/expose-linkerd
-
-# Create symlink of the NGINX configuration file
-sudo ln -s /home/vagrant/expose-linkerd /etc/nginx/sites-enabled/
-
-# Commit the reverse proxy configurations
-sudo systemctl restart nginx
-
-# Enable start on login
-echo &quot;linkerd viz dashboard &amp;&quot; &gt;&gt; .profile
-
-# Start dashboard
-linkerd viz dashboard &amp;
-
-echo &quot;Linkerd Viz dashboard running!&quot;
-</code></pre>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/configure_your_machine/vm_ware_fusion/index.html b/public/develop/deployment_guide/configure_your_machine/vm_ware_fusion/index.html
deleted file mode 100644
index 119a76c..0000000
--- a/public/develop/deployment_guide/configure_your_machine/vm_ware_fusion/index.html
+++ /dev/null
@@ -1,447 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/vm_ware_fusion/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Vm ware fusion - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#create-vm-in-vmware-fusion" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Vm ware fusion
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-<p>This page describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using <a href="https://www.vmware.com/products/fusion.html">VMWare Fusion</a>. It has been tested with VMWare Fusion version 12 and 13.</p>
-<h1 id="create-vm-in-vmware-fusion">Create VM in VMWare Fusion:</h1>
-<p>In "VMWare Fusion" manager, create a new network from the "Settings/Network" menu.</p>
-<ul>
-<li>Unlock to make changes</li>
-<li>Press the + icon and create a new network</li>
-<li>Change the name to TFS-NAT-Net</li>
-<li>Check "Allow virtual machines on this network to connect to external network (NAT)"</li>
-<li>Do not check "Enable IPv6"</li>
-<li>Add port forwarding for HTTP and SSH</li>
-<li>Uncheck "Provide address on this network via DHCP"</li>
-</ul>
-<p>Create a new VM an Ubuntu 22.04.1 ISO:</p>
-<ul>
-<li>Display Name: TeraFlowSDN</li>
-<li>Username: tfs</li>
-<li>Password: tfs123</li>
-</ul>
-<p>On the next screen press "Customize Settings", save the VM and in "Settings" change:
-- Change to use 4 CPUs
-- Change to access 8 GB of RAM
-- Change disk to size 60 GB
-- Change the network interface to use the previously created TFS-NAT-Net</p>
-<p>Run the VM to start the installation.</p>
-<h1 id="install-ubuntu-22041-lts-operating-system">Install Ubuntu 22.04.1 LTS Operating System</h1>
-<p>The installation will be automatic, without any configuration required.</p>
-<ul>
-<li>Configure the guest IP, gateway and DNS:</li>
-</ul>
-<p>Using the Network Settings for the wired connection, set the IP to 10.0.2.10,
-  the mask to 255.255.255.0, the gateway to 10.0.2.2 and the DNS to 10.0.2.2.</p>
-<ul>
-<li>Disable and remove swap file:</li>
-</ul>
-<p>$ sudo swapoff -a
-  $ sudo rm /swapfile</p>
-<p>Then you can remove or comment the /swapfile entry in /etc/fstab</p>
-<ul>
-<li>Install Open SSH Server</li>
-<li>
-<p>Import SSH keys, if any.</p>
-</li>
-<li>
-<p>Restart the VM when the installation is completed.</p>
-</li>
-</ul>
-<h1 id="upgrade-the-ubuntu-distribution">Upgrade the Ubuntu distribution</h1>
-<pre><code class="language-bash">sudo apt-get update -y
-sudo apt-get dist-upgrade -y
-</code></pre>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/index.html b/public/develop/deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/index.html
deleted file mode 100644
index c66c0be..0000000
--- a/public/develop/deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/index.html
+++ /dev/null
@@ -1,536 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>deploy TeraFlowSDN - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#install-prerequisites" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              deploy TeraFlowSDN
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-  <h1>deploy TeraFlowSDN</h1>
-
-<p>This section describes how to deploy TeraFlowSDN controller on top of MicroK8s using the 
-environment configured in the previous sections.</p>
-<h2 id="install-prerequisites">Install prerequisites</h2>
-<pre><code class="language-bash">sudo apt-get install -y git curl jq
-</code></pre>
-<h2 id="clone-the-git-repository-of-the-teraflowsdn-controller">Clone the Git repository of the TeraFlowSDN controller</h2>
-<p>Clone from ETSI-hosted GitLab code repository:</p>
-<pre><code class="language-bash">mkdir ~/tfs-ctrl
-git clone https://labs.etsi.org/rep/tfs/controller.git ~/tfs-ctrl
-</code></pre>
-<p><strong>Important</strong>: The original H2020-TeraFlow project hosted on GitLab.com has been 
-archieved and will not receive further contributions/updates.
-Please, clone from <a href="https://labs.etsi.org/rep/tfs/controller">ETSI-hosted GitLab code repository</a>.</p>
-<h2 id="checkout-the-appropriate-git-branch">Checkout the appropriate Git branch</h2>
-<p>TeraFlowSDN controller versions can be found in the appropriate release tags and/or branches as described in <a href="/Home#versions">Home &gt; Versions</a>.</p>
-<p>By default the branch <em>master</em> is checked out and points to the latest stable version of the TeraFlowSDN controller, while branch <em>develop</em> contains the latest developments and contributions under test and validation.</p>
-<p>To switch to the appropriate branch run the following command, changing <code>develop</code> by the name of the branch you want to deploy:</p>
-<pre><code class="language-bash">cd ~/tfs-ctrl
-git checkout develop
-</code></pre>
-<h2 id="prepare-a-deployment-script-with-the-deployment-settings">Prepare a deployment script with the deployment settings</h2>
-<p>Create a new deployment script, e.g., <code>my_deploy.sh</code>, adding the appropriate settings as 
-follows.
-This section provides just an overview of the available settings. An example <a href="https://labs.etsi.org/rep/tfs/controller/-/blob/master/my_deploy.sh"><code>my_deploy.sh</code></a> script is provided in the root folder of the project for your convenience with full description of all the settings.</p>
-<p><strong>Note</strong>: The example <code>my_deploy.sh</code> script provides reasonable settings for deploying a functional and complete enough TeraFlowSDN controller, and a brief description of their meaning. To see extended descriptions, check scripts in the <code>deploy</code> folder.</p>
-<pre><code class="language-bash">cd ~/tfs-ctrl
-tee my_deploy.sh &gt;/dev/null &lt;&lt; EOF
-# ----- TeraFlowSDN ------------------------------------------------------------
-export TFS_REGISTRY_IMAGES=&quot;http://localhost:32000/tfs/&quot;
-export TFS_COMPONENTS=&quot;context device ztp monitoring pathcomp service slice nbi webui load_generator&quot;
-export TFS_IMAGE_TAG=&quot;dev&quot;
-export TFS_K8S_NAMESPACE=&quot;tfs&quot;
-export TFS_EXTRA_MANIFESTS=&quot;manifests/nginx_ingress_http.yaml&quot;
-export TFS_GRAFANA_PASSWORD=&quot;admin123+&quot;
-export TFS_SKIP_BUILD=&quot;&quot;
-
-# ----- CockroachDB ------------------------------------------------------------
-export CRDB_NAMESPACE=&quot;crdb&quot;
-export CRDB_EXT_PORT_SQL=&quot;26257&quot;
-export CRDB_EXT_PORT_HTTP=&quot;8081&quot;
-export CRDB_USERNAME=&quot;tfs&quot;
-export CRDB_PASSWORD=&quot;tfs123&quot;
-export CRDB_DATABASE=&quot;tfs&quot;
-export CRDB_DEPLOY_MODE=&quot;single&quot;
-export CRDB_DROP_DATABASE_IF_EXISTS=&quot;YES&quot;
-export CRDB_REDEPLOY=&quot;&quot;
-
-# ----- NATS -------------------------------------------------------------------
-export NATS_NAMESPACE=&quot;nats&quot;
-export NATS_EXT_PORT_CLIENT=&quot;4222&quot;
-export NATS_EXT_PORT_HTTP=&quot;8222&quot;
-export NATS_REDEPLOY=&quot;&quot;
-
-# ----- QuestDB ----------------------------------------------------------------
-export QDB_NAMESPACE=&quot;qdb&quot;
-export QDB_EXT_PORT_SQL=&quot;8812&quot;
-export QDB_EXT_PORT_ILP=&quot;9009&quot;
-export QDB_EXT_PORT_HTTP=&quot;9000&quot;
-export QDB_USERNAME=&quot;admin&quot;
-export QDB_PASSWORD=&quot;quest&quot;
-export QDB_TABLE_MONITORING_KPIS=&quot;tfs_monitoring_kpis&quot;
-export QDB_TABLE_SLICE_GROUPS=&quot;tfs_slice_groups&quot;
-export QDB_DROP_TABLES_IF_EXIST=&quot;YES&quot;
-export QDB_REDEPLOY=&quot;&quot;
-
-EOF
-</code></pre>
-<p>The settings are organized in 4 sections:
-- Section <code>TeraFlowSDN</code>:
-  - <code>TFS_REGISTRY_IMAGE</code> enables to specify the private Docker registry to be used, by default, we assume to use the Docker respository enabled in MicroK8s.
-  - <code>TFS_COMPONENTS</code> specifies the components their Docker image will be rebuilt, uploaded to the private Docker registry, and deployed in Kubernetes.
-  - <code>TFS_IMAGE_TAG</code> defines the tag to be used for Docker images being rebuilt and uploaded to the private Docker registry.
-  - <code>TFS_K8S_NAMESPACE</code> specifies the name of the Kubernetes namespace to be used for deploying the TFS components.
-  - <code>TFS_EXTRA_MANIFESTS</code> enables to provide additional manifests to be applied into the Kubernetes environment during the deployment. Typical use case is to deploy ingress controllers, service monitors for Prometheus, etc.
-  - <code>TFS_GRAFANA_PASSWORD</code> lets you specify the password you want to use for the <code>admin</code> user of the Grafana instance being deployed and linked to the Monitoring component.
-  - <code>TFS_SKIP_BUILD</code>, if set to <code>YES</code>, prevents rebuilding the Docker images. That means, the deploy script will redeploy existing Docker images without rebuilding/updating them.</p>
-<ul>
-<li>Section <code>CockroachDB</code>: enables to configure the deployment of the backend <a href="https://www.cockroachlabs.com/">CockroachDB</a> database.</li>
-<li>
-<p>Check example script <a href="https://labs.etsi.org/rep/tfs/controller/-/blob/master/my_deploy.sh"><code>my_deploy.sh</code></a> for further details.</p>
-</li>
-<li>
-<p>Section <code>NATS</code>: enables to configure the deployment of the backend <a href="https://nats.io/">NATS</a> message broker.</p>
-</li>
-<li>
-<p>Check example script <a href="https://labs.etsi.org/rep/tfs/controller/-/blob/master/my_deploy.sh"><code>my_deploy.sh</code></a> for further details.</p>
-</li>
-<li>
-<p>Section <code>QuestDB</code>: enables to configure the deployment of the backend <a href="https://questdb.io/">QuestDB</a> timeseries database.</p>
-</li>
-<li>Check example script <a href="https://labs.etsi.org/rep/tfs/controller/-/blob/master/my_deploy.sh"><code>my_deploy.sh</code></a> for further details.</li>
-</ul>
-<h2 id="confirm-that-microk8s-is-running">Confirm that MicroK8s is running</h2>
-<p>Run the following command:</p>
-<pre><code class="language-bash">microk8s status
-</code></pre>
-<p>If it is reported <code>microk8s is not running, try microk8s start</code>, run the following command to start MicroK8s:</p>
-<pre><code class="language-bash">microk8s start
-</code></pre>
-<p>Confirm everything is up and running:</p>
-<ol>
-<li>Periodically <a href="/1.-Deployment-Guide/1.2.-Install-MicroK8s#check-status-of-kubernetes-and-addons">Check the status of Kubernetes</a> until you see the addons [dns, ha-cluster, helm3, hostpath-storage, ingress, registry, storage] in the enabled block.</li>
-<li>Periodically <a href="/1.-Deployment-Guide/1.2.-Install-MicroK8s#check-all-resources-in-kubernetes">Check Kubernetes resources</a> until all pods are <strong>Ready</strong> and <strong>Running</strong>.</li>
-</ol>
-<h2 id="deploy-tfs-controller">Deploy TFS controller</h2>
-<p>First, source the deployment settings defined in the previous section.
-This way, you do not need to specify the environment variables in each and every command you execute to operate the TFS controller.
-Be aware to re-source the file if you open new terminal sessions.
-Then, run the following command to deploy TeraFlowSDN controller on top of the MicroK8s Kubernetes platform.</p>
-<pre><code class="language-bash">cd ~/tfs-ctrl
-source my_deploy.sh
-./deploy/all.sh
-</code></pre>
-<p>The script performs the following steps:
-- Executes script <code>./deploy/crdb.sh</code> to automate deployment of CockroachDB database used by Context component.
-  - The script automatically checks if CockroachDB is already deployed.
-  - If there are settings instructing to drop the database and/or redeploy CockroachDB, it does the appropriate actions to honor them as defined in previous section.
-- Executes script <code>./deploy/nats.sh</code> to automate deployment of NATS message broker used by Context component.
-  - The script automatically checks if NATS is already deployed.
-  - If there are settings instructing to redeploy the message broker, it does the appropriate actions to honor them as defined in previous section.
-- Executes script <code>./deploy/qdb.sh</code> to automate deployment of QuestDB timeseries database used by Monitoring component.
-  - The script automatically checks if QuestDB is already deployed.
-  - If there are settings instructing to redeploy the timeseries database, it does the appropriate actions to honor them as defined in previous section.
-- Executes script <code>./deploy/tfs.sh</code> to automate deployment of TeraFlowSDN.
-  - Creates the namespace defined in <code>TFS_K8S_NAMESPACE</code>
-  - Creates secrets for CockroachDB, NATS, and QuestDB to be used by Context and Monitoring components.
-  - Builds the Docker images for the components defined in <code>TFS_COMPONENTS</code>
-  - Tags the Docker images with the value of <code>TFS_IMAGE_TAG</code>
-  - Pushes the Docker images to the repository defined in <code>TFS_REGISTRY_IMAGE</code>
-  - Deploys the components defined in <code>TFS_COMPONENTS</code>
-  - Creates the file <code>tfs_runtime_env_vars.sh</code> with the environment variables for the components defined in <code>TFS_COMPONENTS</code> defining their local host addresses and their port numbers.
-  - Applies extra manifests defined in <code>TFS_EXTRA_MANIFESTS</code> such as:
-    - Creating an ingress controller listening at port 80 for HTTP connections to enable external access to the TeraFlowSDN WebUI, Grafana Dashboards, and Compute NBI interfaces.
-    - Deploying service monitors to enable monitoring the performance of the components, device drivers and service handlers.
-  - Initialize and configure the Grafana dashboards (if Monitoring component is deployed)
-- Report a summary of the deployment
-  - See <a href="./1.5.-Show-Deployment-and-Logs">Show Deployment and Logs</a></p>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/install_micro_k8s/install_micro_k8s/index.html b/public/develop/deployment_guide/install_micro_k8s/install_micro_k8s/index.html
deleted file mode 100644
index 0a985a4..0000000
--- a/public/develop/deployment_guide/install_micro_k8s/install_micro_k8s/index.html
+++ /dev/null
@@ -1,548 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/install_micro_k8s/install_micro_k8s/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Install micro k8s - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#upgrade-the-ubuntu-distribution" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Install micro k8s
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-  <h1>Install micro k8s</h1>
-
-<p>This section describes how to deploy the MicroK8s Kubernetes platform and configure it 
-to be used with ETSI TeraFlowSDN controller.
-Besides, Docker is installed to build docker images for the ETSI TeraFlowSDN controller.</p>
-<p>The steps described in this section might take some minutes depending on your internet 
-connection speed and the resources assigned to your VM, or the specifications of your 
-physical server.</p>
-<p>To facilitate work, these steps are easier to be executed through an SSH connection, for instance using tools like <a href="https://www.putty.org/">PuTTY</a> or <a href="https://mobaxterm.mobatek.net/">MobaXterm</a>.</p>
-<h2 id="upgrade-the-ubuntu-distribution">Upgrade the Ubuntu distribution</h2>
-<p>Skip this step if you already did it during the creation of the VM.</p>
-<pre><code class="language-bash">sudo apt-get update -y
-sudo apt-get dist-upgrade -y
-</code></pre>
-<h2 id="install-prerequisites">Install prerequisites</h2>
-<pre><code class="language-bash">sudo apt-get install -y ca-certificates curl gnupg lsb-release snapd jq
-</code></pre>
-<h2 id="install-docker-ce">Install Docker CE</h2>
-<p>Install Docker CE and Docker BuildX plugin</p>
-<pre><code class="language-bash">sudo apt-get install -y docker.io docker-buildx
-</code></pre>
-<p><strong>NOTE</strong>: Starting from Docker v23, <a href="https://docs.docker.com/build/architecture/">Build architecture</a> has been updated and <code>docker build</code> command entered into deprecation process in favor of the new <code>docker buildx build</code> command. Package <code>docker-buildx</code> provides the new <code>docker buildx build</code> command.</p>
-<p>Add key "insecure-registries" with the private repository to the daemon configuration. It is done in two commands since
-sometimes read from and write to same file might cause trouble.</p>
-<pre><code class="language-bash">if [ -s /etc/docker/daemon.json ]; then cat /etc/docker/daemon.json; else echo '{}'; fi \
-    | jq 'if has(&quot;insecure-registries&quot;) then . else .+ {&quot;insecure-registries&quot;: []} end' -- \
-    | jq '.&quot;insecure-registries&quot; |= (.+ [&quot;localhost:32000&quot;] | unique)' -- \
-    | tee tmp.daemon.json
-sudo mv tmp.daemon.json /etc/docker/daemon.json
-sudo chown root:root /etc/docker/daemon.json
-sudo chmod 600 /etc/docker/daemon.json
-</code></pre>
-<p>Restart the Docker daemon</p>
-<pre><code class="language-bash">sudo systemctl restart docker
-</code></pre>
-<h2 id="install-microk8s">Install MicroK8s</h2>
-<p><strong>Important</strong>: Some TeraFlowSDN dependencies need to be executed on top of MicroK8s/Kubernetes v1.24. It is not guaranteed (by now) to run on newer versions.</p>
-<pre><code class="language-bash"># Install MicroK8s
-sudo snap install microk8s --classic --channel=1.24/stable
-
-# Create alias for command &quot;microk8s.kubectl&quot; to be usable as &quot;kubectl&quot;
-sudo snap alias microk8s.kubectl kubectl
-</code></pre>
-<p>It is important to make sure that <code>ufw</code> will not interfere with the internal pod-to-pod
-and pod-to-Internet traffic.
-To do so, first check the status.
-If <code>ufw</code> is active, use the following command to enable the communication.</p>
-<pre><code class="language-bash">
-# Verify status of ufw firewall
-sudo ufw status
-
-# If ufw is active, install following rules to enable access pod-to-pod and pod-to-internet
-sudo ufw allow in on cni0 &amp;&amp; sudo ufw allow out on cni0
-sudo ufw default allow routed
-</code></pre>
-<p><strong>NOTE</strong>: MicroK8s can be used to compose a Highly Available Kubernetes cluster enabling you to construct an environment combining the CPU, RAM and storage resources of multiple machines. If you are interested in this procedure, review the official instructions in <a href="https://ubuntu.com/tutorials/getting-started-with-kubernetes-ha">How to build a highly available Kubernetes cluster with MicroK8s</a>, in particular, the step <a href="https://ubuntu.com/tutorials/getting-started-with-kubernetes-ha#4-create-a-microk8s-multinode-cluster">Create a MicroK8s multi-node cluster</a>.</p>
-<h4 id="references">References:</h4>
-<ul>
-<li><a href="https://microk8s.io/#install-microk8s">The lightweight Kubernetes &gt; Install MicroK8s</a></li>
-<li><a href="https://ubuntu.com/tutorials/install-a-local-kubernetes-with-microk8s">Install a local Kubernetes with MicroK8s</a></li>
-<li><a href="https://ubuntu.com/tutorials/getting-started-with-kubernetes-ha">How to build a highly available Kubernetes cluster with MicroK8s</a></li>
-</ul>
-<h2 id="add-user-to-the-docker-and-microk8s-groups">Add user to the docker and microk8s groups</h2>
-<p>It is important that your user has the permission to run <code>docker</code> and <code>microk8s</code> in the 
-terminal.
-To allow this, you need to add your user to the <code>docker</code> and <code>microk8s</code> groups with the 
-following commands:</p>
-<pre><code class="language-bash">sudo usermod -a -G docker $USER
-sudo usermod -a -G microk8s $USER
-sudo chown -f -R $USER $HOME/.kube
-sudo reboot
-</code></pre>
-<p>In case that you get trouble executing the following commands, might due to the .kube folder is not automatically provisioned into your home folder, you may follow the steps below:</p>
-<pre><code class="language-bash">mkdir -p $HOME/.kube
-sudo chown -f -R $USER $HOME/.kube
-microk8s config &gt; $HOME/.kube/config
-sudo reboot
-</code></pre>
-<h2 id="check-status-of-kubernetes-and-addons">Check status of Kubernetes and addons</h2>
-<p>To retrieve the status of Kubernetes <strong>once</strong>, run the following command:</p>
-<pre><code class="language-bash">microk8s.status --wait-ready
-</code></pre>
-<p>To retrieve the status of Kubernetes <strong>periodically</strong> (e.g., every 1 second), run the 
-following command:</p>
-<pre><code class="language-bash">watch -n 1 microk8s.status --wait-ready
-</code></pre>
-<h2 id="check-all-resources-in-kubernetes">Check all resources in Kubernetes</h2>
-<p>To retrieve the status of the Kubernetes resources <strong>once</strong>, run the following command:</p>
-<pre><code class="language-bash">kubectl get all --all-namespaces
-</code></pre>
-<p>To retrieve the status of the Kubernetes resources <strong>periodically</strong> (e.g., every 1 
-second), run the following command:</p>
-<pre><code class="language-bash">watch -n 1 kubectl get all --all-namespaces
-</code></pre>
-<h2 id="enable-addons">Enable addons</h2>
-<p>First, we need to enable the community plugins (maintained by third parties):</p>
-<pre><code class="language-bash">microk8s.enable community
-</code></pre>
-<p>The Addons to be enabled are:
-- <code>dns</code>: enables resolving the pods and services by name
-- <code>helm3</code>: required to install NATS
-- <code>hostpath-storage</code>: enables providing storage for the pods (required by <code>registry</code>)
-- <code>ingress</code>: deploys an ingress controller to expose the microservices outside Kubernetes
-- <code>registry</code>: deploys a private registry for the TFS controller images
-- <code>linkerd</code>: deploys the <a href="https://linkerd.io">linkerd service mesh</a> used for load balancing among replicas
-- <code>prometheus</code>: set of tools that enable TFS observability through per-component instrumentation
-- <code>metrics-server</code>: deploys the <a href="https://github.com/kubernetes-sigs/metrics-server">Kubernetes metrics server</a> for API access to service metrics</p>
-<pre><code class="language-bash">microk8s.enable dns helm3 hostpath-storage ingress registry prometheus metrics-server linkerd
-</code></pre>
-<p><strong>Important</strong>: Enabling some of the addons might take few minutes.
-Do not proceed with next steps until the addons are ready.
-Otherwise, the deployment might fail.
-To confirm everything is up and running:
-1. Periodically
-   <a href="./1.2.-Install-MicroK8s#check-status-of-kubernetes-and-addons">Check the status of Kubernetes</a>
-   until you see the addons [dns, ha-cluster, helm3, hostpath-storage, ingress, linkerd, metrics-server, prometheus, registry, storage] in the enabled block.
-2. Periodically
-   <a href="./1.2.-Install-MicroK8s#check-all-resources-in-kubernetes">Check Kubernetes resources</a>
-   until all pods are <strong>Ready</strong> and <strong>Running</strong>.
-3. If it takes too long for the Pods to be ready, <strong>we observed that rebooting the machine may help</strong>.</p>
-<p>Then, create aliases to make the commands easier to access:</p>
-<pre><code class="language-bash">sudo snap alias microk8s.helm3 helm3
-sudo snap alias microk8s.linkerd linkerd
-</code></pre>
-<p>To validate that <code>linkerd</code> is working correctly, run:</p>
-<pre><code class="language-bash">linkerd check
-</code></pre>
-<p>To validate that the <code>metrics-server</code> is working correctly, run:</p>
-<pre><code class="language-bash">kubectl top pods --all-namespaces
-</code></pre>
-<p>and you should see a screen similar to the <code>top</code> command in Linux, showing the columns <em>namespace</em>, <em>pod name</em>, <em>CPU (cores)</em>, and <em>MEMORY (bytes)</em>.</p>
-<p>In case pods are not starting, check information from pods logs. For example, linkerd is sensitive for proper /etc/resolv.conf syntax.</p>
-<pre><code class="language-bash">kubectl logs &lt;podname&gt; --namespace &lt;namespace&gt;
-</code></pre>
-<p>If the command shows an error message, also restarting the machine might help.</p>
-<h2 id="stop-restart-and-redeploy">Stop, Restart, and Redeploy</h2>
-<p>Find below some additional commands you might need while you work with MicroK8s:</p>
-<pre><code class="language-bash">microk8s.stop  # stop MicroK8s cluster (for instance, before power off your computer)
-microk8s.start # start MicroK8s cluster
-microk8s.reset # reset infrastructure to a clean state
-</code></pre>
-<p>If the following commands does not work to recover the MicroK8s cluster, you can redeploy it.</p>
-<p>If you want to keep MicroK8s configuration, use:</p>
-<pre><code class="language-bash">sudo snap remove microk8s
-</code></pre>
-<p>If you need to completely drop MicroK8s and its complete configuration, use:</p>
-<pre><code class="language-bash">sudo snap remove microk8s --purge
-sudo apt-get remove --purge docker.io docker-buildx
-</code></pre>
-<p><strong>IMPORTANT</strong>: After uninstalling MicroK8s, it is convenient to reboot the computer (the VM if you work on a VM, or the physical computer if you use a physical computer). Otherwise, there are system configurations that are not correctly cleaned. Especially in what port forwarding and firewall rules matters.</p>
-<p>After the reboot, redeploy as it is described in this section.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/show_deployment_and_logs/show_deployment_and_logs/index.html b/public/develop/deployment_guide/show_deployment_and_logs/show_deployment_and_logs/index.html
deleted file mode 100644
index 72386e6..0000000
--- a/public/develop/deployment_guide/show_deployment_and_logs/show_deployment_and_logs/index.html
+++ /dev/null
@@ -1,422 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/show_deployment_and_logs/show_deployment_and_logs/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Show deployment and logs - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#report-the-deployment-of-the-tfs-controller" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Show deployment and logs
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-  <h1>Show deployment and logs</h1>
-
-<p>This section presents some helper scripts to inspect the status of the deployment and 
-the logs of the components.
-These scripts are particularly helpful for troubleshooting during execution of 
-experiments, development, and debugging.</p>
-<h2 id="report-the-deployment-of-the-tfs-controller">Report the deployment of the TFS controller</h2>
-<p>The summary report given at the end of the <a href="./1.3.-Deploy-TeraFlowSDN#deploy-tfs-controller">Deploy TFS controller</a>
-procedure can be generated manually at any time by running the following command.
-You can avoid sourcing <code>my_deploy.sh</code> if it has been already done.</p>
-<pre><code class="language-bash">cd ~/tfs-ctrl
-source my_deploy.sh
-./deploy/show.sh
-</code></pre>
-<p>Use this script to validate that all the pods, deployments, replica sets, ingress 
-controller, etc. are ready and have the appropriate state, e.g., <em>running</em> for Pods, and 
-the services are deployed and have appropriate IP addresses and port numbers.</p>
-<h2 id="report-the-log-of-a-specific-tfs-controller-component">Report the log of a specific TFS controller component</h2>
-<p>A number of scripts are pre-created in the <code>scripts</code> folder to facilitate the inspection 
-of the component logs.
-For instance, to dump the log of the Context component, run the following command.
-You can avoid sourcing <code>my_deploy.sh</code> if it has been already done.</p>
-<pre><code class="language-bash">source my_deploy.sh
-./scripts/show_logs_context.sh
-</code></pre>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/deployment_guide/webUI_and_grafana_dashboards/webUI_and_grafana_dashboards/index.html b/public/develop/deployment_guide/webUI_and_grafana_dashboards/webUI_and_grafana_dashboards/index.html
deleted file mode 100644
index 3024c65..0000000
--- a/public/develop/deployment_guide/webUI_and_grafana_dashboards/webUI_and_grafana_dashboards/index.html
+++ /dev/null
@@ -1,410 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/deployment_guide/webUI_and_grafana_dashboards/webUI_and_grafana_dashboards/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>webUI and grafana dashboards - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#access-the-teraflowsdn-webui" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              webUI and grafana dashboards
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../development_guide/development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-  <h1>webUI and grafana dashboards</h1>
-
-<p>This section describes how to get access to the TeraFlowSDN controller WebUI and the monitoring Grafana dashboards.</p>
-<h2 id="access-the-teraflowsdn-webui">Access the TeraFlowSDN WebUI</h2>
-<p>If you followed the installation steps based on MicroK8s, you got an ingress controller installed that exposes on TCP port 80.</p>
-<p>Besides, the ingress controller defines the following reverse proxy paths (on your local machine):
-- <code>http://127.0.0.1/webui</code>: points to the WebUI of TeraFlowSDN.
-- <code>http://127.0.0.1/grafana</code>: points to the Grafana dashboards.
-  This endpoint brings access to the monitoring dashboards of TeraFlowSDN.
-  The credentials for the <code>admin</code>user are those defined in the <code>my_deploy.sh</code> script, in the <code>TFS_GRAFANA_PASSWORD</code> variable.
-- <code>http://127.0.0.1/restconf</code>: points to the Compute component NBI based on RestCONF. 
-  This endpoint enables connecting external software, such as ETSI OpenSourceMANO NFV Orchestrator, to TeraFlowSDN.</p>
-<p><strong>Note</strong>: In the creation of the VM, a forward from host TCP port 8080 to VM's TCP port 80 is configured, so the WebUIs and REST APIs of TeraFlowSDN should be exposed on the endpoint <code>127.0.0.1:8080</code> of your local machine instead of <code>127.0.0.1:80</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/development_guide/configure_environment/configure_environment/index.html b/public/develop/development_guide/configure_environment/configure_environment/index.html
deleted file mode 100644
index bd70182..0000000
--- a/public/develop/development_guide/configure_environment/configure_environment/index.html
+++ /dev/null
@@ -1,402 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/development_guide/configure_environment/configure_environment/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Configure environment - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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">
-      
-    </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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Configure environment
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../deployment_guide/deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-  <h1>Configure environment</h1>
-
-<ul>
-<li><a href="./2.1.-Configure-Environment/2.1.1.-Python">2.1.1. Python</a></li>
-<li><a href="./2.1.-Configure-Environment/2.1.2.-Java-(Quarkus)">2.1.2. Java (Quarkus)</a></li>
-<li><a href="./2.1.-Configure-Environment/2.1.3.-Java-(Maven)">2.1.3. Java (Maven)</a></li>
-<li><a href="./2.1.-Configure-Environment/2.1.4.-Rust">2.1.4. Rust</a></li>
-<li><a href="./2.1.-Configure-Environment/2.1.5.-Erlang">2.1.5. Erlang</a></li>
-<li><a href="./2.1.-Configure-Environment/2.1.6.-Kotlin">2.1.6. Kotlin</a></li>
-</ul>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/development_guide/configure_environment/java_quarkus/index.html b/public/develop/development_guide/configure_environment/java_quarkus/index.html
deleted file mode 100644
index ad556e9..0000000
--- a/public/develop/development_guide/configure_environment/java_quarkus/index.html
+++ /dev/null
@@ -1,442 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/development_guide/configure_environment/java_quarkus/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Java quarkus - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#install-jdk" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Java quarkus
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../deployment_guide/deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-  <h1>Java quarkus</h1>
-
-<p>This section describe the steps needed to create a development environment for TFS components implemented in Java. Currently, ZTP and Policy components have been developed in Java (version 11) and use the <a href="https://quarkus.io/">Quarkus</a> framework, which enables kubernetes-native development.</p>
-<h2 id="install-jdk">Install JDK</h2>
-<p>To begin, make sure that you have java installed and in the correct version</p>
-<pre><code>java --version
-</code></pre>
-<p>If you don't have java installed you will get an error like the following:</p>
-<pre><code>Command 'java' not found, but can be installed with:
-
-sudo apt install default-jre              # version 2:1.11-72build1, or
-sudo apt install openjdk-11-jre-headless  # version 11.0.14+9-0ubuntu2
-sudo apt install openjdk-17-jre-headless  # version 17.0.2+8-1
-sudo apt install openjdk-18-jre-headless  # version 18~36ea-1
-sudo apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1
-</code></pre>
-<p>In which case you should use the following command to install the correct version:</p>
-<pre><code>sudo apt install openjdk-11-jre-headless
-</code></pre>
-<p>Else you should get something like the following:</p>
-<pre><code>openjdk 11.0.18 2023-01-17
-OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1)
-OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1, mixed mode, sharing)
-</code></pre>
-<h2 id="compiling-and-testing-existing-components">Compiling and testing existing components</h2>
-<p>In the root directory of the existing Java components you will find an executable maven wrapper named <code>mvnw</code>. You could use this executable, which is already configured in pair with the components, instead of your local maven installation. So for example if you want to compile the project you would run the following:</p>
-<pre><code>./mvnw compile
-</code></pre>
-<h2 id="vs-code-quarkus-plugin">VS Code Quarkus plugin</h2>
-<p>In case you are using <a href="https://code.visualstudio.com/">VS Code</a> for development, we suggest to install the <a href="https://marketplace.visualstudio.com/items?itemName=redhat.vscode-quarkus">official Quarkus extension</a>.
-The extension should be able to automatically find the current open project and integrate with the above <code>mvnw</code> maven wrapper, making it easier to control the <a href="https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html">maven lifecycle</a>.
-Make sure that you open the specific component directory (i.e., <code>src/ztp</code> or <code>src/policy</code>) and not the general controller one (i.e., <code>src</code>.</p>
-<h2 id="new-java-tfs-component">New Java TFS component</h2>
-<h3 id="sample-project">Sample Project</h3>
-<p>If you want to create a new TFS component written in Java you could generate a new Quarkus project based on the following project:</p>
-<p><a href="https://code.quarkus.io/?e=grpc&amp;e=kubernetes&amp;e=container-image-jib&amp;e=kubernetes-service-binding&amp;e=smallrye-health&amp;e=resteasy-reactive">TFS Sample Quarkus Project</a></p>
-<p>In that way, you should have most of the libraries you would need to integrate with the rest of the TFS Components. Feel free however to add or remove libraries depending on your needs.</p>
-<h3 id="initial-setup">Initial setup</h3>
-<p>If you used the sample project above, you should have a project with a basic structure. However there are some steps that you should take before starting development.</p>
-<p>First make sure that you copy the protobuff files, that are found in the root directory of the TFS SDN controller, to the <code>new-component/src/main/proto</code> directory.</p>
-<p>Next you should create the following files:
-* <code>new-component/.gitlab-ci.yml</code>
-* <code>new-component/Dockerfile</code>
-* <code>new-component/src/resources/application.yaml</code></p>
-<p>We suggest to copy the respective files from existing components (Automation and Policy) and change them according to your needs.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/development_guide/configure_environment/python/index.html b/public/develop/development_guide/configure_environment/python/index.html
deleted file mode 100644
index e19e711..0000000
--- a/public/develop/development_guide/configure_environment/python/index.html
+++ /dev/null
@@ -1,499 +0,0 @@
-
-<!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 TFS Documentation page">
-      
-      
-        <meta name="author" content="TeraflowSDN by ETSI">
-      
-      
-        <link rel="canonical" href="https://tfs.etsi.org/develop/development_guide/configure_environment/python/">
-      
-      
-      
-      
-      <link rel="icon" href="../../../images/favicon.png">
-      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
-    
-    
-      
-        <title>Python - ETSI SDG TFS Documentation</title>
-      
-    
-    
-      <link rel="stylesheet" href="../../../assets/stylesheets/main.0253249f.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="0D47A1" data-md-color-accent="1565C0">
-  
-    
-    <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="#upgrade-the-ubuntu-distribution" 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 TFS Documentation" class="md-header__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W 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 TFS Documentation
-          </span>
-        </div>
-        <div class="md-header__topic" data-md-component="header-topic">
-          <span class="md-ellipsis">
-            
-              Python
-            
-          </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/tfs" 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.6.0 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">
-    TFS 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 md-nav--integrated" aria-label="Navigation" data-md-level="0">
-  <label class="md-nav__title" for="__drawer">
-    <a href="../../.." title="ETSI SDG TFS Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG TFS Documentation" data-md-component="logo">
-      
-  <img src="../../../images/logos/TeraFlow SDN Logo Screen_B_W NEG.png" alt="logo">
-
-    </a>
-    ETSI SDG TFS Documentation
-  </label>
-  
-    <div class="md-nav__source">
-      <a href="https://labs.etsi.org/rep/tfs" 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.6.0 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">
-    TFS GitLab
-  </div>
-</a>
-    </div>
-  
-  <ul class="md-nav__list" data-md-scrollfix>
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../../deployment_guide/deployment_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    1. Deployment Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-      
-      
-  
-  
-  
-  
-    <li class="md-nav__item">
-      <a href="../../development_guide/" class="md-nav__link">
-        
-  
-  <span class="md-ellipsis">
-    2. Development Guide
-  </span>
-  
-
-      </a>
-    </li>
-  
-
-    
-  </ul>
-</nav>
-                  </div>
-                </div>
-              </div>
-            
-            
-          
-          
-            <div class="md-content" data-md-component="content">
-              <article class="md-content__inner md-typeset">
-                
-                  
-
-
-  <h1>Python</h1>
-
-<p>This section describes how to configure the Python environment to run experiments and 
-develop code for the ETSI TeraFlowSDN controller.
-In particular, we use <a href="https://github.com/pyenv/pyenv">PyEnv</a> to install the appropriate 
-version of Python and manage the virtual environments.</p>
-<h2 id="upgrade-the-ubuntu-distribution">Upgrade the Ubuntu distribution</h2>
-<p>Skip this step if you already did it during the installation of your machine.</p>
-<pre><code class="language-bash">sudo apt-get update -y
-sudo apt-get dist-upgrade -y
-</code></pre>
-<h2 id="install-pyenv-dependencies">Install PyEnv dependencies</h2>
-<pre><code class="language-bash">sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget \
-    curl llvm git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
-</code></pre>
-<h2 id="install-pyenv">Install PyEnv</h2>
-<p>We recommend installing PyEnv through<br />
-<a href="https://github.com/pyenv/pyenv-installer">PyEnv Installer</a>.
-Below you can find the instructions, but we refer you to the link for updated 
-instructions.</p>
-<pre><code class="language-bash">curl https://pyenv.run | bash
-# When finished, edit ~/.bash_profile // ~/.profile // ~/.bashrc as the installer proposes.
-# In general, it means to append the following lines to ~/.bashrc:
-export PYENV_ROOT=&quot;$HOME/.pyenv&quot;
-command -v pyenv &gt;/dev/null || export PATH=&quot;$PYENV_ROOT/bin:$PATH&quot;
-eval &quot;$(pyenv init -)&quot;
-eval &quot;$(pyenv virtualenv-init -)&quot;
-</code></pre>
-<p>In case .bashrc is not linked properly to your profile, you may need to append the 
-following line into your local .profile file:</p>
-<pre><code class="language-bash"># Open ~/.profile and append this line:
-+source &quot;$HOME&quot;/.bashrc
-</code></pre>
-<h2 id="restart-the-machine">Restart the machine</h2>
-<p>Restart the machine for all the changes to take effect.</p>
-<pre><code class="language-bash">sudo reboot
-</code></pre>
-<h2 id="install-python-39-over-pyenv">Install Python 3.9 over PyEnv</h2>
-<p>ETSI TeraFlowSDN uses Python 3.9 by default.
-You should install the latest stable update of Python 3.9, i.e., avoid "-dev" versions.
-To find the latest version available in PyEnv, you can run the following command:</p>
-<pre><code class="language-bash">pyenv install --list | grep &quot; 3.9&quot;
-</code></pre>
-<p>At the time of writing, this command will output the following list:</p>
-<pre><code>  3.9.0
-  3.9-dev
-  3.9.1
-  3.9.2
-  3.9.4
-  3.9.5
-  3.9.6
-  3.9.7
-  3.9.8
-  3.9.9
-  3.9.10
-  3.9.11
-  3.9.12
-  3.9.13
-  3.9.14 
-  3.9.15
-  3.9.16 ** always select the latest version **
-</code></pre>
-<p>Therefore, the latest stable version is Python 3.9.16.
-To install this version, you should run:</p>
-<pre><code class="language-bash">pyenv install 3.9.16
-    # This command might take some minutes depending on your Internet connection speed 
-    # and the performance of your machine.
-</code></pre>
-<h2 id="create-the-virtual-environment-for-teraflowsdn">Create the Virtual Environment for TeraFlowSDN</h2>
-<p>The following commands create a virtual environment named as <code>tfs</code> using Python 3.9 and 
-associate that environment with the current folder, i.e., <code>~/tfs-ctrl</code>.
-That way, when you are in that folder, the associated virtual environment will be used, 
-thus inheriting the Python interpreter, i.e., Python 3.9, and the Python packages 
-installed on it.</p>
-<pre><code class="language-bash">cd ~/tfs-ctrl
-pyenv virtualenv 3.9.16 tfs
-pyenv local 3.9.16/envs/tfs
-</code></pre>
-<p>After completing these commands, you should see in your prompt that now you're within 
-the virtual environment <code>3.9.16/envs/tfs</code> on folder <code>~/tfs-ctrl</code>:</p>
-<pre><code>(3.9.16/envs/tfs) tfs@tfs-vm:~/tfs-ctrl$
-</code></pre>
-<p>In case that the correct pyenv does not get automatically activated when you change to 
-the tfs-ctrl/ folder, then execute the following command:</p>
-<pre><code class="language-bash">cd ~/tfs-ctrl
-pyenv activate 3.9.16/envs/tfs
-</code></pre>
-<h2 id="install-the-basic-python-packages-within-the-virtual-environment">Install the basic Python packages within the virtual environment</h2>
-<p>From within the <code>3.9.16/envs/tfs</code> environment on folder <code>~/tfs-ctrl</code>, run the following 
-commands to install the basic Python packages required to work with TeraFlowSDN.</p>
-<pre><code class="language-bash">cd ~/tfs-ctrl
-./install_requirements.sh
-</code></pre>
-<p>Some dependencies require to re-load the session, so log-out and log-in again.</p>
-<h2 id="generate-the-python-code-from-the-grpc-proto-messages-and-services">Generate the Python code from the gRPC Proto messages and services</h2>
-<p>The components, e.g., microservices, of the TeraFlowSDN controller, in general, use a gRPC-based open API to interoperate.
-All the protocol definitions can be found in sub-folder <code>proto</code> within the root project folder.
-For additional details on gRPC, visit the official web-page <a href="https://grpc.io/">gRPC</a>.</p>
-<p>In order to interact with the components, (re-)generate the Python code from gRPC definitions running the following command:</p>
-<pre><code class="language-bash">cd ~/tfs-ctrl
-proto/generate_code_python.sh
-</code></pre>
-
-
-
-
-
-
-
-
-
-
-
-
-                
-              </article>
-            </div>
-          
-          
-<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
-        </div>
-        
-          <button type="button" class="md-top md-icon" data-md-component="top" hidden>
-  
-  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
-  Back to top
-</button>
-        
-      </main>
-      
-        <footer class="md-footer">
-  
-    
-  
-  <div class="md-footer-meta md-typeset">
-    <div class="md-footer-meta__inner md-grid">
-      <div class="md-copyright">
-  
-    <div class="md-copyright__highlight">
-      Copyright &copy; 2019-2024 TeraflowSDN Project
-    </div>
-  
-  
-    Made with
-    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
-      Material for MkDocs
-    </a>
-  
-</div>
-      
-        <div class="md-social">
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://tfs.etsi.org/" target="_blank" rel="noopener" title="tfs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://labs.etsi.org/rep/tfs" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://www.linkedin.com/company/teraflowsdn/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
-    </a>
-  
-    
-    
-    
-    
-      
-      
-    
-    <a href="https://twitter.com/TeraflowSDN" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
-      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
-    </a>
-  
-</div>
-      
-    </div>
-  </div>
-</footer>
-      
-    </div>
-    <div class="md-dialog" data-md-component="dialog">
-      <div class="md-dialog__inner md-typeset"></div>
-    </div>
-    
-      <div class="md-progress" data-md-component="progress" role="progressbar"></div>
-    
-    
-    <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "toc.integrate"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
-    
-    
-      <script src="../../../assets/javascripts/bundle.83f73b43.min.js"></script>
-      
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/public/develop/images/architecture/CAPIF Core Function.png b/public/develop/images/architecture/CAPIF Core Function.png
deleted file mode 100644
index cc790ca60cb40a631a0fcc83d3530f62e51b28e3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 58316
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
WziK~uUEOQDnR?nrS|yin-TxoGM%c^%

diff --git a/public/develop/images/architecture/CAPIF_Core_Function.png b/public/develop/images/architecture/CAPIF_Core_Function.png
deleted file mode 100644
index cc790ca60cb40a631a0fcc83d3530f62e51b28e3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 58316
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
WziK~uUEOQDnR?nrS|yin-TxoGM%c^%

diff --git a/public/develop/images/architecture/New_Architecture.png b/public/develop/images/architecture/New_Architecture.png
deleted file mode 100644
index 6ef7755c59136332a25d9c4ac735fa0784d24442..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 173563
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

diff --git a/public/develop/images/architecture/msg_flow.png b/public/develop/images/architecture/msg_flow.png
deleted file mode 100644
index 7163f87ea381ab5e63169d8722fea4c259c10a42..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 69966
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

diff --git a/public/develop/images/flows/01_Login_Admin.png b/public/develop/images/flows/01_Login_Admin.png
deleted file mode 100644
index 5913c96c3bcb4a1c18b22ff13547604a1c8e9df9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 28999
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
Z1*Wu|6G_BpOF*jvQCHKxRD`<~@;}Nsa;E?Q

diff --git a/public/develop/images/flows/02_Creation_of_user.png b/public/develop/images/flows/02_Creation_of_user.png
deleted file mode 100644
index 2024dfff4eca11ecdf5930060ec635d6d06482c6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 59335
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
a_rwh(1BK#moBrcWASb0LS&lUF|9=2g9LCfD

diff --git a/public/develop/images/flows/03_Register_of_AEF_GetAuth.png b/public/develop/images/flows/03_Register_of_AEF_GetAuth.png
deleted file mode 100644
index f200f9fe444a9a06c8a6e59b31d241d1ea3fdb35..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 44751
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
Nls?gzP^{w+^?w!E=gj~B

diff --git a/public/develop/images/flows/04_AEF_API_Provider_registration.png b/public/develop/images/flows/04_AEF_API_Provider_registration.png
deleted file mode 100644
index 091f4901bb64c6755747758d6add38e5d4773561..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 51100
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
P5Ehb`R+g%eFb?`3eW&F`

diff --git a/public/develop/images/flows/05_AEF_Publish.png b/public/develop/images/flows/05_AEF_Publish.png
deleted file mode 100644
index 1bfb90e51198c72f338fcb65986d546d9e96ba03..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 43247
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
JDKv7q^xsmyM+^V}

diff --git a/public/develop/images/flows/06_Invoker_Register_GetAuth.png b/public/develop/images/flows/06_Invoker_Register_GetAuth.png
deleted file mode 100644
index f200f9fe444a9a06c8a6e59b31d241d1ea3fdb35..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 44751
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
Nls?gzP^{w+^?w!E=gj~B

diff --git a/public/develop/images/flows/07_Invoker_Onboarding.png b/public/develop/images/flows/07_Invoker_Onboarding.png
deleted file mode 100644
index 9cd4b2d9fc99daa0f285a0f9e5cf77d9c51ea17c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 64059
zcmc$`Wl$Ym)37^O&=A}MH!i{5Ap{A*0~^;6+}$-;HWoZ=EI_c0yGufF_YmCOg8Lcn
z=XtB%AK&?LPSvRcRmh&1HM7?0?$y1zulcO1EcYCP3<Cgw=kjl*-va>hGXOwTLqh~V
z(J`gD1%EyJpdcp=JU)GYYb{6sfPVma>DL;b>H7;F#spK-z_Clgi0#sup%u037xsmi
zKokvDl}b^`u9&MkWE8^Yk!PZqEJOsA$4nzq35&&(qv~(V=gbRy0~D)DsF7)ckT35Z
z`jyQO=S7-*E;1WE%p=P70&%3!s6%itAR6jg0Qd*^-((^uz2wt}QcT}X-u>qU)wi9A
z|2drfC5##2-)p3(pQ|JOdqs#8Sw8Z=SD=ORDx&|lNvp4T|NMKHVEq3@gA<d4l4#kR
zHkXGB6ZuM*Ej4ooJQl+(lDA|$=1~J1-Wy3;@$vEO($}-IvrGQB2bp3%Xw<2xskySz
z(3lu|Y(kL)fkjVK@LG=rx0xv|BfkN*dY~gWR{T$^&t;?zD%fdU>6!EVG9)Q9KK1td
zi@7h<ZxA_hb8?h3MZJP9%<AU`1_tWw=B6u6dt^E8?k|@DRzEYg7&;h#rjvJQJ)Z_Y
zS*jr{?m1rR47k}Ts9*Hni<6_I4goq^yiV<#cJlvw7s01Nw3y75i?y4pTkzV-Xm&sF
z1}|^`Z<=2=X2ccnaED6eivyH3tU}2hTGVFFy-qjT44Te@P$?s#qA0|DJ=L|2_ZgJa
z(STCDdi!1IKOv(__)lZ*Dr;WdXxbAKPlq6>udhE>XBWNEtq%*hTcfg>DHC&Am6nz5
z{#|K0WL^!2n|4Q?c(<yEo=DG>8AK;p41TS2-su1F33bWms1+Q?EdQGw@V}SXJ?Aq<
z5{}Cq!k1|&DVLM#D%bZ9)NjI~NO_(C?-Ud)MlxG%X4sn-7He&0)N*CHuuL^fSATt$
zc)U9W=Yc`->u8=rimpr%{AN8t1+im$EVun?71MMD>4m7{UTOVshR9`6K_(f$?eEsh
zMLi3b;DNrrKAi?f6HQIccklYa=cT2kMS2ug&z&yOsRo~MttYlwzpSC5LFA}~2RwEK
zWE!6S{P{DL$AVJaSCET~i;<DBBC_h~i~BXsuEayoxr>X7#Ladttz69a@86lA&dVJL
zrikN0ZAWO-1kSFYWS(<xmbc#?HV4u3r<H25+AX!UE*;Id-G`Ce1A(_k?MvF~kg2a<
zNdWBz$CWCx0qgVXo>(fQ;z4j4lai8Z9hNA8o3ouY=SEk9r8YkwM`DVnDa2@Ba<HX=
z=2RZ<mA8wx{@t4{<$3T~?~PmD2*-ZOo$RpCRGYbp%wn#%!1b%AhnRqX<gv6sEeNY$
z5-nBC$K5ft*1FAVf?-V?#RnWLSA$q66fw|kZ#v`rYOkryr1M$xf}w>FsBgO=9u!h&
z+3ke}&F+}Q?E1CV5Pki5aCEmuvR(il^G>M1V3x$v(Irv`98&!E?_U}knwyIQA5arC
zAdu(e{I(Bw*Xjkz8-j<REI*#~P<<LW^KP9n3b+RwX?ESIvK*t4k0+36+{sVFz{Gr#
z4{&0^V*<>~J1Iu~*PCe$QA*(PlWy`X@7<zgHoZ*4zLz5IK;XoVqOvl!VI~YlMox|i
z%+))T7YHF>hnxNkK?iT?CY%8ZoI~3+1JJN==uMWCp6<KkcR2)#&ti*L{epX1+1}&L
zOndMER#_t)emU==VrXcX!fs$boPOO+?m$OJcNe-=&eU&LzW@r&G^kv$;y2r%+{VVn
zmbX)Y)B7K_bIMl>2Iq^EBf3#+MEtg-Y)?FEWXBb;BS$9E)qqOGofQzhJMIKc2pjOL
zySu;2*7m%YHWugro1)S;2UQjL23{{CBh&r2E0P#V^5e&K13qEbZ2$lbLVIQ3&rr<0
zqPw%5350K;9u_<fFl|K(EEX0B1wl)V+7~^q`xvtTNnKr7*`9@6;>ea>t@YGaR=~q*
zBnO#<Fa!b#;{IgQ=C~pSRA{s2<>ht9n{<Y~Zp}q@)Aa0%rw5FyXIWTSlsQnTLsT;y
zpRDk3%Get=HZ~L>W=%Gl3<Yr68iqjlI9-o>r~&{<P_=cE`RaCOs~LfP@JGXwbRcvv
zX8Ga~5t*~j*4dE*1Ox=Wnw^3tMrvv%B{;;yS}F@seL~$|WY{QUQG?BoCTG)u%&lmN
zDEUW5<@8bB(g#^T&|raT=68G1dO9qEw1)J95525$tPq^AO!2L)lHgai6lIiR-rB6m
zVacCxq^L2U76)OYAE)~W9SvM#DiZfKAN%5igM<0){<t3efh3y&X!`$P^7%QLdI3F7
z!0~bC3)EzC5A4>z{jV+`W<f*f#O|h`pnw!uQc|)k@&z$)U_;n>{jG7RH%uL~lT)^q
zPpP;-4V2=BtxTVH@7{S|9^Q{Da16otiXXgLpon}Kw_zA%6>9XwQ#Zu@uhFu<ggz}@
zd{u_6-rzt(G&DrdM&GEqxV`@Hfd-%ubo{5{&%^yK!nbL~OOE!t@eh@@zbjV8<f!<P
zNnY*G)pLl6wYo*u)YL4;c#46FPYcZ%*}C1Y9tlnv$rPJAx=d5d2b<<Abo049<b!o`
zDvCwlTyJH$8BlS5?A@IzW>kXlI<NQMMDjs}AA7_}wEjsKbXpZ1czU$pe;-ZU^xHCM
zEknMH<;o#-K(q{G)Fv+u<|H1jOd$|(DZCvPIRZNPX7uq}OuW5s<f#0R0V?0)Ag7Vh
z;_^0_$yZPW?@zNHc{gXvb*l4?+WosXEzGKCqqgG2KwC)Ve`NwnvX|F2XjU^lSJ43y
z34h<xTa=8x!-Zx)@g=bP1&XPNK=%aJu2mwJ!`6CV!u9oaV`Jlp*ropc#^wHO0#23v
zLeoOC2a+VHcWr*R!+9TSU5^$saH>GTJ!*e!tEq84S?$uRv%SXL_$Nfw(rP!76i2G?
zTDRHVu2{1)>hwfSP0jD-j4OGjspTBBI^hyaYG=zoKFLNMEVTz1XP>mN0ce9Q4zpEe
z%PhZ_xqG6?QGs~6gFm$jGv^((jX&nVCAv|QZ}``S^ZDM)(b<)R=dp45jL-CDx_Bxh
zKR>@C{x}ccF1RpvpHf(JRl$U9{MVud$TsL08BsS8GX^%gYFR`-{EC>kB=>a_1Z}A9
ze>AIi!x?;prLUn`Sy@!u+gT8A?<S}0QZAcbPVj*}7QG6T()dHZL_|bznRb`x*20I2
zjhB2+hn~#k!XdeRLv~KiYN|zMs(^zbxFkd;fvfdBxCSnQtNxZYseHWu{rOD&l7BO(
zv+;ED@sr>J3btwij#p4**ogIVN05n$2}6R_?+TM*t@4<Nh{AR?W@hF{BDUT6MxGw0
zot>R0*F)!$&*x$vT)Rd-auX5}VN(bmpY@bw<jz)GfL3&YKTV0C>uD|v3Xmk1o$Wwt
zSU}rUCgAoG^v$wmt3hiM-Z@sJ&iEP!)JEQqy<gyP_?vL-yzk$6-KM~~O8o$9LIhVB
zRa2Od%O+?lfxsLlr3qj;M&z)=7qmgUK~M6U-JbON)3cXi-e;iDR<VM&iv>-<_;-0F
z1LhDM>uJZ;|M-HStH{A2`~SO7`TyKWH6^R5E8A--D}K$ZG{HM`H4|E7k^p*mfQ%Y}
z%-Cx*>h5+Nsch!&G$uSDKS=pdNl;aJT*X%^5txHc#x8H~DPuj3#;QuvS?cBZ+mO16
z*ILNN?r@~E!+r_vBwD_XmzIy0RwF<TGSgXG=66HEl~Vd=^1p2fMIjY>31=Puu1M@S
zy0qBRYI$7yj4$&rQ9O1G69^Cv#A8U(pHqvDtrDWZP8(v7$D<C(-^ni{mnuXL`ABCQ
z#wnPaAL0b?nFer)j;rS@3iXIFL06p{jUG2G4YD5Ed1AA~o!`f-Vxm!FbylzraAL`*
zd9q_<;}BHERgnH%j)GxyBTNq7haUe9R6_*K4<#GskV-)4Qq8M9PQa0Z5e>1&se8U8
zzl>OF`vd02+uv9wj<QOKYk>6w85t$HV-Gb1Qtb>U%Z^FOUqf;B_xIP)Nu4{;BtWsi
zpdo-siQ@6UAxR(W3U>kw@W==#$&>Lkn$}Ot7W3fa2OR9|Wrc;uo}$nkk`x?1w>%sv
zV!a5tpXO+vc$%&_vA-!uefnvN^d3=Zf&gL{MP?Z9Tcxj~v*X@urqhkDh89|a6B{yw
z^UT8a#DqdJCFEIXPgovu_j8Xo2{}ySSsadvCt9f4qXet}=_|W<6w-G5=r?e<3y8y=
z3#WLM)Do91;{FMdQfK<lU9IuJ**%>BPYFx}M%uRd08<31Yz*3er{3Tr3F>Ix>U^hZ
zr!2Y@>BBl`_?|=p)Rf6@#}WT4WD0(Urd$WA1s^_1I<8cq@)ji}*Z(2jGG&*}{;W2x
zbiangVPI%BtrE`hD+VyWi{Q=7-MaHFsTlMKau33h+Ulg?YUS>H|3Q&g3FDogNLBxf
z^g^sVfx-R-H#cs8b>V#lZ8587=Un;QC|5M#+n#rl+-yLO^+6ep%+v~&34euuMFRa|
zxxbiU!1L(md`elh%N0FZ_W%QJlYi5drM%g>x-Lr0Vdjc0u0t|%)6YDL-m>|s_DMz?
z3;2l6J45HQuz|G_2KS>%DE*$wv$}&M(&=2guXDw|S4*_;FqfdwyaR`6TJE+nf0^6m
z@Hau_j037`vfsxDn3>M~PX=^yhL+^Nf3hHj7tULR{BUv2|GG39xTIZ**6<H=(8Az_
zJu#7|j)s16>sI}7NKDJD{M+1U1xt8))s=Sr^h-8|llvF#f4|U;;bBXX75jodhst7q
zj=k0T3D+l92Cj<Z<k#pTmy}*tNk%0rMZ5zZ%7jsYI;rgzi|LJHJFSDm$WU`L6)$s|
z37TsS)>gR4{Cv;FapDMu*d{V_i$^ndPyk_y#`;U`B(Ech;2DAaKQ70|$w##D%`l2e
z0*J__4ZIzG<teNGp}2+<_+4dn9x#*iuFg_R=g_QF1g5k)$J6et?o?ttr1(9n;gq{z
zh@i$z5t4L!UEii#UqI8BPN|=j6JNE~9I%P3(7k{z+ovZ`s#DRXQ6&pW+9aWGzy6W_
z@*=9>s6EGre9psYurOzJUv0-cXx_s>u2{!+<$Sj1vDdA;9)Hjz`l>T%RK{I5w(#t#
z>`{i!4UZK!`s&9tAK&qix5ws|y|7G`EWdZ`+c>d<gwUE_oWR%1sqi%He%w9-p|L-u
zNv>Yuj=+`a(T~<*@y}LcJ!ElGW43FDt&M6QM|g61@N(?d9?!ERoL%)kVus=GElJPt
zIY6BD2<kkV*@0y?kviWEd%cgsLx26tiw*FyGS9XGm*)5%W_4u5^{Uv;RS@bLSdTj3
z6(QK^mUh30489~TcYKDU8W~)VMyzYH#V`6l<{HgVEayo}srftP<+A{iXk%^}s=Pyv
z1Vg(``8TaiWfNE`)uPmi`8R~Kxi&0aj=Te(%8LEV;l1DXLd-3b3rG!T+>}l}l_3SL
zy4aK$#kIm#CwQlrP|?N+z?pJ|AV>uh^~0A?zmYEyLCq~Szga$;Ko3z}vwm5i;=e5{
z)mxY0({6Ou43CRRwdyQyYw=4X$ST&Ty#>ChgcEi5-`^VMi(SSPRK2Z{e$Sh0123}y
zIDLi%^xP@mDJ!?RtV1fta7QG#S7Un2?_XcbMf;fc)6)K_QS|fJOefSk)gHt6hSZ_8
zbXQ?DXE?n6%_>G!BUFKF)>KCsUj3N8*95<DYrVO<HxPJ!=d^>$&B5$n?j!`GX(s$L
zC){`OvtfV~w%GhQ+Jd4WCN4(Lb+P+8h5naJ9%C5WlB?@c+)t6rtK(VJuo~;QyQ52q
zYrA_BLoB3Gx6-C{5eKs4&MH!FMrQw5wW`g_2M48Tw|gFLy>5y7Wu+HN4^bx9s1IX3
z)<hl$LY$Z38!JT%q?&Zdv^-5AF9p@kd-e8uu%oS#GS4o2s2*CpsT|(X5v*NmTEVFh
z#b~6)SOeg4->rBDCQ6LYA~f2y)Cr*`R+@l;*1b67WT#114QmL4cVO?E4cykZ`mRc0
z?GCzBd>u`RYmt}>uiAZa79j{-VTNiF>Og$I*#O9rjIu#kdKR&7XKFhjaE~SDA%_>O
zChiP)(6%}i8`JFk8#9ko_?1Tc%y!)l>>X26es0$;Om`vUR=pDiwt-F!%ZK}Cjm04a
z?oM-2WLp9T>PeEF=s5p`<dDJ$t-??MNL+L-a+Cdj%xF{@3w+5Y@mZ6-trXKU*CD|x
zg3hrLNi{{cYpBY3mT(0@XXb9evr7Y=%p8)gt#MuyfF&{(Lcql8fIDb{#W<aSxdUTq
z9zfNfp75OAs#3iFWTX)wI`p^65dT;rtJ&%Hq2?^vBc_FgpW(wF{9Jpl;{yXxo|`z*
zM}ddkY1zO9$FBnPYKpXs2E=sq$Njq}7+EEV06|LQ>8r+wb!{a`_X`DcCbJ(LX~K0%
zF&OnPhuC#$E^ydF#Ju$^a&9;8DsH54xx(qku_Ou;YL%oWZ|qS0=Uk;Lqy?o*17?nY
zJ6d?<*_<bL`Y2xwUI>PzAo@(cKJ|IUR`Qs+Vn+(Il~8T*^(m77e&gZFAUiuS@aoch
zqinuOtEQW?<!rRKj`d{Z!ChyBz4Sdk&DLWbWBGf6!Igm9C?aZCE?mSH3)5h1;JR_s
zV|dq3G#ig!YI8w#bvV=dNG6epZx^D<kNziL&Zo6)KYjkJCedGP&Q4TyJH_C~iQUML
zeK((19+|9SUvE20h<j@6GR*Ncbj+Lw_-4xyB;}LZM@_kBX`>fUrwvd8W*u2Yf3SZY
z3i-eUb^pb{Y4H|4m>IfSp;z84YWL$0qEb<+=eIrhlEC5S1(uS-eAVeNYJm>Toc2#V
zftMU<&38R&Z*-gP(~V<Bb#D9KWvL(lOzf8g4W2%(=_8O2uB=h<;f9%Y#&+5HSH%kX
zmYNl<0v>y)kHj<WBW7ZM*o*$A7|gVn=I@Lsr<q`=fQoCS+>yYy9lx10mCM-bp9Dyn
z6uoK>{;U{{8W>=h)q(REY{c(wn}$bdFA{H1V|k7s3-xt%C4P75#~-k9f>;s8I8nmc
zkkIOe*zUjgU?f19Vms!Je|AJfM1IIxUZ`JtJ({^@SWTNr$X4K9v<DsO!u+$)$xQ;Y
zoinQWAXg;+;hCEwovcv*z^e=MjgsHaQZ-#w!5b@SJR~$(ySVpNuj=39mBv{d;JO`*
zSIPwERj?K)>1ymH_AUn$K{@E92HqzAv?U5M#elx@H+1<{k%(Wa)|4OBo-L!K#YxXH
z@6OxodD8TzhM*H;^Nb`P5;bd8c}xLO)oA;;ad;=yy&ttj*IZUaQ$#Y!CfaW`GR*eT
zQka=~cWVmO-6AD&8civVxzST~D`K*t@Lh_<<5*5@^Qm?p*GjTGR&QjA{r+$MS$nR7
zKLNfcM{^VEc;!tkggqU9hEVzUnR&zM(Kk5_)U9fL-=fOBkIKy%uRVJEu$v)=>_PyD
zdaBzbYZBiz6`9Ju(`Y!bR6bdClMAd};;Df&EFc3f=J`s#4=TCjr-<vCMZet`GAW4d
zA#;d=Uk#?$o0`LB_J)T0lvEU2S$VAG><M3`d*8YriBx&Z{m5J`%ng0?arj$mH&;{f
z*S}tFcuKJ<2T9VYv3`_3l>XN!*5izLf`#+z_uwYJ6q*bYkgc68Fc!7!l47vPHuV9o
zyyb54cTbX^N|cv7dynh(OsU)J#WAhNQ_RjZuQBgELW7_C`Q`1YMmp>EDVtv(u2khq
z?60?R@7vNJ=Wdtmt7X4G8@6Sxl1n)?^4+{hE^^Xyr_gS(Rq)pBFOGfgjvVb&u3LW)
zS7h`zxo|+l$dn)5uelBfnG(<}TW~-79xEWkF_|ri7W%zL+r`-z8E6qdm6Nm8v+-mZ
zLWk{oT+ib#E!ny=sAA2Db(*YW`CL$X{*AjWBOUkHm~Qk}$-^OtvxIHXhg(Lox->`8
zBaV17!LpTPIkIxJlWBQ7vv$S6*vP6WA7RY(+lYxjB0^w!`~6DHoPC?m<QFP`pMmnR
zp!oQlUqte_!13KH9z_$Y;VZ>4Jd^Ym{fg{&YAw^pA2lnkT9XK55P)owWC5-cCiN(_
zT(Fggm^s-8)AeO4|J!;av05#txk{ocX7VAKc*A|Q%DkSYnmpR|{vH)}#+hth%@*Ap
zslN_x({~&UwC4apS4D8@3SE1BmC+2rX_k+)*14GYrjgO9YtKM)ZU2ansNXc6as`_C
z7Mqsq^J)d7p$sjZ{oPUS)s3Dq%w62`$G^=+i)qbWL<{d{;04viRm3&HRwGgNsbuwL
zJr7+2{PmV&t5b5Qg0=<9yd}Ezc0W(EBI_F3GRiRyaZ9yZuiv(*aEAX#eUFF;RG1%x
zEw(nrl8Wu8&TJYkoC*Wl&HgUslm_V3-TF~-_It2+9LnF@hjB<*ej5`@9#q++4}a~o
zG8YMbmqV%O<;Fh=7-dq}y!c~1Ix%5>-{z9V#x2ICnJ&J<5_zq{<HGN-u)@xfOUgf;
z-*OQ!BXUq6JZ-~&&vg<l<0oujmmKn=l_x56#%Syyc`v4bj$V}jA&|WM@ZslP7OP?X
z66FFnSA3TE3P!;K1(V5nScXd51%7s@|3X>qR~xOXMT_>G>AEa=Jm8zh$N(TYRTI#9
z5p5YQt{(7y#;t4XaETp;^LGvk?s-vpJ4@|$WRj9gEU|x886wWH3`^LL=c}66Yn8?!
zNd-DTPa$NP>--?_oQ+@~M^-YJ;f3%sT!Y!I<3%~6w(}rn#?wgMJjOH2J^hvsjDWsa
zVM;ysh<e--cMN)U8dRZQt7P%l_@6}7@<i!}fc8?d+h1q(=KgD!uW}tI=7o|xk~YZR
z2m#*)Hp)ev{01f)41B5>S~$a32NQZO>h<zGEQU$1W96uPcQ^Lu@7lyf&aJ2n4ZoOS
z4UO`)Zf_A%4PQGLejaqB$&3Kwv$8~Od_Y4(V<W{TSSWo(8v21mb6p9$kE~0<9T+b#
zWd&Go+|I|{ZV`-CA2SnoFB%mfUBo2cv<PR_b+(xYD5p7|1Ml7q{Dm&?c4k<~4*m9#
z^*`Hfn4u!ST9pt{X>RZAsMGNJK@F}dA#L8QI!*pdL7gVbx99hIKE=?e(5AB5cg}#M
zm)FK(iD)0u(24of(P`7WmNLAqBZiQisJMIG^CEwFz_@SxxoqE?+xjz2Lex^J%9fqT
ztQRR-4e@wu!XN9{nOMDDx&@|>3C75#wzoQPtchHe)Ct!x+bouT_)vN6OrvH>q#8}K
zh@EJ}S~_w#c*Qi+w41S#o2NXD_+49&Y47?;5armwlvqw$*>+-g^SkOPSe)2`5!d}m
zHk<mI`+?9E7%*8b3SVd4?`xhcq`Js1p1=JjH`(kb?e#iY?Kv!;_`%^i+=Xa8xfhG^
z$LtNvrS0Lz*6H(BcSm1AvF|E#KXc+y6q1o7jXPU%phrZdsaHQy*BIL_)^f~3zJwo=
z>Z&>RZm|^YV3;plZlA%z81<+7X?*%sh#-EC?a?YK8Q06dW&(6uf^q(C-wPyf9=Ie?
zWVoulh}4;{vb+4neAIGxG;*p;gcwNUbGL|L1X)?HM55q7ZLZ#&cRrd}%k<<DVJ!Ek
zuM^|3mECjSzcF2xpv<`I4+p*^$2Zt_Zq6O1o%M?t0UZs^a*4zgu1S=)?YG`Sw)q|w
z{{91ED&kk`1G7Smx2_ILuR0AO&WMsofvvaIhd%pByBG!ZXT6Tf50?Qhr;!NDsau9*
z;x}>43@vup3dUX&sowtvHc3d{HOPTR{!48i)=Yrynd02TS5tT5h3HqX-OI*z^JYRb
z7coeI@$psj!7O13QK$RF8u<Fv=aZP#7wg=NEH7>N4-f(;J-3=l!&z9wu$yar!ZoyX
z?6cfK<GYr#M6&4Y73;3tyz%k%810B(#TxScTGO}#aT!XWiI%Hd%0|({E=Nb?NX*`J
z(NIuH?hECID39;w+mkfnf7JBf6CLs{x!!+y@M{7$&JiV3F4%k_^xX`mly@`VXEsN!
zH$1aB^ed!Qc{3wH<zcAq1ti@K#XIGBhfur+LsUa@&}DQ`TK$Si%17#5yPDP*2VPJP
z<Dz71Z4qVmOVJmiN^D-N94WUQqzN1~*m)WOo;wF4GB&J?x+7<u3CXbe)2f&hx8d#S
zN=Q96Tkgw}f+|Uf^8I=`I>)T|)fpo|;xY$;H;*=OBe*Vn_<*o1txO398?V0i$g6jM
z6c13D+dAs=^;f(_u-oZhHHGen@f1+Bd@N_bo-Wq#FmY5u8@l2>8F;kkH*6DGGu2r`
zQTP=qh#IEqa=M;)dAZIlba>2{c8MVQuEphGx&+D++iAbISQJ{!Ti|gE#>`GD<u%3!
zGu5pV_Ts5VXUFY}vrg#`R({tlGJAmWRnme%UL$<TH1T@e<%Rp+q<O&f*vW`LtDxT5
z_Pnt8AH#n~c!76t8yA8g3HDG7BGWx{cj%-NR!Q;ve`*0F?sr>+B&ayzX{Bw}b$p~Z
zAd4sp{uY)u6PE=i6qmCpr$IyrPbvFs%Zpi$l=l1Uqw75X$f;B}I#eKsw)3-YUhh<r
zul4R=E8{hV*6&><AK)LM;q2bSE%Oqu%K<l(4OkatvK#9QASahbl6^oCZ_V^43rq1~
zCg=U-LK%G;%LQdWk9)z5-@$vu&rY~9UG%sn7inSGWTW+ZUS24GYyVqrsiC!zmZr;)
z7H6%b$~`#-r6s?~T4ya3AS7JKb9G1&5C20a6sqvEvqZp9;(I_=*#=<}Fv`p`yT!s+
z2NOKV^}CjGPcl94mH__YquzIPFEScKSk|`R8T%k?6yyHu<1s@|>dhgXCbFhL;WpW@
z++iwAj1dEVVeyg>rA=WEZB~m=5Y=_bKw!l8WU;Y)$$P+U0l|28?=f!wq@~XbH%u|@
z8`Yq^J3hV~+QG#RV9cigmrX8{;Qa75JX_1K?PN;mo*hg)Q4z5d53cO=jR6&=Glq)<
zR?%<GyiSAmS%9}HN{M0{L9<$*Z-^LJVCbo0w#u5^TZ7E_)Jgl7LNuN;{LKmG#YdxB
zx_PrX<92aYtPTtWp}ELt+1+M}XIt8J!#%RrFmD|ZRGEmS@<C5iJS7(*{1<@M^A_8w
zy6dWXZk#3E`gZ~ky&O#bdlF0cZMna2=fXDF{2d?}w;9)C=~LwH=$no(d?qL}YYM#{
zZ|8CC$ZA&DilR;3mf6cbWtGoVPLO)Z+E#HCKspHA6q(_Tly>Wjz_bN(*KPejJAaZE
zjDQ|Wi`7uwygL1xQG_wK(WxLYU9xifMz1RmiKA%^9We4%`UmHxd6h2hb9AoG4_d9u
z2m**vow&`_vU_LQVf#+f$gP_aLf|!K3Uu?hW}O81U1`H%0j-ez?i_z08AA-{ey6_{
zH4Exv1Xqx)hti5lO&g6!X;h8N2z#`}+M$(?zjwU^^B_<*?ggUMZZvZ+uXfX#Yk5(e
zrMV#L`&Qq!hV{1n%KfAQR{-?1$J`9m?>})UkVxDRrO{tKGm}i%jr2wcOrc<4&&26p
zn*chj@d##J+?M!F<*;jYze^k_rc5OKL@*w>kO=hnlcTH3tDt41qoC21LgauN7;#*o
zXHQ1fk};+GQcA}VFZHb^bksG2Mw)xpk{Y^NTyUxSt?sQW8U4KX>9NF1nqsyuFHhnZ
zes%9PZC)?~#$1t2*nA#ECPHdBgUXtmouu1M`Mrm2sc{4{cm9uh>W8!hc6<r|XNARH
zsnJ2cjk$HLJ;bl`^IdR`fcc<7Whp0Xn;6HenTky7kvy$saAIJN6*LE3C`kqvYS<>^
z^Xm(?7WQGaao_ub1?S_@N<TRa8axpviWh)*R@MhW*d|k05@bzly5XhV`F9PSWTBX}
zyI-v@+OKlq{S<Ei<Jo?`5hb4<yyRaB?ow)!5j_QZKNAogsFgnRzS0k=BneSP>wk5D
zDEa;atK7$~qZM%H<Dk?ET2=(#-<e`31z61|I{aIa^q!Oc_81?i_A7f2TZy7S8oG1c
z2y3NOVquz*vH7U|LC$o1EcGJIjo0BeyZ<;u;|JbrHQp7HVtHfjl@i7UW*8xB9MzBk
zm*4ooi^TwuH(KRcdfF&}y!;8C+}&copWHjj0K4pFR)<MGgPY645-aG^*0_d*+otwA
zu5{z*8_UDLI|+w^kg76-KzOf~JElzrk-D}9&1b1O{!-cJ2aS#g=wo=VxhM=30v{I9
zveCP~sJA+1sGj|06Y4~*Z+3QELWxWfI!OK$9&;#?NR>JsU4Dq$*S$c-3_C661}gT8
z$P-^H#ai}HTuNO1^nkNeySl}0KN@;Y;APT$O%KTdI%xN%BQ(|&5oBDj=%?p>w)Ejj
z*k&nqb1o(7vg0a|{-?o7De!WHQH?yA7OQcjH)zypb%(l@?s7UZQ;{Qg)!qXz{O2J#
z(SD@mZlih(x>-#H9Mm7zk~3aS+p?AaeOAW}Q-y4pYX_ByH#_Y%F~{URO<yg?<L#?4
zBD1qn^dV1Q-N(g@=nS>)*VArm@3f=}J17_pv~-f61)9CmRPnnvP2h>+JEVU%W~c+k
z@UIE;`JSJ_3{acCZAs1Wfe}%_r7~b#`Std)mG!v%p;e^y@5#H`O#oc-5;knydw;oC
z>EjQs#4#@*yLc{dEeAJ!8PhDMbe(p4?s`9HIxU=Ch$OU_epl7NbX#M=2$nh>5r0lb
z8zX~gY$63tCL*`jzrRSdX(A&wM+%%z2>sDc^g@((XF;IA-FnG;ztEniZ7IQs;u*j;
zq3(jol0oCZ(=(2x!kfxt(-QlmS{W@n()g$nqg;i^^Dw_yc-SaaiAS_k0k(R1%Tm6R
z)Zltwscg5Z0cpNp>_M~PvgZ)9TQxYTjB9PG`Qw%ofzR4qzHu@iPuo>On=kWyg0g`=
z3*K8$_I$K<ISuJOZzsCu4?Jp}Tr$`GPpSlrvonY6Law}wY>nm=fnUVJ73K|f@EW*s
z%kMoO@}&~0e;%m%N;T@C2JRN4xsIMo5=KR)O~JB!{`sE2PAg=^%tyc1lwV{%>~UGq
z1_roim-u+AjLHqSC#Xj^Zc_<m<NC?<s=?@}7^8VAFI@fHl%~!*283~>us{01eWV`+
z5P-IfcGVi`x6_3=7^KSQ5iEgUv<qGWf0c<wv8X0#y>GyQbF*GDpDz_NAAA}(^nV8q
zgXO36uzgH6X^<ti!?b6>Y%1J|D1@`*cq(2j39{(*IJXfsf;Ip5?abuBA9_3~%@W;!
z%TA7P`kH#!h;zOFS_g?<seY}=*}Y0Qy(?C1;bEkDh`5gSGXUJV_Rmtd(8Pmc&o6vc
zbv5}sU}<bZSgA)VG@Z}vpVLoKo~eHJkH%{gQlQ2%E?H~$Mg4CXE(}RV*kGjazyMz;
z4uIAatiUK4g`i?EqtR7x)yn(oJ+Jy!AMw=D+7CCK0!=u4LG0lX&4QM<)YE|Dajz}p
z>Z@|;PY(;N*c(bQwJ%BKat!qm*e`N*GCv4HbKG({?DiXO)F%VOb2D-=`P9|52-n<8
z;WR!5^i}mzrKD_dq-+w+JG*;a;H_fBgxh^j*DHFx8e?~R5!HMvZ}T*wnF|~B`09b2
zjd@QqR6x7Yyx7?J8N2u^CatWD2XtWGz4O~5Y5vrnM=_j;ikRnMwlcB(7bH1@tf>9s
zci^6Pmlq4>@ST!0m^)uPDOzIxg9hLqwqH+EGq<gZE&deit6L?e+7?~8$jngpg5}p8
z%vW1^43BXuWJ+*pDbF{EpaS5gN{_k@lh3PYe<Yde7E9tmla{_=N1AL)gBgOXfh`uU
z!}?Mt@$%wdRJ`Qp<<ydvVZ<eBS-!VE$5J|`?YCZxV4c#4Nca5j3=J~~k@<<LJzqu>
z<7fDlZ`u0=v|InI8H3$RO*mA4;+&dy0CT!9cB>T2HfOJirTOUPpK-dAJ^q6$x1onD
zO*5(y=9;fcv0|J#Ez4gD;Hr?}J1}iTFEta5)tE20&OTvnAM>7As`}@6bWe7^+*xN%
zUOd}7&Tu;s?Xn$jbJ>Bt8;j)ieO{Yc0mC?SU_k3>1Drr_fwrFm^5Ae|3y}D&eOa_q
zDxN;#^_J$iUwR`O%ftq4x%k~-<K5Nx>hGg-E?U>V_^#J=WUHA*ju@PNDBat>X#k90
zdLt?v3#Lp=z?9QWBf+-&t#w^h_-u%e+;mh1-frxt#-=il!{2ot;o1Q^57TOy(^g|(
zQj@I9G3{c#2u?;td_UM=l33nrkeo)A-F9-dymy;7o#2h4%3JL|2PUNPS3fXF@WZa4
z^BY1%aW{LhFPh3!az+f?^T8dwq{K#qZ!+&nir1x)jW$_?RxUL&7j;0#DM@UBht?9d
z*k-e|D9WG}BeA0b?wA<0T5$ka`?K9!ET!mIyo}l?3W5&KoarAwdc&9YT$0G{t%r`z
zo8H|mzFRY+ZTcq{xfG9WEv!DW!U;I;{VgJ^Z*(;pDZ!<G-jnCu5{5$?M-xI5l4I$<
zaS_}ch5(f4)E7;@>7tjZ49=U}yLSE&CK7h(Y1WS{qec>j5ZEbK-F|CUz}ymT=pu;h
za&^<1Wb|0GI&E^#D8YXdgMM_kwYOpFK;=3&^v0pt%hI@W<JHW~{6;qe!I0|uKK>?-
z)HcWMYJiRvdd%X&pO|)wUspcLY+8JFs^wUKcAIzg$5<{Ad^$ZWoT_`(spo(e);`~L
zGzU@&1`ZTXxl@*1^f1Y^TiIhD`?&_G<CCd9nY-Oi$WCOm5rLGY)Y#Tl2*;Xr$8Hic
zbd;AvcV=JQ`AXZ~`aLUv1Is2|nKNUIH?>Rgu;DV<Kfv#PC_+}EWp%Jmvh=%I^dDQ%
z1io@!T;R?Si=C~iguwlg>9U!i=3aem?w2c)eZXjTsGo5x5frZMbx!M}_{v2(@<rP$
z_kCrteT#pu2c{MkhY0iA7@iEbH(*|$WsKWj`quFkCJ-BS+w;5=gA#T@`%2ellXD_O
zBP$?m*XM;Q!O&e>>+x_l0N701vAU_9$a9q#v%3r!vHkYEtvD=iJGNAf-TvkAIA;zW
z{La+PBwZ0wx}?Q-S+L|l>VBQrbJTFZ67Xno*k758I?w<2W=__S>bK)86e8|%URzDj
zMRHm^QmIDJrOK<sgUF~G&9l+n@>&XQ=x=cyg;(z@iyHe%tDW@aQnc)B^LcI@cX)F!
zL94aRv|v`d(%#vDjX&BV)Z}_!YUyunGwOxC!0Au`%A*1VlAHj)%O`d5_d2H1ilq?u
zTtEH+&Edv+4iry22;BT77{Xil$}9~8j@ll-94FCay5!_(*B5>mer4Z!va9FNBCPte
ze=1F*z5XU6hv^@JZEvNeq<j+p)69g7IR@p-v*T(NE6Hy?5zN>yGr`ZJ0oXcChbar-
zZUs`{RN95^&jh6lK`@UBn>&*`ETuIz&KfSi+Y(qy$IiBt;`wnDl3!G$c1DXIMvic?
z5)eZvUb8(m6JUz+s!PCJ;34=svZz9roTiZ}E-tRDrL4M{RBH5EuRONyO4QaA0?;YX
z>X2iZUpW3KH{DmaGZvX_S1DIZP#VYEi4VPAO<6;cF$3K@m8eKob~dA%+f7m<R^oIv
z#S4<Gf_WzO8d+`20Xd1oy)SXFF`AR1tp}&a^&@8t0|BgI%Os*6m;G#7#^ka;RqK~x
z<`yj{%mj+VEE3|x_|&clC&}AjR7_f9vQ&FNSN~RFS@5E_GCgU}oz0**V7MK0e)0_%
z!TJHs3X+Vg)*kpB)VlWT?RlH+Ep-a+l4svAhP~-c`Rf_JnCS$3IMoXR+{5pdvRX;I
z=StX%bn1MUg5$h0=eOX%dt+PRNWn!Ay6<R|E4WG|UE(cc@Aq%dM<l$F0LPpmR76_s
zf|1$Q4{JY)z4L0{Me@i?smWjG+xhtGG`iiFB_tnzOrT@v3Z0o`j8cutztK_VRd#X;
z4mC%C5z6SD6)cqptc;NZ9ky<w{+9so_4I%vl%0!JT&70)P<%zF`rPqoxM)PB<tWpl
zO#>n!E`?_>?wJgYENtuN=cb9uv4SLB!@g%EP}Fp*^ID{vS$N_P=z(Ep$>c+Cze5^j
z?Q#9k#kOWV8`RtrYTkauC(_>V;i{t!4EU1L79T$pku3h%k2oE$r)|Vx!!@6NI0?Q#
z;CaujOV`48eR#_lkfOIu##N|PT=RREa_lHA<?bPT78fj|{@SSzMV5?Wq$gK-Sq4_7
zF}*z7rA(wx=a^xJ(Gw^Et_HNcm;k|0>dTXjs-3<We=-rcPh{fn^p;?uCHB;-;|z)(
zXdP3u6Y|eQJ=17vT)<ecXtGnu`*!QrVLvgGASpqMb1SV2pK-p+sboFEly$7!zpgH)
z%33w+g0<6j;Y7|=!_(UNgI8Yo3jG+~b?0vInwL>bOOrwxk-X>#r7*1Z!$O(S3{{(r
z#yNsXt7elq0a#;U{fq3YIn8VignBc4>RJe8X^E4rTFD!6q&ht2BZpD-K}szuy^rF#
z2>l=C=qYqF{e&S$8b)2>vLVcBd-72+1H9{2)R_KE3<n6V%vdeuS-uqp<{@Q<E<#7L
zpA4Ap%pnCW$L9cwk;_-msSmr0jb=(69>+A)KZxD7g-5n)k@kh=rOUE=8(;7e6BCaZ
zHUupEaM^ux>j$|G7bx`SpeE={rPJem^%acgWS+JW`iP!OiYA4MYjMfA#IwOt_Jy~r
ziU%Q?1vjlZ^iowa6D7d6VyKaO3g`<(t2rkNfNuYqIT^IRACkOx*@*1&)iQcgqst(9
z%Oz#J<R4vHQq9Cx!o_}?wU6YTX~@+HD|B63$*qK}jGybaz3tbvBKLlmGjF!Uyc97v
zH)mjE6v<G2jl-EM$u!B!ga_`3_EKgwPwMH=`LMVuWs_zm?3WmiY3R78;6sT@<AQ~v
z%mslQma2MquYo@v;MrGJ1l?yYAXTpFI%betwvbi7Uxa_qvWgiofU|JR@N`!X0ulSn
z6MPWPaP(xfFhW;@t<M(gflrxyjer9%=oYw-YxXiKDzky@ZqYYee*WkwuYR8i_4V))
z546`$kgN_avjKa%$8z2Ty<cQ8&?1#xrfW8K=T4W0_=4xDn8od00@;F#tYF`j<6D#9
zOP!zH$H;y-#^?8D_9NzgG<3#+CW~#r;AoqirZZqMi#~nX-vs#n3Yb+O0yC>Oxx7#H
zYJ5!Ch0vq*AAHayBuQ=Mc-yh`kEf0OA00xCF%tH<2xNTV(3Yf7f}wZQmW%5EFspvZ
zGH`x7pF^)-)k7ktrgT1V=&WKER1epl&<IPARtT{~FA!2o5`*LkRTW5aih#~>S<zvY
zr~`zn>u)?C6ik(s_k%f$OU<A%u5`Muo!UQ2uI9x(NIO4+lCUx)+93BF3h_M@evb&7
zZD9;JZNmerIbbZhv@!}Ghs?^GXngd|8pXBH2hwD02&jLl>#UcuO!IZ2={J>~#%B-?
zRu%j_D#l~OjTd_ch!UcJ69ZeJw;>q%Yp7KOZsR72J?##YLpJDqW;BNrX2a`j7quZe
zuvwOqffog7bSKa_d_Eg;1<xw%rV+?)DeGC|0I!k>Nsxe$;8?yDbOeGC@^<>IW<_r%
zhKdXVwRDYaWiTiyJ}j8%G73)zSgPi>ty%nE$Z(}wt|=))&3()8WZWZ@-}Vue?lm>9
zelLfItkCsQnu@v&8~BgwLFk-!?{ja!ij}wL9V(-hw0m`CrL)do2?rT`(!tZ{q+t2I
zW!zd`Wi&pXW3tu3BkKNtDp3q(K6>attm+DKBq6>bqpS|xp!;+?OJzL&?btJ$ox@y^
znY*#L%t|sMjuRKUNgrNT47vkYU~w~>E@wEd6j*DL)0akp<uLBXc7?4DhO5br$~D&3
zc!A1HVIQ>D7<5W3Yb#pHGFTE!P?Vxk{~_p9<L#8^?<2FDKLbqy)EqsVS7}TmRFy!<
zMUXNYr^zu&&WWq!A6O?JWXx^otJE7N-5K5?2J#68<|gmp=R*}a^uhRcfUpdg@OBds
zd5tn3)EwD`<dwFo5?FTi<fvH^1x6%08qBC971@XuN0UrmDDssQ-r1eDy-yHJHus|a
zf+saaM{NSgs+DkcCM4KK87JG0P2J`(K{ul&44TY8cva7)S`Oxl5nc=_8%!Xsq?li;
z)2m|v5z}vhLgsK9Uiz<{IzQkx7}+GSA578gUIat3bRJyZ(z03MIV8$8d$4z7-6=5<
z$!`svk-epXj?ersLN|jv%d&hqWKf9A8DHrR4ok0HNC$C<tSBWP(;1Yq;{&X?!F{;I
z^R#$uak8-ysx?lzh)U;?b(Xa3JFxz-2l6miLG?Fq{a5v7ji9%%)=Wx}h&F^_F4yug
zl7YZZG%R#wh(V5(q!Y6V`y06n8H&r-GAja8WFpY2qqumwb)uVnKpDfcrzr05=j#%v
z2^h$HSq_jCTQ!~RuN*x#*C-OvDh}@!nr$E_@CXjRC&=A{S$^h>A<wpitwf8^l5#M^
z)|9Z<yfvXYR>>A9k(-L6d`UR(@inrWj^0&wD<p_%)<}~K(Gkd`Qj{3;i>%qTTqf_`
zrtgeGG@9zn8o@4WR-}6iFo*HXk{XWl4S8yVdD%&~X!EP(Koztus3v)uy%WQ3w^9O{
zOto+BQrNas9&(6kx@B=~#q?W@A;;Q3Z<t^!yA9k6U(H-^CTit}(1we+b*PWm5lm5_
zroclBw#?caE?g<%=io!<*vN5W>|$)w9e29a(Tvpm$r_;hKA9Kmy{ZQq8=7Vna(ZKp
zcdJTqeC_YoCj)lbvs4M*IJw<9PD&sBLAa}tvQF{6c^Nl+_9k$Y9)98@jTPW6kl!Rn
zpkZA)wR?z*Qksj9*jSWCnYvcWI;q@D57vs2nQr8P>YJWfsC7B9Yo``1!B%1*4-;my
z-1ZN&^HGugbN!VGwTHV$dHwM+#m$I)(JI!S@avwM#aH^{0wK{_i~>^j2JVnA!h8C!
zRx{i+(1(tBJ0X2%y*+L2TI)7^v2oacIEvphfcE$Ev~H=0x^$@lswtnc@E&Xn$>BN*
zM=C%sM3vX(FH4Dim1=x`mOC4QTs7|iY8W%fxJ2fV$X4`2foaaaTXSGI<toL6CCB%p
z<7Kvv|4H}ik^jP)8(}dt7L?*DkyT+d28(5kpnO>-*|XOK+6U_+E@f!cl1wq?QN^!e
zaQ`jDCuHVEq*#0=Vrv0c%0gW%q9<**ZCB>wI)KHPnt?u*aBdZr-)Mebs6#t$I8K}X
zU&Jzdb59Y!SB>`Pz*A-M6VD04m%KpH*d!rXqwb3F%pwE_KG7I1_rKxH^x|b+%n=!|
z$e$<Ze+res(q=Gw6zW_v<#xC78ZFfOKXv4h*lR!&FE5=azip!A`WsJ;*QeZAZzg!b
zDtN-5JqX!fh{yk1GLG1d;EHbf*3-5F6_!(|Ew}BDKoWpEa!S#|h4pEslA56E|5Wz<
zT^iFQ-gl9&<*au@ZpbyS>q8tJv*X9KruS&s3^@J&Z5tUZN5A9a73Kej{+pF<{4X03
zxaPFm;(1FVcvaDSC`grn@PuYDgg_?DgbDhSiZVn>wO97vl5uO6r_%gOVz6X9(@=4u
zhED!OtuFf@=0MbQTROXaJh#_hNsRy`93*GXWi5Y^_ExbDaQ8S-^cXa>B7+k<q@uxb
zz`;9_q=v5c`Sa(ou`%rMH}Q0$xS^`O)_>mq)@FB>wv#4FS93YOj6fRd&m&KS#hzlt
zK371OR&y1ksA5HuOyp~CXeg<w8s9nv{kOfQ6O;x?qfhfy^Yioi7Pht}Vi!`0R5%Sx
zX*fSQu|`B#lYdoIRBUf=g9zeUMHOo#F*tlM7(X6=awL%&IqoxyN#8rMRmo~+=4W}E
zxoSU6JKrO|#<Arm2aEG9{-ws|?dw?w;BdojjzBtjSbknXLA~wl->19yYFoiJ1(oCJ
zil=rR1u3w@r>qH)gYvDOI%N5u4(a}<L#HSI=@1FnAzAd;=Wo%`s96Wzf!spki4s_!
zU&Tt^`7vnZ9_0q{>iz-bFB20J2L}f+)%+!wJ#nR&z_N+3H9<83dU+6d!9f<q3{_>a
z`FF(rZ*HJ~9);D}E1}2$7V38cvoc?WQc_YZ>gRHEa}yF0IOYuzqdwW_hyR!~)|qao
zf0Y?3#q^QSj?R{qSSW{|25Y!b=*s6;kom^=^LIl%USU1Yz9XxizWl}n&9_=}2^f>@
zVI_)Wf)Yh`?YJ6_zC=Ne{Yesz7vO*+HTpfSqEi1Z;!gyKPHZka;Gn{i6oi@hsJ8H*
z*aYMYxd~qV`4_EDa*&uc<kt<BBF{Uh$U{`wl<?5W6((dSWuF+3QUzgb-d6!>-zI%|
zc|{+R5|=rS_C+rV9mm|EAO`Hl{ER-T5RH%hjwOQ;>zxvI`LF-b)c>Er)}vpms;kkd
zLDZ7i#ArnHbg;o`ZTRf3=)q!ZGl(Vy{}V;V2e0hMvYdx!wntu<-HY9AcvNJQ8;;hS
zA20s^>1msJzLA&yyHCKvE9y8ra5_b4((-qDdwZSMx<Pu8^by8qqj`IAfbtqdm0Lg(
z&)LN#dLvE1fs)tq%anCA$S-pmcidf{${RF+-1Bs+PphF+F9@~S-1}t`aTxj@)Xrq?
zY#3GeT-r<Z-kk3t7~fr;fS9vkyZ`-n`Gn#6oB}IL$fsBC>;r1F@Kb!BX^)D+!a|iS
z@dA(Bkw^7EAt3mf+d=#o$<b!HyZgkPM}M~3#n2Z8f${zEJOvO_`}G+g6BBc5C{4g>
z{5!~nuYrsfDW|cdz5QX0)r9x?Zmrv%X8DW=NJ80^HJY#d428oVuGV6+{4Qpj-1efJ
zyQ9fdQd6zc_j%KXl*W_O)6<bqv9TxwD~3}7l%%A7rVF`@PfQ>fg8(*1>)HFBn3v?)
zWdRq&a5DW$7o8aP!s@n935+WKAh!Ndr)?KrOjcvU<FS?D;l4e(QZ>LnS7|Dj#%~8}
z68@LE!uYI)_(oS(7lb(-8aI-)486=iR5##GV`H4=e`*0vdTh#DFBW}{lv26#K+^At
zKL?)`B)JTI4r<K?lKZMeEr!zvINE(X0ude`F59;TQzvr6z&VMI=6e_(92E7F10nGz
z?s>}EZ#f7R+?Sf(nJmJmmL}-xSOPh5Wa@Q^$7>akV3tv%;ImHbSwjfyOJMBj?$%{Z
z2FXvdf({TJ7n6DmBDluHk;EL7oW_A_x}_=MFQ_QFKSnS?<>lq^8I{j&??G@hIwIl=
zT@eWX4y15|!{jk*-49MY4;$8EK%)UhfnXaKI}<&Es7A$-!0!epQ;>J`%2ZKM;89K?
zLwNx4&<qg|e&JwLYzh)l&k81JQBhH~`H*nyW<d6b+87t(#>y!WU4H5N8zh(if>`D=
z&Eei&&&T`Ay%OIFfhAua8k$v*GIZl#IWvF8^Kc82hafdBk}<4PZEp9wf|`eC!oI%!
z_$MZys*+#>X&dH4SO(7*^SK~E&IY-^larHft1F(V>P*;VHKY`V9N_)*=7D98V@0_u
zkn_CsZf*5Ghr9U(OXOMHpiTX0u3Q1dkB6IETCL@LTCdg6AtP<Z#rD%u`TgxBh*C}z
z`YvNawk*!i_=IArwOIk<T3wxFyPqlxJJg8aDlTkvL;vCW?*<5O>9qM?8~vVsLb=P^
zAFNx_LH+7+0{Q9uS=(eYA<v;6N*`8QT2qi14*9~SS2wAn3#t$J#sKZDcI9+I1ONmF
zLFo7z#DHm_tKj<yKpGq{2HOq|4V8<bK)<s)1OC)INPtu!$Pmui)>%#DgWAF&D(c$>
zB^2>E^gW-_dV=^3W|jgT{b2dkRaJ;0Wa7S8;Hv{XZU)B3$3dM;vv0Cm>yCcBKMDX*
zcb0*_JR_pjwzE|SbM-1;IjL!Aq$YTCGi%-LCQreE1sPmkB@X=taFu)d(hMRbBwSfp
zc_DT-`m`x9oZja&59(bsVzlz^h{WUm>Gk{f@AH*2yswT|P%w$KOQ)xbwPxVEMupm?
zxi7WtZIhCdiF|(>`JGQqm+Fz*9M09p=I?-7H?4jR3gO+^gbGolS!dYurm~sY5Z$4Y
z(}j`2!MnreBTAoruGcu++}z^V>j|K;h2m5NJU)2C^o#$xmF=8fgKwI!Z$7BwvzZ<Q
z*>`GclikUp^U41u2V#^e$0FKWxY!iYi>*E?8Nz&5SIGP&TLy)-9;PNBL@o|m6A*!(
z1O@Ew?|_@V;Yj8479;z55q5U_$wIY(WVYLzz4ASwK)14@y&JF%gyr5i+Ms%HdwzEp
z3pe1$wX_CERJwwzu)bv;GA!Q?e2W0crGsxb@Vz_f;o;%2DHSs9#(IsztJDl)`J`c_
zyq2S&ZF4_beAzOrqaF<6ounM)jhnE7Oz(cd%XYgteuJ4$kNleA?)zUW|AL?|*ocwm
zN+>vXHZV;U7hmzLSzG=a`dY)`bRkf8er`AIG*Rj+8yYTxCO=ASx^ZtgQ$T3~M0(-X
z9i%+wAY5Avw`OfzixH8HrL-exuo$5<T>)A5MUc+#C_8G}D+AYz48zkfO~vGmellpz
z<U4fhmlq(jj4Ktz(t5QT`RUp7aktjYeh%%54*Plz-I~HohDmGl(i@UTG2g3-vOQ2l
zfQk=Y7^eRhX<q`4W!rB3G?E6AMj=JU$e2*(h?IFA$`mq3=1?RmBy$-eGRr)ZBxTN!
zOsNc&khw(p*RA*c_WSMq9ml`_<A080_r06P^W4LAo##5&TIYEyKJHj-J~r6dF{~4w
zbGezj>c_#uhYyE5-?oq69Cv4>^<8Yefc?a;bz=8?sl=(M(pdAz3&nl%^mocgOGvP0
zY0yZpoy+=eSs6^ru2r};urN7Cr;t6tsqW)773J5KSvNnfb&}9_Ta!kSnw2VJvXyam
z$vAtq@t*G<Wpc*&?}mIVpB^l>L|=%qH4C^Vv{O1UA^cjUrsd`ax(g9%@&|g9YBWN0
zgjKb)wO`S^sH;1E{P-*D?DJMV6Ua1g(3;D^=k0K*eMaS4_TbmB<I=3_Ry@}v=+;P_
z9^wD|g3-&%i!1W$<fM(U@x8FHP6L6_X$<C|932_CvzKqQDVndPr3Emwf%|6bC%zpx
zaWtT->P6QsemiV;<w|yD<`xQyGWYM<Nl8N=>uzBZ#)#l?uiq8e>=;}zZl$bzx4gVu
z{J{Bc8O~kYhE+hI9&HH{ckkZy4SDh6ROzjVa?YM@=)I4PjqNGQ&d$bGZQ{SIyMggh
zNl8gULc-u??C<onw7V3A>wM5P{JGlh!?O)(O360{o;@={^YY%kdwoN0-`+CXb(-Q@
z@XechcunNapHKLx9-^mMI&E%Y!Q%wf8QEw`v32WKKgoyJ)FUViY??oQG;(%!PVtKP
z>ymz~)O5fl{jeY>sP<&%Fc$<0vuCefrRC+R*j(OV+-Q^Y?3pApnUalSY1!2r)lsT7
zB+^tm|L5tCVPQ1f+}wP8`PfT4Br~(JzP+pL>+NM<46d%IcyOZY3NFg!%V<*9HZuCy
z5YB<|8L3Td*O(U6PVLRg%0eIqj^SWu|A{Pti@P*YJeZP_ayI^?e!7{4M#S(XU8ai`
zF=nlzdyw)K&YnH1pg?=fMo&s=ox2fZxp}Gbt1EIH1;cKqn|Y-V-VF|JMT>Y3_2IOT
zEx2NeaiY<lb@#4cU+3P!;&+FIpWl&~bMyFIH5Laj4-FXu9UUD5Lp%Z+J^j0P>`%DU
zLun~zJu9sCj2G}`WG0vy8y|9C+n{pzY>%8l;Z6n1!F$A2nn>mz@EhjRXQKWxHr8OB
z-SpO>RFD4L&zmgHtRIJlOfRv&F?EmqDD@mW@{FRQA)5o{4kaoF@7C4U21w*tBr!6v
zvZkh`Spd;l`StepVtB*`GP20<@Brz9Mg4EyXmIYzrxdATrw^7@rs;S%To6`KAxcI@
zmaAoDY)p)5L1(+?+-q5ub8%r=t{<OoTDT;W)`P_hgrd(%!<)~qh>0gZ@LF2p)7&zA
z>LsVnq--8tZ%@xo8k#5i`bb;2))AJbwzh^^TIMDu&#w+zoIihHrzP21Vjc<;!%Re<
zbbA<^s?EEKQkwx`F)=Y?V`Isi*WP1H!VnRo<4%+(CQ8<@%ei&AglU^@5IDlgiTMzZ
zEZKKF<{Z&IJ&~)j6gN&@ESvX`w>(5oGsnQm&Mu@+FFLodpn#K$%M5qc#+G&Xjhf2E
zZ%%=f+js5S#b?%Z9%2khDQ;u(dKFBhFfuY4ZHX<%83PO=pHniN?0@?70QTaMBh9t7
zhXe!!aAYS=oWM_*n51=e%Z)dGoOX$bh(L}lz544XgV%D+SzOrdl2;~rokkkMk+zwb
znUCm|96fpRH((o%r0U9qj<)vR*?n#JC5o-lK@S<3I?QJo85yZ_<Ps2Z8tcR-o<rWk
zd<ofLdOESI6-i0PSdV6AqXbk7X5ii%)tNZ5k-P5$(!to*ue&+5?11QohldeSTJ9e^
zm#(g*wa349)22<B!t<)JQMc4#q_^-=vZQD8)36I>W`dYm0r;aBD;&<Iyx&7jEv&rU
zT}w;r(xr@k_0M)pTQ+25o@vIH@#VCgz?g(kW`&k`v2(q9$0AQ9dT_j|{Ep-jsvGi>
z_JX7wHl4M#wXQC$2xH-w@E$*=iMP2!Gb6+RAk+*&fq|jKeb~BbQz;e_ss<z_j2mjM
z2$!2wdYSb~R9KQcEhEF2{#<BA{&(S0e{u~4g+@Tp{d9CVSFiao^$kgwvNh%9_-kl0
z-R#CeAtnoC*KbuzT=A{Pcz6PC-YoH2IjPuTYHGT&{7H;#%bur0)0pPLXZx<AtW3D*
zl>!5Ic6z#z8O97<Y>tuXn7eyOcH@>k36CE~#>6z7<y#qFw{G41{Jf%~Vt1CVY{wji
z5S_Zc=V4CHV7c=*j7z|TkT(8bn5c7aH|1{|1Vbd(aq46<ix@6;c8ssu((wrs6=Lq+
zudS_ha&jW0q^~fp-zNDIvol(rvlW_`2Jdb}@R$qd&=eIF#it>9IZyO5mw)6}j0_9A
z%^+rQj(D|pcYntfQh9iV^XO?6{LwZM#SQ>&?ApS@LMx8C8XQn-Tbms~p@XKx6@i^r
zp09Wca&u2BDylzeP^oFmI^8jct%-QIgbQ$aw24vb2Gilg*d|s?4F#bC?km&5UUCyw
z4zf|Msz<(JaK*g=1;et<JPH>nq8YXlGg0!zUJ_xZoj*1%&c@ohdD(s|!^sD(=2};<
zfBG?Ord$O$J-zqqF#SO-D_<HJ08tEma>rT?U*hDA8(!yavw@5`Jn6G$>EUe2Pc5-n
z3VTs&V2)3^u`6GCMg{=Cmb$vBjZL-(hnLsN)Rf)m8u^}{v-)$FR1T|!uTM!CA0OAq
z(h)Fi2;<T<s=rdyZ9$$Rzp(c<rm@U_>0mi|@}#J!-i$?RoU`->QsIs3p$!(3ccjKr
zb91LLzGvKXyGs5*^gh4dSY{?BRC0&K#Jn(j1hXt=zJLFgC*$n0*$6Pl)AJWbhmAJh
z@2>V*!QhUnIXZI^DIvOZoPAAXWB8I)wlIzsLpi?fB9h5$!U?n2flhr-%L4Fcyv28;
zqN6vgUqAP?`&`#{iSN`53_0&rPsX3?D7ba25nyj(V&dCibujlZDdGN8^|j%u`C;#|
zF&>|dRdM1Zk;aZ3K72}6mW;p&_r>KC94r^g*JCCU@T{s64T&^xcSduQm9;fKW6;!R
z4N3gi<Ew0I+GR<k(q4s4TefWZ;c-<>trMpgHE4F+d2&C|wRS#DTOJvp;nKG|QuyD{
z5NZ->jvqH^Yz(U?+o19%mT{!#aW)dko9WSd66pk4WMfx*`^@yTcBNaPzrTNaEmH10
zCL)j${M+8V*+xleSmjZQ3Nzgpzi_&?`is=eOnw0Yb>c7+u1<Ze!{@A@!LL8>AwCnY
zeOuY^|KdwdNfF0`x4k9~1ut{{|K(fS=+reeRcX}q^?$u^Hz=~|!I}2nS1)bRosLVd
z)tyqOy)u?EJv*x)C+Ctc5bj^OjrfMA98>|)G~hAoMjWuAQ6Z}u8n$|bg@%3{ALpbZ
zN0P*twCVRX>r$2xVXLaDHg4PqAb|Xd+UF>9u)lx3Lgc&t{xiyI5)wY0a~#Jpb4^J}
z$vvMNeG<~jo!G@;oc_n;CQo^N+2yhPBNuGexW!zC%}<*Ve}=2)SFS8f4rGkkiBC+c
z(cy$s<A;Y$oSna8Vpje0=bfFMj~+ip;r59rH8F$?$ody*CtqLR54HZtsg<RruH$cW
zeSCZn{%kK@5<#%WEFXZnraAB*`(<TiNALGyBREM6fB!bf&A~y70ebz~rXVkl3J7!|
zqrY<atj0ZXEjKq8iKS49bqhJU3xHfd#z`%MUf8;qcNmL)VPPSC8(AlP_Ucv3$JUve
ziV}7jL&@!lg6!kRkElk?z!=%v+hYhH#)Xx8EIMG%pz^-FFs}VjDJmvrY+`~K7K71a
zk5W>$xz{{>nt(#9sQ}#G_%$y5vf=S@tMliNUV6istJTzL@8p!sDlaSRA8SzI!Xu*$
z#;PzszvK1mO<T8GTUs9UwdyShNKD0*%BPDHvNysMnlrkudfvQwgOCk|NmEm^yQ@n;
zMC5)&$$iQ6KHN7<?&<B-NmJ@^Na@1tBBn!tn})eY8+3bWYA(!<Hv5JwFE2lo^0&Nn
zsqgLEmsh*XG3*F$jEIcfA=%K-fZsYgI&R#$4=d!^jqe@j#4sD_bnLghc$>kh0leYu
zTOnp<W^V3QP{atmUFqt+R2wolcUJVr_=e2PI3RBOh@ZE$wY9Nn@z^?O@POi=a+^Fm
z^((sbzkbe#>OQI59uypm-(s#^N#_r_$xV5>5|i!GH>!XC%(#C2dQi|=q~6Py^ZQ3B
zUT8SDqvmyUbK|YacTXE966B{@q^3=bSf!wk*!#a485=Ks|CW=J^X<!*fD9AM+ZsCn
z^l*>xZ~C_NB=L#LmhDIv;Z!q#97ppJo;^-_4U{<{bW&6Jg$iIG;{N^nF>vX$GBK@a
zctOyzGZmC{DFfKQ?UIN%U^4QN!06~==jP_X{7_4Rbi8C~IoV%YdzSApH)<6S2>qp(
zF9L(_pr(e8uELcsva!;0Nw9Ciche5cAYu~XprMF7qI(7W17?IR&VKri`^UM9k4Mg_
z@wt+L0oTr>x-A8Hxw&_5i}LWiZfOZhTZ~^>_HP`)-iSvU1<V3ssC1n*b8z5|Z^i3k
zj3&~CnHez8r;(A@`~&UnM%LCiFN_ELF@%XlxJbBrXB0>EmOIl_9mv{Vzn*S;C<Ps1
zt<O`e2e5e95dt#GD1Rt4wAo!s1$1?EIFB4b;^sD}0FL<WvyKc=Qb*#yZev1P+G(O@
zxp0Las36yE-tyJ-1zPsE6e>uXu@4>;q4fg86Q!hTaWw(aiJGtrtLFSu@3ywK{EMxi
zEzZ@D8i?EsL~xcIKxkWeY5CP0g>&ZsU=X_d!H!bz*nyIP<9q93vR%w$2f0lo5`PQr
z=}pg#rZEzW7y`wnn!>45@bdL*<#aO@l~C~mRJZCthKx?TAc_I(VGvlTlR*qMS{#q&
zBYt4PHaV{xv+0Mp;t-SO@$KD-6bHx>R-*ih#RUa(V_mn7`-R4uihBH*LQ#3f)}h?=
z+%G@L53{>b;h^T-xrjW+8pzJZ_Rzu&Q`qn|O;p<2+E`sY0*4MBOi{f5f?v#SF7@F<
z40_x(`x>zA##Y)F8&NDCN2p3U+`*#Qp)!3m{x^y)ensrv?UE>)>O1)b1y9<&_x`I$
z#J9vmN9VdGU{NC`?|hzifO<m~%{WO#S80+w|B=etS2rk%u64FYKWk`^PdUoP)$;1q
z>A&hlT)KsCgND&-!gTLNL{dBcGAOp}Viyq+$<;bjP5)ptZNJU_wIpxN(Qn^cM;rzQ
z2CS{DK>ze+ybxV-0VQ5hQGwB4$Sp5=dXDq(C@*f9Ui2_~_Wb!Uc(Xu`%R(!^9*>TX
zV-yja?gyYVlnx*^^YV>yUBI@Dj*f!j2)uop$rtCuJ}Jn|EVJT=*^R70{r^@t-)?JD
zl9aQsNXyUX>#NSlxMX3$#z(h(I}aG@r%%PrivGP0zi`rMlHP)w9%BJhw)xk7a40?V
z5HBTGwLdsdTTgF%a<XNvRfX#DH949Bm5Oz8HWH<W`sr6MRe!Q7P2Cxx<HyxCH2zwW
zs0mVsu?pEVyT3U}NJuz;d*|fns8``)56)cSkgv_=;N9zxJ{8cwF*C!<$M<!h{21f&
z-rk?cJ^+-V7muJu8GluLpLq2lb7945X6uz=_LymlEmQ8N3k~Mh*5OM}9Eft7){N<5
zv2`CotVcu$+Vq#)xUq5JwyZ=kR;<}z=<xgZPvd3_ce|RKf5zuOJ{Nx#CCur2hqp_b
z$3*CHzv_WbhME#!8Sqf@rW_LxN>Ax!7G3QFR8PLS{a=db>kUD6?o7lc4UFWX4sdjG
z8WGeqvnti&3TE-#cle*R^Zom}%F3^U#eTaWQelFtpn!lAs)uo6@)@syfM@bc33a=0
z<Z**&P%W{sboVH!BoWbKVq&oKTQpL$vIYt-Y1-M@VHlPilTjn8p*ka;rAMO~s19jl
zc<AKMDxe6vjEeM#nEl7~OIuSrtpF{6hpVf_WRxfTSh^;3Z7Z1<AIvFSkLNXQ08fiT
z<kP255E0Li=jP{gu(F=t?TmB+z<xg(u`akfQ=1QEXJ8<O<ju-T&kGkG-o3khDLiYO
z+E9SrR6|=rar5R|p`p}iF%8ez6c#m9X!R}saZ&Uu-MVUOBy295zIfB#o>x*56`O2P
zR{1bQSM_vkWp_ZG5iRX~0G&9*c}&<9cAa@N{P^#p`MS+E0^C(_ad2crMMWW;VHNPQ
zuv}dE{j1iW^4QU%Hv<ArD=5rPP01-LHn+ASMFs~1AVR%<^JenxH5bvi<m3^=ifqH`
z-@qhKh|<kB1jK}XsRLw=BPe;WgP43lH2c*L@mypAN$B-!9yn`vM|fxEe=mnim3nMM
zUNkjXVI(Udxd=P4tMXd+7X1AA6RdK7nG?tH<BNb;Km*2KWo2Ya%gg=!{0fVTZut4x
z3q1%43Be*o7{K{v>z5bR-aSf_na3*t!lS9eZvlfq6(Tr6wuv%6GPY+Qly@K#A}+@+
zrkPVwRPB&@b#?pRym@g}&f2X`SK<wrZZ5+r;uA6RH#L>Dv^jilAHD-u60=*y`1pXG
zdYW_thPV0k$227!@(n?eI=YFWRM<V|R&ekNvi7Z8w{rB$5oJa{emuBn@gM48c7MQd
z(mQXEBUb$-JkSaHOYD&?=clGhT&5F&<v<PG*s^y9sWf;G&&T}Mlbg3}F&WHw%k#B6
zr}gE_sfC4>*4D@ehkf;`JY4a|O~)x_=`gU=j6R9U*TmHH4(+j^$~97!S3pkw{{0&?
z{^nhrQO7T*3{#tyPdtI@V`*XG`Qw9sQ)X4wRVZ>JjgcorMG+IQ>jfP@D;4qj*Y;Gp
zJ7YE_iXP;1kmvxXyJ%>JzkYT9(#~va`>i{`msQWy)Dq(kk0R26TM-qlC@Ol>)um3*
zEA~|?99NPcPRZLy+~_3VAqh-+`}S?Dwmh@ueTNPufuQ^AssmrFTf0^xTQ52!glf+o
z*5XoL<4ZO+aS;($0H$BQlmq+v<x9^yAgWT(4=9VNBmsphA^NeBm#BUh#?e4haKQ}D
zpFiE)-CN_u4Aa-%yB#a+)KFhvUspGR8OAw|;p@t_By-V@0{egf1}a8WQeG|QvOdu%
zXZ)kIeP=*7N^{5cjp~)6+JUvTEiE=cj?jI+<T117Zy2<aa#7D~J&zom0o@Zq6fSTm
zCCz-r_0ZlLbrf=+7cpiRTFTRR&lm+Z)7=XRvBRAJTEzwd;(j?eSlzg5;KPxdia9y}
zh=2}YTMV!Rp)fABci)tVT>Y3kwfmJz^|JdfUhY!X*B@{m^eiUgHNBa-Yw?K}pi-lY
zJMaIm%GeIkozE2H){ywskS}oi)#&Q(&*1~pl#5TiLIyXO-M+m|T=HQEhDRWbF7(-A
zx~#CUaC(qj5+gH-)CSD=cWv8d%;pvT^v#<E@aFov_PmrtjhOHdThQ(fJxTbSI~&l;
zn)p`CNsi&WxNUa!FjxdB`2-yT6ycp51>avVDjok*N45p92DW!~0h1u8&11?l_mYFk
zzkbP9qL&Rm4RkH8G**`y-L`_we@fE|S5(Bf><}-Db8~SQr>OsY{`=;PzsuVMnq@a0
z;yWu`Uy^l_6BRaIcWw~7k3<q*Ju&=8oB5x=B=PGU^Bkg5>_85{>)_p+(JsH2UBPDJ
z+9UC)(b18--LOn*x9=pW-AZH)Of1pkiX>9T&RccFM9Mo1ys7~<G1LWxg^No|@h99h
zx_nl@>hXI!ArRBF0+wp}`msu^Ce-V;`CrdW_^QmWm?6CJIEsVyYbCzlMrS!vRR_ko
zVmImP>SDrjFIX(>9H5-rbRrS0pAK<+b{m*u_mN{#aUv()-WGtb>*(kZ!`x)blRq$)
z7dudZpPx!HWT#`L%}*D5UETZX1fM|iZUG1gkB)XltcBu;ynWL1XTigV5@3RZcclso
zZ*5o1p+127jgKYR3_$M96coJ2jyc=gUud+?O5kwn2qU>N5}$QrYGwu%7R9!0MNgh!
zaIL6rP-a5opFbw;G|t}XF;#=H?j{@bbMB|C@(KycSR_I8Cjv9Yng8$!;>AzRHqgl2
zVGxUR^TD|>e^&c*FT^)s1L34h8=(aJ!0>0FPd|VESr<`U@DFwX7C1Tjzt&I}3LT7I
zcA9!GQ5x^&;$nq*sVRzQtq(x<)S?IeV#J|bNUquE&y6qB!7SJjgM;UlY33n^q29+O
zepgmj=5eyR(WpawVD51PDZv=y(A%oLyucc(lVRmdmBop=s-T2@`<9hDU~0%TmO^tA
z$t?(D&v$ZY41Y4dqnGrz7vNK0UtfmsE?lJU`Q^pSqxH9C4sM_EIqR3Po^+xfGrJMo
zuX*4iy4`@J@KEV(Z*QQ&`dF|o;;qWMx*4bs$5`>}cU$htbs{?ruany(yi;YZcU)3w
zsWyb5E@k|-Vz1R<Z;yn0?9b1bHPr~1r%ty4B+7k>>Vz?Ix09j<TiT=^h<Tj^o@QZ@
zU0sXbF^DYQaqp2+P?`=@V{S`U)+#wf61W~lN?^Hp=MFC4C247CAfkW%;&XS-AoOZp
z5C%vu>BQ-gl=yJF+_oWyqN>dh2GjfZk5GQ%)YN4O9?5beabh3F#~;MU8)|E(jfvxj
z;;~pNpN}IZLR$VZIx1+^v`4+3*rJx}@b=&tJS5=6)#V?kW{JX>MC#o5f8W6S{(s-%
zMh=<hLhTK<I6M!66yk>~;txvd;9a?Ce*D0jGcJ7{$@|!$W5>QHci;!4yj67hAEU{C
zJebd$AY`!xre|jE#{vV&2(#7F*H=_lLyo;DJ@V;OWJpNc-V=O*fq}ol_L8r^hBCB8
zx8dvOsVf&S0Q(`TT#Rmw-A;=yM=TUScb<TmJW$IqXqlH+#Yt#IR#|zwj55%@a@8wJ
zv1RefCs^ML>A#i+SBmoU35|r9cz*a`I95}1V(PVPYug|0bd8-*(b6h0stZJsJr7MY
zr<00AdawS$8FzRsf*?}7r>7_WW0b#OX^)WIc}vT5teqJ}LQDsRZ2K~V@tEzqf?~{;
z@5KtKTAoqZy*u*Q_R&VC^D+h(%k|0}E$|)+4F-I!;_5Q=J~3p%GBZ0%$d_4J*2c!Q
z9<N*a4;9!Bp1gSR;<|O$;ROMlO<9D?V(k6<gruY$yLP?l@8>Lby>#g-SX$^}2*_W@
z#$sY)n->=U5I~@HsU-1W1jJAjN&N!@sPPraEi5eqF~AvL!|na=%uifM$kTr#Y8+_G
zN=ih%e)l&v-dY^3s+>19Ha07^9kc<|wX%AE0yHx6)926T=H?}qUFi!NU@GoXeH<H;
zSMG#T6TMUUs*7pytw&I4z+~PI%>>6~hKorOrW-hdHC@v8Vq@D0h+A#^1IS|F{4_N$
z8X56|N&pN%@5SsQw#9OKI=duxBQb;@Fz6xtc5!hnG{VP^!y@Dfpm5{H4fut^`}A08
zxO9ugu~9Z`*f9I4^;=(Y4xnHR-=}G?)s|LPaD0iQQbR=y7UviqBmtv_n8%M0Dishp
z$Govm0aB-?rr;Qw9ITGFko*VLq1fR-`x~sY9@qCD(?d|vkTa}pJ$v3pY0Jvi!^HsJ
zV$=GyWMuw$&VUETY17Dn18dNiIQ#=L0Lm;N=c62n%Tw~!yVDelzz1<fx-TtQm(ucc
zad9y*J>qlTOY*k4L&b}N2qGA?@3FBlsNT6+nPUlVnKo{{cfv^Togl@5yU6{NfW9=a
zn#L{KP=lkMJ$?EV_aWs;US25M?OV4lJ2-^)J(ySq8M~X?fXTPN+&S37Kt<)5N5LPR
zf3u&Y*_-ZeO+n@miu2&V(Ceb2Xzt49qb3!TQmQwJ;-4mmo0gVu38hUNzrLoXEIGl>
z&)x+p2fH+!eO^^{2jeh|FlUbEA8eqs^)Gtog&S=RRVSwdu|Y>lzAfBth)SGNO-E;J
ze7xzy@^{L9K%9btu;|g*#U|f?fLGv^qA*n=Y7+~~V~`@H&2>i8z}d~s&175m(d^xO
zn%u(5%7p#N_hOn|yUNPT3BKW`BD*($K%}5D)uKYT=GZ%0GYP<5m_-{$c>S;#Bp)i(
zP{_M>eVFjZD!~3(`D(Z_W=DyI*8m>BZQX1B=D3l@7G4ttaz;cn@Ub?tFs(4Nuwa8!
zK79BAXXQX7OIJ}-L!GCbs6_6bxN|l6MrfF};fC0w9SxZYGq>C=NE99mJr}_zA?SN0
z%SI!{3vWRvqBOa9QBz6j>B$owf2v*G=o^2lxfKZsPXWaT2jdf27Y?xj)z#J2jdLn?
zaO)@f`N^C<9l)E**7jjOoXL5Et0=vU^1-{G?{J^>dHeP)IHFV1(qZA@l{Gf_s$L>Z
zk;MpF>wwL^wqY|E;cz^z0?EIw`d%U2D}aPBl0iQ_&dx4xa~aDN^&C8~fN((&>ukgr
z85yzFqQ$(fLY2j~iH=-g6?B~${=@M<IO*wzn~8^Zu=tYuJ;VR*ki?SI(bXON@w0)M
zIK2O=fLr1cs_)iqmxRFaY-k!!hIrJlH2?KG9x`zoqt{`+qWg?I`CgsK(LQtY^YCe*
zz8wGX;ciq^39dc3ZT3_=aAwil+Zz=ur0Mk=H#S(GygYhlRa=`v4czqLxT=j9xGD<^
z3jnfPw{H(Sl*Yxyac_0PfO`B8Br%XMFf^<oh$q-cdwEUB8HXY4iD0+W8XA`N>ehgV
zyl7(L;_eP=qPhmh{M?9V_I6(XIp9}9rSc&zuEEaartn|ckcfBe*l}-iFD=QDUPPo^
zJwpSwMwu?3)OYYS!hm!cRssSRCG4Y-L4fMR%|r}bJiXUPd`kG7rO(<D6b0-N|FiBf
z?Aq?M85A@gV*o;CHM6^&1ddBE0?>;RvQLbUAH;(_kb=5V-((0U+SIhR+M;-}v9SRJ
zUM<(!YCpVS#HuEJzG63|r1^}fxbXTnVE=D<R;&Kq-4(OH1*w6$TR&!7#n=MNJeRI~
zIuhyVSWw<4c<roT^H$Q>hX0UKt1kSVP!~V=Go<bYV(hcHTjdMB$mqR8DRc~IwP~O~
z#l^<m3X5+-=sB7X=#Ih$B9?m9Y|x#eehu8H$;nC7R4-n<K!t=lmf2SiOip)qH=<Z)
zrz7+d(Di2iezhOwCI{Rxw;!=Kyqu<ITi>O|2nC~4x~w$&@Y=gKw|WPQF8tV(l$52h
z0EoOhP(a`?@IVR1d;=AxzOm1r@yMYSP#sK)9SG8~Cq0FAvyzidVJm_mFWf{oZ6N%M
zyr$-NBvvE#{je!Oyz-?2C*<q9{#6m4C6k<#bciqZe+qByzv&ZQOp|XE*LsEG76Vf!
zupAW>1QFHV-F-|@(5yu!j32A6vr`SQ5X@ZEB3m}n8UoZ6ok#Mg&z@~*Z0v)d6s!Z_
zWV;Xj+j$ke3Ft$_<1p~hBxz~inOJA50#jXPNUYM*KYsp<!<IzOL$K!1$RucAl=IkT
z&TuA!0uT}rK_tKbg%Ly%>O>?QPF7ZEVd>)shp(iTOdzUpE3|cWG5ccOo<dc{M4kJ%
z&T0d&{LP!>W^PEO6v8+zWC9=Y_n$r$!+cy?n}^*AY>z8Z*VM#$@Zhz?RN~<lFfsnR
zP=aJ)U)m3T=#_?pGqF&;W}A<x{POqp#nYj*@|ZyBz-8bY0-vM@q!tEPa8Psu@P$N1
z9`pENm!_w1h0?<IUzagm!dW4hL2R-pca0<QFc~~lVwYkED4~J;i@{2)bD(sgvb=r`
zq3F2#0-`3w9^VjH`|-32*#lH(U^zy9Le^UqwPI4dR(?54zJx*dZ3C7a>?cSR#PfR)
z9gtunxD8vlI^Vs!ibTq<2r&klqHpUb%6<H-0s`UI2I}gtS%9p(WMrhGp>e9i5yUr2
z67d61ii!v;%Ox`tlajKspRf!WDiD-c(?Q(6`l~%Fcm@xj-@U_%ItAw2JM3^_AycmP
zIS&UQHp2LrT(+i+4Dm1zeAJUCH-m!Ac2C2M0?z{&n|S?0JyQT{Vk^s+U#UZr%I`E+
zu)YP+B~HKKnl%b%EZ}*Rf(maITfKhYi;01}-?*I4lT=isVX1Xxvj4QQ8cZ-IeG9@?
zIaz9@k6?mqf;SR(0*^{c>y#xPMivlo;o``ZgStOZUVQodxxd=WP@)iMIGSn(m0C;+
zv?Of8vmJBzANTn&r{y2^JqMVbHB&Nh&k<<B-rP+2f-J+6)I2T<OlYPvQ0X2?rJ|?j
z@u`K5EAl>+$SXwEg3_8(zpSA0gmiScslVp**|nsG1HN!WiGX}McB~i$Cx{EqT^Yiu
z^qYxNaxET(w4Bm~01Ij66#4YR!bz-kFmtkZ_U+uaPrlkE`5Tm91eTbvFh^Wd91+{(
z0(|ybc_yzQ-KeOl!rcr@Zo}0N2nae*b*QOvTC=bSBGLQ?tAjN}JT?jx&x-{+1RUrV
zFi+uLBerZ@zaE@D78S}2Mq%NfgsM~s8WfMoIX!m&yd-&WeMfuy$JxaRnIG_kaT!!V
zq5wtdh1P(|Rd*T|Anm?=aY(FSYnxn|7#|_z;0aU6OOU|mR1Y4jz<r;ab4-zhst0Zn
zwlNb~UFubdBroUHJxiy#&&u?{EKZS&c(j<Ykx@Is2oS}thTlrpl~_BwyFX34g!)Z5
zrIuuAaqg--u<O<)Kp9p(zF836F?f6rq-IoW<Eip@C!`zT>si0nr?YrI6k!ulTg3k3
zb7=3|C98h_{0bES!NUW3C83W~P`FuaS$)t?ITYlHE(FcOCr{8<ao!Bq6p|}mKo78R
z9&+8<0B0F5?+i4{rp$5r#HNP4+6)(#HONP5vG-p3qsq5^j`b7WF^NYH@fc>n_!GRy
ziXaK~Z(98tc>ffK^XJbyI?nwMiH={9<qy&ww3L;WK6792j>T166X=tfnVh3ZaKCS%
z6})}t2rsV#((oC@lyf>CMKp7@2*d?`(77Ru4Ytxpu^H=;Ue6$&K0uewxcW6fYv|^X
zM|irB_w#RJ&wWR*%+3zF^SE+~HL%QnXrp3>p~tk0l2RLOFYg@gKHdKPCXGO**rLEZ
zIXSkHlDKboho69O0;vzl`iMb=)+-`Con(0mbIxN6XfGYBP;?5_hR4Yj)RCc;uPWsa
zbOrR=c2rhWVCv?IrXax=19k)^0um84>D7I^cVD!$WTzrG$tgZ+l0ywndkBAvuyrm@
z^g<4G8$aF7odO`H1#iE7tAzokM|6fie`f8vxGJTZ+fpi5<WUH2B{^=XQNPCJOYkfq
zTAT*(zLb_OCP-XAc<9h3M%ZAQWcRmtt&G7)8*R(8^L%w2BwW{p@n}E4x+fQEqqy~O
zv!mQg{_@(|=<Dm_Kcm0ErvTC!(2O@9NC#!sF9RVQjH2S!*}K5O!w$cG{Q^-77w?@r
zia4Ze<UQO&P?v|Z&;D)h4N12(HBHXSqT8{f_DvXV9F7b1D<!?C9Qkp_&u#aAm1)8p
zGP#dV)a58Qw=MW9bc@(uxpMZ*8IzN^wpjQ<K|wV&H7db<?4OnF`=B$eEUdlU*nwRK
zCj#mVxQaYHJt^sg=h}B-`E&Jfu&gEttaKELct2G5oYd5tY{5Z6DXf++ZtvyxJRlv4
z(4L>4-}(I~05W8Sob2r1cvK$jAN-~bG#gH^zLnbJpt+EIe<PewLzNX2q}2O=s)onO
z$*A+Q!5@zK-hbWO+tB~$;g$taw*T&*C1>PUREQfp-2%fDY5@EhsJtDL*r$IPaT`F@
zO>Xu>KLH3rAoVDBv#9S++bFzR^q8o5DBa{ATEr-7G9A&*dsJ8`z{+a={O0zifU5o}
zaz?Zm!ir<<;^LyN-US0s>VX@YMy96fu*J8xCuU_GSxWnFk|)YJJxMuv`M`VkI?#y3
zAa=EB#KADFcA<A0z3AK8+Uv1kbJ2tWpB!W`V>4tf&>Ec1Tl&6AFBl-%6hWCYI~Kxg
z_g);tn&eIJ4`9MURz`QPK}w0j_eDpuX=Urd!h=g1QDJNe*CAp})619dXBV$rxw38B
zHeV_b7~mc8agbti1@Lgotjx?Pi=GqGH4W_VKsF69z}qt?j>QJU97G%%nOBv?_o+ZV
z)IXrD427Sdzryu0xH`~5P3~%_wh_eMChPri?3$(goBj40mC=70cz4*s!0XHgi3-Ou
zeqydk+S>XE9~>X1_W?-NC&#wXi~d0Cm(`9}6-K~V3Xxo~=qf{vc5UkLxi}BV70@vh
zqmD}0ym`$7H5#UImBEXeu%d>CpN><3u{*HN$jk*NbYmMG(H{cql0BSp@>gD-VYO*2
zgF77+FyuN7ShJLrLZITRs@}VQe<_Be+<xfPL!~{`)QJf}TATp=5uy^`qVUX5VId)i
zWy*OWuHV|Q;-j6nZvTgn`zGygA@`{6!9su5gyE^RBu8CTA#Ll9uR?Bs$C*Wsw8*?~
zy@idft>18dP%1-%-6{U7#xwaAZH9-I-r0ZL0nli?_zV8k%{8h+l?js4^-Fs)Jh}!Y
zc0O4QJ9i?!;#prWMAK;*7#OIj^IWEle8fY-!?DMk`@0{#^<J|MOSuYd6rffJP$6=~
z>UE+_ldQ;<@jduI>_@Dtrjulx7Rcp5cJUrF#N!JY&`pKQi)U=+#}k%6^eh2U{Y1tc
zzESM4I0IY(C13#%7#gRCMe1sUQPcfnIRyos;7ue10OCP0qs**GNjWSeR06pcHX7KV
zfLcz#kA|#BJOB-;2`*+%n4xEGdBMI45(DjZ7qK?+K2HmOpcIEbu=O!iDr#!a->J)x
z9|s)4*Xrx(y(ONCNGI(0vae6KrcBNW57eWQlmoW&@j+stgd!Lc7gvSPLC$F?LXxw&
zaNz^?0<1-9hK4!AS=uV)8J$N?V~4C+vxY#sy1XdB0kAI%?O)jI_%Cf52<Rz%wYcHv
zYvDb5G^9*b&Vlm68|BFc-rhd`+Yo)1muFjnlqWhK2lIX<C$%N3{bZ6VpK{@O`qkXV
z1`bF_2MDTDkao!#t5<%D%!=Be_W@x$E$s`ymU)aBL+t>>8FwuR-r*j%@MJZ#UZ9uF
zDCJ&gD01DUOP6};pl;XI)=GgX>+K~<hPf5bO<!<kTefbE<kXhza6Enb6&SL4Xc2RB
z2*W_M+=U4X?{2$}b+X|TKxV=e@&5h!g=wQvmP$PMlcP{LG+1%>&Yfr?xuN}4=GLy$
zM?T{65tn0D<!}%Dd}xT^0VH?(a?!oleN&nqEO$;04uD{%PMz9u_>7R(Zx3_|h^;KP
zu35Kn%B2Ep11lj|v7O1^6hbxLm8Wob;z?!Ecw;2fJRVqx2pKXyb>FrM?Utk^xk0$A
z5Bm}i(`{PsU&|vXNH20Fvy-nO&l=}}x(PmKfmakLTk-U}2oW2Va*ibz9^DHFXX8Uq
zyl&MQp^wwu-97Cp2#^_AZL!6`8=$Nj6-b+y0N1M#tvCz&P&J-X>7YqQ8b0V!QL<UN
z;91{g^$~c~VG|qR6C?@1Cwc-!BPdTe($(t|&7RfPDxNv>Xi{d43p2<f$k%x6>%;VQ
zYm{jJ!8p8LwfJcrpnB=4yr$x0zYvIomxHK&Km?=uIosvqy)Pp*)n)GUUEbnXYe=c<
z>A5$Ol$hWWK@%o0p1RY4gctC~Nl8jZvA_dc#z=eyUIW`~_K(REECycx@Ag;x(f`s!
zD^B@gXo%11?a{hFdIE&8IV!MoOw@mA5Ou0fP@l|(M@Oq1_u+HJcM+aXy#BXd+!Hk*
zE&;Rv65>T&6UVfO4{0XUmrasVQg8+e?LP~g_z$hepNf1v5-TWFHKzl3cY+ylRQmz!
zaA}Lvp>vV`s70UNPrHD2T$Q7|V<Zr5FKg-Qc6WAyJlFf9Hwmx)6g1v?GO`?K{}8ac
za`E@xz2bO#(lYEYk=%yhWZ{-oCB%4A0zL6<tShr(D}0DJ%ga#kGX5O(i7CRATfqa;
z85tT8BLF<up93%SSrymN`hkRfmmoc#a;$zetj-{)|Di-tGExUXE_o0et4>EKsHuCw
zKb@#Sr~-h37#JB9mHO93dOvOC9e03}c%Aukk~;s9ZNjJgLq`7Z!cW;DOed&J7}Ihq
zfjE4=b{*brE<_((KQ#UJxp>!yIg>x4XMzZtmOI|OfhSOiZ`_K|At5kJ7!jYIPy=Y4
zl#|0vMGob&X!1TajDm=23F+x$h#5f1Y)6h{rKc0tufgi-^rUqpC0n3NTtEr<3hbpf
zcu$JYBs~9M2Ln%BoB^Tye*b0*Lm~8&<m9^klaI#a+%s`}Ps-OaN}oHI140N89SRR1
z3Szp3lOtU3iXe?ScMaX7APx8qO9Ujc(g#1rTTmNVS@l0Y#{kLYFtd_V)CuilikqO`
z$HmbzqS>aet?dZ_FKPlDXl_x_6-P(4)z8ZUYgtsZOID5a`7jfuJPcR6DNwSZV8mal
zT;po<R9%as*yewTiX3-G`rzw7As6h=MZoE?&(H<?kX%>KPYUN(<%G6qi^``X4))zj
zkH=Ej*5or_q5|p-I0`%XXYDp!-gLU_HA2BLs99+1+OG@)e~2(E&&8Fdk+mCVd|KWp
zs;<TKNo7LYA8F@TB!7*nciP3{q~QUoRAC^q`4^vNSHCc+@;WuI4_5~ca@T#fkDtCm
zvLz=zaJ6%ADuK`t|9?#M`0M{3MFwJ^p-M_#!zTRvYE?v^6UTxl2o97txU>HLvUt+7
zssY4@kr8GpayWv~wA1qw^wPr2jEdbTblK6#NfffiP=@yGA&hg|>Y=HvTIMDE-63zT
zdMv~#=LqdJJsl6<CHhfeAVbQ*+xIGV0FWRV6S{mYI{u`jI5;>qF(R3Rqy{}<nN$4y
z`Ew)zL&HII(Sb8VW3Lq&m-R~oNo}Qn9W@G85zn8F=H{uz#ov)@kRxxQGNzyiymbqC
z_b<0DjBr5CRFY_y1Fi;&;wsJ{9MoF5MtA@%nl90DJNNxN*uf=uQ?ZuW0`X|%c(7b+
z*W!_>5bOYtLAt`{DS!Gjqi;b`QPBS5c@R9nzhIf6i1npH;YGlB4jE<mt0Jvs$g!7@
z06RgrIXhQ_CGOs`&-(@8b0M|Wb`d_<+js8ZVDT>&R<r{pWiT>xWx*nz6YMJbu0qOy
z1p@s6(rIZ4HP>0D&4aF==*)~jY2ms-*oBcBs0XMXm<-QL1`k%{GJTNod0*cWjBbdA
z^zez8n*)cSdi4$YqoaY$dRb&?X*n}Lk5W$*Oa>aeU@yK;M@0&GM&t+_Txr$HZ+8rs
zb9Z0Dh5!2XYyJp=Hq>8Fi&@kIwGbkaD}T+QN(VFN8-jiY%qh54`tT({4IUW}vhdKU
z+gkZ%TN#JJT|R)F5xf%C02(i%lkZ1Gy|h+WQ32S2_6ymNaTs{Q<(CABwBgT9HGy{+
zbrY!k^Jd2%tax4bhD{}J2h0EqCyg%OhJ1xu6wP)#`EWgf1UJh40s87K_B0L`y<g&l
z?iFUmRjdwAWO=#BJxY@JZsZ9PiF^9<>qDcL^p!*iod9ka!hEDpJhbP<3qY-lVp$m(
ze1d{kEm%<2z~zGb0<x1L9ojt<ePDq+W)P9^;GnY&X9;EIlDT<E#i@r0>K-1V!Tzc=
z-r3hL!l9I)4{8I%A&4p^rvq)<aSLEA>xVlW?xfZ*P+o+Bo1PvRU3q091~sI@(k2QD
zOLOxdfIm!|p-MhV@9FE?y=xbU`uWwKihoL9cS)<QnwRfL+He3%qQkc6VoZvNFp6uM
zNAIy{>LJcTWJg6Vb5I#{W_qoUriPy0ek!UbRz1AfXrsGH#G|$0e?wvO8=AgBnd6t~
zp?dsEN=j-IBSb{J5H#^GqAMsA1hNSLB}>#V(8hAo(l%||W@BLi+Ck~`=}ogm2Q|>c
z;NjsRC-)Mp&xW-UumB_IuSN(f3<HdBz34UPT|cC)qcho)53;VLyc{?^O#?6)gd)U7
z23#<pIUF<^$p-wclO@=%`XYV@V<Rdjom%|ygMjG>R4`(7;%<PC0}DO*^BD>rwm|uF
z=e!VNz^74Sh6ludoQtF!FbO^%s@R)MZDSJ?$DtQn)80{2Q-|KW=e0Pp8~PaT(Q21r
zm!^snT*Cjsqljie(9~#*LJRwOs7O{L|B}G~yk8Z;+Juo7sK&HROqe1YvFXQ$U$1R*
z3@g*S4Ix1fp>)<zo&YSV$4X_@a<v|y>f5nH6-&?1kb8bmLjSim$y@lDMO?$GCZ*Vo
zOo#mj!3=Q%+D?Y>e&|$|M1o)S-UaMnf%6J4^O#)}et};Zjyw34GRN{<c(xw<HY{oX
z2&>mGSVS(bO_#|Cz}5#ti!Pj1t!*LdP<nOs3dgT}%ytRmBn;IZv<=EZ4q?@1u4m3{
zIXkOH5XmI|Fqmy|FVKN@_)OGO(ZGiDRbx`e@y?lU?qkP}Rioo_O;^nj8o&0*j@?Xe
z%3nV=gC|dPZpSBV<7V7IYI8&v3o0P&eE2Bxi;E#rJ!X~fl0YL{H&7Lc<V*GJgWa|3
z*A?XDG0=hs4}wSP-$u4_2w%T;8-|)rdAZ<GNyEbrM4Y(}91ur{1(Vjb9Ut&%HIO=h
zvVl_-B{b2+4OOP=17Io3>hC7dSki+LEXeRc{3P$QzG3)EgJ&RvyCD4i^)Bqy|L3+e
ze9XUP)P$=rT3}775ymM1Z@Eq4ssN0h$RV)P;3Ck|)1weR;|d7`7ZtiiVPSJqlgU@H
ztIKa28x?Azopp3#!25xl%gwbvfBro%j>vx9%a{3NltJClO|HS`Ce(&dd#50EYJ;ST
zG`tGndK!ss(~iTU?hCh5zQ8%Zch8<>jGO@KMxy|z1>X?xoR=@pqL44_)<t(SWHF*^
zsN*p_92d>ZieS{?(j!bj-p63CG7m&lB~(6s{?5KWcZ4@=eV}9<0tibG9Yk11iy(MT
z6a(ap@T?*{060bVbpbMKW@_c4?HO4c{5duZ(xWF_n^?g#GQTjW13U~emTyR29xwcG
z2<LdtIOYscNkSC|5br6rHN=j9poXO?c@rEt<MXbr@KwdEvFM<0*lJf4L`eh=d~*4v
zjfByWe~rr8Hfi{te5s6$hY}MHBJ5#}r1aO;4q@sAw>3e0(+7hj5q<RxLYIGZ6#g6i
z_=$;$zLFQj#l3@r&!Or@hDuCILI;rC|I|!69Bpj47?~hpr=*yH@XX7CB?Z+v(!;q2
zLb)cdsB^WJ&B%z7kALqu3^-1G3JnW}OVDLrKj$of5sUiU+NMwza9b00ca%4q*RL&&
zha}ni?p+*JXiUt{H@dbw$7r;5b@7orAhy9yUV4+s=(`MY1g7DhCl{pD)x*=$*zz5r
zs+VS=`Q1F`tfC@1HxK#}uFV`Vq7ET#d9*&k9+e4n9D)>Yau8Zs(Lq<j|7QlpCs$~n
z5M)LbynVKr!}}5J`Jk7LQ5FCItzLYX9P;B~8{JDwTV1dN><a=E@;j2qhOYmjX{mk0
zpMd#=lmP!FW{1FJDrb<S)W&}DWL*8%T(2yAQ-aQkDQzemfxs)sDyhO$pRXXCv7CKS
z0uCD2HlEGi!NCo(n!5T<K6mg7u)stv?4Y6P#ASvf`SdOgH8nYP#2ju;PJUkAvG3P>
ze84gOtK(w)&>B(t;6&EZeSZBKe|#iXt^A74j$4Rp_-H=$8(oe;CG4a3V`Gm{2VjM&
z(`|F)#x}qbMt=e<7)DpuBp^tCtNb2^ksQ?+kORVu9wIo_H$Q(E(HB6x(7CwUAOJrm
znvZ%g$0IWWv^Y38ETZ@C-{Z?cA%us89kt~!g6dLNUk?SC6Pm~YDugx*w157CdR&mD
z{8#UU(EcEx8~@t7mOFu%=;%(s0z&jLiMsNNh`2+S(-(5V$+X>@56M^$1oFqLzKHd7
zKPD!G(mNBmiJzaJ6SG3*{oq+rp$U(R`wfr|0LlPs9yS?ZkZ(vyi4ctTAjvYd^IyDt
z`57=<r4n7$m<>bdwqTVJa8Mci9?QsiH1>IHEDo|cNOM-!mtft%JidGP4sHejY*-Bp
zpPa9OCezdKuO<XE(1%*16a2p$^<O0s(R81$N~8!CP<iCNd$kX~=ldDu3L&u{KAZyR
zT~%dZso!bZMIx0&^&es<d8fZmc;qnVHlzfp3xc|4mJa+Hnjj0u?1=kH>I{!bCN2e5
z(o2x#jg3hbI;=G8*<Qmhw~uDqzd++6%mYeDhDmz0gp-PJo8S7oy%J}dg9k9*y&KAm
zOK0M?nhhNkxzO1XfPU|mmK1P5YexAg$(VPl<Yy4xXP8tP44I>jURXO@z<PZ#eai@|
z?C}PH3M`CefKP-BZ>q$q;N2XvoIYil`v6pH?|G2gvR2RIC$-9n6P0i;La0Z(A^;)4
zxGGKZSORe_q|V^7l=WM-`R~}jUr$BF0mvJ1ckIg-d!ez)Q>*XL&-8yF?*5-MDBh6j
zPajHs6!Qo$tP8!paB^p(4FCI5i3iJX+JpQBT!UWkKO7ExwFzYSQdLz|b^q0`NZ9CR
z^@ragHLPOn|CmtkJRTzrCs~x?<Fm39A;;_h-2THGxPyQBLo^_W3ni}gwp1p1w+RPX
zDc)?98<k=alfo9L;$$9^3J*BK3GM@oFJRq>BWPn2+TT)S-3RYB?llVyMf7v;+7Aa{
zaL4G!^dN~KgdiXBwiCt#VdCA5p)C5~sj(}uTM5^8Nr?*)$LfPdW*1*llo=d@&PW}g
zMz?AQay)2lJpn2f2H2_VlqccS!9hZ(_{))g(g52#WsGoTk`gYvy1Jq>mHxQHql$`U
z<XFPwXl_nL;n$S3AwB5qb;pj3^?x`TexJz5Zpaa+W15<q2`bz{kK?oa06(+10TIL#
z7$ITdrT`jY%*l&jhSmr;_IdyOv3On7r40-oQ)?L4YfE&01vx={y*WnX<e-E7AcxYX
zKaTdPmAB=y-mDEPl<!-c#w$6?ITLO^aM+RHP4RI%#b|i4A*E=QrGK^blBHQ%bc}|j
zzo`y=szr*KX`n2<g+ahUOGb7}mq+`rQIK;!dD7kVE%>$d^$oApvcG@L8R)qfx7ftj
zSUVei(X2?~=tbD?F_gi->>Lv{BeP55Y8^)sKhb7cDE4bkb$$eG<fHKEB)&FBMb1b?
zzURh6V&fg;aB=wa-lrXhBO8gyd=NBre-&V|9H{!S*Gc|J9CA$PqPVc<#)UYCkY=(!
z=4_W<3<t?NyFE&o1_p*B$tr1T?54a(b8eQo0#aL7&G&)K3K6jNpn2$x^8s9<bEkoe
zP9?pzEIgI8UCdxX`a%RLVLRyWWdydfvBEp4sFVf?R#B80yKOmmFYTRE!|Tq`m~A5M
z^Fh7>_kR$sV{bE=#~okh-LBVovt45$?DmJ0^z<^7SjR*t@Y}}?=KL{d4xeNYm!Fbm
zWG0!fXXoJXlf2+bxY(!EqWRX~GePcopL&lGMc`WISMBzybpx7%KKz~~m3tB%iohNZ
zwZaP%ihi!z)?*GgQIq)1A?G005dN`>%F3@Ign8aP1{aXu9NsbQLd&jH<s?WpdaGw4
z-T}ayAOSb4+u}$hRKnjQk%n)a339ZJfAzrdAuu><4}xYO{dxEH5cy=`*zBq#{KPwD
z6LD@-)YJ};mXNmoI+O!gUU$T;tk6_t4B`fds{H5sR0&U|{SR=lX!qDgC#*K;Lwqpt
zW8#&d{ns3bwoKyN!*DrIDXSsFn3xO$kBy1!M@=TBtOjq_P!{6O6;K^cgFS8*yH36w
zEq(ZSS9^72T->{dQe*+r?dUjUnb!B@-#S6LmlSh^IHXXWti!%<dwSBkEP>R@a-!nm
z&MK?P%Qs+}f#N_hpa#pXFY7v)Z<l?u3J+ChKeq1<)KHT=7&d1|pi!XAkS3p=no8v@
z(0_7X0uBZwx->7#!Kz<U6X&6VfRtjQ4gk-DBe!G&{C<VB)HpH&J&Ks5N13Ue^xF5v
z4V@RN_}gTK-LpYjTdNWiKf)w5KQj~BID(ORD^TDp(^noYRHnSg=!U^8-D8maRnjbV
zim~P+bfX3E<m(K$pfgb@sIhO|vZY|zs54nI!y0CjoTa6u$B!N%TqULK%$f{?3mqL6
za0+zsYDi_dH;T<L@RFVm5&Z_rDj8ki)E_FPc3ECkQ<eor14)FIKNw2q;36YuL<GHa
z>z2FG-IL<_&r+9KG}tT(9g<bh%lnL-10uEynsFl((9Gw*Wp6uH&yHQEg7yQA=zgyp
z60(5>5XC*l+`y{lf|RLvF7yZ&7uwvv!4w%E8Ci^ue1yPnJ^7C#Vvw&fgl@x~Q^p3o
z=n03PALB4)sWWOY`37!ZqN;}X4&}kRjayjR*mBDP%D%ZP*4Tn*fk*@jX&LTy%X1>g
z+UD<+z%ig(7k*x1L?~#z=PzCaVSpMu^G=yhQUt}|dc|8XpASFLRA4d#-1nF){e<cV
zmV5jQ-otwSt@hT!$s;Q-y<U<?!F#(8U``eP+qa~BYh%xL=b0)54Pne;$<<$Ol?H>j
zlVoIMX==TYnt{~p_eaLYDw1oLIwZq`CVg<Puw$x5Mss81Az!^x2fv{b6kFRR(bsCj
zRe^zv(CYjor+Y8uM4w3k(*P<V=GZ>aFpghTf`%}Gfv8Z?p98ZN253ZSwzjm43Qgh~
zI@{Tmcr0REF`yl~=%@ppcXaSEGS=w9!^gwVUjR$A`m^^!lejwQhYXWr0tSP`M%W+2
zV@HI7#3-A;$sB1`Np`qiBTlZ3=X&XJRb%Qvy*(}`pCMR7KPm@IR;r3a2PKsxmtM(v
zZC88y+}PLwlucP1E#|2(&VyPKZQC{7?}vtF!H4P`am8krBxl%JZx8w<j_+bn*H-)e
z7y0*rb)#ZnAO^;vRlD&3&{0!l+B04kzTaB=v6fS|cG(YRZM5Z$2JS(w)?f|=j;}*k
zClfVHY`9GJ`*+jRSK;r+cxKUsw26`E$uRcQ=&L}jFuLM~G_r%y1U?18Z|VROEDI29
zU0<~;Tyl$xi(NVJuGnL?aa}(${B^!Z<ov#~fy5^%hjoBCu1K^F4h{u6M;i0y>D2D|
zX(RTYW}=?{#0disKS&2jxni3EK`awMsEhHQf?QldLqb)<=x-+^ZZu|LD3UEy_d-n(
z*rKs}xU}<3;6woI!@qp-BIu^Y&6)x4iqaFR!tU+c?V+^byefZ=WdH~Wc0Yl-jG#4%
ziFNh$vN_$bKLFPg_BgZ_M<axQd|NaEwToGYZE&=uuUCR!c*l;R$;m2gReWh4=Org%
zJl&ofiK%3Q3QlM^qujhXqn!rL4A?t3nB_jy-mn2<m_Q>h`Y^88+wT>!OXxa~MSl%`
zxk8-@%nR6Uj(~<E$&A2Em?ycpuHOfo!8hWfbL*GU(9!94+(6s|j>6;)jjuJ!WS6HR
zHZPvuSg3>FjFo)TxGo059nKi+Nu6SwiLo(ZjCKhc0^yFaB5Leis2=dAFIcR6LkPNg
zWCl0<H+Z{<z9Zb+hR|P8a3hqCX+7)`6mu9RuRV&r+R)niiQDTZ-bT#C!6Y15W=*F*
z)^&YF-@Ga-&8VEP<7Ycq++#lGP+Jb@R&fn#A=f@M*b%x9Y5e``;gON)+R3J-Gr!N6
zfNflP4Vy0Dm1R70$(4zHh9w{);KOKa!c(5caMAbIH=`5#@ZlRnCAhy}k)qBVt{O)A
zM38%xQ+4^%*>L$nI1YX%f$Ebzbt=XfBX*il9{dRPh!t%-iqTXf<Kvm#Ul)TBQZnOa
zv&+Zw*TZae95XE>AF`tAY^Ao_e+=WRAYuG=!U_MlH)jSiMLyX9zDCL|?K4y;^4?+^
z#qw)N{utI}T*y>!kC1Az=S58oqmYnG&9w~z*5<JOB4)RJaok_uWgqdB*F|C3kDszX
zschVR{yl~O9154m5Z7CTU=2xrJB1&-+3FB?K%jVO#0?4k_8mkig!(M*!GmQ4BD6xy
z4ilDEaz<nY5HuO?egcKZYmb89>Hn4E2E(V}d3-5cVqIT*U}>m5ia>0vEr^O9b`J!c
ziodoQnYRvA6Sb&J6w*0`RzxgX!*AVEKpP7<5-D=vtYuk#&u^`wXwXU7+|w+5aQn)$
znwp1?9zAbvhW9X3%sCEXfMHNP1{Y9M8)XZk8a;IAy4MLzqd|^^9XQg<9dnxt3iux{
z!5a`7AK&U_;`+O*9lhT0*kVpeQh{V_-Sg*IFdox&yCXIuSrKRjy&BlEXyAa4t#hUW
zu87i-5*U(7QVv`aUO#%{pzoeLFJj~|0SHo}E84QLd$5PVX+WbWEW;t<#RNVvK$;f~
z1E36lZ~LO7wb3>L9T#w|fXIJSAnP>foKbU$e;>#P@YeqR{?&8s3Wx}pjG+M5&&8!g
z`rrr6;ZLqeIdC3!VH3j`kDi*}&*&vzKJ{6L3IWf6j6(AXB&M#)XJgg|v95t^LP98U
zGu%!f9l8Jl;+zgrk%O;-#Q@b$mQA)>s*|lN$$R5k05sJnNVPbB%mDyn8;>C-mV2+)
zoHsUBt*2-<js^3JR0-b_<~R^p+m|Y6h%@JHu7?Q5BS7{d#w~f_95Ah^W3n6{m9Cy)
zImlIebgfT9ki>6V0Lw+x_1N9b3h+OIpac7a{(j6-v32c2jCu_P$qdu{zNHayW-Y>m
zj*cZ)(rfch%fhZuEQWS-{+x;#dAMBwvUb8tTtmj7HPA+kkecj2UUmBMnP}=gd$c-g
z?J_sEf(drRJngHPDu9;7n1$5IB^v=3&@f>3F7HLIXm3Z}<gEXyu0#XCX3}CdF+PqV
z$1A|Z>0M(;16{cQO9l!{d+wZyK4T{E1kD3KQ08F<&dY{|&{rmyn0`iaT60slp;lxB
z8Oi(rfuA=(&4CDk?(sy{^q+q3D_}FyC>5&WBCKc7HnD(^t!AW%S#?;Avl?L6JUu*q
zbfe-ToXSvtRy?A-y@{TwzMh_F77F?wCG?p1g%uSw=<xm9O_y<e4*1z00O2}Z!|@_S
zFB$BhT3jm_YmGo^ZD1}Sm*IZ^UaN!z?`jo4su?ha@H^-pNqcS1N%;W7Le4(UFJlCu
zv9g5fhnYH{^jB6owJ75-kT`&l9<msagJC0mmnX6<184#G$<cg%^#kM}m`lM!qHv#g
zt8{g0%>RJ|il{_^ByfAsoF6n)pmd_JhIwK0C5w0jlM_deK5;v-j9#}7V`FXryErw<
zJx3E#jMOCydmW$aG_E7@)6CoDs?fbRSnKVd2SfwK5EvJrkA<B*kjeoQ9<Hj*;m#0)
zyfAzZi5qEe)P0kqaO~omShvb|Gj}ES*TcDF2CMG!SLEJ^6v9>>;g#{)e0*X8fR9j?
z5uwpTh3T)eV~6jt2@972hPhQ%RaBrOZXR?NvIwl04G@|!4PMh!s;d@7H&SUY^juhg
zSp)OjxNDHj_uSwSJCJ%9(0@?jsn<`;#-fsJ`i?N|j7FrG6lhj%Ze^|)Kod$nd|O~~
z&oy9mNk^Dozjh5i2QRo7ai}+?6Tw~S9&yEV+`Dr8XaWQKk0W9WZ$PdPdm_O3jTv*Z
zS#b$&-$oWPgL(J0dBHvpe7GK0ycpU9mIyE(BdAvIS-elQ-X7Ns<8<XtpVltF0!R8u
z$g=nm7B-4y0!N@6z?6uupv?e)(DgC|AO6N|``^NYhlUxVOBN^tNmLk9oM1qPSii`9
zMxVW)cT}&?ebYN622`)Oh%Zg@02(xN{D(^5#W>8&oTZhEfP4YxwZC4STSGO~$!c-T
zuoqG#zUwgz{|ny)#V?E7ao4DJiu(_Mf1sB)H66LR{g4T7G;AbZck+%ie@3UM<U{k<
ziFG(0p&-7;>*4bfjNb>0CUu0ZCU7Umb0ZiNb6qd9v9aO2c2oGF>P2-i^m~!29T_`Z
zUchNgEocb60B_;`z=WR2M!5Fj8q_hBS_Qd}<FC%l&8e}6!#i*@FfcEMx^s@IojqO6
zfSLKd5En0RJ1;Yy9D%HI;K0+oP|*DKa4CC;2;{hhXi%=Hx5q*UoBWaCZG%`qUP>s^
z*j7r)$X6zi&(RE&Y9SSIK`UiFD4Sx@fy-d*Gio$lA5k(6*X=gUw2*S@{~mL#8chtu
z(+J?WMR$*B<F2b05aTf+=*PEVjP7wlBE@ztu<B7^qIN=KVD-0U;0%Ot^RD!83>^v#
z6vh<60glzX5{8+wFTg>e-EF1(iB2n!qo3qMl$Np#p3fg^b=~TsAwW(bu+-AxqPijF
z)cmc#y#U+Vwt!=aVVw+UZd{=SV+^z9Rz5-R7YA8b>Q_hOp^+}R%6N^pFpLK<Ys~-_
zXrmVI6bnrJQGXd~j;o6c>cRkNm0!~xQ(D-*sP;F0K)r;;{2^Xy18IsN2tY1SZDTk|
zxPN*X?ye_IF^S&s|FuTE($3z#rpuXh=Oy9}dI@zwAc$Y~)m~-Hyv_a^`zW4|5g7@}
z!tkleD5L8Zv?;b^`cfd2Fd7-eZqa~L46?(H{mx`LipQ8Ze{PdFc=vf--HFnyW!hjn
zy$DWi3~by_OS|-lAn#H)5u`~#^%@L{JDa6}Fx%xUv;vFhYLzcPpt*=mm9~UIQ(CII
zsQCv52gR6~O@T#%52<i~gn>k?pl~R-;1H#|9){V9L0-W&pck@xf7ci$n;(&O?mXg2
zk2ErHD^NRUbZwnjWcpX(oV~=3U~dB`gj2@!Xj-sEs=45`Iklc7U~p0Jp(ZkSUpm*f
zL!l2I^y9+lT-l4JO}3|;Ys8aG=<Q<+A7CmG#^rPF0wX)k(z|%c7e<RE46A{)3G75J
zXJgJ)w50*Pr>PNJ89luj8MIq&pzehCq`@Q)84+UJ{jVsYbRmnNX5Pez@(=@RLgkau
zyos8S*%yv3;sGGY`za)h$!SkhWeJd`rlNZP@gpxpu)A`Plvv3bQM^k&Y#R$ik<4-A
z$V7YcX0OqzlwSh%FRJxn+*nz6417P9jtPv_^2tBnU#GO}tw~5YASnk+iHtIO(Y99~
za<Y9lR&NSJ0FBJ_5mkMAd!FhcteW|>IIk0>8?nx|3JQ8}lziNQ8u92JJpAQUlD(ZB
z`ZGU5-^9>B7_o@DhIpC@sB#2VL&QHd_FpJ9fA|4@;s$9K+r;AgKPLreW@mSQC1&6u
z)PkO?oPI$Ixs<bUCS!K!2e=c9!d?`v7}Ens@n^U!oSmG0K^4P85y%-a#UOW|_u0pn
zot+tYjGm*^^7`?C?CMU$9Q`tB^3tongzN1!G&$MXjrN!UsGzSD%1)MrS99*PErLI=
zCrm6fxQ=`Fpq%K%Y-ZoYRE$E;5P3=F1#3Do01kgvMCJQvmV=&95G=QQYmef76uMC%
zFo<9aJ)RF=Loz?Js+wXB78VhP;sPUcHokFIQq)*ScjXW>$%Pf+2u|<!^$Ey}`vfd8
zV`VvN9y@dS8Isvqbn+NRg@@O1LlC#IvwPC@e^`6#sHhvLT@;g11ZF6u1*A)mQb1s&
z1*B6zQo2J)(LpIex+JAT1nE?y8|fAhP`W$r=6%2KJKs6?uCva%>#&ypI56{@U+j4H
z^E`W?GZLhClp<aqkzuj1tp#2iGZLqtfH-hpP;hC-?bKRMPHrb6Sr!Yrd@HDPBh>^f
znZ+WB?*|**Vqj*@-u>s2pMX?DAh^$r2lD|+!gcEGfkhzO_b%eW6b*@nrsfCdf@|7p
z=g}8z8#p3Z_u)BQf`t`#DedwTLJo?HX4hfh2)Z7#!%2PMVwp)wUOm%>4x1D7PB5q3
z2R;7=CxF>7HOu?lRkRG*1wil7Vsq%JZlV3ubLVhk3Y@`U%L8g=MW#IZQkDx(%k8Fp
za{CDmF71`IISU-WCAxk^zVF75bsRO8NWFpr6YSg<!}Ix{;GqOt&Ha)gJ@+g)CM+sJ
z00ZSA=Fcm6?UYq7f=pfVlM+L?magZ{;sBg^xT}~sIRPdL8d%}JL5J+$VZL(AP^_K*
z^45tWt9DNN>7eqpvq}y@&Am?HyRTRPey1iR-1>npBGkXq4xjMkA_St0ZxCMC**iV<
z?107uEv>HlIRpCArAzsrVUk5cNjZ_L!5NU+L9I5uy6OeB!j?|(ELFJ#)UeQ+57L)v
z3vHfi7gfHw=<_O-=~M6iFuz74lndvk$I$-($L6d(2R`kT{`~uV2boWMTidyC0$MXD
z_W>s#Iu+Cc7)2P;3ZNWN-(<+e8anSl+CCSvzzqgzZUqSK18!IGsm`Tcuq5X^Uc=b_
z_>sE>KiCdJrUv4KCk%1nnnIV!L?d1>6de^sfaW24|NYsE<s-|;0ZJmoWq_9827e+i
z&x=2J);SNf8xADmTzg?s0qiBHq{e}Mb<XiKpu@((dQtsPQGMOl5bC{i)D9pA$l;aH
zUVsQnyNz1dt@z*3DPX)?z+$&_-hqg@yEtG8V{fRv&l%(cZcx4gFtQCbZ3vLt4PpSJ
z7rv_s1OZSPoD&Lwj=;phfrpC=S{pdJwc$cKnlxwu&P6LmQ~J3OvOon6^l+D@!4+@=
zJ@ayec(F&Xa{}~+BTzx&livr1@2tdtN$S~ORyH;#J3F(O!VBMwey^>aL7Q@e@<DO!
zrEKaz67~l`EC<A6Q4k5K@?C1y{{B7$0*G-Nb$97PrKxtC*t6&Wr2p0jKvFeS;}Go^
zVG>;fPy$Sn7X?$@AmaUZBt4E7F6??S(D!h``;3oo7f=95M^NSLP%72<zkd&9pB038
zC@~h#p?))f$Nrf#@d%XL{V}g+`)BU+Pnw0><bQ$J&;Q44@ZZ@A7LVn>lOwEuKJxsf
z&i`N+|IgX_{FVO&rMCc51em5<dY^MGo}Fj(Y%a3*lAj89ht7Z7^z|VgJaS+a8!Wue
z3;*$o6s9HTKmVs6)sqGQVNfbe81q0U2^<zk>M&S_GYmcaAt;>CKxY<o`g1!}dS+&Z
z%C^(lcK5Bzt7HZNWvre&;Gdf*_gnDNH2hah;MoXJS3oMrz-mtqEf;H{JbqXxy<`mN
z52Q$#6XmM|`DG8pEY4cF;P{c61r42Hp+4rrf7J}>-e;%tzW6#RYVct!^tr{Qy=G}l
zvJBx9wVv^ub>Q?0$O76AY@*@rWy{t6XIg+fa|6GBaD^c7PlI;xyyZP-jbI8^pwah;
zg<dsQuGHYiRj-%Cz#=%tiOYzTodZ!JAcB_8H*=^X-sOC8lL<(LX4bZZnN31cQv1YV
zaGSn&X@@1U4d%$t?yf(!7%d*y2TC7h2s4%_;j5{Czdraot1=N;l*Cbc4u*n|47e;X
z+JV{3C_r!UT!BmqWVu2WiqwD3B@Mt4fP%FIq(=GbRZ!K!fEnC7L{#bLPiW88?WTY`
zL0z!5z0Jev!L~TLtR@S!c%_>qYh)YH1iV1s6ZM}H0-$$sbIQocQJi~47(=a<1isc)
zYqet#4gl+gcL&HTJtG5XlyNxv&|gDE4Y_L-khXpOyd$6wz_oqGaXY*fK?AWFayPU$
zP4KL~!zC|;%fPasBg_O5KHuFJ;>a%?IaoOa(mjv^W02(JU`jEyC~u&ZiB4JH*vMAS
zh~jJoW>SM;p?WSTK|~?6A!vB5D-TN%G+-1HvYUAstB1)RR~e`vZ{Fi3)Aapy0{PN!
z0UJPmA%YAo?dVoIL5%`651auwG-UI+sWRpR5C{(s4rK0xLF;8vG79@K&@J$P0>QAC
zih$-f=)mUd0qX!CGj%4Sf|}j9R%4i`#{(kv@)JPTFcX*)SOsbYJkwA{0Q3TUo;NRd
zfaw%G`w+D1V0{A--;p93pfEy02q;3r!VoVy=mBj3LMDjFBg4b#h^~tq{3dL#If9V5
zRP-4}L=}PYz}KqNhp5NP33Xxo%je)5NkUG}8Y&IvAI1u%C5>#X$1{PPIoOKnBlm-k
z0L|%$&zi$hGq*nV*oB_$x5ELT`2xX5&`KX{9)D~CwBW!EfPXQ>`7{WcTGF@Y<Bpev
z5UYUkyH>r0r#}Xs589fVf0mYxn#gU}uXMDtU&<{y7X_s-wLQD58I}DvSxDQr`{B_t
z@PyelvL}hu7W2-p(6wfJcsSbNI-k2!!qKQ_r?q9|+vFaGUVN1qgai})B(VH|@#4pi
z6#44yMOL2J1IE+!G_M#W?hpV_hC-A4-@xt1z!mgNNm8;2#PJY!pK5E5f?NUe6SRR(
z;`vr!YzLb!iYwm2$$=8i6;c_ri-0>o<^rq;bS+OoF%Kr2py=+p8P8+>6P{*B!9@`9
zeMA-K$ZSMJ>MHZv&lI*`mb<mJH9I?d@Faxde*N7J$edtU1rTL7Cu{_P4H*!Z;4asN
zvQcC_Z_+S|xOTIRb>LFg<T5O9yYWb={}R69e<J=4inO$}aB*QacTfhvB~YN@2l{{L
z0w4t!Rix$TuK=Y1%nVxV2L3uh4~oFWJ%L+*jn!Cd@C9{yk(y!8(#~~X^zHp-IR|;{
zxlmS*<k6)(da6&o<q*rymuNr=8?W^g6ye%b9Ls4By@+M@U{R2<5bx_{tPl-7Jt`3=
z*f#gOI~!<(o7A1L_ZVTv%&ykCMtH*)hBxQ%BJ}nFsnFH8*pGvM0JQW_7#AA)0#Mp&
zJo7mCKg!!h2nVX!sxV@l7l8$5p2o&$_e&v0!K3cO**XLZ!@x|E5)eX9sl_52U?bA}
zhWhb1IDRkCAO=v{c3%h_&<X&absP}2ki@3bQH0LDAhf;lMe(G6A0}>~BurLhg6FaG
z>t%{&@SvdwCl2okAb`MT4?BuIpx!|uSIc$;bpe4trl1pusvv^=)EgthtFL1_2!-5M
ztV4KfL}KD96b9gcppjjg@n+MEc+e#3+fTTYb0V^tse)(0g}OjFd)v(uRIbu@pkxqb
zk1r*w8?d<W%bYfb{zZTtCjhohMdvnK=l+=I(p{U0IArR8#X%tG-Y4%ENJ~pcZZ!{V
zlxY*7|E-?kN(1l;aR8<Zu`w|MHsb<lX&6UKOZ!!fLQ4q6&_=<zy8{Z<3lz%J6^PLQ
z3+-2#UOQJV%!d$N_kH<EIlI{Hj`P#9U`VF`ozoLsJBvzX%4Jt?#-jQZ6Lagd97f48
zH}POG0H7Sd3ZlTvL=U`p*?D6anSdhnFFy!2);Y9a1peC+)LLiS*{YkI9gn7=iSvT>
zKm)lYZi=V!z9nDtzCs3c4tWkB5AZ?(@Ij~CWneIczk}hW^HkJ*FJMvp174T@3tq!_
z5Z)Vi1j@ZScIVYM-#y;VU5dqy1K8+%9OQj=GzH@`TrwU%WWD{zIcM%D+f4cR-P5Br
zTWBJnWW*pp_1>bSJb~?DF*uL!gaHMw9T!jzn8*TI1128rbIw|2tAI`|+^xngjTykA
zvR*2Qhwl9Y&7+R!IVAeOux$z2(7HNr&^FV+#B~csVOQUPvt`_4I2j<_gy95WRd2rc
zK&XJApreO1yR>9k`zm0H6Ws!Q4v@#4uQma<iMw)<A1od)g*=_Uq?Y|Pc;gFO6?Cbf
zLwm?<qE!m#2hK*WLmst-4i=U?`6^`cHn?g~Zb7VXOgbyoo`-aC{A)7>iqLZn4b-3k
z@88cQHP5WA!44_YN!fq;4*WA9V4Sn(0UoY{Nf*tX+qZwg(*~k!g*~l@<nN%Xt^*<_
zOW#dsY;)Ty&)bcx%BK%kmzIDAm;)26GKyv`Yp(X|O9bDHdZAW;`5}anpAIx<<0&vZ
z*z6{w#lVJ>g49$)aDboZhVlh2>=FpXUdlj*J)e<6&enxd?CyIQdcb`I-kCd41n3kQ
z%S1l0{O2Upsj3LUfC(~)_wk0*xv_}$D3m4;1rNy4P=vFb6I@InFT=nAX5#Op@8oQ%
z9sx!UxI35<eFmh`qu}m;Yft2NEb}_Gf%5{h7<iK7x}zbqIsjtuZ~I{7;IIi5K4^eC
z=3v551icVMVbJLVurdvHFsA^yowrH;;_#A9p{5XYqV0!Z4}1P~AZE-jEC4@4KeNwz
zq-YL+JXqDRbZLnAKRcmJ^UB?87?=cgCJ62Ur0)gRJ;1jI+07&n;}_XYwG3Xo5CDsv
zi(r^+8W{&KJcKo+02#Dr602#Xm*kEIpKtPn$sDZj{aFpY7!9<A8Rl*<^qhYi2f{kA
z6@Yhys0ml^;r_2nFpWA@dTe?=;fL=AxduA7&L@_zN<^p2Hl`q!1_O33=77ckO9=nQ
z4Y*}8U%rIc4!$hz#n+c6iPYQsiJm}10pQhGiRE)WuzPfXn-DPNua)L{k^3;d&FNr)
z!53^Z<OB>DOc)E&sX%&`?PX)|0y(aCV_g&YI>EQN&<x=Rhlh~FqW%H-Pfa0H9I+4u
zKwgIR1b$!3XI-Gzo<D{2gB$e(H78&LoRwqUM2coWoB;p>kwQFwbXeHWT2J>B#Xo=l
zp6~oxO~R)ERy?Ev=tZGgf|Cx5r$WzpfI<um^PuZc<7?0<u}}ltL;4P&M&z)A768(v
z@>Q4=f^>>Kx*cRa(iXKfF|*}B+5@V~y8H$N_kZqgeyd?c;a7|7`hAb2bF+Sq&W{Cl
zUV*2+v+SlLMRQRe*awJ;iblFYYkS&puiH<Y7HTq>2Ty?DDtFha6T)y5jI|pZwK}%}
zOKuUNZXl(mwgs~~&-3bCD)&p9aIJcLYTFyJ+=xQ5ZWv<>f-oG)q)~@P2+0uWM?H*Y
zF4=-s8mR2*BOCvMyY|on!nr*rQW`&DB;aHEZ-6ee8UGWYYsLf4MxfU}o{zUZr?hom
zkx+tW9x7EJTy3te17rz2kwqffWB2lC=)rznfJ@{8_!CQX7PvN({?i3g{aT;?0l4S<
zS{h8h+|Du2ud^Vj%H71GYWp96E|w58jCId{{x7tV|C_gwmxtXe#>U1w|MZjU06Uvm
z1VQRG%R4>SDSu-T^8`R41VTb{UhTOQ^2>FoK+b>uk9*i2FNiq4=w5g*!HerK_?%W8
z#{kVYt~MYHUS6;`46;l9+PS1T*&MVZJv~t9{~Il;Ye72lpH#SH<!rd}|IqyYgLiik
zJVy$KhFpo@Pyd5d2ZcM-dcXr&0;mAa-s^KH<RajkkO{qkEDk{Qe=zqf&R@YhhcrRY
z14+8oIOpGEkU5te3sl1}8T<vnebew(2Eh4n7z`4MQx~wly#cfw_zX25F5`$E`j^qy
z|LmO1SPs^hkSIR<qg)P$4Nl1@7)5=MzVi>s5Q|41ZUM3fP}o4mCm>M%m!S7APw)t`
zDNL6^<_TPzzW+Q+@X+@p!}hQ9sQDl7Ve<duzTgq(kyqIpaAlK!dP)A8-LG@#BJREq
zSSuqs{KY)q^+mviho4t(!KEDx0enPXg-(YLihAb+8Qgl^aQ;#<DX{r9n1~4cFKc}d
zAGA|BFEwHLhUxR?3-j}!D+NC>Ad|u7kG7GKidv8^n~k4Kpd1~+r>FPRMbSskMwokf
z*pUb@KCG#!0cn$VepIV5*p=6LWYyAH7m=CCK09SWqTzM0J8CuNzI9`AauP1V4tREp
z&N76zYDP(fT*t!2m}J7H^naGGKxqS`h_Nw<QV;2~*6zj^U5z8SdxI_-C`^Whn(4~0
zeIp7cmn0-GECNV;z|{#n2IId!1K>*Xzut>TL<#T>n5jMGkdj>|;u((+Wh3e1VGost
zSsu{lOieR@HUd!}*okYPRwgTh26Q_MtH(~$MRq<j7}U<wo;QB{%1L3&@yWP+y!R@@
zJVmjkh^^WFxRd^vNZC^g8>^?Bndo}9Y5)~67MUMQ0)fckLMG0O7VN}gIAr9%OWh4_
z1<xXAVEAzx2>}oWL{ljcIBaM`5yC83JQTdnvMrYr<KD&-#Khi{IQF2#`ex*F{(eMG
zvO9SE7U$RLe~UJ)OxtkI3jn(+{7RIGR@9t`8#iha9(F)qB|kB<v3aDDbI;n^O;dX|
zYJRKX#Oi!1yo(8G?^{!%rgQ4*LGt)`C5xH&Cn*2eu&tEJS=E1fnrnOa7FcF-PB7KF
zeU;NmSvb48FB0TkMO^~K0~i#5GYh!P``fexr81?wvdA|TO1Q%vtI7~AldkM9{(7n%
z%dBg$jM3w1qF2b_trW+%ZbLkWK3CI~TxD^a>;6(v)52&`J+p6ae2{G{F+um)3yM&F
zyj^b3Iv0lMC|NM?NmphLZv}G8kGngRH?jKPn2r(hiT?SRQkzWu>gp=0Qpyw{Tj#t9
z7_vuOiX3f7Iv(w6+=^K$+h%Wc?WoJ|JS*bvlDNS0sI!#O>Q&GEN1kFLSh(YKP9gaA
zoIb6_l}?|^UwR$!UOhO-^+uuhrv_&4v40G_X!bVF@yRgO`62swVUg9oTcM(!@qfe+
z{&%sns2OQA8{sVF4XqgHkn+`m;$feDTXd_x!@d40BH^Bp=O653r59PN8`H|Ke>$Ah
z;T06J43I&Y&r2o`9xT0Pzinx9){?P)nOn{a8(hM4ktROezSP4cq`J3{WWLZ|BpLqK
zUVND8@Ae^ZGV;}PhnDPVuP2XK{J(zNj`_mbw~6^yGoD4K2afSGb$I`uhv8LIe%}?w
zApkG7Ptjg@HJ^Qd4}*(*@I31#9O|??94d|S#gCrTt8{;Gu;N&^|9SC6TMxddk<uP~
z57TRL_m10P$O7l^5|-wU;so8lWbt#9^ZTPOa-|SOd_)&+U_DctsFH#NaQ^c@(un-}
z9TsOxW^#%ZLoXdY^QRTF1&oC>=$55RH4U_;KWaOU4JQakFJpbHOZjju_4Tr_PAlo#
zN|iK0_mbZZF4+ev?mE3O52-L8-guAScP|-sXgqtkFj%jEMobHQ&a00J)s6C~{bn{J
zjXRN7QJt>i%F2Hdr{<114q$7~A3xCWU7f_gyHT@LDa^kbHF*@N?(gT1P(3OiZn+bb
zG5+Fy=5|OBZ9-x`b0T(s^<I;AWl3oy4yTF5ZpJuw0XeZT^+8Zg>Cf`Rg(U`(p^IX(
zgAJ16$NI(JTR5g%I*%8aiFydHx^eM1XJ$Ffo?>tF$;;pf7AlI~jQF!}^Cj3~af`b2
zhxb!=gI#gui;?fYIDV-)ur^RKH|Tn)gN>ik@D{mfZ|!R&Pi%69@>0E(@l1)xaZW)o
zp$u_IA@p<Jt%_P?)2uIN>kRm~3tvuuxiy5N;V|_y;!cTk8mR#`wNCAiesi1CB1W0H
z->jvDndUx91-Kg#FDgzaqIZLD+jl>Z(=A^reT&MWe1KiX>+Mulemq+(@<`~U`ssk0
zVfhRCg<XBd$Y4D~a$X6w1k!oIpU+%5ZC%~b(ucm=l&!vou{lM@98*;cR^tWtvM$q_
zf2n%W*78hHC%bVpzpW%PDQ`5|BSrl8pUv(UZS&8Qh!ON+HhK@KJUVZ>+_~vzlG9d%
zuAL_)-_vdBsS##ip%pDzi=L2hOPBkb_JO-#$5o@H5k~{4id|oos;<%V4g9!j#+DP}
zcfIJR6{WC*@>uhI+8IsVk(#=Z0{)f0rDbvMIU{ORY|vq;^>6E^s+bP|ie?y_MFv}6
zrqxPI%G1%oMoTx9e2kCA8@qq>m?)U%L|ifk_g!mN(!td2=%|3QhYCVT&p$9H-17M&
z#%g~U@Uzs1@3}?@`+sr)jy3ADIz_x#9%ood+(U<_a5t#T&sjX@7!`co;OzKfDZD|@
z#IVrFvK`hdl;<(6J@Kun61`JW6e_hNjyF8FTy*B?@Z0-rV|{N!vwC~UQ|2aaL||)H
z<~A{fB`t=Qh=ziO2;Ml(R3O+y{%Y{7nPdwBgHfcg<R;yrX#N@W$`rGAJw^^=he;*%
z@k=EQHrkn!IRDd#$xg28;z5e_g_6N0%x?{Dp;DLzjg956))!(FiGK71eMmJMG=3&8
ziC#4+BkEi?xSfFYs=0kCw))6h7Y6l$dkaws*f$tB*cxn~)vb2#3q;?XAd(>xZ*jiv
z@(V|*WRJCKD^@WTDN9uB$3^PI@W}_c+4+|GNx}i(8z<@0CkYfQQ<P&S9ox3uf3Cj`
zIy!m7{OHngb*=3FZqHw<HwvwB;M6D|UzT)yQmtt92nR!y!lV63DbqxYZn}IifucQb
zd(`mL^yK|UgOmEQWu3=LswU<anv1|3btc{|Zr3rg`z1U2TaUM1ZSBjk+D+M-cREW8
zNlVM4qpgjJgGA#3?!9-RciYojTUwhfG#-gNX^qCc>i$W=l3RVU;J($;sV!4L4jb#Q
zqm|9nctL!k-C!r&O~;d|bp_k5DLDa~r)R;}D+Eqv21=H^zPREuQh2%DAS-JhF$uq!
z-mvGod4A2Db|$B~$eC^qn%z~0Rbp|dpT)0cH3yA<3lMhtol>D<w<#=B%`dPcQNj0O
zw?DQv*t1FW@zAA`UT7{nl*K*c*Ky(RyG?YDRx1*P5-FNF%V3hU^A?9I^|nq*oahmb
z1qI4JFVy7y@luNC=*p>cg>>o%7VYi7zq>hkRHG(qVmV5zX(EP;il_BH5H;c#GsSUX
zKS2}@+oL)WOab%Q?s=`>*8E<sF$FMSW;J)$C^MPB76oTj>ak{cC@<;#LFv_yC8oG(
zO+riVb;_<9%Csv)@{SbkoWJAypNfb)EVk0Lyr2>!Dy~$lR4`XHo;v=RzDz3)<!9n@
zj8&4sd8s|lX*9LV+H=1wbY=8b^oe2ENN><L<9^4y^E={@TH(|_<$d(t;~z(YC5qi1
z>~8%L1J8#yQQ=)Rdv&L$wTX|T@<+UdezcT3hE%zG&@zjqPey1xP2qQdy^&RM<FucB
zGYOjuH%@eYZ&V$vA0WM>Np|^SD;nLy9pz}p_}^aX`#621TlbvAPI-)khi;iP=ek{V
z(nHtTp}q>k*tV{>0eG%<E*~t~Si<^>I84>0;W?+{nG)?Ry!xpY&CKaFC*l1zrAx2Y
zohiRXvQ7NmNL5LMnQRH^kS(=*J7McGsn5Rmn-kw+^V!`9KNo8u-G2Xf91BF(8o1Ti
zrBGPE43vmskvAok`hDma89HS@WKW0_G)~`ZjrV$Za;igTCMk-@j0k;Rt*yT3bpL+E
zq+X)#*wM+UhL6%(8-gBVcYO92$6N2ogYdm0{qZDzzC2x?``?Bh(fs^-LsfyfmsAe(
z;q^>_4q3|k8sRhj<B;M&_Yghhl1;+)Wu`cT%iQVVU!^S`_YQWKIF8rglD?M|OrJU6
zSQQM%k&~pX`*4p`OP$|KG5J->lgvcwjZr!OHu=v^4_!76%c?kn7O6ky^B^z;g!G-P
z20K>)P*|`r*W*fearvncMX<UScjUaWfB*iJlgP<!3PvJU5?eXFoztG@g6~`rLW%|~
zOJf5eCKaUAY^br)2o@b~TG9+evQln;{O75h9`b86zZJw}Y*0)6O|goq$2d0VQDZJz
zmQhEcc!J!?TO{?!9~ntcCdz+oGA0`RSiU%(mf58%Vz-zv+%(zsHrU2?&5Cm%B9bww
zweo`&jhet+TIS}$<0&>v?zr;n%xasPfnGP{({(w7JW7WpS(d3x7e;@IePTY_Du5-@
zHh#vt7elRPo{3zr9xrF7Pt_&Izv(>lUBs5;nuJ5-fa5Vm^F%kL^b0e;vaj0;_Mg4u
zNxZ1=<}c>8KI2}jPWU5=@B1cSk<IXWK%2Ml#!$YYByE|IRv*+Om>X3KEeFp;;8qOi
z7*DNXbdaMh5xuixPjXNpy+VAk(2s?QZ7ka302*o~f$NP9!A91YNG?hW?O}gMTVk#o
zD}$q6XZ}lnW6450f{or^R3{`~{L?#Hn3uQd;G*Q<c7d)aR$!Zy#$-6!sW!hZ@Ta81
z^kTke^F5()?cIP)f@{*UqwiI2;-r<bODO9E8%d-IJ?NjDXw4{=bHD#}eRxDDMNVE|
z74F-d%g62h@eED#>9u;hE)M9HVN^|^taH%te4lfsNt-%tY*B_@ATJpat?rm;cR(Ag
zUVlox#z%RPqH8`1r@>*X`|8KK7jx@>$+NZUb1ULCJSnLE3`ue@^;xhMYs)@=c8%u1
zwcW=2megKUkfN0{Ysj*U{E}kOtFwn(7YiFC*~3Q3cII?{j9dK<8)ou$EF5kbx2Il4
z_WDeWy3b9u9UjL|-SW}AQwV3nq#(?C^3c&-?4@G!hXY$7#_;j@U>FQeze{K)D9vbB
z?V7*QYTVzqJb^!J<RSD?xm$n2@lS*Xc|i!HlunmDwMgVc=V`nY)d_l@CP{|B6!SEw
zKm^UZkfe$X6JLTW=Sny#YR>26A%l3B4^N^`lO4PyM}F$u4vW1}xp}=aq8q<8LV<@a
z2vPir$zi=LVtYHVFEeP3aP0oyE%8St+0qu4pWmTme_PztaSu^`6QxgUs2MKG6g4)n
zWa_Kz|6cTtx*`z`MzL6wNlDs@;tt;~4|_7{1-gizL0<;_6$6l)Cm}jg?}NyNvyOHj
zu?CSuH&vEIxK-UpqUXJeRZ|@t?W`G99-IfztZ|p)&#juw8dcK2E#8RA^<G5#i86%_
z4+o}|N<N}bVY4{x{wj!<&$EcTS0=-C(Oe<)*-=6E*<a$*Rq{_f>2pL9`Db27kyi47
ze3a>YcszX#1;Vf9U!|I##&;kj2r6o%Gq_2ebsy>GzW1{UcK3c4^D@KoMZ91IKgnm|
z21KJ_EX(K2%o^q0*(l1m*F{~EE?bO^(q~jC=VOEB-Z`Bv)_$Acr!vZeS($%l@S7SZ
z$x)O-b1So38{`SOL4K2`ca*I9QXQ+P__*yCdfe$!>6%Z=)w`~zUsql-5or#8;u0M2
z!d!D|<gv@P|DQ()8HEEn7VeLVL{O<@CEXet?3-I_Pd_~}Y&Z%mqYzGd)GIgiWp&`)
zYr^?6TBXvsyIJ|~zHY9STovy+U9S4HaH^a&QLX)Wp^hs5!`ZA}wuo}K<>OW5;%^e2
zo;=x^+9pP)f5aE(T<e5}E3EV0%Z<}*PHG)^O+30P61_A%8j!(^Zh19aic@=Nu-3X%
zx=Url-iV{OW|J8aYbkwt@-wLM=o<Sn8Hpub^eNphg^CU8Wh?4o84hAXbSmwSYcvc|
z2|FXEDGicLg(<gknJ+x=x2(EalFYRDYkKx3hi>9S6OTRVIu-K1#?88do2gd}V}HsF
z{LEbTqGmH3mJOEv?Xp)VLE!)XlXQ;9a<r*%>sQXbGr`{CSE)?lV$C7HI8R>g4ER&u
z@HA=4AG=a({gLjN$Q>^eg-&$md#V$mrWCif#P&s_b(JLY*zFI0TyBgohc*LhMev2k
zcs#XNt<|UR&nR}$(JqOvuXj><wZZzm8*^KXdz%|}54<-P&rCn_ICL!AC#YR-Eh_N7
zb+{RE&9=L{wPvEiNHMKWzBM7&gSM$>d(~4)J%1`O(mlGK{t?!C`O60YwUEh=<P#`-
zc0skTKsfTR|K2n?&@`!=YImDxBHfx5-2#8*EgYqQ@PEk{#vQfDBD-(NeBdS!%=?#B
z{_Un%_Z33)DhcsawXWPf+Bnqa6{dg;^S7zyUdAG)k>w>xC$_y~-JU!&hTr$s7tqAS
zaf0(y<s?;m)JOMb<7%`IJoq^iO8-m_Y7KVFgYg$LbB*0W26}}-<pCF(3u;Eii-mG*
zUkM*a1}UQNp%?WuWP5oY^&UHkm}oiHeYSQQt+UPiWTt&b?emmlg{I2t>LLZjA4f(I
z)M=0t1t&U0-lGdM48V%Jyy%5i*oyxCMN-(i_GBhWLoas!v`6FlWToz}u?%Ny{di%i
zE&_C7piMzdycS%MF>SMghzWKUkR>60{55?a7^O~%su^bQ5AU_Gi4EGLx+FRraA3Pm
zm&!_L$_8teYKB%r{Pc=$p{_8=+UU<!U3r_~dgAb6u57HxhD1>{pN=*FiLO0aWlT`m
z^GKrNuwY?m<E%?ITS&ZwL3-&18*QydSdB#TICn+QPQ}$(4~Ye&Hiayww4UV_<*l!!
z{7S=rS9{1ILbUvgwNE2roTcZ^s_^}lll0js?Ju4~Gy$m$!GCo>?q!zVd4BlE&iCo2
z)TnRv8hhN{!O+XHRV3PpnEruvVQsbD;F-h-^W0+%PyXe|Y{JRIy9@LA3I?^IUficF
z*<Tkp@kmdamaniPXspK*R20&K_v>6mw5x-Wo1-n0^koIAX0WU~{Y{&CrPDx0dGu7`
z`tI?^__EYdZ1Mf}$2ed2Kkq9y4QNcoxN<&wvJhO$=NPrzQKKe}h~=`>J1gIyYvM!(
z{3c?*&C7GUJ?=(j(VyT+%m;nEGq3fAB+Lh!1hijm4DVtmDdn_gxYBcOGi;|lI?Q;D
z&PT^wKU6^Hf)w0iq!}4nQ{J=839qIFx{jyJ+Lk$2&8*FR?*9E<LBqLi=URGl8XXj-
zoS)EE`smA;@5k{j8YRpJ>nc3upmNK1SS4-qy9uw)YPMqQd-pot*HP$DPzk3!ulw`s
zH~mou<Ink;BX6J6htUO-xA;Aojm9!mVv-&|R{K6-=$`Jhjw5U?nbjLXun?8fUB33f
zF2Hs#dS>eML^-7>J>=;eo5o0Q3@x-}ZIUdvF~5ILkjO-$LqD2ch7L}G>mnB&(w>6R
zh~<rE0*mwEqq>CDG(3&dwhi;ypUnM7a;84LU5&@oGm)X3crWzEnrcc^aCm8qC!gyF
z{tiYLb|m*{Pkh!OcP-%auB(Z#&#&Ikkj^0TGf{7k_czH&w=88laXM^&<Zd&5++Kt8
z4w3oc8iHnof9tX#w0-N2D(@F(t+^NXa|6P?>Pq?NqJmIiao*RPQ|E`@$M2nbPIIT+
z@{zVx^eCg7+fm}ed?<+W&R=N2lVuF;Cz;^pQKA5BbgDgm%`2+lE1_SS3}fHBYUIka
z)zObr)?>dcBflfx_zK<ERRrkLl?S4iXFj94vm!TjT(2|8oivoD>uV3<Hb>RHr=r;M
z*mG%p>=nvFaWJ}2Cm2kPs^Qyt?DLZ~$Me}zRNE0<s;2hspJr|QsNU5}nFn{9s`=*j
z9$%4V)F-bR<W4{I$xPxksa$c#YsOtZ*$LA!3|$|S_otv|z$jwiAJ09bR<9a{?y-TU
zk>2UWop{WLDE8(1x}npjxaBIQ-k}9wKbiN|q&#Ddj}Wo#)QeKp3hQf<`D48Hg7;ns
z@@J9no9r2dWXrKZ1(&#=MM|?%gv`R2nVA;6k^GO^b`+NVmT!d8KIbpvTwi@K%8FgL
zPa#zvM)3ZzWhSyt{n+fZ^Y4}o$-VpO6|e*z5zDi4;xJ>U!<r=K_ePukZsg@kgziT$
z4PSdOJaWTp<9<M@EKfQ|e!}R%{j+M$*tLR5x3%_TS>hCNDU~ifPp+m3tyrhsqREzX
zX)#;5OZ%VOs>})6aLLIE$hb+3FY0Q3aWzR_9sYZRj=rnh;YW8fT}St6{fdL6-5N`B
zq0v=*kCgHDzRql4N}As%Poe^?wf)j%7h9ji4*vL<*U%)EZTHDc%r_B<CUPk3ZJ-ni
z-AGzMAMFGkdTvD7OanaEkc1B<4QB{g+Z1m_i}SJf=fA-a9Ly~{p#4HJ13w>suDEjP
z1ejwg3m&Zj6p<Dh)UIId_(q%8swFTgzEq8=<E%KKU7$++G)MiEHoItdObqI}3*H7b
z(oAV)8KWZC0_?2BlPTquuD&s7Om!vo(KMi=$84`oa=mO-cofL(vpz{w0ZI65W;da}
zJKEcIeOul=`dLcDU{*nK<pgo=5VgDlal2}eqMVYPn7`QVqU`o{Z6>8V>882|tYew)
zmtG~N>}4<ud`3UNjgh7|L?cp|d?T*o+Hn^|hT3bX*y%DU^*h-F6&(Dbj#aa)4KcmU
zm5?;8k5B&KS$o0FEO%Fa!&8zt0sr?k$|I7u!_>(T75ub@_~}nchrh0DbvvJ&1a?Br
ze2qrO^^_$vw?<eS*0v{B-3b%S(!qv{#mWzXb<+B&lZh{_|LcNqxaozD9K&10Ox9MH
zl=}SstmP60w#mWyu~-ldm1{*b;8UP_(Y>x?!40^}6P0R@YbL)yS<P83@an@+^gBDN
zwXTPRZ$s2sPG6F}&NW_pVj@k1#}au{qL<h$7->jHNQz7BS$WWmPikhl6_WYq%hmko
zK&WS%W1VP=zS>eYAn1?7U6|0ZL2d<uuo3&sn+G;MTT!f|Eo;`gOt2$GP+E1Bt+|(o
zK5`7DWEq;ud&b<jSp75tgT!{<`9i~a{OKxr#eq|)>U5T}n*%1d#~y>!sfZD2e1tH-
z5X34Q7_BixjVTf7K9c<wyG^W{XrF8jL^rnBy$AC5N=qHk(tFZV_onm-#>T6<+NOr$
zz3q<_rl0G39$B_IW0$!A6kwK>b&`DSzVm_LF1qklVTxH?>MivCbHp{ggto(O$CMhw
z2Wyi_Y3d_SE23Wh)lPh4sZ%H|j_Cb+gSHTTr-WG6N-ix7NlSDc`fAs+F4r18P6Gc)
z@8{!bR|J{kP}iV<OrdLjUV9b`!8?p)UvPwV`=i{;H4##}sDMU`!VZPoVZW&Hv4mV+
z`bJ`q`25eW8F9yM&tspi<5%4!byoVGh(Y?kuXZm}m@hG`lIlEms?pPtn>fSY7}(@}
z7uFp`jw!qDOdx@ST~^9%!YX+?$K2}-LQ=LjN!CZoI}Y>`IM7NN6cG8%;g?grLTcX*
zV@goBK6IYW(_pA3V|=!Xi{r3nhM-wp<#6!-mNukUskc5aHP*Ij8uFr0Wsie0=x`HI
zSjd+TrBo>CBBa&w)ji8>r<V)8hdL&zh>M;`NuBX299(fVQQo+B!Rv?qpP~ih+Kxeg
zRDk_7lE*qok&UR0H0AfCpC2+H6+fYiYWS;l!7vAuYE}HSl@5L1h2_`?2+>XtY7`CW
z!kD32jJgGj>{7m&Wf{w#QJ^|sc+MPK6Lli4@X-A337uW*IvH;2lDMO$Ow?(gab1{E
zrDUdA<YI~{t$N^`%f--Q4m#Sn)U!5b8TmRYlHV043!ZaVL!~ojL}oO@3*t8u&X&ZK
z`v3NC(>1FE20SL|NR&p12s*4y!+VI|j!+?zSjD}fC89Bw&FP%N<nVy^WW8`I@NpYS
z$0;=pW>)TE933Vi(o#Y>UDL+(EVaQso{$@ZbokR!h%chUT4<kq<zldjxwfLYVQLlT
z%-h|SidrI+|3-BVtX7JnyBBWk5Q_O=M_2ai4MqK?0ZO7vS9Q>6!}BTXX{4@xQlqZ3
zGe9z)dn3AyN2nnkRic~t$lsDe2=v7ZH)t@I(Vt^mKThbbQ77DZByFhq`I*-g2+1Ek
z0T(2b!y&bafdM#oei6*7%BTf|5n7^6m6p$0NKWPEm0+aySC=0rj}w1}{mf=^?Bc37
zNRaM4qF40iCg;Z$M_5$)T4+1_a?!kIQXK4>AhwAslzujzehGzksj^<qO4%rA(&Jk%
zJey$S+xv66ki9VEQ7CN8B4tq@HZQaCuw%Y0H7ui9yY8wJNkTh^*cNfdema9CSJN${
zh`Sz1Mzj&C7<`QZQ^;D?dwiIlv9*)Or7wxzl~q2(AQyXU;!~t<2nT&atLI#zaY|d%
zobfHwnV&l8KXZ5Ld8N0t5cFdHB+RH;7?JY&b#<GCH$k|SEEx^0SjHkjeb)EIMniGC
z`ai(j5~vDj_n5X*jT*^I!gF&qDrr#_i;!30Pfcl!Hu0*>w@_Sj`oU9B^%svYFx5(m
zLfGx>*e2FI8n<goP3cjr>H7laTmi4-0KuC3lR{;@64|$9Gg26zS}q7tnWJbUn1fZN
zWD^aalt{9M1~)#SRn&5{<q#^Z+qU!Cn;)8aR(&LDeV0gy*nHAi<8%#M(30m#!jquO
z(g{-*ub*|v+r)iro?>l^#}4GX>5nLyA5qn;sVf$$b1%af#=DSI*)L*YdM<?=v)`jz
zaSgPou{_<$EgPrarc8$w<X5j_C6I?u<9v)~oTC4MAY95G&xnYD^U9L5$ldo8|8&S2
zky19L%RC~K)2B0mltj#Fv8S4~BrBUb2Kpg*9+n?Rjjehu7KGr{rtPf^>Fq8DoHSb~
zqtGBglnTD`l=dsD`Ri|Y`BkHlG(P+H@H(w?f+=lc6f<fo9o}_M?Jowf%lxgGxl|#q
zLOsbzXms4zWX(VBQg<&u^GB3j!LNqTvkiD63m*HgY;Jwx<g>2ZjSdW}78YinoOepw
zG-F3I(M?#AaXkWuhC2^Qo%5RBAs4ki=u_Ut<JG#uM@V{+n^?_{pO=f_S`wF}f4-us
zn(p&CyJ7{`Y#HvY+d&9!Rcw>#Px8*M{RfVpjE84jixJ>|ACuiIr((Or;bS09PeJzZ
z%eT876=%;;8DtEqAv_N^dUPj>xUb$UuVb|>R;ChCEh(c78_##u4l!056dzHLxMDyt
zW#Z-VO(d{u;L5F~?N>-{d0~=`rC!N<271FJcbjNcG;Hs`Lbk0&eZTK*J4e<y9ci6t
zyE_=eur`$WtgXDZcJYLx&}BaD0wSe^yv{HnoCjZ4P@BAJFC`O+cKl3wFDJ=*cGnPG
zHB2%@HoxiS$RYW$x8=@`)}G5H_3R0azXb9HMv=*|y21emZ8lv^Iwar0b&}4duT{&q
z4&#iXXI(wtU&<j{%6uEguH#c>na=tA-fa4vFDQ#bhkH9{wdhj@?&p6EzTKv+{Fbhw
zYJQbrESxzUh0dVzm$)czpdQjh>qSRWsz7kdh}Q37WEPW7H~X*P8rLgya<MFeeM#<~
z&NG`?%+)1}I+&h%or1cTO?SDpNpS|~N9bL{C{r>V)65&Tr9bh;mz)17{GuQ7b|#t~
z)fAB}t9<BKK>xd=0u|U1ubs?nwX|EWwsalZ8x@!Rtci>X-Zfe8&hOG+Y7+>tv2Nma
z#pA!%WTWW$^q!GH>i(6cn1HrL>-4M&iQ?loPt>GxtezaW*w&bDo_f0Lc{XC5ZCp~&
zzBkKwf<z}3Omz`4qGs4rTfBv<iD;ZwitW#Or6$U2S}aiPFV}6<82rdDU60ciFEm@~
zrgO&J{<79ai(j+uOxbOhzK7CstV;SMYJ{YTh+9_J$;iljX<KJ5E5&Vf17MGADh&%+
z2e-<-UGf5}&&Z<O-**>0TE5kO!hRnA{@szu=HyFr1Wm9&iq)9wJLexQZE{s-s}*r*
zF3A)3wBwb%d(Y*TlZLOD<Ip(uY0$qlaB7$J-k;R5Dtg7Wn3Qx_c4Vq>CL^K}QW|@W
zp=3u4qv)k)I;@{yitp>uyls|M;!jbI!VUQo&4#Ei6AW~v{)vAj3?EzN@zTmtnb$jH
zrJ=YOkE*S;pJK*?J__cEmDc+K!fFvba?*yc<|NrjcFFT?{{(#uuew}Qw6c|nD=ia-
zMAw}T?DS<0jvxGK-bgW*pHK`69SE(zOz5Lnx;plWUtS84BCk`MxA8YNRxd+f3H`pH
zx@x*f%ZRFCjZc@Ki5Q8VqGt1Uoa5t7w-tIa5L#)Xv69;^Qsp(@(1?>URc`k8UO|5B
zS)l(=SDeF29`gqAkj*fOO<u`qIi{F*5(f*bD>zzXb+xzC`M~e7O@iRTU<G3odB)4e
z^n>#!rMCYmsf>Az)v665g%X?WIUUbNz}bsmoVJbi7g)I%Uf-5|&7`%)jz-w4bZ>=K
ztsZM>2N2Tmcu#g%=8&y=9IGq^z2^FkIsSDwMIeZf@j5~5@^G=^+8#Fk!kj4$27$Vq
zQ@x>OZu8b?yrmY$_F$x5M?rhyu0Xm&0Y!7oR+C%!3L-_&rpD&5e^j6IK;t+Fa-XVk
zm}g&?@W#jc3zys<6qNIH-wm2N+f#mSfiI=qU3cQxN4VD&<2A59cQ&fLD%fU>9m-p-
zgvFr;C%)_nb<8pm3hmleXVApk?0xd5Sv4Y0pO@xh>1PdoYRuq~X5Fxo=PWORrr3U~
zlq@MRGP289%9?4jdyjwO?(8PLx8{doTDRFBou$Q(FBkreiZgsNQC+oL;yUz{->BZx
zwWHd;x39ap*5!2k+E8chVdaQMk{K$0itJiHkM)id?Nv0w=mL(oG5p<J1}e#9fGp~(
zmwW5$_)ng0H?8z*mVcKZY-=NZxJu_4i?j`Ig>#lhcbrKSKUq7bB%hLh`WUHs(A(6_
zPoi*3_z!i+3Bv~KqakJ$52XWY&ivyY_Mwi%2R6I?_8XMrUrIjkuOz$@5Gy~}xWo30
zwxM7TM>Pk3#=E+DF<4)3XNxr4>!Fdd(7T=Zx?l<Ncu8#DDKl%9yR?{qF;|Tnf1^Fm
zYH(Joni~+h4;QXUS%j!a2|0A_nAwf5pCVFl^;Z>S*H+|K#4a<8<<yO<*`KgEHD-y0
z)O;BvlYfLDW+KcYN>T}qm&E5h*`ZXarV@m}>8&TYvN$?*Y$6=V%aRB*(xh;{!aHGk
zs__lt7)9A4M#gq>oFml2Abzkc-;(urOaOw$M|LogdM{j;UJ8k3eK@%+-Ks*N*G7~f
zps(lrt2c9UOy4cWQBP%PecnCk)Np!MSvheYgx?cwDutN>%I<8QNAVNxkBPP1W?YAA
z$};}EZzz0@g+==Dd`H09!^0*G!CgMSx5yc6Suj&Pn7|hqA=8(LpuFholY{ljQQE<H
z{AfYV+rwcbcy0IUBZG;%yOaXk<3+@dUOQ8C?{>uy)(0+i^KD^PHkMgSiJN9}{1h%@
zS&y;pY_u8Km5PA%LSS1I|JHBkV;+%=AtHq+Bv<FHPRLt3M>nOS=7sv%ah`2yHVVJD
z9=(c>X1oi(O!@id@wd`p#AS%H#OdYb+dQW8IrFTQMkFPC%@ajx_IIdHj|T?}T>1Ae
zR({r?%su!u%Q=5G-+QK2sx9B9c!x{y#{|Xh#7Hc2q4cMLo1zG%!HBP6AHG_Ao${Q$
zh3RRx{hVVZs$g3?-!`gdW3!)gnP&T)1b<9na*9+}<B2_17rD%xSms545+#0Hw&mH6
zI_%0yKmBeSqVp|}RU??gxl#rm7F+7mqs<zd<0-O*i87<PB_gcb)gvDsZXfxxr&g44
zhK9MBeP&ZC)k2AuG773}CTi6h?M=Q3U=!Y`TAI?YIht&qJj_`a5Bw7w9qql|N&>%n
zg0iGCSi)^~V<W;j(rE}VYq^PYBrp6rt}iewK~XZ6tu5|$+n}HfA|*gLov&rpYrh08
ztr6GBuM|3OkL6f1p0`Lt3xe>t>oO+fG(<XUMv~IVxlyds6(iOF**5LG^x<&gcdo5l
zmQyEYZ>FYh;Ysn?9_=2zd51*r)F!v64orJKw;s{m6WN;Mueu~J_+tOS+pFASqAR0D
zC7elRmfcF`F+mK$S*F!iR#&m>VARR(baa`wPXAMhcS$;>GoQNaOo~1+<K2ry@SH}|
zrrwb)#pjEt+vzPGeW1@q#yVaj^1C3IXHbHCNoP>+OXBpp-}ftslmZtGmS9z-A|-}<
z^yYitn>6KIhfAg}ImGkb853`f+Q;xOWH8+tAx+G9m9*T|CFlS4M1D>6p}Sr4Cu@26
z&d02KHX}nRUdB9{`n5-2HPcW=Y}p*~jPcCDAJ#PQ^e5A&j|o@YnibWR_);6jJu=^_
zw9Nc5o@Po(-#MEK*Wxpql*4DHF@XiQG_GMg9z|DypPKFRZ)D>Z<@%n+%Go#6U(ny#
z>wQ)e7x9_iWU)~3*9)!k!YF11cIGz-9wGs%P09f}a7i+O;vkCXIU8Bf<)s*_GIs})
z_{=wsxV%xGgA?la&3cl-y%%_=l@m5vQBQI;aIyAL0{PNre|pWna11LFZ&L>PdSqnd
zL~sqzXUmN9(0+dqbR}N!v3whno|q<2>d|}WcPG3iF^Y|ehGe}T>f!<dgzrn)r(NrO
zM2{;>W|g%`DTv%wBQ5k3jh)#Z4dX^N(M)mm^^~MJbw<*+ku5w;DNNE2O_6$(VP0H*
zDVXaZC(B~YRVtMxi3+!E*En7<zSTvTY;!2$ibXpL&F9J=Uqv3NN=M?)GkBRi2Yov0
zmKN%$f;7nxAa)P1a*TgFsj1PcseuZ-jASU9FRl2Rl_o)EX*4Z4l4#}XN@!9=g?ng;
zcf|sq29wYK_3b5IHy)-jmE}Z=j0f^`BzXnf)SUOW{o*2Q_I}@O>^&_ZM|Ax<7R(n&
zZbqB<QbUr(pu#D4e?OIR^z|4BZ6X_potJL?fzf^!A{r}vU&B6)7K5%es$E?BWRMgU
z@mIRlC}5&;n8HGUEK86AuivgOSx)VvUOa1fwu~fCznzu0fMV{0K1k;os2w%x8`wD#
zBL<Ep1a0*`anBw_Qknn$sFK07Yb@iq)cZ_8kxrJ+-Qjau1u@yt!M+?F$wOzw>kRcn
z5>jQWLh$alB>PvpN-OgB^5`%xcz*9ua^mu-$^@u5nmBa5*&(LUFEL*fPyXl_R5-IP
zYoRQlNQld8_E}C!mI}?Js4_WhCvKcG-$om8g*=CBi6zJkfz$sWAa+JI!905RNiN&e
z*+6OM`_szPnyR|f`q{V)g_xI&uDfN73uJ}TUs70x6-jaVVlp@sWqyta2**0!`z;d8
zRr<2XWPlj2|1w-Z2A3zLX$-!{&6k|tT|-$VS}}~#eLrlfylz=^8O@}U5Fjj(tjuKh
zG=vB4e|HCtnQ?s;600mClPbFV(cJ750;>hgI7cC4s%}T}8Yo(%n2_^f3H#KtPFXe*
zWw>W77`7!o@)pUxZPubOm-{fQ866<(8{p8QZ%xKk#mJaqgW`X0mz*&@>?68DBTUvH
z{y{amPv_a*Z_Rt0C9}o#vlVXDF|yhgd(#=&Mwn~F60MS#n~dKXh%>7&t00@8O-QRi
zkYwc<&_27<vP&eUTAr<vp`4-3U!0w0zA7i<__q)_!;lizqPj%Pr%BV*@9`)^F(V+1
zp^cA)#f?qe@3t%-tzS{6k)sKz8xakMqNy_>uCPTzy*M%-rM-{^x&YB+xuTa@#wy|5
zd0*LRRFNh=vKiUrg<ptgvW9uqVsFdl+|yO1@N@K${TQEf57$U6!rFgrgZ^TqHI)yy
zyDSH{Jm#875%E3xfksqjDlJcEdJ}1HX7JL8`n9E{A)AR-Ue_qKyR0nA8N<ROMV+1Z
zZ^p{T!bJRzTC$w7F5i<LKMCZ_AWKBHcydMxPHG;5i5=bBy9^Qja&)hmvN`(tnIp|q
zx-5jAv$P=yWgO`mva=Lr=rD$Is?RH#M&#&B<#`eB-R%kqFGs}*c37Yc#E9tSk@O6L
zH-rNNuA8tli9eQoo<nG4s7upytDP@Il>UcbfLyvVwA$Hm=TC(jTZ4R`#js)q(uV*|
z$t=vHK|)Nt6p#}rTWH45`oxD@Ys>6&N5&fsq(lZm+YRBI2Yvpxm1QLS0tL9OJ(5aY
z8WzU(O;C<*TPTLX#m=c`ZA4XqV-}B8WEx}cHX3aGwzDCi<*A{KlD%jWHqZC|mPyX-
zwp#|Bkp?w>32kIh%f>CP$4PeNT<)si_1WyV_v9eoR>6?OFqBOSS3|$Ggzku6B@mB=
zZxgV%zF7Ey*pyiX5m|1oSzwtQ#-J#J${HZa43kfmqra%Kj389{nKu>_w)oSCMkT}$
zeOak6aVgS@%4Shj^)h&njy#Pm>Xg6CAWN1aNBmQKges7yQq{AozkMvH^02bfdMcf%
zi$}|`d2B;GxrkjNxoF@$jra#^s;-JiM-N>&zpUYeY~lVi9viY-258do6*M~T>&#Q<
zYks1<8hsxN5d6X#3bFO55RqW^Ha?}FiuDL~mbTYB9&%eOS?0!ZY>NK&j75oPGX+jX
zNuHYvrjCgp%|2%s$2<$VqLeCELUpYfq4SmUT56E7dtZmtU2$S8JFtcIzoVF8XG7b?
z#h|`E{gJNX@5Xp|y>1_mAk)L;%=<10<z7BqDRL>P9y79fju%<87%~br8cin-WWUtX
zl9*fB&xIgOue<a{(OBA`V~P3l?Zs7p=KYEl@VSZ-r&VO(?HowZyi2R-!~MCG?TN=s
zUB-oS#)Tl{Oc5@xgw@Y#%OX)yDIu=WOLiOe;%500X$-}BADo{iV@N`8%VLTeeqd{1
zXEG7CDOjUWVi5`!C>q*3{sET~`e~H~X8e7a3MGum+}?BYd7gg#{+8v3U-2*w3(Lm}
z3HC?Ix)=oeYXX#b#sdkPkas9rKe<vJY;H7@S4$a!E!FBKy^cq-zi9kuKqvM?sd2xz
zwahuvGKQpjHwpiKf278$p0B@qs{UMCKSLltTZCEVvXW^gW~AYRpMMX}K9x}r7X#x!
zh3I8kzaYUpvG`8G*Gwt|XV+6_;M&&4%X{NBqHY|SvU$*Gx{43!bdj(i!W66m?&UX*
zx3Sk#)@v3^u6}%4hA_x|$!4!HQ}8Db-&4dj{KL$?Kt9HV(bpxYl{tl~j4LSfZ^7Q9
zb{(0w{;!^BVJmQ9z1qqu>FJleZGpNqcKuMDJ4oSLOt}QNoH)I4xs$|i!#s)TSA;&?
zzO8s-5l@(@#H@+G<eSN1)Z6-GLlxR8R`Rg+H_Xx{oHj%1c1V=Qlu`#;dJGS;TSskC
z2DFN;sQH$DRj*BB{aZ$F6qSC8H&P`n{K78t`Wfmq6Sy1ynjPOe2$}iwT|BG)nVn^i
zYlok2zLN0g4j&6;$@<45-U1zo1iCuvwz>8@{c;NLqcm^7HV%my?;-NqbW*-$6pjdD
zPF*%z(Pd>^vyJyDSiy4NefmlRjEJxV^uIXs^FFlPXP!z5&y~k|6^Pd)j->ZxaO|8=
ze~sfXtB{<US8;{KeAQ;W2R<`3Ey0a__98)+G|x?ygnVyLE^+NYutM@%NIdVuWR;`<
zEUW~v_%dqFyH>cL497{SfAk$Rc_oG594rty{c8y#`h0NkgM{6n=v?B}@n!T);NO3{
zhWvN|D_M;aKcwehwHa3O<2M{)QuHoge`$lN%8B6LU&th;dh+S<GvQ8qNr|c~dpt%e
zEK!XROak)qbGu0~3ap#&`mTj!x<-qJR<7$_xhKa=eAx$y{*};-<z%4yfWQTf{P^7$
z%O30LWd%l|#3uYWWZ3j#B{tT3%IG`(T$0Sb3&U7{iYi~+S;pKJc(a8+gH_J-QT>Hb
z4Tsns&&Vgq?sCk{B(oo4@xRK(R&sKhEO*g2uVdL=aGH}Iz9wdO_2%V<3q1!3HZO$U
zbNJjwz^*e=V}XXIdmIamcSh|#P-uZ+yf9VBk7-3BUu9W@4<SC5u4452f4@MAC<Ru+
zcpZxB$*h{m>)Tm5adXak!pT+(wU_1wxV)u9n&fnc<om=C_Fdie3Ql;pjBJ{|phye{
z_`a{L%y)wI$>Yb46;E?=>V288D)TsquL;s1x{~j`62N+pa_>e+<`BIiQRAG0#3$em
z4A~cFWK6E@NztNohwd*7Ua%{qzPj<Qh^r|=S;k>xWrQk(5f<AB3s2;zD-li8@L^SE
za1i|aj$7yN82Oce>Pf-l+wDbtf5j18O&=99yBBb-z5&P2yFt{Q7d~j_zrKC9Nmb2R
zfZ}}lp~HO&JgulJVy|$Nu>POQ?mZgHynzF_HYaU2rF~1arIJnV6=ev~WtT#icP5vW
zCWI#AUSY;;ij9;vie+b_scf&Asl?DsC}%@8j8daADc7BtsBy`i_xr@2^S*z+&pDhq
z$2?<Zp5O2HJZI*7Ki>#v5bDIiuvbhARf{n2*W1!^Vd5Z3kw697fr`ah@o~sTeV4TJ
zT7A&nleUXTrp>=?n!JA1nSD>S@m&duFvv(xi`_%&r{&N(S6{rdFs^BimFC&$Ir~Y5
z%_?)T`pi{QQD9a*HD`0dBCgIW*Y|lAyy1Y2d%qKiyqYgf-+G`vay50WdifFzEsd@I
z;R(&EKC${D<zk(QiIo0sw-zsLo<TEXy4qRg|2}-$=fO`A-?oUQDJxtysr^zE!I?bt
z9OBTwVdKzWGa+(q*qRP&qzNZ)Kf7U1L@}}bVlr1e897ml2>kESKDCqA(y4i(W)(YX
zS$PsD(_-;T#nXkZTZm??Gkcg!o63_2?=BW^=gj<jPAy(7=|NH!fi=?zd#eS}SMf<0
zu{|8pmGr=@VqD$zT=dXu(&p>+ZF+c$HKz0y)PloV2D!XHYN)3j_<?^<P*ri<d@D3N
zCokD(?u;^%GR2h`lrJzE2j0b)T3gGH6f{OF1*&#fCSC7J?;A-@&zL*hmgdTj5Axgh
z^UqsQf3{;U_+%0KkZ61<@{{W;;c67tJ*xU#csa!)sRQ;)wM2r_H$=2;!`jYXhK_$2
zzUA@zHoCg4r!-asJTL=^fZT2&SD$FOLUotWEVStv^1Y~N3odx`PcjFTsJnaS<=mS$
z0}v`s;?7yJ!S_k39-<XHXJT|vlhJ_fSS)8EkX<YklLrrYGXXhw=jBO}>P7?}EjV@N
zLD&^uMAyrsT*^RUNeKhFaeA>ei3HR$zB%MxtLHII#7?m(DuP)fa@s9XLO4AuSKgI-
zX_#Rv9l9Oc&qJv9%9G;d?`J6(AP8Uy5dD70oNLTo8d0_UM2Hkck_#NrHiNXhyfAQo
zY%KihUXlXd#Y^+9))YGvV`CyU-$>U~|0c)}g^ma{2a7v$A>5UM|H#Tcuf0Al9MRDW
z^9_uRg-%4Zf~Q1oT1{YJ5()C|8v>rK<e7<YA*#-*yY7hWFmyA>4TRBy`@I!~pF4Lh
zJEogd`J3>$SZu{pwhW9k(g&cv0L8e2cs(kg-!gh@*u5c^?6kD-vHn-6v@1pQG>O~S
zDLWTVk2D~TDTrbaGeY7GMG}{C-~j0U$9LK3=|w;dfcqfnZ43vI<8huA>ALOe9{Awo
z171SpYT**Y=609WT{JGzoSFcNC!I2$mq`Xy8_yWno=wb`QH&%@1qiZ1Sbx$s`GsIV
z1k;na>Zk1uRd`c(>`mUjno`iiIq@z({Q-t#>YDgJn}M351qr){NOdnh1~ImD-mmhf
zkDR^_Zj_?Te9XjtBz_1AprGB=cBl>31HTV#vo_H$J;srt1`wqT^6NqHb?qi0QBktU
zD-LCKc4Hl`Sj?R6U|j7oExi;@s23R$+3VK<#;7l{Kb+A7*h`rHb$Ef=bC&=sI%4sb
zq|ii8ABq=AA*esvqLVMPVJZd1$2NH~nWe%I=zDQ1Um`5*d#>wiNhC&>G!1mx7OljO
zI8w;U!?N2n#|OP@n2{KsxUo>Z`TclNtEYR>F?Td9J38iTg-d<%-Owag)oMSpqN;b!
zvQ0)>iHwP{0Yvt}F#QA;64Q=oq^SLUvuo;guvwIiL}@Nu+uXqVo&~x)KQ;(?oLPZ}
zIy^IIob_R3^0nvs4g^|@ss;-Sna6lR_Sl?Ng%KTfl#S~Q44jOr5gJEVsaA1!e>9Tq
zUliG_GSnH|yEljz@bT4c9fttq%rO?wP3Ls{jb8@Q0<RJhHpO^nI-hT(JiW$IRhzt?
zwr4+2nB`VP8R$!4jr!opa$NjN4kb`w?4wq2K%@AzEpc6ejlDK?4fHMyy-55<jc5{8
z8?=%Kg;EdQhCky&CPQ8>_#nQ*;Q*HEd_+dv{;z=%L8L(M(mrK&5|=SPq<~xDoqxE(
z5aiIng9#?QgCIX{ULI9jrN`Cx&@rn_To>t;!V37qOoc{Pb~u{M_&X?FzICgY`0y)I
z(Rhi4Owrc1J9C2{U~zBOSU*HtK6A5kK}BwBi?Ff2a}n<w&qn5%Jv?Cp^o&P!SH$US
z91~{?;wlVF#xUrKws35gtRI}S3W3JqHNn#&-Wp({o}#dJKp(ZE@_F<d03%UOo9;(K
zKOXR)vNCXv6{<xc;AHxn0cz|gTcFtsk{@eG;$3-R`G~@9LUjH5_7{b4miU6*kn}tO
zpLu%+``z`anx{N1`#v}z;Lf-RZJ5e!Bk?3MfDP0XIXj>4uSFkE7-+{Jzd8itQ&Y9F
zYhQ8ALZMJ?b|%K+gOSEhx8O7p3hBj0AR-t?d-Q$vMxd;E8t?Yxo!HJ34xf%`K)nI}
zbkYLHi9G)dB+PmALK{2F!mn*~YHVXvCQy?R#C4zOi!Rj$HPEtg;>(SUgV9)PSY|h<
z+K`6uy?7tQcTB<GcbSNMfx47LsgFXyn11RZv`)M!vB=4XN`W}6OlrZw+;{LGF)J%y
zV`;#IH?M)q<pO{Ur$-FW<D;s>FU%4B_OHnzySWWQ*v1ESw5XBz#7_+%(C~8X470)Y
z?uK82U63S)iVfMG;hBlTAvk|h{9tSbm#7kIj?h#_<-FTv29h2)Uo;xco1xm_n93L6
zk_9TnGWxx8r)zmfarda+0(As#3!G&2oyN25z&QT6BI?ob=wsa!!ekYAIFITUiT}uV
z<3oPO8Q9RkfDn&xV!-^jzE|;O>RO?x<Y`R}$0nwzKME%%Oi}-KIeH$e*`xy9bwnRG
zCO0h$4c~Ne#}CR-GS7Vor-p$}nWXDDO8?Bpn?9m;4Gh5&AFQsXC7&IvGee|=AL*R6
z#<31YH2r>8(O|U$w6-YJyy-b+fv?){YV!~8cP><yF0BwL00T%9Mv^ehHVE$xrqzJe
zPz0Kz{}gfx@T<4nT{+6(pyI~A!bEHr1(rS3M+dqiOqGcc@sG*c<=VKw_<%E>si;jW
z)+r-LAhUkGHCRYlIB{0c-GR?f@ela=U~D>ZI)X;~Z&`nE#J6UjKF@_INNiT!iEFQ%
zRB%qf&cKCDSTyVeEJAn|hsJubYQG0>2P2(9-4*FlKBYpavFD%P$r^r<U4~8s@JFbT
zibfA7Dm0i^XGhY@lebMiHv3;`X$8mL-2HV$bO27v9UUF;hiXkRv1WVS44*w?-rtvR
q<qua)?jbgxT9?%Rk88Sy35`G7DH%$O$3DcPIPP%Se#_xd+<yR2aYYya

diff --git a/public/develop/images/flows/08_Invoker_Discover_AEF.png b/public/develop/images/flows/08_Invoker_Discover_AEF.png
deleted file mode 100644
index 20b2f04f94444833bbea04832620434593f89bc0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 43087
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%0D{Q~
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

diff --git a/public/develop/images/flows/09_Invoker_Create_Security_Context.png b/public/develop/images/flows/09_Invoker_Create_Security_Context.png
deleted file mode 100644
index bb655e0e38e8394b3aaa024ada0f13c2f21c2b4c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 43568
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

diff --git a/public/develop/images/flows/10_Invoker_Get_Token.png b/public/develop/images/flows/10_Invoker_Get_Token.png
deleted file mode 100644
index 2e39f52a3d12efa8c19ea3032957e9f48d890d0e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 55546
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
CaPF-D

diff --git a/public/develop/images/flows/11_Invoker_Send_Request_to_AEF_Service_API.png b/public/develop/images/flows/11_Invoker_Send_Request_to_AEF_Service_API.png
deleted file mode 100644
index 1e4a87c54b04d2d6524da2617fa615dab7318dc7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 26214
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
G9{mp%Cp}jH

diff --git a/public/develop/images/logos/Open CAPIF Logo Screen_B_W Slogan NEG.png b/public/develop/images/logos/Open CAPIF Logo Screen_B_W Slogan NEG.png
deleted file mode 100644
index d0061b6f859094be2b4c4d9e73047ebbe2524e98..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22786
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

diff --git a/public/develop/images/logos/Open CAPIF Logo Screen_Colour Slogan NEG@3x.png b/public/develop/images/logos/Open CAPIF Logo Screen_Colour Slogan NEG@3x.png
deleted file mode 100644
index 06f34e564036a3bff31f3e85311ca144d2346d2b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 93037
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
LD2Nw}8u<MmF~4t6

diff --git a/public/develop/images/logos/OpenCAPIF.png b/public/develop/images/logos/OpenCAPIF.png
deleted file mode 100644
index 57562abe95af2699d7dbb34fe43ecc686d3c910e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 24999
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
S$=kpWfT$ic%C~Nj-2VZ(KF2=*

diff --git a/public/develop/images/logos/OpenCAPIF.webp b/public/develop/images/logos/OpenCAPIF.webp
deleted file mode 100644
index 8ae5c10e186e12481f1e65f36b69ac722f057775..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7218
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
A(f|Me

diff --git a/public/develop/images/logos/OpenCAPIF_Small.png b/public/develop/images/logos/OpenCAPIF_Small.png
deleted file mode 100644
index 8e904bbabca310de26524d8159f80f874e84ce09..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3747
zcmV;U4qWkxP)<h;3K|Lk000e1NJLTq002J#002P<1^@s6W_NsU00001b5ch_0Itp)
z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGqB>(^xB>_oNB=7(L4me3fK~#8N?V1UA
zQ&kqn|4F(e-S>sk6}wRp5O9G(L6(AwECM1RIyfW9q6jJqMP;cVyNaNWAcBIjj8hO5
zgrY1`7De_}p{0A9rgTf1rfKr#+?yAuHnb@T!TFru_vLHfx%VaSf9^f!o_iCCK;SQm
zRQ&sw<p1Iw%9T_gO9K2#FZCADcx!N6%vXN~D4(K#41g?%{?f<lm4I^u5VjX^iRIlK
ziGxSJ@yF4~I|q{w)Id%gP>?Lz9f#w@dyN5Z(*b_-0bMCztTEXo&NS-e1l<uJlN_RY
z#bkE?w{EE`ew;$#a~geLdI}fONEpg#HZ%YsUjm*(MB~lj)~@pnMKs+X0P3><r$Bld
zaUu#vYAYkhL;`IoA2{D;vfCNEOnX6F4q<%<+}R-s#l<C})e4;208yEg@OIOPSI~<R
zAcHx9=K~6jY)XVhkC^Os#%A&LyT(JiH~<o36-rgrXwxPXV;-X^-5T8c1F?F_2Mfe}
zKuM5c&Ij84zy-<&6|+osJ8{F}8;&i9X1)Z5tS=!A2&d)C8P3kmh>nOtdip*{BoZuN
zvP|r4C4M9>fuhi@A9<CWAdo{C5_h0YAR5#Qv0zSblg$paTD&3u5NeltqW*_jkoko}
z;_7K?FgC!@V0u`0cXzaljKbX4Ux&Z957PJT<94eFrDWHxke-g}0SP%FMuOBu3MvVL
zaq>)v*vWRR7BAFmpk3Pux(z)cm3u?##tIeIAi!9iPl|)!6A+BT{CqN*a%f;sAiTZ3
z(XVe`bm`OyB_*xR2NzHvY=%st#<DdsgajBNmy7Loz$)>&oliphrU#%Yfz*elxR{lN
zx=IpW0GC0Z0wa&(%;^*OV*6GSS&S=JuJArmsT9#P3(Ayb2n`Lz6Juz-Zv};A3G|R!
z_|uALZ<-aaKd}m$xe^#J?tnBf0umWpk0rDW*TGnp4{4`~aGNE->Go@ah727FjZTLt
zQ=h}7+{>t~t>tzX7Z)B1d-r_D^TFFIR&aYu$fSC5pm@;&rB~iZarwvMRm)g>TSMUy
zXqR|GpZ+3bl*}Y9EUsxP8x1h3@*oLJg5os;T>C6G-C%)vsq^{t@7ApwcS1u06)uE1
zAIzDZf&d>M96ETA+wB5<-ns1YIC?G!y84Tv@%l6ouiG&iy0zUQQBYh{9GjrHt|_G2
zgJN!KCgh{{)6BPSIMQ}~h0F_?aCLP-K|#UQd=L~A1TQad^t|sr3>+|k+iXPw8C+>~
z6ofJyJQa(A(j{VxWtu9`ltJQSuC{23*Hyt-L2>=?1}L5{hSV?K)UOr9C&VM`(j{!%
zv<XE;MW|?$4<f_bLRm~1-HuRH!OfLcOIATPLsRimC;mq;=qRr9AnPy=ZYjTy>l<an
z$Pv)$>oNH`Q$DEEYPntJB;$YWj->hbZ7N<cKv2=>`?sgK*2AU$yJCa=n76=`4?5EF
zms?ms`9LgY9844Of>Z(dv&SGG!{XXB3#{RX@4v_4Lx;pG>)5sXTbw(47QX)eqQ$W^
z5icK^25D$F@v3E5`s&}OFM9RvjlcEmi9Wr0UtQj;p?y*k_NAwbSB|CWv~LA3&v+41
z$}Z>6o#V^bZBfzqH7koRXOo_NR_yhAE?&Hd2ugDI+;tble4S{$HQbQ+&o^y`t5k+{
zYu9qoa<S&DtE)o+Rd>%k{WMmuS;K9O89I0{Vq;^u!wT~Ypm0-Q`U@|Jt&XQv;?JKy
zkBBy582{vxXd505A1YE9Mq2-~DSJmmMxdgi0v~+z5x1L}laj)#x}!%jxU-y`oM_#5
z<^OM7{|VLZ60BcmePw1ZtQJ2oIT=Y5pE8*YZNkF17>2U66l#qc2M-;@;f#!{4q@!t
zxfAX#a=iD>yIiQ7n;Ul&+u)R|%6Z0T8y~g}o-|=1ckJoYr^UN(J}ruWX~qmL^vtQ#
zTmTc#uGMNaU#k}_SpsEwIePT?n|Oz5CL|>!V#p(d5fT~#KR-WiFDolUWo0G4`EC#1
zUHu*|=jEcRs*2T8<j^+!y*qa7NcUMjxzX$OD5uY|8{~b9Y~Qv`AkPQ^-aZ0}zWNFe
zZNn10Fn-*VV$Y_Ot5iZrV2}_K9>MPk3l8D;ytQzV*y9>gCr{>WRO#`)QEkHoN}OV=
zARIq&OmKpPzdCogL&(d`6I+^6s`@}Ua1uhsSqO(uLAX>nLu|23laWt9bqao=VHi8=
zaYRK#!n;vivyl!DZ;Q%`O04~4J-1tem91<PnJOJ6!NkNwKE+>tWu~b^Bi>oH3N<w~
zP$(2I7^uLae$KQ5G^0^#&_M6B_xp7GeEJl^BWO!)Cz^=w_0}60=dFO&KM?io=?OMn
zSv`L60LAsuqvQ~8Q-c-g>g#dOz4wY&mhtfLKy*y>)tz5sI(NR4JLLZRdx@6oBXD<H
zPZRMPdXSZY9%$$og*e(Bu+dIkv=9~Q8Y*J0#dT}YlLK19U_m&;%gamruVsS$y&+eS
z6Rh-s#e`QucWd+p?32|(xT3<8sZ+(4KQDWB??Gt5OE|LM6EU%DvqZ)goM2Hr!$>bx
zgAoSG&bA_@_-_eo&j<d9vQ&vK9Xny*fMgnVDN?2dp?iEgl$QaXKFyce&3>Y3C2x5S
z6%`fI{#lN^ynNAe4VL(<S)OXDYj~n;4J;`KhXg~VQt@*_nM{h{Py@eysFxJV?6G1`
z%iNf|8!>v+D1=e1uC3QmP4C8SEJ2xJb^aHdHzPVc0%y;h5v|ww`s=UZN#$`)b`C%H
zXEj9Q`z^uF|5(3$`}Xnu1iO!+r47}^%a`%|w5jwS1|)Up&h6L3Ch?vMcYH^&78@NS
zT1>c8(k!JajxAw~fWSchx5FKGpkMC?`2XxkD={t}gCBYrLBSz#6CKA!O+y8gCDLj4
z=j-W(*HY&2f{QtpIf|_kEHU3rs|vfGyI{U}NAuVuJ~Aqjm#lvrDRxq;7mRr9@lpJt
zbUGcM{%n*oGc)<9-9``3Mk+Egl3z2ytnaLp*~p_XYD`&~65Tp?LEk=o;Opy)K+&1(
za|_9dY~-`EFX7*5|KWCPu}OSO({t78)x01IYulD@eAo!F4GnVw+ZeG8j(OC2lQ8yv
zug;z=-fd#+=+OuY3WicyiWqX3IWMrfqqwLTo3?DhZ#mhB{=@9E2AgBPC0Id}ar_v5
z{P9QH^6F4hT*5`NiZPc&d$@Zbm*RBO7oUrFn0R}|N>f~ax0g@x#&OM@HEGIZ)arE@
zI&3Jn-v~Edyct&I6_=G_>GEa#;n}Wk*EiqdY}N(Z3P*~)OoRpmV%qc<uEsUPJVUzP
z)r~uE{+n-dyDd0OyqSrUC-H}`s#T*ut<9DwR+ZuXHEVdNR99E?<ml|;jI69Iq<!_3
z*vobtBA$)f%9Sg{E9;mraUzW5q=yF$!kQ01z;D^vh>MF8TU$n{tHQ?@n?D<Lh<KLR
z7Nw@bRpyKxX=$R>I@Zzd@$ciui&xh1+=-77yk#6NX{pR>28T_1KR<tjQZ+Vw$WSE3
zC-9=i-fYM@0L7NENGtjYkv`#YY4w*DHxtU<EV;2$pqO?s7&dsY*kBvKROTXb#}v%?
zWh2^ohQQNVZq@d-iFhOJ;*6{^GZprBqmT+0^Laj7wpb?5IFiAav-xx9aeHggH0Y4L
zKNWZHnFV(z7X-_%oinKFYEY?f<;KQ)+c!{*eHsnFW<sFK%wAroB8T=*PUg#1y|}+;
z)gg1j@}*1R<>rpBcJAbMYnXm=BfPdfh3r}-;ygnk6@M^Mqt_x^U5bC*H37>zkK?xM
zVR72Ky)+vE`IT^Le>;Rq(>JR2;M2{UP>`PwUq4@5CMU2$hvDz<kHCNc40~h<Zcj)=
zPR{l7!6y{g9$Uv@dwvEIy~E%tb><UXXVl|DRUwAAy$7`;Hez&S57Q0JVAGEf*$J(h
zMwHd^7cb}VO$ifX4SRO)#$&^W)0$5k9};ecozSw{e)zCq*t&hYXa!DFTt9kfIV$Qk
z2v+!9osS0EL*!~y=oyfJZ+gATzYwt&yNH)c1zavDg1){MPR<Ik)jAd}T!>d^%|ZxO
zb>?c0!SX{fZD<y~wGbzhy^)r67*QTUkePoEM6c4iN_ff?__F5=bn=bj_SRsN`1bK}
zw7K{V@$t#%)^$47>LvK+gf18~BuVUHJtJuru#sk8T$t;4=#8lHkicu>7`Un^|A>QH
zO^NJ^PL0)F|ABGQ_nC}0fKB3~!;{dX$BXdwiKI=7>9nS@QVVA%DQ3UX7fH9b?l*J!
zdHHx~-~e1;UyDW1R=0s3E!YF{4@XeRriM<?BUfF9=i(m3($3AF(pZDVgl8=o$Ie0_
z_oCW6kJsxAA0Gu2ZZ4QP<7-Txx`S$SwqjTZJCi?s?i_aR+C^JfB~;}qvP!7THR7^H
zi6})Nsvcc$7vT(>M&8WfLpfNw=m*H<PVn$>6|F3J8BtnNjpPRtFl|Op(P}-5=ci)k
z;yH-fI}=-DpTV7e(PE2zu#0#z8`d4i=1+e?P>2Vu0M~xiq1Eb9QBjL$Cw0feL)weh
zTaR7En|UK;H;x}IKrlIhov4~&`M||RhLpMekeF!xncJ=7rif?c=2l?dYkN^qu7RJw
z8!uxSMxy{_X$@lI12K0&GCaMmg^8oNY2wWs*q@CR%MMt`2L>ohYVhEoL`<1>V_$>W
z%1sw<=96_Nu=%r-2&SdWoDWzoC@!kTQ%`rr6Hj&JHb>$x@eDTQU!T1jKmWvj$|_*s
zLkXDr!mSx~hC{`hxp2M|KE4WshFbp(?9Jeoi2t)-Q-$}x&R<wO@L%L)9=F^zmDK<M
N002ovPDHLkV1gy$AKU-{

diff --git a/public/develop/images/logos/OpenCAPIF_Square.png b/public/develop/images/logos/OpenCAPIF_Square.png
deleted file mode 100644
index 7b558faff76fcbcd6887cd39d867b75805a522d0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7831
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
NnO(LtE`#5Q{U6qRp4|Wd

diff --git a/public/develop/images/logos/OpenCAPIF_Square.webp b/public/develop/images/logos/OpenCAPIF_Square.webp
deleted file mode 100644
index f3535f6dadd6d625469c06b256d2aa7405b719d2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3068
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
K`KTf6zlw5&ZS`{i

diff --git a/public/develop/search/search_index.json b/public/develop/search/search_index.json
index 9fa4ab0..93022f8 100644
--- a/public/develop/search/search_index.json
+++ b/public/develop/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"<p>Welcome to the ETSI TeraFlowSDN (TFS) Controller wiki!</p> <p>This wiki provides a walkthrough on how to prepare your environment for executing and contributing to the ETSI SDG TeraFlowSDN. Besides, it describes how to run some example experiments.</p>"},{"location":"#try-teraflowsdn-release-30","title":"Try TeraFlowSDN Release 3.0","text":"<p>The new release launched on April 24th, 2024 incorporates a number of new features, improvements, and bug resolutions. Try it by following the guides below, and feel free to give us your feedback. See the Release Notes.</p>"},{"location":"#requisites","title":"Requisites","text":"<p>The guides and walkthroughs below make some reasonable assumptions to simplify the deployment of the TFS controller, the execution of experiments and tests, and the development of new contributions. In particular, we assume:</p> <ul> <li>A physical server or virtual machine for running the TFS controller with the following minimum specifications (check section Configure your Machine for additional details):</li> <li>4 cores / vCPUs</li> <li>8 GB of RAM (10 GB of RAM if you want to develop)</li> <li>60 GB of disk (100 GB of disk if you want to develop)</li> <li>1 NIC card</li> <li>VSCode with the Remote SSH extension</li> <li>Working machine software:</li> <li>Ubuntu Server 22.04.4 LTS or Ubuntu Server 20.04.6 LTS</li> <li>MicroK8s v1.24.17</li> </ul> <p>Use the Wiki menu in the right side of this page to navigate through the various contents of this wiki.</p>"},{"location":"#guides-and-walkthroughs","title":"Guides and Walkthroughs","text":"<p>The following guides and walkthroughs are provided:</p> <ul> <li>1. Deployment Guide</li> <li>2. Development Guide</li> <li>3. Run Experiments</li> <li>4. Features and Bugs</li> <li>5. Supported SBIs and Network Elements</li> <li>6. Supported NBIs</li> <li>7. Supported Service Handlers</li> <li>8. Troubleshooting</li> </ul>"},{"location":"#tutorials-and-tfs-virtual-machine","title":"Tutorials and TFS Virtual Machine","text":"<p>This section provides access to the links and all the materials prepared for the tutorials and hackfests involving ETSI TeraFlowSDN.</p> <ul> <li>TFS Hackfest #3 (Castelldefels, 16-17 October 2023)</li> <li> <p>The link includes explanatory material on P4 for TeraFlowSDN, the set of guided walkthrough, and the details on the interactive sessions the participants addressed (and recordings), as well as a TFS Virtual Machine (Release 2.1).</p> </li> <li> <p>TFS Hackfest #2 (Madrid, 20-21 June 2023)</p> </li> <li> <p>The link includes explanatory material on gNMI and ContainerLab for TeraFlowSDN, the set of challenges the participants addressed (and recordings), as well as a TFS Virtual Machine (Pre-Release 2.1).</p> </li> <li> <p>OFC SC472 (San Diego, 6 March 2023)</p> </li> <li> <p>The link includes a tutorial-style slide deck, as well as a TFS Virtual Machine (Release 2).</p> </li> <li> <p>TFS Hackfest #1 (Amsterdam, 20 October 2022)</p> </li> <li>The link includes a tutorial-style slide deck (and recordings), as well as a TFS Virtual Machine (Pre-Release 2).</li> </ul>"},{"location":"#versions","title":"Versions","text":"<p>New versions of TeraFlowSDN are periodically released. Each release is properly tagged and a branch is kept for its future bug fixing, if needed.</p> <ul> <li>The branch master, points always to the latest stable version of the TeraFlowSDN controller.</li> <li>The branches release/X.Y.Z, point to the code for the different release versions indicated in branch name.</li> <li>Code in these branches can be considered stable, and no new features are planned.</li> <li>In case of bugs, point releases increasing revision number (Z) might be created.</li> <li>The main development branch is named as develop.</li> <li>Use with care! Might not be stable.</li> <li>The latest developments and contributions are added to this branch for testing and validation before reaching a release. </li> </ul> <p>To choose the appropriate branch, follow the steps described in 1.3. Deploy TeraFlowSDN &gt; Checkout the Appropriate Git Branch</p>"},{"location":"#events","title":"Events","text":"<p>Find here after the list of past and future TFS Events:</p> <ul> <li>ETSI TeraFlowSDN Events </li> </ul>"},{"location":"#contact","title":"Contact","text":"<p>If your environment does not fit with the proposed assumptions and you experience issues  preparing it to work with the ETSI TeraFlowSDN controller, contact the ETSI TeraFlowSDN  SDG team through Slack</p>"},{"location":"FAQ/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"FAQ/#does-the-user-have-to-develop-the-3-elements-of-the-provider-aef-amf-and-apf","title":"Does the user have to develop the 3 elements of the provider (AEF, AMF and APF)?","text":"<p>No, you only have to make the request to the \"/onboarding\" endpoint. In it you must specify a CSR for the AEF, APF and AMF and you will receive the certificates for each of them in the response.</p>"},{"location":"FAQ/#there-is-one-party-that-publishes-the-api-and-another-that-exposes-it-what-is-the-difference","title":"There is one party that publishes the API and another that exposes it, what is the difference?","text":"<p>There are different services, the APF, intended for publishing the APIs, and the AEF, intended so that the invoker can call it. The APF is what connects to the Capif Core Function to publish the service and when the service is up, you need the AEF service so that invokers can connect to it.</p>"},{"location":"FAQ/#before-publishing-an-api-do-you-have-to-be-registered-in-capif","title":"Before publishing an API, do you have to be registered in CAPIF?","text":"<p>Yes, before publishing an API you must register using the POST /register endpoint.</p>"},{"location":"FAQ/#where-is-the-registration-done","title":"Where is the registration done?","text":"<p>Registration is done in a REST API outside of the CAPIF specification taht we have implemented.</p>"},{"location":"FAQ/#is-the-username-and-password-chosen-by-the-user-when-registering-or-is-it-assigned-when-requesting-registration-to-capif-public-instance","title":"Is the username and password chosen by the user when registering or is it assigned when requesting registration to CAPIF public instance?","text":"<p>When you make the request to the \"/endpoint\" of register, you will be returned a username and a password determined by CAPIF.</p>"},{"location":"FAQ/#what-is-a-csr","title":"What is a CSR?","text":"<p>A CSR is a Certificate Signing Request. It is a generated data block where the certificate is planned to be installed and contains key information such as public key, organization, and location, and is used to request a certificate from a certificate authority (CA). In CAPIF, 3 CSRs are necessary to register a provider, for AEF, APF and AMF.</p>"},{"location":"FAQ/#when-doing-the-register_provider-where-can-i-find-the-csrs-that-are-generated","title":"When doing the register_provider where can I find the CSRs that are generated?","text":"<p>When using the \"register_provider\" command, if you add the \"debug\" option, it shows you a json with the data used to register the provider. There we can find in the body a list of 3 elements corresponding to AEF, APF and AMF. IN each of them, the apiProbPubKey field corresponds to the CSR.</p>"},{"location":"FAQ/#how-to-use-the-example-client-capif_invoker_gui","title":"How to use the example client (CAPIF_INVOKER_GUI)?","text":"<p>First you have to make a \"./run.sh host:port\" indicating the address of the public CAPIF. Once the Docker containers are up, you have to do a \"./terminal_to_py_netapp.sh\" and then a \"python main.py\". At this point we will find ourselves in a console with some predefined commands to use the Client. If we press tab twice it will bring up the list of available commands.</p>"},{"location":"FAQ/#where-is-the-capif-public-instance-located","title":"Where is the CAPIF public instance located?","text":"<p>The CAPIF public instance can be found at the following URLs: - capif.mobilesandbox.cloud:37211 (HTTPS) - capif.mobilesandbox.cloud:37212 (HTTP)</p>"},{"location":"FAQ/#do-you-have-to-publish-3-apis-one-for-each-instance","title":"Do you have to publish 3 APIs? one for each instance?","text":"<p>No, you only have to publish a single API but each component is responsible for a specific service, whether publishing or exposing.</p>"},{"location":"FAQ/#once-the-api-is-published-is-it-always-active-or-do-you-have-to-republish-it-every-time-you-want-to-use-it","title":"Once the API is published, is it always active? Or do you have to republish it every time you want to use it?","text":"<p>It is better to unsubscribe the API every time you exit the application since otherwise it could be republished and it would be double.</p>"},{"location":"FAQ/#would-the-same-username-and-password-be-valid-for-different-invokers","title":"Would the same username and password be valid for different invokers?","text":"<p>Yes, a user can have multiple invokers at the same time, and as such, the username and password would be the same.</p>"},{"location":"FAQ/#what-is-the-notfication-destination-field-in-the-register_invoker-request","title":"What is the notfication destination field in the register_invoker request?","text":"<p>This is the callback URL used to notify events. CAPIF has an Event service to subscribe to that notifies actions such as a subscription to an API, a change in the state of an API...</p>"},{"location":"FAQ/#is-the-notification_destination-a-required-field-in-the-register_invoker","title":"Is the notification_destination a required field in the register_invoker","text":"<p>No, it is not mandatory, but if you do not enter it you will not receive any CAPIF events. For example, the APF may delete the API, you will not be notified that the API is no longer available.</p>"},{"location":"FAQ/#what-is-the-purpose-of-the-discover_service-function-in-the-invoker-client","title":"What is the purpose of the \"discover_service\" function in the invoker client?","text":"<p>The discover_service returns a json with all the services that exist exposed in CAPIF at that moment.</p>"},{"location":"FAQ/#what-is-the-purpose-of-the-get_security_auth-function-in-the-invoker-client","title":"What is the purpose of the \"get_security_auth\" function in the invoker client?","text":"<p>Sirve para pedir el token o para refrescarlo en caso de que haya caducado. You have to use that token to call the API from the invoker.</p>"},{"location":"FAQ/#what-is-the-purpose-of-the-register_security_context-function-in-the-invoker-client","title":"What is the purpose of the \"register_security_context\" function in the invoker client?","text":"<p>To consume the API it is necessary to have a Security Context registered with the data and the authentication method.</p>"},{"location":"FAQ/#is-a-user-the-same-as-an-exposer","title":"Is a user the same as an exposer?","text":"<p>No, a user registers in CAPIF and once done can have the role of invoker, provider or both.</p>"},{"location":"FAQ/#where-can-i-put-my-endpoint","title":"Where can I put my endpoint?","text":"<p>You have to set your endpoint when doing the \"publish_service\" functionality: <code>publish_service capif_ops/config_files/service_api_description_hello.json</code></p> <p>In the file \"service_api_description_hello.json\" you configure the service that is going to be exposed and by developing one to suit you, you expose your API.</p>"},{"location":"architecture/","title":"Architecture","text":""},{"location":"architecture/#architecture","title":"Architecture","text":"<p>The CAPIF architecture has three main components, Register Service, Vault and CCF, which are represented in the following image:</p> <p></p> <p>Each component is separated into different namespaces and all communications between them use Rest APIs.</p> <p>Apart from the communication between components, there are 2 other entities that can use them:</p> <ul> <li>Admin/superadmin: Responsible for managing users with the Register or carrying out special operations in the CCF.</li> <li>Users: They are those who want to use CAPIF, registering as a user in the Register and as Invoker or Provider in the CCF.</li> </ul>"},{"location":"architecture/#register-ns","title":"Register NS","text":"<p>This namespace belongs to the Register service, and we find 2 components:</p> <ul> <li>Register Service: It is responsible for managing all users who use CAPIF, in addition to providing the necessary information for its use.</li> <li>Register MONGO DATABASE: It is the Register database, in it we store all the information about registered users.</li> </ul>"},{"location":"architecture/#vault-ns","title":"Vault NS","text":"<p>This namespace belongs to Vault. </p> <p>This component is responsible for managing all CAPIF certificates, so other components such as the Register or the CCF communicate with it to create new certificates or request keys.</p>"},{"location":"architecture/#mon-ns","title":"Mon NS","text":"<p>This is the main namespace of CAPIF, since it contains all the CCF services in addition to other components:</p> <ul> <li>NGINX: Responsible for acting as a reverse proxy to distribute CAPIF requests to the different services, controlling whether or not they are authorized to access them.</li> <li>REDIS: Used for internal communication of services.</li> <li>CAPIF MONGO DATABASE: CAPIF database, where all information related to CAPIF services such as invokers, registered providers or published services is stored.</li> <li>HELPER: Service that simplifies integration with third parties such as external management portals.</li> </ul>"},{"location":"architecture/#new-architecture","title":"New Architecture","text":"<p>You can check the details of all these changes in the conversation on the OCF wiki.</p>"},{"location":"releasenotes/","title":"Releasenotes","text":""},{"location":"releasenotes/#release-100","title":"Release 1.0.0","text":""},{"location":"releasenotes/#new-features","title":"New Features","text":""},{"location":"releasenotes/#registration-flow-improved","title":"Registration Flow improved","text":"<ul> <li>Eliminated access from CAPIF to the Register user database when onboarding is performed.</li> <li>Isolation between CCF and Register services, interaction now is only by HTTPS requested between Register, CCF and Vault.</li> <li>Eliminated the \"role\" in user creation.<ul> <li>Now a user can be an invoker or a provider at the same time</li> </ul> </li> <li>Administrator User:<ul> <li>New entity in charge of registering and managing users of the register service.</li> </ul> </li> <li>UUID to identify users.<ul> <li>When you create a user, a uuid is associated with it</li> <li>The uuid will be contained in the token requested by the user and will be used to relate invokers and providers with users.</li> </ul> </li> <li>Endpoints changed and created:<ul> <li>Administrator endpoints:<ul> <li>/createUser: /register endpoint changed to createUser. Used to register new users.</li> <li>/deleteUser: /remove endpoint changed to this. Used to delete users and all the entities they had created.</li> <li>/login: Allows administrator to log in to obtain the necessary tokens for their requests.</li> <li>/refresh: Retrieve new access token token.</li> <li>/getUsers: Returns the list with all registered users.</li> </ul> </li> <li>Customer User:<ul> <li>/getauth now also returns the urls needed to use CAPIF, used by customer.</li> </ul> </li> </ul> </li> <li> <p>Security improvements:</p> <ul> <li>/login uses basic auth with administrator credentials.</li> <li>/getauth uses basic auth with customer user credentials.</li> <li>Other requests use the administrator access token obtained from login.</li> </ul> </li> <li> <p>Current fields on user creation by administrator:</p> </li> </ul> <pre><code>required_fields = {\n    \"username\": str,\n    \"password\": str,\n    \"enterprise\": str,\n    \"country\": str,\n    \"email\": str,\n    \"purpose\": str\n}\n\noptional_fields = {\n    \"phone_number\": str,\n    \"company_web\": str,\n    \"description\": str\n}\n</code></pre> <ul> <li>Test plan has been updated with the new register flow. Please check OCF Registration Flow</li> <li>Video with explanation and demonstration of new register flow New Registration Demo</li> </ul>"},{"location":"releasenotes/#new-opencapif-architecture","title":"New OpenCAPIF architecture","text":"<ul> <li>New arquitecture with separated namespaces for Vault, CCF and Register components. Communication between them now are only allowed by using REST APIs.</li> <li> <p>New helper service inside CCF, it will simplify integration with third parties like external management portals.</p> </li> <li> <p>Helper endpoints:</p> <ul> <li>/getInvokers : Get the list of invokers from CAPIF</li> <li>/getProviders: Get the list of providers from CAPIF</li> <li>/getServices : Get the list of services published in CAPIF</li> <li>/getSecurityContext : Get the list of security contexts from CAPIF</li> <li>/getEvents : Get the list of events subscriptions from CAPIF</li> <li>/deleteEntities: Removes all entities registered by a user from the register</li> </ul> </li> <li> <p>Security in the helper</p> <ul> <li>To make requests to the helper you will need a superadmin certificate and password.</li> </ul> </li> </ul>"},{"location":"releasenotes/#events-api-upgrade","title":"Events API Upgrade","text":"<ul> <li>The event management at CCF is improved, EventNotification include Event Details with required information.</li> <li>Events updated:<ul> <li>SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE with apiIds</li> <li>SERVICE_API_UPDATE with serviceAPIDescriptions</li> <li>API_INVOKER_ONBOARDED, API_INVOKER_UPDATED, API_INVOKER_OFFBOARDED with apiInvokerIds.</li> </ul> </li> <li>Events Included:<ul> <li>SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE with invocationLogs</li> </ul> </li> <li>Test plan include 7 new tests in order to check new events implemented and scenarios of each notification implemented, with a complete check of Event Notification.</li> <li>Test plan documentation includes the new event tests OCF Event test plan documentation.</li> </ul>"},{"location":"releasenotes/#inital-implementation-of-cicd","title":"Inital implementation of CI/CD","text":"<ul> <li>The inital implementation of CI/CD on gitlab was performed.</li> <li>Detailed information in the CICD Wiki.</li> <li>Implement initial CI/CD:<ul> <li>Description of the CI process.<ul> <li>In CI phase, created design, jobs and security checks when a branch is pushed.</li> <li>The CI has jobs as:<ul> <li>Linting code, unit test (if needed),</li> <li>Build and push artifacts (images) in Git OCI register</li> <li>Security checks,</li> <li>SCA, CVS, SAST</li> <li>The vulnerabilities are exposed in Merge Request panel to be solved.</li> </ul> </li> </ul> </li> <li>Description of the CD process:<ul> <li>Defined the environments to OCF.<ul> <li>Production env.</li> <li>Pre-production env.</li> <li>Validation env.</li> <li>Dev-1, dev-2\u2026 envs (ephemeral)</li> </ul> </li> <li>Defined the naming convention to OCF releases<ul> <li>Tag in prod: v0.0.1-release</li> <li>Tag non-prod: v0.0.1-rc</li> <li>Other tags: v0.0.1-test, v0.0.1-smt</li> </ul> </li> <li>Defined the jobs of CD<ul> <li>CD ensures the deployment in multiple envs. Therefore, the CD pipeline has deploy-ocf, delete-ocf (if needed) jobs</li> </ul> </li> </ul> </li> <li>ETSI HIVE Labs:<ul> <li>Designed, created and the Kuberntes OCF cluster is running to support OCFs deployments.</li> <li>Iterating with ETSI HIVE\u2019s support to solve computing issues.<ul> <li>CPU compatibilities with OCF services (MongoDB): Fixed</li> </ul> </li> </ul> </li> </ul> </li> </ul>"},{"location":"releasenotes/#documentation","title":"Documentation","text":""},{"location":"releasenotes/#improvements-on-documentation","title":"Improvements on documentation","text":"<ul> <li>Documentation stored in OCF Documentation Repository</li> <li>Continuous Integration included at repository for web documentation:<ul> <li>Develop version of documentation is automatically generated on each merge to develop branch.</li> <li>Tagged version from main create documentation with related tag as version.</li> </ul> </li> </ul>"},{"location":"releasenotes/#technical-debt-solved","title":"Technical Debt Solved","text":""},{"location":"releasenotes/#improved-testing-with-robot-in-order-to-cover","title":"Improved Testing with Robot in order to cover","text":"<ul> <li>Support of new Register flows.</li> <li>Allow different URLs for register, ccf and vault services.</li> <li>New Variables included to manage new architecture under test.</li> <li>Mock server developed to add the functionality of write tests involving notification from Service Under Test.</li> <li>Docker image improved generation and libraries upgraded to Robot Framework 7.</li> </ul>"},{"location":"releasenotes/#improved-security-on-db","title":"Improved security on DB","text":"<ul> <li>Credentials requested to access mongo databases.</li> <li>Credentials requested also by mongo-express.</li> </ul>"},{"location":"releasenotes/#scripts-upgraded","title":"Scripts upgraded","text":"<ul> <li>Docker compose version 2 used on them.</li> <li>New cleaning script developed.</li> <li>Scripts upgraded:<ul> <li>check_services_are_running.sh: Checks if all essential services (Vault, CCF and Register) are running.</li> <li>clean_capif_docker_services.sh: Shutdowns and removes all services essential services.</li> <li>clean_capif_temporary_files.sh: Removes temporaly files from local repository. </li> <li>run.sh: Launch Essential services locally using docker compose, also monitoring can be launched.</li> <li>run_capif_tests.sh: Launch Robot Framwork Tests.</li> <li>show_logs.sh: Show locally logs of Services running.</li> <li>run_mock_server.sh: Launch mock server locally on all interfaces. This axiliary server is only used by tagged mockserver tests on Robot Framework.</li> <li>clean_mock_server.sh: Remove mock server local deployment.</li> <li>deploy.sh: This script simplify the way to download capif repository.</li> </ul> </li> </ul>"},{"location":"releasenotes/#codebase-improvements","title":"Codebase Improvements","text":"<ul> <li>Documentation is now on splitted repository OCF Documentation Repository</li> <li>Test plan was moved to OCF Documentation Repository</li> <li>Obsolote data is removed.</li> <li>Repository Reorganization: Enhanced structure and maintainability with a better directory layout and clearer module separation.</li> <li>Code Quality Enhancements: Refactored code and fixed known issues</li> </ul>"},{"location":"releasenotes/#migration-to-gunicorn","title":"Migration to GUNICORN","text":"<ul> <li>Include production server on each microservice: Release 0 use Flask developer server, now we use GUNICORN.</li> </ul>"},{"location":"releasenotes/#release-00","title":"Release 0.0","text":"<p>The APIs included in Release 0.0 are:</p> <ul> <li>JWT Authentication APIs</li> <li>CAPIF Invoker Management API</li> <li>CAPIF Publish API</li> <li>CAPIF Discover API</li> <li>CAPIF Security API</li> <li>CAPIF Events API</li> <li>CAPIF Provider Management API</li> </ul> <p>This Release also includes a Robot Test Suite for all those services and a Postman Test Suite for simple testing.</p>"},{"location":"deployment_guide/deployment_guide/","title":"1. Deployment Guide","text":"<p>This section walks you through the process of deploying TeraFlowSDN on top of a machine running MicroK8s Kubernetes platform. The guide includes the details on configuring and installing the machine, installing and  configuring MicroK8s, and deploying and reporting the status of the TeraFlowSDN  controller.</p>"},{"location":"deployment_guide/deployment_guide/#11-configure-your-machine","title":"1.1. Configure your Machine","text":"<p>In this section, we describe how to configure a machine (physical or virtual) to be used as the deployment, execution, and development environment for the ETSI TeraFlowSDN controller. Choose your preferred environment below and follow the instructions provided.</p> <p>NOTE: If you already have a remote physical server fitting the requirements specified in this section feel free to use it instead of deploying a local VM. Check 1.1.1. Physical Server for further details.</p> <p>Virtualization platforms tested are:</p> <ul> <li>Physical Server</li> <li>Oracle Virtual Box</li> <li>VMWare Fusion</li> <li>OpenStack</li> <li>Vagrant Box</li> </ul>"},{"location":"deployment_guide/deployment_guide/#111-physical-server","title":"1.1.1. Physical ServerServer SpecificationsClusterized DeploymentNetworkingOperating SystemUpgrade the Ubuntu distribution","text":"<p>This section describes how to configure a physical server for running ETSI TeraFlowSDN(TFS) controller.</p> <p>Minimum Server Specifications for development and basic deployment</p> <ul> <li>CPU: 4 cores</li> <li>RAM: 8 GB</li> <li>Disk: 60 GB</li> <li>1 GbE NIC</li> </ul> <p>Recommended Server Specifications for development and basic deployment</p> <ul> <li>CPU: 6 cores</li> <li>RAM: 12 GB</li> <li>Disk: 80 GB</li> <li>1 GbE NIC</li> </ul> <p>Server Specifications for best development and deployment experience</p> <ul> <li>CPU: 8 cores</li> <li>RAM: 32 GB</li> <li>Disk: 120 GB</li> <li>1 GbE NIC</li> </ul> <p>NOTE: the specifications listed above are provided as a reference. They depend also on the CPU clock frequency, the RAM memory, the disk technology and speed, etc.</p> <p>For development purposes, it is recommended to run the VSCode IDE (or the IDE of your choice) in a more powerful server, for instance, the recommended server specifications for development and basic deployment.</p> <p>Given that TeraFlowSDN follows a micro-services architecture, for the deployment, it might be better to use many clusterized servers with many slower cores than a single server with few highly performant cores.</p> <p>You might consider creating a cluster of machines each featuring, at least, the minimum server specifications. That solution brings you scalability in the future.</p> <p>No explicit indications are given in terms of networking besides that servers need access to the Internet for downloading dependencies, binaries, and packages while building and deploying the TeraFlowSDN components.</p> <p>Besides that, the network requirements are essentially the same than that required for running a classical Kubernetes environment. To facilitate the deployment, we extensively use MicroK8s, thus the network requirements are, essentially, the same demanded by MicroK8s, especially, if you consider creating a Kubernetes cluster.</p> <p>As a reference, the other deployment solutions based on VMs assume the VM is connected to a virtual network configured with the IP range <code>10.0.2.0/24</code> and have the gateway at IP <code>10.0.2.1</code>. The VMs have the IP address <code>10.0.2.10</code>.</p> <p>The minimum required ports to be accessible are: - 22/SSH     : for management purposes - 80/HTTP    : for the TeraFlowSDN WebUI and Grafana dashboard - 8081/HTTPS : for the CockroachDB WebUI</p> <p>Other ports might be required if you consider to deploy addons such as Kubernetes observability, etc. The details on these ports are left appart given they might vary depending on the Kubernetes environment you use.</p> <p>The recommended Operating System for deploying TeraFlowSDN is Ubuntu Server 22.04 LTS or Ubuntu Server 20.04 LTS. Other version might work, but we have not tested them. We strongly recommend using Long Term Support (LTS) versions as they provide better stability.</p> <p>Below we provide some installation guidelines: - Installation Language: English - Autodetect your keyboard - If asked, select \"Ubuntu Server\" (do not select \"Ubuntu Server (minimized)\"). - Configure static network specifications (adapt them based on your particular setup):</p> Interface IPv4 Method Subnet Address Gateway Name servers Search domains enp0s3 Manual 10.0.2.0/24 10.0.2.10 10.0.2.1 8.8.8.8,8.8.4.4 <ul> <li>Leave proxy and mirror addresses as they are</li> <li>Let the installer self-upgrade (if asked).</li> <li>Use an entire disk for the installation</li> <li>Disable setup of the disk as LVM group</li> <li>Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.</li> <li>Configure your user and system names:</li> <li>User name: <code>TeraFlowSDN</code></li> <li>Server's name: <code>tfs-vm</code></li> <li>Username: <code>tfs</code></li> <li>Password: <code>tfs123</code></li> <li>Install Open SSH Server</li> <li>Import SSH keys, if any.</li> <li>Featured Server Snaps</li> <li>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</li> <li>Let the system install and upgrade the packages.</li> <li>This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</li> <li>Restart the VM when the installation is completed.</li> </ul> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul>"},{"location":"deployment_guide/deployment_guide/#112-oracle-virtual-box","title":"1.1.2. Oracle Virtual BoxCreate a NAT Network in VirtualBoxCreate VM in VirtualBox:Install Ubuntu 22.04 LTS Operating System","text":"<p>This section describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using Oracle VirtualBox. It has been tested with VirtualBox up to version 6.1.40 r154048.</p> <p>In \"Oracle VM VirtualBox Manager\", Menu \"File &gt; Preferences... &gt; Network\", create a NAT  network with the following specifications:</p> Name CIDR DHCP IPv6 TFS-NAT-Net 10.0.2.0/24 Disabled Disabled <p>Within the newly created \"TFS-NAT-Net\" NAT network, configure the following IPv4  forwarding rules:</p> Name Protocol Host IP Host Port Guest IP Guest Port SSH TCP 127.0.0.1 2200 10.0.2.10 22 HTTP TCP 127.0.0.1 8080 10.0.2.10 80 <p>Note: IP address 10.0.2.10 is the one that will be assigned to the VM.</p> <ul> <li>Name: TFS-VM</li> <li>Type/Version: Linux / Ubuntu (64-bit)</li> <li>CPU (*): 4 vCPUs @ 100% execution capacity</li> <li>RAM: 8 GB</li> <li>Disk: 60 GB, Virtual Disk Image (VDI), Dynamically allocated</li> <li>Optical Drive ISO Image: \"ubuntu-22.04.X-live-server-amd64.iso\"</li> <li>Download the latest Long Term Support (LTS) version of the Ubuntu Server image from Ubuntu 22.04 LTS, e.g., \"ubuntu-22.04.X-live-server-amd64.iso\".</li> <li>Note: use Ubuntu Server image instead of Ubuntu Desktop to create a lightweight VM.</li> <li>Network Adapter 1 (*): enabled, attached to NAT Network \"TFS-NAT-Net\"</li> <li>Minor adjustments (*):</li> <li>Audio: disabled</li> <li>Boot order: disable \"Floppy\"</li> </ul> <p>Note: (*) settings to be editing after the VM is created.</p> <p>In \"Oracle VM VirtualBox Manager\", start the VM in normal mode, and follow the  installation procedure. Below we provide some installation guidelines: - Installation Language: English - Autodetect your keyboard - If asked, select \"Ubuntu Server\" (do not select \"Ubuntu Server (minimized)\"). - Configure static network specifications:</p> Interface IPv4 Method Subnet Address Gateway Name servers Search domains enp0s3 Manual 10.0.2.0/24 10.0.2.10 10.0.2.1 8.8.8.8,8.8.4.4 <ul> <li>Leave proxy and mirror addresses as they are</li> <li>Let the installer self-upgrade (if asked).</li> <li>Use an entire disk for the installation</li> <li>Disable setup of the disk as LVM group</li> <li>Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.</li> <li>Configure your user and system names:</li> <li>User name: TeraFlowSDN</li> <li>Server's name: tfs-vm</li> <li>Username: tfs</li> <li>Password: tfs123</li> <li>Install Open SSH Server</li> <li>Import SSH keys, if any.</li> <li>Featured Server Snaps</li> <li>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</li> <li>Let the system install and upgrade the packages.</li> <li>This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</li> <li>Restart the VM when the installation is completed.</li> </ul> <p>Upgrade the Ubuntu distribution</p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul> <p>Install VirtualBox Guest Additions On VirtualBox Manager, open the VM main screen. If you are running the VM in headless  mode, right click over the VM in the VirtualBox Manager window and click \"Show\". If a dialog informing about how to leave the interface of the VM is shown, confirm  pressing \"Switch\" button. The interface of the VM should appear.</p> <p>Click menu \"Device &gt; Insert Guest Additions CD image...\"</p> <p>On the VM terminal, type:</p> <pre><code>sudo apt-get install -y linux-headers-$(uname -r) build-essential dkms\n  # This command might take some minutes depending on your VM specs and your Internet access speed.\nsudo mount /dev/cdrom /mnt/\ncd /mnt/\nsudo ./VBoxLinuxAdditions.run\n  # This command might take some minutes depending on your VM specs.\nsudo reboot\n</code></pre>"},{"location":"deployment_guide/deployment_guide/#113-vmware-fusion","title":"1.1.3. VMWare FusionCreate VM in VMWare Fusion:Install Ubuntu 22.04.1 LTS Operating SystemUpgrade the Ubuntu distribution","text":"<p>This section describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using VMWare Fusion. It has been tested with VMWare Fusion version 12 and 13.</p> <p>In \"VMWare Fusion\" manager, create a new network from the \"Settings/Network\" menu.</p> <ul> <li>Unlock to make changes</li> <li>Press the + icon and create a new network</li> <li>Change the name to TFS-NAT-Net</li> <li>Check \"Allow virtual machines on this network to connect to external network (NAT)\"</li> <li>Do not check \"Enable IPv6\"</li> <li>Add port forwarding for HTTP and SSH</li> <li>Uncheck \"Provide address on this network via DHCP\"</li> </ul> <p>Create a new VM an Ubuntu 22.04.1 ISO:</p> <ul> <li>Display Name: TeraFlowSDN</li> <li>Username: tfs</li> <li>Password: tfs123</li> </ul> <p>On the next screen press \"Customize Settings\", save the VM and in \"Settings\" change: - Change to use 4 CPUs - Change to access 8 GB of RAM - Change disk to size 60 GB - Change the network interface to use the previously created TFS-NAT-Net</p> <p>Run the VM to start the installation.</p> <p>The installation will be automatic, without any configuration required.</p> <ul> <li>Configure the guest IP, gateway and DNS:</li> </ul> <p>Using the Network Settings for the wired connection, set the IP to 10.0.2.10,   the mask to 255.255.255.0, the gateway to 10.0.2.2 and the DNS to 10.0.2.2.</p> <ul> <li>Disable and remove swap file:</li> </ul> <p>$ sudo swapoff -a   $ sudo rm /swapfile</p> <p>Then you can remove or comment the /swapfile entry in /etc/fstab</p> <ul> <li>Install Open SSH Server</li> <li> <p>Import SSH keys, if any.</p> </li> <li> <p>Restart the VM when the installation is completed.</p> </li> </ul> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre>"},{"location":"deployment_guide/deployment_guide/#114-openstack","title":"1.1.4. OpenStackCreate a Security Group in OpenStack <p> In OpenStack, go to Project - Network - Security Groups - Create Security Group with name TFS</p> <p>Add the following rules:</p>    Direction Ether Type IP Protocol Port Range Remote IP Prefix     Ingress IPv4 TCP 22 (SSH) 0.0.0.0/0   Ingress IPv4 TCP 2200 0.0.0.0/0   Ingress IPv4 TCP 8080 0.0.0.0/0   Ingress IPv4 TCP 80 0.0.0.0/0   Egress IPv4 Any Any 0.0.0.0/0   Egress IPv6 Any Any ::/0    <p>Note: The IP address will be assigned depending on the network you have configured inside OpenStack. This IP will have to be modified in TeraFlow configuration files which by default use IP 10.0.2.10</p> Create a flavour <p></p> <p>From dashboard (Horizon)</p> <p>Go to Admin - Compute - Flavors and press Create Flavor</p> <ul> <li>Name: TFS</li> <li>VCPUs: 4</li> <li>RAM (MB): 8192</li> <li>Root Disk (GB): 60</li> </ul> <p>From CLI</p> <pre><code> openstack flavor create TFS --id auto --ram 8192 --disk 60 --vcpus 8\n</code></pre> Create an instance in OpenStack: <p></p> <ul> <li>Instance name: TFS-VM</li> <li>Origin: [Ubuntu-22.04 cloud image] (https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img)</li> <li>Create new volume: No</li> <li>Flavor: TFS</li> <li>Networks: extnet </li> <li>Security Groups: TFS</li> <li>Configuration: Include the following cloud-config</li> </ul> <pre><code>#cloud-config\n# Modifies the password for the VM instance\nusername: ubuntu\npassword: &lt;your-password&gt;\nchpasswd: { expire: False }\nssh_pwauth: True\n</code></pre> Upgrade the Ubuntu distribution <p></p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul>","text":"<p>This section describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using OpenStack. It has been tested with OpenStack Kolla up to Yoga version. </p>"},{"location":"deployment_guide/deployment_guide/#115-vagrant-box","title":"1.1.5. Vagrant Box <p>","text":""},{"location":"deployment_guide/deployment_guide/#12-install-microk8s","title":"1.2. Install MicroK8s","text":"<p>This section describes how to deploy the MicroK8s Kubernetes platform and configure it to be used with ETSI TeraFlowSDN controller. Besides, Docker is installed to build docker images for the ETSI TeraFlowSDN controller.</p> <p>The steps described in this section might take some minutes depending on your internet connection speed and the resources assigned to your VM, or the specifications of your physical server.</p> <p>To facilitate work, these steps are easier to be executed through an SSH connection, for instance using tools like PuTTY or MobaXterm.</p> Upgrade the Ubuntu distribution <p> Skip this step if you already did it during the creation of the VM.</p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> Install prerequisites <p></p> <pre><code>sudo apt-get install -y ca-certificates curl gnupg lsb-release snapd jq\n</code></pre> Install Docker CE <p> Install Docker CE and Docker BuildX plugin</p> <pre><code>sudo apt-get install -y docker.io docker-buildx\n</code></pre> <p>NOTE: Starting from Docker v23, Build architecture has been updated and <code>docker build</code> command entered into deprecation process in favor of the new <code>docker buildx build</code> command. Package <code>docker-buildx</code> provides the new <code>docker buildx build</code> command.</p> <p>Add key \"insecure-registries\" with the private repository to the daemon configuration. It is done in two commands since sometimes read from and write to same file might cause trouble.</p> <pre><code>if [ -s /etc/docker/daemon.json ]; then cat /etc/docker/daemon.json; else echo '{}'; fi \\\n    | jq 'if has(\"insecure-registries\") then . else .+ {\"insecure-registries\": []} end' -- \\\n    | jq '.\"insecure-registries\" |= (.+ [\"localhost:32000\"] | unique)' -- \\\n    | tee tmp.daemon.json\nsudo mv tmp.daemon.json /etc/docker/daemon.json\nsudo chown root:root /etc/docker/daemon.json\nsudo chmod 600 /etc/docker/daemon.json\n</code></pre> <p>Restart the Docker daemon</p> <pre><code>sudo systemctl restart docker\n</code></pre> Install MicroK8s <p></p> <p>Important: Some TeraFlowSDN dependencies need to be executed on top of MicroK8s/Kubernetes v1.24. It is not guaranteed (by now) to run on newer versions.</p> <pre><code># Install MicroK8s\nsudo snap install microk8s --classic --channel=1.24/stable\n\n# Create alias for command \"microk8s.kubectl\" to be usable as \"kubectl\"\nsudo snap alias microk8s.kubectl kubectl\n</code></pre> <p>It is important to make sure that <code>ufw</code> will not interfere with the internal pod-to-pod and pod-to-Internet traffic. To do so, first check the status. If <code>ufw</code> is active, use the following command to enable the communication.</p> <pre><code>\n# Verify status of ufw firewall\nsudo ufw status\n\n# If ufw is active, install following rules to enable access pod-to-pod and pod-to-internet\nsudo ufw allow in on cni0 &amp;&amp; sudo ufw allow out on cni0\nsudo ufw default allow routed\n</code></pre> <p>NOTE: MicroK8s can be used to compose a Highly Available Kubernetes cluster enabling you to construct an environment combining the CPU, RAM and storage resources of multiple machines. If you are interested in this procedure, review the official instructions in How to build a highly available Kubernetes cluster with MicroK8s, in particular, the step Create a MicroK8s multi-node cluster.</p> <p>References:</p> <ul> <li>The lightweight Kubernetes &gt; Install MicroK8s</li> <li>Install a local Kubernetes with MicroK8s</li> <li>How to build a highly available Kubernetes cluster with MicroK8s</li> </ul> Add user to the docker and microk8s groups <p></p> <p>It is important that your user has the permission to run <code>docker</code> and <code>microk8s</code> in the  terminal. To allow this, you need to add your user to the <code>docker</code> and <code>microk8s</code> groups with the  following commands:</p> <pre><code>sudo usermod -a -G docker $USER\nsudo usermod -a -G microk8s $USER\nsudo chown -f -R $USER $HOME/.kube\nsudo reboot\n</code></pre> <p>In case that you get trouble executing the following commands, might due to the .kube folder is not automatically provisioned into your home folder, you may follow the steps below:</p> <pre><code>mkdir -p $HOME/.kube\nsudo chown -f -R $USER $HOME/.kube\nmicrok8s config &gt; $HOME/.kube/config\nsudo reboot\n</code></pre> Check status of Kubernetes and addons <p> To retrieve the status of Kubernetes once, run the following command:</p> <pre><code>microk8s.status --wait-ready\n</code></pre> <p>To retrieve the status of Kubernetes periodically (e.g., every 1 second), run the  following command:</p> <pre><code>watch -n 1 microk8s.status --wait-ready\n</code></pre> Check all resources in Kubernetes <p> To retrieve the status of the Kubernetes resources once, run the following command:</p> <pre><code>kubectl get all --all-namespaces\n</code></pre> <p>To retrieve the status of the Kubernetes resources periodically (e.g., every 1  second), run the following command:</p> <pre><code>watch -n 1 kubectl get all --all-namespaces\n</code></pre> Enable addons <p></p> <p>First, we need to enable the community plugins (maintained by third parties):</p> <pre><code>microk8s.enable community\n</code></pre> <p>The Addons to be enabled are:</p> <ul> <li><code>dns</code>: enables resolving the pods and services by name</li> <li><code>helm3</code>: required to install NATS</li> <li><code>hostpath-storage</code>: enables providing storage for the pods (required by <code>registry</code>)</li> <li><code>ingress</code>: deploys an ingress controller to expose the microservices outside Kubernetes</li> <li><code>registry</code>: deploys a private registry for the TFS controller images</li> <li><code>linkerd</code>: deploys the linkerd service mesh used for load balancing among replicas</li> <li><code>prometheus</code>: set of tools that enable TFS observability through per-component instrumentation</li> <li><code>metrics-server</code>: deploys the Kubernetes metrics server for API access to service metrics</li> </ul> <pre><code>microk8s.enable dns helm3 hostpath-storage ingress registry prometheus metrics-server linkerd\n</code></pre> <p>Important: Enabling some of the addons might take few minutes. Do not proceed with next steps until the addons are ready. Otherwise, the deployment might fail. To confirm everything is up and running:</p> <ol> <li>Periodically    Check the status of Kubernetes    until you see the addons [dns, ha-cluster, helm3, hostpath-storage, ingress, linkerd, metrics-server, prometheus, registry, storage] in the enabled block.</li> <li>Periodically    Check Kubernetes resources    until all pods are Ready and Running.</li> <li>If it takes too long for the Pods to be ready, we observed that rebooting the machine may help.</li> </ol> <p>Then, create aliases to make the commands easier to access:</p> <pre><code>sudo snap alias microk8s.helm3 helm3\nsudo snap alias microk8s.linkerd linkerd\n</code></pre> <p>To validate that <code>linkerd</code> is working correctly, run:</p> <pre><code>linkerd check\n</code></pre> <p>To validate that the <code>metrics-server</code> is working correctly, run:</p> <pre><code>kubectl top pods --all-namespaces\n</code></pre> <p>and you should see a screen similar to the <code>top</code> command in Linux, showing the columns namespace, pod name, CPU (cores), and MEMORY (bytes).</p> <p>In case pods are not starting, check information from pods logs. For example, linkerd is sensitive for proper /etc/resolv.conf syntax.</p> <pre><code>kubectl logs &lt;podname&gt; --namespace &lt;namespace&gt;\n</code></pre> <p>If the command shows an error message, also restarting the machine might help.</p> Stop, Restart, and Redeploy <p> Find below some additional commands you might need while you work with MicroK8s:</p> <pre><code>microk8s.stop  # stop MicroK8s cluster (for instance, before power off your computer)\nmicrok8s.start # start MicroK8s cluster\nmicrok8s.reset # reset infrastructure to a clean state\n</code></pre> <p>If the following commands does not work to recover the MicroK8s cluster, you can redeploy it.</p> <p>If you want to keep MicroK8s configuration, use:</p> <pre><code>sudo snap remove microk8s\n</code></pre> <p>If you need to completely drop MicroK8s and its complete configuration, use:</p> <pre><code>sudo snap remove microk8s --purge\nsudo apt-get remove --purge docker.io docker-buildx\n</code></pre> <p>IMPORTANT: After uninstalling MicroK8s, it is convenient to reboot the computer (the VM if you work on a VM, or the physical computer if you use a physical computer). Otherwise, there are system configurations that are not correctly cleaned. Especially in what port forwarding and firewall rules matters.</p> <p>After the reboot, redeploy as it is described in this section.</p>"},{"location":"deployment_guide/deployment_guide/#13-deploy-teraflowsdn","title":"1.3. Deploy TeraFlowSDN","text":"<p>This section describes how to deploy TeraFlowSDN controller on top of MicroK8s using the environment configured in the previous sections.</p> Install prerequisites <p></p> <pre><code>sudo apt-get install -y git curl jq\n</code></pre> Clone the Git repository of the TeraFlowSDN controller <p> Clone from ETSI-hosted GitLab code repository:</p> <pre><code>mkdir ~/tfs-ctrl\ngit clone https://labs.etsi.org/rep/tfs/controller.git ~/tfs-ctrl\n</code></pre> <p>Important: The original H2020-TeraFlow project hosted on GitLab.com has been  archieved and will not receive further contributions/updates. Please, clone from ETSI-hosted GitLab code repository.</p> Checkout the appropriate Git branch <p> TeraFlowSDN controller versions can be found in the appropriate release tags and/or branches as described in Home &gt; Versions.</p> <p>By default the branch master is checked out and points to the latest stable version of the TeraFlowSDN controller, while branch develop contains the latest developments and contributions under test and validation.</p> <p>To switch to the appropriate branch run the following command, changing <code>develop</code> by the name of the branch you want to deploy:</p> <pre><code>cd ~/tfs-ctrl\ngit checkout develop\n</code></pre> Prepare a deployment script with the deployment settings <p> Create a new deployment script, e.g., <code>my_deploy.sh</code>, adding the appropriate settings as  follows. This section provides just an overview of the available settings. An example <code>my_deploy.sh</code> script is provided in the root folder of the project for your convenience with full description of all the settings.</p> <p>Note: The example <code>my_deploy.sh</code> script provides reasonable settings for deploying a functional and complete enough TeraFlowSDN controller, and a brief description of their meaning. To see extended descriptions, check scripts in the <code>deploy</code> folder.</p> <pre><code>cd ~/tfs-ctrl\ntee my_deploy.sh &gt;/dev/null &lt;&lt; EOF\n# ----- TeraFlowSDN ------------------------------------------------------------\nexport TFS_REGISTRY_IMAGES=\"http://localhost:32000/tfs/\"\nexport TFS_COMPONENTS=\"context device ztp monitoring pathcomp service slice nbi webui load_generator\"\nexport TFS_IMAGE_TAG=\"dev\"\nexport TFS_K8S_NAMESPACE=\"tfs\"\nexport TFS_EXTRA_MANIFESTS=\"manifests/nginx_ingress_http.yaml\"\nexport TFS_GRAFANA_PASSWORD=\"admin123+\"\nexport TFS_SKIP_BUILD=\"\"\n\n# ----- CockroachDB ------------------------------------------------------------\nexport CRDB_NAMESPACE=\"crdb\"\nexport CRDB_EXT_PORT_SQL=\"26257\"\nexport CRDB_EXT_PORT_HTTP=\"8081\"\nexport CRDB_USERNAME=\"tfs\"\nexport CRDB_PASSWORD=\"tfs123\"\nexport CRDB_DATABASE=\"tfs\"\nexport CRDB_DEPLOY_MODE=\"single\"\nexport CRDB_DROP_DATABASE_IF_EXISTS=\"YES\"\nexport CRDB_REDEPLOY=\"\"\n\n# ----- NATS -------------------------------------------------------------------\nexport NATS_NAMESPACE=\"nats\"\nexport NATS_EXT_PORT_CLIENT=\"4222\"\nexport NATS_EXT_PORT_HTTP=\"8222\"\nexport NATS_REDEPLOY=\"\"\n\n# ----- QuestDB ----------------------------------------------------------------\nexport QDB_NAMESPACE=\"qdb\"\nexport QDB_EXT_PORT_SQL=\"8812\"\nexport QDB_EXT_PORT_ILP=\"9009\"\nexport QDB_EXT_PORT_HTTP=\"9000\"\nexport QDB_USERNAME=\"admin\"\nexport QDB_PASSWORD=\"quest\"\nexport QDB_TABLE_MONITORING_KPIS=\"tfs_monitoring_kpis\"\nexport QDB_TABLE_SLICE_GROUPS=\"tfs_slice_groups\"\nexport QDB_DROP_TABLES_IF_EXIST=\"YES\"\nexport QDB_REDEPLOY=\"\"\n\nEOF\n</code></pre> <p>The settings are organized in 4 sections: - Section <code>TeraFlowSDN</code>:   - <code>TFS_REGISTRY_IMAGE</code> enables to specify the private Docker registry to be used, by default, we assume to use the Docker respository enabled in MicroK8s.   - <code>TFS_COMPONENTS</code> specifies the components their Docker image will be rebuilt, uploaded to the private Docker registry, and deployed in Kubernetes.   - <code>TFS_IMAGE_TAG</code> defines the tag to be used for Docker images being rebuilt and uploaded to the private Docker registry.   - <code>TFS_K8S_NAMESPACE</code> specifies the name of the Kubernetes namespace to be used for deploying the TFS components.   - <code>TFS_EXTRA_MANIFESTS</code> enables to provide additional manifests to be applied into the Kubernetes environment during the deployment. Typical use case is to deploy ingress controllers, service monitors for Prometheus, etc.   - <code>TFS_GRAFANA_PASSWORD</code> lets you specify the password you want to use for the <code>admin</code> user of the Grafana instance being deployed and linked to the Monitoring component.   - <code>TFS_SKIP_BUILD</code>, if set to <code>YES</code>, prevents rebuilding the Docker images. That means, the deploy script will redeploy existing Docker images without rebuilding/updating them.</p> <ul> <li>Section <code>CockroachDB</code>: enables to configure the deployment of the backend CockroachDB database.</li> <li> <p>Check example script <code>my_deploy.sh</code> for further details.</p> </li> <li> <p>Section <code>NATS</code>: enables to configure the deployment of the backend NATS message broker.</p> </li> <li> <p>Check example script <code>my_deploy.sh</code> for further details.</p> </li> <li> <p>Section <code>QuestDB</code>: enables to configure the deployment of the backend QuestDB timeseries database.</p> </li> <li>Check example script <code>my_deploy.sh</code> for further details.</li> </ul> Confirm that MicroK8s is running <p></p> <p>Run the following command:</p> <pre><code>microk8s status\n</code></pre> <p>If it is reported <code>microk8s is not running, try microk8s start</code>, run the following command to start MicroK8s:</p> <pre><code>microk8s start\n</code></pre> <p>Confirm everything is up and running:</p> <ol> <li>Periodically Check the status of Kubernetes until you see the addons [dns, ha-cluster, helm3, hostpath-storage, ingress, registry, storage] in the enabled block.</li> <li>Periodically Check Kubernetes resources until all pods are Ready and Running.</li> </ol> Deploy TFS controller <p> First, source the deployment settings defined in the previous section. This way, you do not need to specify the environment variables in each and every command you execute to operate the TFS controller. Be aware to re-source the file if you open new terminal sessions. Then, run the following command to deploy TeraFlowSDN controller on top of the MicroK8s Kubernetes platform.</p> <pre><code>cd ~/tfs-ctrl\nsource my_deploy.sh\n./deploy/all.sh\n</code></pre> <p>The script performs the following steps:</p> <ul> <li>Executes script <code>./deploy/crdb.sh</code> to automate deployment of CockroachDB database used by Context component.</li> <li>The script automatically checks if CockroachDB is already deployed.</li> <li>If there are settings instructing to drop the database and/or redeploy CockroachDB, it does the appropriate actions to honor them as defined in previous section.</li> <li>Executes script <code>./deploy/nats.sh</code> to automate deployment of NATS message broker used by Context component.</li> <li>The script automatically checks if NATS is already deployed.</li> <li>If there are settings instructing to redeploy the message broker, it does the appropriate actions to honor them as defined in previous section.</li> <li>Executes script <code>./deploy/qdb.sh</code> to automate deployment of QuestDB timeseries database used by Monitoring component.</li> <li>The script automatically checks if QuestDB is already deployed.</li> <li>If there are settings instructing to redeploy the timeseries database, it does the appropriate actions to honor them as defined in previous section.</li> <li>Executes script <code>./deploy/tfs.sh</code> to automate deployment of TeraFlowSDN.</li> <li>Creates the namespace defined in <code>TFS_K8S_NAMESPACE</code></li> <li>Creates secrets for CockroachDB, NATS, and QuestDB to be used by Context and Monitoring components.</li> <li>Builds the Docker images for the components defined in <code>TFS_COMPONENTS</code></li> <li>Tags the Docker images with the value of <code>TFS_IMAGE_TAG</code></li> <li>Pushes the Docker images to the repository defined in <code>TFS_REGISTRY_IMAGE</code></li> <li>Deploys the components defined in <code>TFS_COMPONENTS</code></li> <li>Creates the file <code>tfs_runtime_env_vars.sh</code> with the environment variables for the components defined in <code>TFS_COMPONENTS</code> defining their local host addresses and their port numbers.</li> <li>Applies extra manifests defined in <code>TFS_EXTRA_MANIFESTS</code> such as:<ul> <li>Creating an ingress controller listening at port 80 for HTTP connections to enable external access to the TeraFlowSDN WebUI, Grafana Dashboards, and Compute NBI interfaces.</li> <li>Deploying service monitors to enable monitoring the performance of the components, device drivers and service handlers.</li> </ul> </li> <li>Initialize and configure the Grafana dashboards (if Monitoring component is deployed)</li> <li>Report a summary of the deployment</li> <li>See Show Deployment and Logs</li> </ul>"},{"location":"deployment_guide/deployment_guide/#14-webui-and-grafana-dashboards","title":"1.4. WebUI and Grafana Dashboards","text":"<p>This section describes how to get access to the TeraFlowSDN controller WebUI and the monitoring Grafana dashboards.</p> Access the TeraFlowSDN WebUI <p> If you followed the installation steps based on MicroK8s, you got an ingress controller installed that exposes on TCP port 80.</p> <p>Besides, the ingress controller defines the following reverse proxy paths (on your local machine):</p> <ul> <li><code>http://127.0.0.1/webui</code>: points to the WebUI of TeraFlowSDN.</li> <li><code>http://127.0.0.1/grafana</code>: points to the Grafana dashboards.   This endpoint brings access to the monitoring dashboards of TeraFlowSDN.   The credentials for the <code>admin</code>user are those defined in the <code>my_deploy.sh</code> script, in the <code>TFS_GRAFANA_PASSWORD</code> variable.</li> <li><code>http://127.0.0.1/restconf</code>: points to the Compute component NBI based on RestCONF.    This endpoint enables connecting external software, such as ETSI OpenSourceMANO NFV Orchestrator, to TeraFlowSDN.</li> </ul> <p>Note: In the creation of the VM, a forward from host TCP port 8080 to VM's TCP port 80 is configured, so the WebUIs and REST APIs of TeraFlowSDN should be exposed on the endpoint <code>127.0.0.1:8080</code> of your local machine instead of <code>127.0.0.1:80</code>.</p>"},{"location":"deployment_guide/deployment_guide/#15-show-deployment-and-logs","title":"1.5. Show Deployment and Logs","text":"<p>This section presents some helper scripts to inspect the status of the deployment and  the logs of the components. These scripts are particularly helpful for troubleshooting during execution of  experiments, development, and debugging.</p> Report the deployment of the TFS controller <p></p> <p>The summary report given at the end of the Deploy TFS controller procedure can be generated manually at any time by running the following command. You can avoid sourcing <code>my_deploy.sh</code> if it has been already done.</p> <pre><code>cd ~/tfs-ctrl\nsource my_deploy.sh\n./deploy/show.sh\n</code></pre> <p>Use this script to validate that all the pods, deployments, replica sets, ingress  controller, etc. are ready and have the appropriate state, e.g., running for Pods, and  the services are deployed and have appropriate IP addresses and port numbers.</p> Report the log of a specific TFS controller component <p></p> <p>A number of scripts are pre-created in the <code>scripts</code> folder to facilitate the inspection  of the component logs. For instance, to dump the log of the Context component, run the following command. You can avoid sourcing <code>my_deploy.sh</code> if it has been already done.</p> <pre><code>source my_deploy.sh\n./scripts/show_logs_context.sh\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/configure_your_machine/","title":"Configure your machine","text":"<p>In this section, we describe how to configure a machine (physical or virtual) to be used as the deployment, execution, and development environment for the ETSI TeraFlowSDN controller. Choose your preferred environment below and follow the instructions provided.</p> <p>NOTE: If you already have a remote physical server fitting the requirements specified in this section feel free to use it instead of deploying a local VM. Check 1.1.1. Physical Server for further details.</p> <p>Virtualization platforms tested are:   - 1.1.1. Physical Server   - 1.1.2. Oracle Virtual Box   - 1.1.3. VMWare Fusion   - 1.1.4. OpenStack   - 1.1.5. Vagrant Box</p> <p>Other virtualization environments might be used; in that case, you will need to adapt these instructions to your particular case. If you want to contribute with details on how you used other hypervisors or platforms, contact the TFS team through Slack.</p>"},{"location":"deployment_guide/configure_your_machine/openstack/","title":"Openstack","text":"<p>This page describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using OpenStack. It has been tested with OpenStack Kolla up to Yoga version. </p>"},{"location":"deployment_guide/configure_your_machine/openstack/#create-a-security-group-in-openstack","title":"Create a Security Group in OpenStack","text":"<p>In OpenStack, go to Project - Network - Security Groups - Create Security Group with name TFS</p> <p>Add the following rules:</p> Direction Ether Type IP Protocol Port Range Remote IP Prefix Ingress IPv4 TCP 22 (SSH) 0.0.0.0/0 Ingress IPv4 TCP 2200 0.0.0.0/0 Ingress IPv4 TCP 8080 0.0.0.0/0 Ingress IPv4 TCP 80 0.0.0.0/0 Egress IPv4 Any Any 0.0.0.0/0 Egress IPv6 Any Any ::/0 <p>Note: The IP address will be assigned depending on the network you have configured inside OpenStack. This IP will have to be modified in TeraFlow configuration files which by default use IP 10.0.2.10</p>"},{"location":"deployment_guide/configure_your_machine/openstack/#create-a-flavour","title":"Create a flavour","text":""},{"location":"deployment_guide/configure_your_machine/openstack/#from-dashboard-horizon","title":"From dashboard (Horizon)","text":"<p>Go to Admin - Compute - Flavors and press Create Flavor</p> <ul> <li>Name: TFS</li> <li>VCPUs: 4</li> <li>RAM (MB): 8192</li> <li>Root Disk (GB): 60</li> </ul>"},{"location":"deployment_guide/configure_your_machine/openstack/#from-cli","title":"From CLI","text":"<pre><code> openstack flavor create TFS --id auto --ram 8192 --disk 60 --vcpus 8\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/openstack/#create-an-instance-in-openstack","title":"Create an instance in OpenStack:","text":"<ul> <li>Instance name: TFS-VM</li> <li>Origin: [Ubuntu-22.04 cloud image] (https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img)</li> <li>Create new volume: No</li> <li>Flavor: TFS</li> <li>Networks: extnet </li> <li>Security Groups: TFS</li> <li>Configuration: Include the following cloud-config</li> </ul> <pre><code>#cloud-config\n# Modifies the password for the VM instance\nusername: ubuntu\npassword: &lt;your-password&gt;\nchpasswd: { expire: False }\nssh_pwauth: True\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/openstack/#upgrade-the-ubuntu-distribution","title":"Upgrade the Ubuntu distribution","text":"<pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul>"},{"location":"deployment_guide/configure_your_machine/oracle_virtual_box/","title":"Oracle virtual box","text":"<p>This page describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using Oracle VirtualBox. It has been tested with VirtualBox up to version 6.1.40 r154048.</p>"},{"location":"deployment_guide/configure_your_machine/oracle_virtual_box/#create-a-nat-network-in-virtualbox","title":"Create a NAT Network in VirtualBox","text":"<p>In \"Oracle VM VirtualBox Manager\", Menu \"File &gt; Preferences... &gt; Network\", create a NAT  network with the following specifications:</p> Name CIDR DHCP IPv6 TFS-NAT-Net 10.0.2.0/24 Disabled Disabled <p>Within the newly created \"TFS-NAT-Net\" NAT network, configure the following IPv4  forwarding rules:</p> Name Protocol Host IP Host Port Guest IP Guest Port SSH TCP 127.0.0.1 2200 10.0.2.10 22 HTTP TCP 127.0.0.1 8080 10.0.2.10 80 <p>Note: IP address 10.0.2.10 is the one that will be assigned to the VM.</p>"},{"location":"deployment_guide/configure_your_machine/oracle_virtual_box/#create-vm-in-virtualbox","title":"Create VM in VirtualBox:","text":"<ul> <li>Name: TFS-VM</li> <li>Type/Version: Linux / Ubuntu (64-bit)</li> <li>CPU (*): 4 vCPUs @ 100% execution capacity</li> <li>RAM: 8 GB</li> <li>Disk: 60 GB, Virtual Disk Image (VDI), Dynamically allocated</li> <li>Optical Drive ISO Image: \"ubuntu-22.04.X-live-server-amd64.iso\"</li> <li>Download the latest Long Term Support (LTS) version of the Ubuntu Server image from Ubuntu 22.04 LTS, e.g., \"ubuntu-22.04.X-live-server-amd64.iso\".</li> <li>Note: use Ubuntu Server image instead of Ubuntu Desktop to create a lightweight VM.</li> <li>Network Adapter 1 (*): enabled, attached to NAT Network \"TFS-NAT-Net\"</li> <li>Minor adjustments (*):</li> <li>Audio: disabled</li> <li>Boot order: disable \"Floppy\"</li> </ul> <p>Note: (*) settings to be editing after the VM is created.</p>"},{"location":"deployment_guide/configure_your_machine/oracle_virtual_box/#install-ubuntu-2204-lts-operating-system","title":"Install Ubuntu 22.04 LTS Operating System","text":"<p>In \"Oracle VM VirtualBox Manager\", start the VM in normal mode, and follow the  installation procedure. Below we provide some installation guidelines: - Installation Language: English - Autodetect your keyboard - If asked, select \"Ubuntu Server\" (do not select \"Ubuntu Server (minimized)\"). - Configure static network specifications:</p> Interface IPv4 Method Subnet Address Gateway Name servers Search domains enp0s3 Manual 10.0.2.0/24 10.0.2.10 10.0.2.1 8.8.8.8,8.8.4.4 <ul> <li>Leave proxy and mirror addresses as they are</li> <li>Let the installer self-upgrade (if asked).</li> <li>Use an entire disk for the installation</li> <li>Disable setup of the disk as LVM group</li> <li>Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.</li> <li>Configure your user and system names:</li> <li>User name: TeraFlowSDN</li> <li>Server's name: tfs-vm</li> <li>Username: tfs</li> <li>Password: tfs123</li> <li>Install Open SSH Server</li> <li>Import SSH keys, if any.</li> <li>Featured Server Snaps</li> <li>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</li> <li>Let the system install and upgrade the packages.</li> <li>This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</li> <li>Restart the VM when the installation is completed.</li> </ul>"},{"location":"deployment_guide/configure_your_machine/oracle_virtual_box/#upgrade-the-ubuntu-distribution","title":"Upgrade the Ubuntu distribution","text":"<pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul>"},{"location":"deployment_guide/configure_your_machine/oracle_virtual_box/#install-virtualbox-guest-additions","title":"Install VirtualBox Guest Additions","text":"<p>On VirtualBox Manager, open the VM main screen. If you are running the VM in headless  mode, right click over the VM in the VirtualBox Manager window and click \"Show\". If a dialog informing about how to leave the interface of the VM is shown, confirm  pressing \"Switch\" button. The interface of the VM should appear.</p> <p>Click menu \"Device &gt; Insert Guest Additions CD image...\"</p> <p>On the VM terminal, type:</p> <pre><code>sudo apt-get install -y linux-headers-$(uname -r) build-essential dkms\n  # This command might take some minutes depending on your VM specs and your Internet access speed.\nsudo mount /dev/cdrom /mnt/\ncd /mnt/\nsudo ./VBoxLinuxAdditions.run\n  # This command might take some minutes depending on your VM specs.\nsudo reboot\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/physical_server/","title":"Physical server","text":"<p>This page describes how to configure a physical server for running ETSI TeraFlowSDN(TFS) controller.</p>"},{"location":"deployment_guide/configure_your_machine/physical_server/#server-specifications","title":"Server Specifications","text":""},{"location":"deployment_guide/configure_your_machine/physical_server/#minimum-server-specifications-for-development-and-basic-deployment","title":"Minimum Server Specifications for development and basic deployment","text":"<ul> <li>CPU: 4 cores</li> <li>RAM: 8 GB</li> <li>Disk: 60 GB</li> <li>1 GbE NIC</li> </ul>"},{"location":"deployment_guide/configure_your_machine/physical_server/#recommended-server-specifications-for-development-and-basic-deployment","title":"Recommended Server Specifications for development and basic deployment","text":"<ul> <li>CPU: 6 cores</li> <li>RAM: 12 GB</li> <li>Disk: 80 GB</li> <li>1 GbE NIC</li> </ul>"},{"location":"deployment_guide/configure_your_machine/physical_server/#server-specifications-for-best-development-and-deployment-experience","title":"Server Specifications for best development and deployment experience","text":"<ul> <li>CPU: 8 cores</li> <li>RAM: 32 GB</li> <li>Disk: 120 GB</li> <li>1 GbE NIC</li> </ul> <p>NOTE: the specifications listed above are provided as a reference. They depend also on the CPU clock frequency, the RAM memory, the disk technology and speed, etc.</p> <p>For development purposes, it is recommended to run the VSCode IDE (or the IDE of your choice) in a more powerful server, for instance, the recommended server specifications for development and basic deployment.</p> <p>Given that TeraFlowSDN follows a micro-services architecture, for the deployment, it might be better to use many clusterized servers with many slower cores than a single server with few highly performant cores.</p>"},{"location":"deployment_guide/configure_your_machine/physical_server/#clusterized-deployment","title":"Clusterized Deployment","text":"<p>You might consider creating a cluster of machines each featuring, at least, the minimum server specifications. That solution brings you scalability in the future.</p>"},{"location":"deployment_guide/configure_your_machine/physical_server/#networking","title":"Networking","text":"<p>No explicit indications are given in terms of networking besides that servers need access to the Internet for downloading dependencies, binaries, and packages while building and deploying the TeraFlowSDN components.</p> <p>Besides that, the network requirements are essentially the same than that required for running a classical Kubernetes environment. To facilitate the deployment, we extensively use MicroK8s, thus the network requirements are, essentially, the same demanded by MicroK8s, especially, if you consider creating a Kubernetes cluster.</p> <p>As a reference, the other deployment solutions based on VMs assume the VM is connected to a virtual network configured with the IP range <code>10.0.2.0/24</code> and have the gateway at IP <code>10.0.2.1</code>. The VMs have the IP address <code>10.0.2.10</code>.</p> <p>The minimum required ports to be accessible are: - 22/SSH     : for management purposes - 80/HTTP    : for the TeraFlowSDN WebUI and Grafana dashboard - 8081/HTTPS : for the CockroachDB WebUI</p> <p>Other ports might be required if you consider to deploy addons such as Kubernetes observability, etc. The details on these ports are left appart given they might vary depending on the Kubernetes environment you use.</p>"},{"location":"deployment_guide/configure_your_machine/physical_server/#operating-system","title":"Operating System","text":"<p>The recommended Operating System for deploying TeraFlowSDN is Ubuntu Server 22.04 LTS or Ubuntu Server 20.04 LTS. Other version might work, but we have not tested them. We strongly recommend using Long Term Support (LTS) versions as they provide better stability.</p> <p>Below we provide some installation guidelines: - Installation Language: English - Autodetect your keyboard - If asked, select \"Ubuntu Server\" (do not select \"Ubuntu Server (minimized)\"). - Configure static network specifications (adapt them based on your particular setup):</p> Interface IPv4 Method Subnet Address Gateway Name servers Search domains enp0s3 Manual 10.0.2.0/24 10.0.2.10 10.0.2.1 8.8.8.8,8.8.4.4 <ul> <li>Leave proxy and mirror addresses as they are</li> <li>Let the installer self-upgrade (if asked).</li> <li>Use an entire disk for the installation</li> <li>Disable setup of the disk as LVM group</li> <li>Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.</li> <li>Configure your user and system names:</li> <li>User name: <code>TeraFlowSDN</code></li> <li>Server's name: <code>tfs-vm</code></li> <li>Username: <code>tfs</code></li> <li>Password: <code>tfs123</code></li> <li>Install Open SSH Server</li> <li>Import SSH keys, if any.</li> <li>Featured Server Snaps</li> <li>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</li> <li>Let the system install and upgrade the packages.</li> <li>This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</li> <li>Restart the VM when the installation is completed.</li> </ul>"},{"location":"deployment_guide/configure_your_machine/physical_server/#upgrade-the-ubuntu-distribution","title":"Upgrade the Ubuntu distribution","text":"<pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/","title":"Vagrant box","text":"<p>This page describes how to create a Vagrant Box, using the base virtual machine configured in Oracle Virtual Box.</p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#virtual-machine-specifications","title":"Virtual Machine specifications","text":"<p>Most of the specifications can be as specified in the Oracle Virtual Box page, however, there are a few particularities to Vagrant that must be accommodated, such as: - Virtual Hard Disk   - Size: 60GB (at least)   - Type: VMDK</p> <p></p> <p>Also, before initiating the VM and installing the OS, we'll need to: - Disable Floppy in the 'Boot Order' - Disable audio - Disable USB - Ensure Network Adapter 1 is set to NAT</p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#network-configurations","title":"Network configurations","text":"<p>At Network Adapt 1, the following port-forwarding rule must be set.</p> Name Protocol Host IP Host Port Guest IP Guest Port SSH TCP 2222 22 <p></p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#installing-the-os","title":"Installing the OS","text":"<p>For a Vagrant Box, it is generally suggested that the ISO's server version is used, as it is intended to be used via SSH, and any web GUI is expected to be forwarded to the host.</p> <p></p> <p></p> <p></p> <p>Make sure the disk is not configured as an LVM group!</p> <p></p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#vagrant-ser","title":"Vagrant ser","text":"<p>Vagrant expects by default, that in the box's OS exists the user <code>vagrant</code> with the password also being <code>vagrant</code>.</p> <p></p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#ssh","title":"SSH","text":"<p>Vagrant uses SSH to connect to the boxes, so installing it now will save the hassle of doing it later.</p> <p></p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#features-server-snaps","title":"Features server snaps","text":"<p>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#updates","title":"Updates","text":"<p>Let the system install and upgrade the packages. This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#upgrade-the-ubuntu-distribution","title":"Upgrade the Ubuntu distribution","text":"<pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#install-virtualbox-guest-additions","title":"Install VirtualBox Guest Additions","text":"<p>On VirtualBox Manager, open the VM main screen. If you are running the VM in headless  mode, right-click over the VM in the VirtualBox Manager window, and click \"Show\". If a dialog informing about how to leave the interface of the VM is shown, confirm  by pressing the \"Switch\" button. The interface of the VM should appear.</p> <p>Click the menu \"Device &gt; Insert Guest Additions CD image...\"</p> <p>On the VM terminal, type:</p> <pre><code>sudo apt-get install -y linux-headers-$(uname -r) build-essential dkms\n  # This command might take some minutes depending on your VM specs and your Internet access speed.\nsudo mount /dev/cdrom /mnt/\ncd /mnt/\nsudo ./VBoxLinuxAdditions.run\n  # This command might take some minutes depending on your VM specs.\nsudo reboot\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#etsi-tfs-installation","title":"ETSI TFS Installation","text":"<p>After this, proceed to 1.2. Install Microk8s, after which, return to this wiki to finish the Vagrant Box creation.</p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#box-configuration-and-creation","title":"Box configuration and creation","text":"<p>Make sure the ETSI TFS controller is correctly configured. You will not be able to change it after!</p> <p>It is advisable to do the next configurations from a host's terminal, via a SSH connection.</p> <pre><code>ssh -p 2222 vagrant@127.0.0.1\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#set-root-password","title":"Set root password","text":"<p>Set the root password to <code>vagrant</code>.</p> <pre><code>sudo passwd root\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#set-the-superuser","title":"Set the superuser","text":"<p>Set up the Vagrant user so that it\u2019s able to use sudo without being prompted for a password. Anything in the <code>/etc/sudoers.d/*</code> directory is included in the sudoers privileges when created by the root user. Create a new sudo file.</p> <pre><code>sudo visudo -f /etc/sudoers.d/vagrant\n</code></pre> <p>and add the following lines</p> <pre><code># add vagrant user\nvagrant ALL=(ALL) NOPASSWD:ALL\n</code></pre> <p>You can now test that it works by running a simple command.</p> <pre><code>sudo pwd\n</code></pre> <p>Issuing this command should result in an immediate response without a request for a password.</p>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#install-the-vagrant-key","title":"Install the Vagrant key","text":"<p>Vagrant uses a default set of SSH keys for you to directly connect to boxes via the CLI command <code>vagrant ssh</code>, after which it creates a new set of SSH keys for your new box. Because of this, we need to load the default key to be able to access the box after created.</p> <pre><code>chmod 0700 /home/vagrant/.ssh\nwget --no-check-certificate https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys\nchmod 0600 /home/vagrant/.ssh/authorized_keys\nchown -R vagrant /home/vagrant/.ssh\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#configure-the-openssh-server","title":"Configure the OpenSSH Server","text":"<p>Edit the <code>/etc/ssh/sshd_config</code> file:</p> <pre><code>sudo vim /etc/ssh/sshd_config\n</code></pre> <p>And uncomment the following line:</p> <pre><code>AuthorizedKeysFile %h/.ssh/authorized_keys\n</code></pre> <p>Then restart SSH.</p> <pre><code>sudo service ssh restart\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#package-the-box","title":"Package the box","text":"<p>Before you package the box, if you intend to make your box public, it is best to clean your bash history with:</p> <pre><code>history -c\n</code></pre> <p>Exit the SSH connection, and at you're host machine, package the VM:</p> <pre><code>vagrant package --base teraflowsdncontroller --output teraflowsdncontroller.box\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#test-run-the-box","title":"Test run the box","text":"<p>Add the base box to you local Vagrant box list:</p> <pre><code>vagrant box add --name teraflowsdncontroller ./teraflowsdncontroller.box\n</code></pre> <p>Now you should try to run it, for that you'll need to create a Vagrantfile. For a simple run, this is the minimal required code for this box:</p> <pre><code># -*- mode: ruby -*-\n# vi: set ft=ruby :\n\nVagrant.configure(\"2\") do |config|\n  config.vm.box = \"teraflowsdncontroller\"\n  config.vm.box_version = \"1.1.0\"\n  config.vm.network :forwarded_port, host: 8080 ,guest: 80\nend\n</code></pre> <p>Now you'll be able to spin up the virtual machine by issuing the command:</p> <pre><code>vagrant up\n</code></pre> <p>And connect to the machine using:</p> <pre><code>vagrant ssh\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#pre-configured-boxes","title":"Pre-configured boxes","text":"<p>If you do not wish to create your own Vagrant Box, you can use one of the existing ones created by TFS contributors. - davidjosearaujo/teraflowsdncontroller - ... </p> <p>To use them, you simply have to create a Vagrantfile and run <code>vagrant up controller</code> in the same directory. The following example Vagrantfile already allows you to do just that, with the bonus of exposing the multiple management GUIs to your <code>localhost</code>.</p> <pre><code>Vagrant.configure(\"2\") do |config|\n\n  config.vm.define \"controller\" do |controller|\n    controller.vm.box = \"davidjosearaujo/teraflowsdncontroller\"\n    controller.vm.network \"forwarded_port\", guest: 80, host: 8080     # WebUI\n    controller.vm.network \"forwarded_port\", guest: 8084, host: 50750  # Linkerd Viz Dashboard\n    controller.vm.network \"forwarded_port\", guest: 8081, host: 8081   # CockroachDB Dashboard\n    controller.vm.network \"forwarded_port\", guest: 8222, host: 8222   # NATS Dashboard\n    controller.vm.network \"forwarded_port\", guest: 9000, host: 9000   # QuestDB Dashboard\n    controller.vm.network \"forwarded_port\", guest: 9090, host: 9090   # Prometheus Dashboard\n\n    # Setup Linkerd Viz reverse proxy\n    ## Copy config file\n    controller.vm.provision \"file\" do |f|\n      f.source = \"./reverse-proxy-linkerdviz.sh\"\n      f.destination = \"./reverse-proxy-linkerdviz.sh\"\n    end\n    ## Execute configuration file\n    controller.vm.provision \"shell\" do |s|\n      s.inline = \"chmod +x ./reverse-proxy-linkerdviz.sh &amp;&amp; ./reverse-proxy-linkerdviz.sh\"\n    end\n\n    # Update controller source code to the desired branch\n    if ENV['BRANCH'] != nil\n      controller.vm.provision \"shell\" do |s|\n        s.inline = \"cd ./tfs-ctrl &amp;&amp; git pull &amp;&amp; git switch \" + ENV['BRANCH']\n      end\n    end\n\n  end\nend\n</code></pre> <p>This Vagrantfile also allows for optional repository updates on startup by running the command with a specified environment variable <code>BRANCH</code></p> <pre><code>BRANCH=develop vagrant up controller\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vagrant_box/#linkerd-dns-rebinding-bypass","title":"Linkerd DNS rebinding bypass","text":"<p>Because of Linkerd's security measures against DNS rebinding, a reverse proxy, that modifies the request's header <code>Host</code> field, is needed to expose the GUI to the host. The previous Vagrantfile already deploys such configurations, for that, all you need to do is create the <code>reverse-proxy-linkerdviz.sh</code> file in the same directory. The content of this file is displayed below.</p> <pre><code># Install NGINX\nsudo apt update &amp;&amp; sudo apt install nginx -y\n\n# NGINX reverse proxy configuration\necho 'server {\n    listen 8084;\n\n    location / {\n        proxy_pass http://127.0.0.1:50750;\n        proxy_set_header Host localhost;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}' &gt; /home/vagrant/expose-linkerd\n\n# Create symlink of the NGINX configuration file\nsudo ln -s /home/vagrant/expose-linkerd /etc/nginx/sites-enabled/\n\n# Commit the reverse proxy configurations\nsudo systemctl restart nginx\n\n# Enable start on login\necho \"linkerd viz dashboard &amp;\" &gt;&gt; .profile\n\n# Start dashboard\nlinkerd viz dashboard &amp;\n\necho \"Linkerd Viz dashboard running!\"\n</code></pre>"},{"location":"deployment_guide/configure_your_machine/vm_ware_fusion/","title":"Vm ware fusion","text":"<p>This page describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using VMWare Fusion. It has been tested with VMWare Fusion version 12 and 13.</p>"},{"location":"deployment_guide/configure_your_machine/vm_ware_fusion/#create-vm-in-vmware-fusion","title":"Create VM in VMWare Fusion:","text":"<p>In \"VMWare Fusion\" manager, create a new network from the \"Settings/Network\" menu.</p> <ul> <li>Unlock to make changes</li> <li>Press the + icon and create a new network</li> <li>Change the name to TFS-NAT-Net</li> <li>Check \"Allow virtual machines on this network to connect to external network (NAT)\"</li> <li>Do not check \"Enable IPv6\"</li> <li>Add port forwarding for HTTP and SSH</li> <li>Uncheck \"Provide address on this network via DHCP\"</li> </ul> <p>Create a new VM an Ubuntu 22.04.1 ISO:</p> <ul> <li>Display Name: TeraFlowSDN</li> <li>Username: tfs</li> <li>Password: tfs123</li> </ul> <p>On the next screen press \"Customize Settings\", save the VM and in \"Settings\" change: - Change to use 4 CPUs - Change to access 8 GB of RAM - Change disk to size 60 GB - Change the network interface to use the previously created TFS-NAT-Net</p> <p>Run the VM to start the installation.</p>"},{"location":"deployment_guide/configure_your_machine/vm_ware_fusion/#install-ubuntu-22041-lts-operating-system","title":"Install Ubuntu 22.04.1 LTS Operating System","text":"<p>The installation will be automatic, without any configuration required.</p> <ul> <li>Configure the guest IP, gateway and DNS:</li> </ul> <p>Using the Network Settings for the wired connection, set the IP to 10.0.2.10,   the mask to 255.255.255.0, the gateway to 10.0.2.2 and the DNS to 10.0.2.2.</p> <ul> <li>Disable and remove swap file:</li> </ul> <p>$ sudo swapoff -a   $ sudo rm /swapfile</p> <p>Then you can remove or comment the /swapfile entry in /etc/fstab</p> <ul> <li>Install Open SSH Server</li> <li> <p>Import SSH keys, if any.</p> </li> <li> <p>Restart the VM when the installation is completed.</p> </li> </ul>"},{"location":"deployment_guide/configure_your_machine/vm_ware_fusion/#upgrade-the-ubuntu-distribution","title":"Upgrade the Ubuntu distribution","text":"<pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre>"},{"location":"deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/","title":"deploy TeraFlowSDN","text":"<p>This section describes how to deploy TeraFlowSDN controller on top of MicroK8s using the  environment configured in the previous sections.</p>"},{"location":"deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/#install-prerequisites","title":"Install prerequisites","text":"<pre><code>sudo apt-get install -y git curl jq\n</code></pre>"},{"location":"deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/#clone-the-git-repository-of-the-teraflowsdn-controller","title":"Clone the Git repository of the TeraFlowSDN controller","text":"<p>Clone from ETSI-hosted GitLab code repository:</p> <pre><code>mkdir ~/tfs-ctrl\ngit clone https://labs.etsi.org/rep/tfs/controller.git ~/tfs-ctrl\n</code></pre> <p>Important: The original H2020-TeraFlow project hosted on GitLab.com has been  archieved and will not receive further contributions/updates. Please, clone from ETSI-hosted GitLab code repository.</p>"},{"location":"deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/#checkout-the-appropriate-git-branch","title":"Checkout the appropriate Git branch","text":"<p>TeraFlowSDN controller versions can be found in the appropriate release tags and/or branches as described in Home &gt; Versions.</p> <p>By default the branch master is checked out and points to the latest stable version of the TeraFlowSDN controller, while branch develop contains the latest developments and contributions under test and validation.</p> <p>To switch to the appropriate branch run the following command, changing <code>develop</code> by the name of the branch you want to deploy:</p> <pre><code>cd ~/tfs-ctrl\ngit checkout develop\n</code></pre>"},{"location":"deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/#prepare-a-deployment-script-with-the-deployment-settings","title":"Prepare a deployment script with the deployment settings","text":"<p>Create a new deployment script, e.g., <code>my_deploy.sh</code>, adding the appropriate settings as  follows. This section provides just an overview of the available settings. An example <code>my_deploy.sh</code> script is provided in the root folder of the project for your convenience with full description of all the settings.</p> <p>Note: The example <code>my_deploy.sh</code> script provides reasonable settings for deploying a functional and complete enough TeraFlowSDN controller, and a brief description of their meaning. To see extended descriptions, check scripts in the <code>deploy</code> folder.</p> <pre><code>cd ~/tfs-ctrl\ntee my_deploy.sh &gt;/dev/null &lt;&lt; EOF\n# ----- TeraFlowSDN ------------------------------------------------------------\nexport TFS_REGISTRY_IMAGES=\"http://localhost:32000/tfs/\"\nexport TFS_COMPONENTS=\"context device ztp monitoring pathcomp service slice nbi webui load_generator\"\nexport TFS_IMAGE_TAG=\"dev\"\nexport TFS_K8S_NAMESPACE=\"tfs\"\nexport TFS_EXTRA_MANIFESTS=\"manifests/nginx_ingress_http.yaml\"\nexport TFS_GRAFANA_PASSWORD=\"admin123+\"\nexport TFS_SKIP_BUILD=\"\"\n\n# ----- CockroachDB ------------------------------------------------------------\nexport CRDB_NAMESPACE=\"crdb\"\nexport CRDB_EXT_PORT_SQL=\"26257\"\nexport CRDB_EXT_PORT_HTTP=\"8081\"\nexport CRDB_USERNAME=\"tfs\"\nexport CRDB_PASSWORD=\"tfs123\"\nexport CRDB_DATABASE=\"tfs\"\nexport CRDB_DEPLOY_MODE=\"single\"\nexport CRDB_DROP_DATABASE_IF_EXISTS=\"YES\"\nexport CRDB_REDEPLOY=\"\"\n\n# ----- NATS -------------------------------------------------------------------\nexport NATS_NAMESPACE=\"nats\"\nexport NATS_EXT_PORT_CLIENT=\"4222\"\nexport NATS_EXT_PORT_HTTP=\"8222\"\nexport NATS_REDEPLOY=\"\"\n\n# ----- QuestDB ----------------------------------------------------------------\nexport QDB_NAMESPACE=\"qdb\"\nexport QDB_EXT_PORT_SQL=\"8812\"\nexport QDB_EXT_PORT_ILP=\"9009\"\nexport QDB_EXT_PORT_HTTP=\"9000\"\nexport QDB_USERNAME=\"admin\"\nexport QDB_PASSWORD=\"quest\"\nexport QDB_TABLE_MONITORING_KPIS=\"tfs_monitoring_kpis\"\nexport QDB_TABLE_SLICE_GROUPS=\"tfs_slice_groups\"\nexport QDB_DROP_TABLES_IF_EXIST=\"YES\"\nexport QDB_REDEPLOY=\"\"\n\nEOF\n</code></pre> <p>The settings are organized in 4 sections: - Section <code>TeraFlowSDN</code>:   - <code>TFS_REGISTRY_IMAGE</code> enables to specify the private Docker registry to be used, by default, we assume to use the Docker respository enabled in MicroK8s.   - <code>TFS_COMPONENTS</code> specifies the components their Docker image will be rebuilt, uploaded to the private Docker registry, and deployed in Kubernetes.   - <code>TFS_IMAGE_TAG</code> defines the tag to be used for Docker images being rebuilt and uploaded to the private Docker registry.   - <code>TFS_K8S_NAMESPACE</code> specifies the name of the Kubernetes namespace to be used for deploying the TFS components.   - <code>TFS_EXTRA_MANIFESTS</code> enables to provide additional manifests to be applied into the Kubernetes environment during the deployment. Typical use case is to deploy ingress controllers, service monitors for Prometheus, etc.   - <code>TFS_GRAFANA_PASSWORD</code> lets you specify the password you want to use for the <code>admin</code> user of the Grafana instance being deployed and linked to the Monitoring component.   - <code>TFS_SKIP_BUILD</code>, if set to <code>YES</code>, prevents rebuilding the Docker images. That means, the deploy script will redeploy existing Docker images without rebuilding/updating them.</p> <ul> <li>Section <code>CockroachDB</code>: enables to configure the deployment of the backend CockroachDB database.</li> <li> <p>Check example script <code>my_deploy.sh</code> for further details.</p> </li> <li> <p>Section <code>NATS</code>: enables to configure the deployment of the backend NATS message broker.</p> </li> <li> <p>Check example script <code>my_deploy.sh</code> for further details.</p> </li> <li> <p>Section <code>QuestDB</code>: enables to configure the deployment of the backend QuestDB timeseries database.</p> </li> <li>Check example script <code>my_deploy.sh</code> for further details.</li> </ul>"},{"location":"deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/#confirm-that-microk8s-is-running","title":"Confirm that MicroK8s is running","text":"<p>Run the following command:</p> <pre><code>microk8s status\n</code></pre> <p>If it is reported <code>microk8s is not running, try microk8s start</code>, run the following command to start MicroK8s:</p> <pre><code>microk8s start\n</code></pre> <p>Confirm everything is up and running:</p> <ol> <li>Periodically Check the status of Kubernetes until you see the addons [dns, ha-cluster, helm3, hostpath-storage, ingress, registry, storage] in the enabled block.</li> <li>Periodically Check Kubernetes resources until all pods are Ready and Running.</li> </ol>"},{"location":"deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/#deploy-tfs-controller","title":"Deploy TFS controller","text":"<p>First, source the deployment settings defined in the previous section. This way, you do not need to specify the environment variables in each and every command you execute to operate the TFS controller. Be aware to re-source the file if you open new terminal sessions. Then, run the following command to deploy TeraFlowSDN controller on top of the MicroK8s Kubernetes platform.</p> <pre><code>cd ~/tfs-ctrl\nsource my_deploy.sh\n./deploy/all.sh\n</code></pre> <p>The script performs the following steps: - Executes script <code>./deploy/crdb.sh</code> to automate deployment of CockroachDB database used by Context component.   - The script automatically checks if CockroachDB is already deployed.   - If there are settings instructing to drop the database and/or redeploy CockroachDB, it does the appropriate actions to honor them as defined in previous section. - Executes script <code>./deploy/nats.sh</code> to automate deployment of NATS message broker used by Context component.   - The script automatically checks if NATS is already deployed.   - If there are settings instructing to redeploy the message broker, it does the appropriate actions to honor them as defined in previous section. - Executes script <code>./deploy/qdb.sh</code> to automate deployment of QuestDB timeseries database used by Monitoring component.   - The script automatically checks if QuestDB is already deployed.   - If there are settings instructing to redeploy the timeseries database, it does the appropriate actions to honor them as defined in previous section. - Executes script <code>./deploy/tfs.sh</code> to automate deployment of TeraFlowSDN.   - Creates the namespace defined in <code>TFS_K8S_NAMESPACE</code>   - Creates secrets for CockroachDB, NATS, and QuestDB to be used by Context and Monitoring components.   - Builds the Docker images for the components defined in <code>TFS_COMPONENTS</code>   - Tags the Docker images with the value of <code>TFS_IMAGE_TAG</code>   - Pushes the Docker images to the repository defined in <code>TFS_REGISTRY_IMAGE</code>   - Deploys the components defined in <code>TFS_COMPONENTS</code>   - Creates the file <code>tfs_runtime_env_vars.sh</code> with the environment variables for the components defined in <code>TFS_COMPONENTS</code> defining their local host addresses and their port numbers.   - Applies extra manifests defined in <code>TFS_EXTRA_MANIFESTS</code> such as:     - Creating an ingress controller listening at port 80 for HTTP connections to enable external access to the TeraFlowSDN WebUI, Grafana Dashboards, and Compute NBI interfaces.     - Deploying service monitors to enable monitoring the performance of the components, device drivers and service handlers.   - Initialize and configure the Grafana dashboards (if Monitoring component is deployed) - Report a summary of the deployment   - See Show Deployment and Logs</p>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/","title":"Install micro k8s","text":"<p>This section describes how to deploy the MicroK8s Kubernetes platform and configure it  to be used with ETSI TeraFlowSDN controller. Besides, Docker is installed to build docker images for the ETSI TeraFlowSDN controller.</p> <p>The steps described in this section might take some minutes depending on your internet  connection speed and the resources assigned to your VM, or the specifications of your  physical server.</p> <p>To facilitate work, these steps are easier to be executed through an SSH connection, for instance using tools like PuTTY or MobaXterm.</p>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#upgrade-the-ubuntu-distribution","title":"Upgrade the Ubuntu distribution","text":"<p>Skip this step if you already did it during the creation of the VM.</p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#install-prerequisites","title":"Install prerequisites","text":"<pre><code>sudo apt-get install -y ca-certificates curl gnupg lsb-release snapd jq\n</code></pre>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#install-docker-ce","title":"Install Docker CE","text":"<p>Install Docker CE and Docker BuildX plugin</p> <pre><code>sudo apt-get install -y docker.io docker-buildx\n</code></pre> <p>NOTE: Starting from Docker v23, Build architecture has been updated and <code>docker build</code> command entered into deprecation process in favor of the new <code>docker buildx build</code> command. Package <code>docker-buildx</code> provides the new <code>docker buildx build</code> command.</p> <p>Add key \"insecure-registries\" with the private repository to the daemon configuration. It is done in two commands since sometimes read from and write to same file might cause trouble.</p> <pre><code>if [ -s /etc/docker/daemon.json ]; then cat /etc/docker/daemon.json; else echo '{}'; fi \\\n    | jq 'if has(\"insecure-registries\") then . else .+ {\"insecure-registries\": []} end' -- \\\n    | jq '.\"insecure-registries\" |= (.+ [\"localhost:32000\"] | unique)' -- \\\n    | tee tmp.daemon.json\nsudo mv tmp.daemon.json /etc/docker/daemon.json\nsudo chown root:root /etc/docker/daemon.json\nsudo chmod 600 /etc/docker/daemon.json\n</code></pre> <p>Restart the Docker daemon</p> <pre><code>sudo systemctl restart docker\n</code></pre>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#install-microk8s","title":"Install MicroK8s","text":"<p>Important: Some TeraFlowSDN dependencies need to be executed on top of MicroK8s/Kubernetes v1.24. It is not guaranteed (by now) to run on newer versions.</p> <pre><code># Install MicroK8s\nsudo snap install microk8s --classic --channel=1.24/stable\n\n# Create alias for command \"microk8s.kubectl\" to be usable as \"kubectl\"\nsudo snap alias microk8s.kubectl kubectl\n</code></pre> <p>It is important to make sure that <code>ufw</code> will not interfere with the internal pod-to-pod and pod-to-Internet traffic. To do so, first check the status. If <code>ufw</code> is active, use the following command to enable the communication.</p> <pre><code>\n# Verify status of ufw firewall\nsudo ufw status\n\n# If ufw is active, install following rules to enable access pod-to-pod and pod-to-internet\nsudo ufw allow in on cni0 &amp;&amp; sudo ufw allow out on cni0\nsudo ufw default allow routed\n</code></pre> <p>NOTE: MicroK8s can be used to compose a Highly Available Kubernetes cluster enabling you to construct an environment combining the CPU, RAM and storage resources of multiple machines. If you are interested in this procedure, review the official instructions in How to build a highly available Kubernetes cluster with MicroK8s, in particular, the step Create a MicroK8s multi-node cluster.</p>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#references","title":"References:","text":"<ul> <li>The lightweight Kubernetes &gt; Install MicroK8s</li> <li>Install a local Kubernetes with MicroK8s</li> <li>How to build a highly available Kubernetes cluster with MicroK8s</li> </ul>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#add-user-to-the-docker-and-microk8s-groups","title":"Add user to the docker and microk8s groups","text":"<p>It is important that your user has the permission to run <code>docker</code> and <code>microk8s</code> in the  terminal. To allow this, you need to add your user to the <code>docker</code> and <code>microk8s</code> groups with the  following commands:</p> <pre><code>sudo usermod -a -G docker $USER\nsudo usermod -a -G microk8s $USER\nsudo chown -f -R $USER $HOME/.kube\nsudo reboot\n</code></pre> <p>In case that you get trouble executing the following commands, might due to the .kube folder is not automatically provisioned into your home folder, you may follow the steps below:</p> <pre><code>mkdir -p $HOME/.kube\nsudo chown -f -R $USER $HOME/.kube\nmicrok8s config &gt; $HOME/.kube/config\nsudo reboot\n</code></pre>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#check-status-of-kubernetes-and-addons","title":"Check status of Kubernetes and addons","text":"<p>To retrieve the status of Kubernetes once, run the following command:</p> <pre><code>microk8s.status --wait-ready\n</code></pre> <p>To retrieve the status of Kubernetes periodically (e.g., every 1 second), run the  following command:</p> <pre><code>watch -n 1 microk8s.status --wait-ready\n</code></pre>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#check-all-resources-in-kubernetes","title":"Check all resources in Kubernetes","text":"<p>To retrieve the status of the Kubernetes resources once, run the following command:</p> <pre><code>kubectl get all --all-namespaces\n</code></pre> <p>To retrieve the status of the Kubernetes resources periodically (e.g., every 1  second), run the following command:</p> <pre><code>watch -n 1 kubectl get all --all-namespaces\n</code></pre>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#enable-addons","title":"Enable addons","text":"<p>First, we need to enable the community plugins (maintained by third parties):</p> <pre><code>microk8s.enable community\n</code></pre> <p>The Addons to be enabled are: - <code>dns</code>: enables resolving the pods and services by name - <code>helm3</code>: required to install NATS - <code>hostpath-storage</code>: enables providing storage for the pods (required by <code>registry</code>) - <code>ingress</code>: deploys an ingress controller to expose the microservices outside Kubernetes - <code>registry</code>: deploys a private registry for the TFS controller images - <code>linkerd</code>: deploys the linkerd service mesh used for load balancing among replicas - <code>prometheus</code>: set of tools that enable TFS observability through per-component instrumentation - <code>metrics-server</code>: deploys the Kubernetes metrics server for API access to service metrics</p> <pre><code>microk8s.enable dns helm3 hostpath-storage ingress registry prometheus metrics-server linkerd\n</code></pre> <p>Important: Enabling some of the addons might take few minutes. Do not proceed with next steps until the addons are ready. Otherwise, the deployment might fail. To confirm everything is up and running: 1. Periodically    Check the status of Kubernetes    until you see the addons [dns, ha-cluster, helm3, hostpath-storage, ingress, linkerd, metrics-server, prometheus, registry, storage] in the enabled block. 2. Periodically    Check Kubernetes resources    until all pods are Ready and Running. 3. If it takes too long for the Pods to be ready, we observed that rebooting the machine may help.</p> <p>Then, create aliases to make the commands easier to access:</p> <pre><code>sudo snap alias microk8s.helm3 helm3\nsudo snap alias microk8s.linkerd linkerd\n</code></pre> <p>To validate that <code>linkerd</code> is working correctly, run:</p> <pre><code>linkerd check\n</code></pre> <p>To validate that the <code>metrics-server</code> is working correctly, run:</p> <pre><code>kubectl top pods --all-namespaces\n</code></pre> <p>and you should see a screen similar to the <code>top</code> command in Linux, showing the columns namespace, pod name, CPU (cores), and MEMORY (bytes).</p> <p>In case pods are not starting, check information from pods logs. For example, linkerd is sensitive for proper /etc/resolv.conf syntax.</p> <pre><code>kubectl logs &lt;podname&gt; --namespace &lt;namespace&gt;\n</code></pre> <p>If the command shows an error message, also restarting the machine might help.</p>"},{"location":"deployment_guide/install_micro_k8s/install_micro_k8s/#stop-restart-and-redeploy","title":"Stop, Restart, and Redeploy","text":"<p>Find below some additional commands you might need while you work with MicroK8s:</p> <pre><code>microk8s.stop  # stop MicroK8s cluster (for instance, before power off your computer)\nmicrok8s.start # start MicroK8s cluster\nmicrok8s.reset # reset infrastructure to a clean state\n</code></pre> <p>If the following commands does not work to recover the MicroK8s cluster, you can redeploy it.</p> <p>If you want to keep MicroK8s configuration, use:</p> <pre><code>sudo snap remove microk8s\n</code></pre> <p>If you need to completely drop MicroK8s and its complete configuration, use:</p> <pre><code>sudo snap remove microk8s --purge\nsudo apt-get remove --purge docker.io docker-buildx\n</code></pre> <p>IMPORTANT: After uninstalling MicroK8s, it is convenient to reboot the computer (the VM if you work on a VM, or the physical computer if you use a physical computer). Otherwise, there are system configurations that are not correctly cleaned. Especially in what port forwarding and firewall rules matters.</p> <p>After the reboot, redeploy as it is described in this section.</p>"},{"location":"deployment_guide/show_deployment_and_logs/show_deployment_and_logs/","title":"Show deployment and logs","text":"<p>This section presents some helper scripts to inspect the status of the deployment and  the logs of the components. These scripts are particularly helpful for troubleshooting during execution of  experiments, development, and debugging.</p>"},{"location":"deployment_guide/show_deployment_and_logs/show_deployment_and_logs/#report-the-deployment-of-the-tfs-controller","title":"Report the deployment of the TFS controller","text":"<p>The summary report given at the end of the Deploy TFS controller procedure can be generated manually at any time by running the following command. You can avoid sourcing <code>my_deploy.sh</code> if it has been already done.</p> <pre><code>cd ~/tfs-ctrl\nsource my_deploy.sh\n./deploy/show.sh\n</code></pre> <p>Use this script to validate that all the pods, deployments, replica sets, ingress  controller, etc. are ready and have the appropriate state, e.g., running for Pods, and  the services are deployed and have appropriate IP addresses and port numbers.</p>"},{"location":"deployment_guide/show_deployment_and_logs/show_deployment_and_logs/#report-the-log-of-a-specific-tfs-controller-component","title":"Report the log of a specific TFS controller component","text":"<p>A number of scripts are pre-created in the <code>scripts</code> folder to facilitate the inspection  of the component logs. For instance, to dump the log of the Context component, run the following command. You can avoid sourcing <code>my_deploy.sh</code> if it has been already done.</p> <pre><code>source my_deploy.sh\n./scripts/show_logs_context.sh\n</code></pre>"},{"location":"deployment_guide/webUI_and_grafana_dashboards/webUI_and_grafana_dashboards/","title":"webUI and grafana dashboards","text":"<p>This section describes how to get access to the TeraFlowSDN controller WebUI and the monitoring Grafana dashboards.</p>"},{"location":"deployment_guide/webUI_and_grafana_dashboards/webUI_and_grafana_dashboards/#access-the-teraflowsdn-webui","title":"Access the TeraFlowSDN WebUI","text":"<p>If you followed the installation steps based on MicroK8s, you got an ingress controller installed that exposes on TCP port 80.</p> <p>Besides, the ingress controller defines the following reverse proxy paths (on your local machine): - <code>http://127.0.0.1/webui</code>: points to the WebUI of TeraFlowSDN. - <code>http://127.0.0.1/grafana</code>: points to the Grafana dashboards.   This endpoint brings access to the monitoring dashboards of TeraFlowSDN.   The credentials for the <code>admin</code>user are those defined in the <code>my_deploy.sh</code> script, in the <code>TFS_GRAFANA_PASSWORD</code> variable. - <code>http://127.0.0.1/restconf</code>: points to the Compute component NBI based on RestCONF.    This endpoint enables connecting external software, such as ETSI OpenSourceMANO NFV Orchestrator, to TeraFlowSDN.</p> <p>Note: In the creation of the VM, a forward from host TCP port 8080 to VM's TCP port 80 is configured, so the WebUIs and REST APIs of TeraFlowSDN should be exposed on the endpoint <code>127.0.0.1:8080</code> of your local machine instead of <code>127.0.0.1:80</code>.</p>"},{"location":"development_guide/development_guide/","title":"2. Development Guide","text":""},{"location":"development_guide/development_guide/#21-configure-environment","title":"2.1. Configure Environment","text":""},{"location":"development_guide/development_guide/#211-python","title":"2.1.1. PythonUpgrade the Ubuntu distribution  <p>Skip this step if you already did it during the installation of your machine.</p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> Install PyEnv dependencies <p></p> <pre><code>sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget \\\n    curl llvm git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev\n</code></pre> Install PyEnv <p></p> <p>We recommend installing PyEnv through PyEnv Installer. Below you can find the instructions, but we refer you to the link for updated  instructions.</p> <pre><code>curl https://pyenv.run | bash\n# When finished, edit ~/.bash_profile // ~/.profile // ~/.bashrc as the installer proposes.\n# In general, it means to append the following lines to ~/.bashrc:\nexport PYENV_ROOT=\"$HOME/.pyenv\"\ncommand -v pyenv &gt;/dev/null || export PATH=\"$PYENV_ROOT/bin:$PATH\"\neval \"$(pyenv init -)\"\neval \"$(pyenv virtualenv-init -)\"\n</code></pre> <p>In case .bashrc is not linked properly to your profile, you may need to append the  following line into your local .profile file:</p> <pre><code># Open ~/.profile and append this line:\n+source \"$HOME\"/.bashrc\n</code></pre> Restart the machine <p> Restart the machine for all the changes to take effect.</p> <pre><code>sudo reboot\n</code></pre> Install Python 3.9 over PyEnv <p></p> <p>ETSI TeraFlowSDN uses Python 3.9 by default. You should install the latest stable update of Python 3.9, i.e., avoid \"-dev\" versions. To find the latest version available in PyEnv, you can run the following command:</p> <pre><code>pyenv install --list | grep \" 3.9\"\n</code></pre> <p>At the time of writing, this command will output the following list:</p> <pre><code>  3.9.0\n  3.9-dev\n  3.9.1\n  3.9.2\n  3.9.4\n  3.9.5\n  3.9.6\n  3.9.7\n  3.9.8\n  3.9.9\n  3.9.10\n  3.9.11\n  3.9.12\n  3.9.13\n  3.9.14 \n  3.9.15\n  3.9.16 ** always select the latest version **\n</code></pre> <p>Therefore, the latest stable version is Python 3.9.16. To install this version, you should run:</p> <pre><code>pyenv install 3.9.16\n    # This command might take some minutes depending on your Internet connection speed \n    # and the performance of your machine.\n</code></pre> Create the Virtual Environment for TeraFlowSDN <p> The following commands create a virtual environment named as <code>tfs</code> using Python 3.9 and  associate that environment with the current folder, i.e., <code>~/tfs-ctrl</code>. That way, when you are in that folder, the associated virtual environment will be used,  thus inheriting the Python interpreter, i.e., Python 3.9, and the Python packages  installed on it.</p> <pre><code>cd ~/tfs-ctrl\npyenv virtualenv 3.9.16 tfs\npyenv local 3.9.16/envs/tfs\n</code></pre> <p>After completing these commands, you should see in your prompt that now you're within  the virtual environment <code>3.9.16/envs/tfs</code> on folder <code>~/tfs-ctrl</code>:</p> <pre><code>(3.9.16/envs/tfs) tfs@tfs-vm:~/tfs-ctrl$\n</code></pre> <p>In case that the correct pyenv does not get automatically activated when you change to  the tfs-ctrl/ folder, then execute the following command:</p> <pre><code>cd ~/tfs-ctrl\npyenv activate 3.9.16/envs/tfs\n</code></pre> Install the basic Python packages within the virtual environment <p> From within the <code>3.9.16/envs/tfs</code> environment on folder <code>~/tfs-ctrl</code>, run the following  commands to install the basic Python packages required to work with TeraFlowSDN.</p> <pre><code>cd ~/tfs-ctrl\n./install_requirements.sh\n</code></pre> <p>Some dependencies require to re-load the session, so log-out and log-in again.</p> Generate the Python code from the gRPC Proto messages and services <p></p> <p>The components, e.g., microservices, of the TeraFlowSDN controller, in general, use a gRPC-based open API to interoperate. All the protocol definitions can be found in sub-folder <code>proto</code> within the root project folder. For additional details on gRPC, visit the official web-page gRPC.</p> <p>In order to interact with the components, (re-)generate the Python code from gRPC definitions running the following command:</p> <pre><code>cd ~/tfs-ctrl\nproto/generate_code_python.sh\n</code></pre>","text":"<p>This section describes how to configure the Python environment to run experiments and  develop code for the ETSI TeraFlowSDN controller. In particular, we use PyEnv to install the appropriate  version of Python and manage the virtual environments.</p>"},{"location":"development_guide/development_guide/#212-java-quarkus","title":"2.1.2. Java (Quarkus) <p>This section describe the steps needed to create a development environment for TFS components implemented in Java. Currently, ZTP and Policy components have been developed in Java (version 11) and use the Quarkus framework, which enables kubernetes-native development.</p> Install JDK <p> To begin, make sure that you have java installed and in the correct version</p> <pre><code>java --version\n</code></pre> <p>If you don't have java installed you will get an error like the following:</p> <pre><code>Command 'java' not found, but can be installed with:\n\nsudo apt install default-jre              # version 2:1.11-72build1, or\nsudo apt install openjdk-11-jre-headless  # version 11.0.14+9-0ubuntu2\nsudo apt install openjdk-17-jre-headless  # version 17.0.2+8-1\nsudo apt install openjdk-18-jre-headless  # version 18~36ea-1\nsudo apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1\n</code></pre> <p>In which case you should use the following command to install the correct version:</p> <pre><code>sudo apt install openjdk-11-jre-headless\n</code></pre> <p>Else you should get something like the following:</p> <pre><code>openjdk 11.0.18 2023-01-17\nOpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1)\nOpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1, mixed mode, sharing)\n</code></pre> Compiling and testing existing components <p> In the root directory of the existing Java components you will find an executable maven wrapper named <code>mvnw</code>. You could use this executable, which is already configured in pair with the components, instead of your local maven installation. So for example if you want to compile the project you would run the following:</p> <pre><code>./mvnw compile\n</code></pre> VS Code Quarkus plugin <p> In case you are using VS Code for development, we suggest to install the official Quarkus extension. The extension should be able to automatically find the current open project and integrate with the above <code>mvnw</code> maven wrapper, making it easier to control the maven lifecycle. Make sure that you open the specific component directory (i.e., <code>src/ztp</code> or <code>src/policy</code>) and not the general controller one (i.e., <code>src</code>.</p> New Java TFS component <p></p> <p>Sample Project</p> <p>If you want to create a new TFS component written in Java you could generate a new Quarkus project based on the following project:</p> <p>TFS Sample Quarkus Project</p> <p>In that way, you should have most of the libraries you would need to integrate with the rest of the TFS Components. Feel free however to add or remove libraries depending on your needs.</p> <p>Initial setup</p> <p>If you used the sample project above, you should have a project with a basic structure. However there are some steps that you should take before starting development.</p> <p>First make sure that you copy the protobuff files, that are found in the root directory of the TFS SDN controller, to the <code>new-component/src/main/proto</code> directory.</p> <p>Next you should create the following files:</p> <ul> <li><code>new-component/.gitlab-ci.yml</code></li> <li><code>new-component/Dockerfile</code></li> <li><code>new-component/src/resources/application.yaml</code></li> </ul> <p>We suggest to copy the respective files from existing components (Automation and Policy) and change them according to your needs.</p>","text":""},{"location":"development_guide/development_guide/#213-java-maven","title":"2.1.3. Java (Maven) <p>Page under construction</p>","text":""},{"location":"development_guide/development_guide/#214-rust","title":"2.1.4. Rust <p>Page under construction</p>","text":""},{"location":"development_guide/development_guide/#215-erlang","title":"2.1.5. Erlang <p>This section describes how to configure the Erlang environment to run experiments and develop code for the ETSI TeraFlowSDN controller.</p> <p>First we need to install Erlang. There is multiple way, for development we will be using ASDF, a tool that allows the installation of multiple version of Erlang at the same time, and switch from one version to the other at will.</p> <ul> <li>First, install any missing dependencies:</li> </ul> <pre><code>sudo apt install curl git autoconf libncurses-dev build-essential m4 libssl-dev \n</code></pre> <ul> <li>Download ASDF tool to the local account:</li> </ul> <pre><code>git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2\n</code></pre> <ul> <li>Make ASDF activate on login by adding these lines at the end of the <code>~/.bashrc</code> file:</li> </ul> <pre><code>. $HOME/.asdf/asdf.sh\n. $HOME/.asdf/completions/asdf.bash\n</code></pre> <ul> <li>Logout and log back in to activate ASDF.</li> </ul> <p>ASDF supports multiple tools by installing there corresponding plugins.</p> <ul> <li>Install ASDF plugin for Erlang:</li> </ul> <pre><code>asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git\n</code></pre> <ul> <li>Install a version of Erlang:</li> </ul> <pre><code>asdf install erlang 24.3.4.2\n</code></pre> <ul> <li>Activate Erlang locally for TFS controller. This will create a local file called <code>.tool-versions</code> defining which version of the tools to use when running under the current directory:</li> </ul> <pre><code>cd tfs-ctrl/\nasdf local erlang 24.3.4.2\n</code></pre> <p>Erlang projects uses a build tool called rebar3. It is used to manager project dependenecies, compile a project and generate project releases.</p> <ul> <li>Install rebar3 localy from source:</li> </ul> <pre><code>cd ~\ngit clone https://github.com/erlang/rebar3.git\ncd rebar3\nasdf local erlang 24.3.4.2\n./bootstrap\n./rebar3 local install\n</code></pre> <ul> <li>Update <code>~/.bashrc</code> to use rebar3 by adding this line at the end:</li> </ul> <pre><code>export PATH=$HOME/.cache/rebar3/bin:$PATH\n</code></pre> <ul> <li>Logout and log back in.</li> </ul>","text":""},{"location":"development_guide/development_guide/#216-kotlin","title":"2.1.6. Kotlin <p>This section describes the steps needed to establish a development environment for TFS (TeraFlowSDN) components implemented in Kotlin. Currently, the <code>Gateway</code> component stands as the sole component developed in Kotlin.</p> Install Kotlin <p> To begin, make sure that you have kotlin installed and its current version:</p> <pre><code>kotlin -version\n</code></pre> <p>If you don't have kotlin installed you will get an error like the following:</p> <pre><code>Command 'kotlin' not found, but can be installed with:\nsudo snap install --classic kotlin\n</code></pre> <p>In which case you should use the following command to install the correct version:</p> <pre><code> sudo snap install --classic kotlin\n</code></pre> <p>Currently, the recommended version is 1.6.21, which uses Java Runtime Environment (JRE) version 11.</p> Compiling and testing existing components <p> To compile a Kotlin project using Gradle, similarly to using the Maven wrapper (mvnw) for Java projects, you can use the Gradle wrapper (gradlew) within the root directory of your Kotlin component, specifically the gateway directory.</p> <p>Navigate to the gateway directory within your Kotlin project. Ensure that it contains the gradlew script along with the gradle directory. Then, create a directory named <code>proto</code> and move all the files with extension <code>.proto</code> in this way:</p> <pre><code>mkdir proto\ncp ../../../proto/*.proto ./proto \n</code></pre> <p>For building the application, open a terminal or command prompt, navigate to the gateway directory, and run the following command:</p> <pre><code>./gradlew build\n</code></pre> <p>The following program runs the gateway application:</p> <pre><code>./gradlew runServer \n</code></pre> New Kotlin TFS component <p></p> <p>Sample Project</p> <p>If you want to create a new TFS component written in Kotlin you could generate a Kotlin project using <code>gradle</code>. The recommended version is 7.1. Follow the following Gradle guide for its installation. For building the prokect follow this link instead.</p> <p>From inside the new project directory, run the init task using the following command in a terminal: <code>gradle init</code>. </p> <p>The output will look like this:</p> <pre><code>$ gradle init\n\nSelect type of project to generate:\n  1: basic\n  2: application\n  3: library\n  4: Gradle plugin\nEnter selection (default: basic) [1..4] 2\n\nSelect implementation language:\n  1: C++\n  2: Groovy\n  3: Java\n  4: Kotlin\n  5: Scala\n  6: Swift\nEnter selection (default: Java) [1..6] 4\n\nSelect build script DSL:\n  1: Groovy\n  2: Kotlin\nEnter selection (default: Groovy) [1..2] 1\n\nProject name (default: demo):\nSource package (default: demo):\n\n\nBUILD SUCCESSFUL\n2 actionable tasks: 2 executed\n</code></pre> <p>Initial setup</p> <p>The <code>gradle init</code> command generates the new project. </p> <p>First, ensure the protobuf files are copied from the root directory of the TFS SDN controller. Run the following command in the directory of the new project:</p> <pre><code>mkdir proto \ncp TFS/project/root/path/proto/*.proto ./proto/\n</code></pre> <p>The file <code>build.gradle.ktl</code> is fundamental as it manages dependencies. Adjust it for adding external libraries.  </p> <p>Next you should create the following files:</p> <ol> <li><code>new-component/.gitlab-ci.yml</code></li> <li><code>new-component/Dockerfile</code></li> </ol> <p>We recommend leveraging the structures and configurations found in the files of existing components for inspiration.</p> <p>Docker Container This project operates with Docker containers. Ensure the production of the container version for your component. To generate the container version of the project, modify the 'new-component/Dockerfile.' Execute the following command from the project's root directory:</p> <pre><code>docker build -t new-image -f new-component/Dockerfile ./\n</code></pre>","text":""},{"location":"development_guide/development_guide/#22-configure-vscode","title":"2.2. Configure VScode","text":"Install VSCode and the required extensions <p>If not already done, install VSCode and the \"Remote SSH\" extension on your local machine, not in the VM.</p> <p>Note: \"Python\" extension is not required here. It will be installed later on the VSCode server running on the VM.</p> Configure the \"Remote SSH\" extension <p></p> <ul> <li>Go to left icon \"Remote Explorer\"</li> <li>Click the \"gear\" icon next to \"SSH TARGETS\" on top of \"Remote Explorer\" bar</li> <li>Choose to edit \"&lt;...&gt;/.ssh/config\" file (or equivalent)</li> <li>Add the following entry (assuming previous port forwarding configuration):</li> </ul> <pre><code>Host TFS-VM\n    HostName 127.0.0.1\n    Port 2200\n    ForwardX11 no\n    User tfs\n</code></pre> <ul> <li>Save the file</li> <li>An entry \"TFS-VM\" should appear on \"SSH TARGETS\".</li> </ul> Connect VSCode to the VM through \"Remote SSH\" extension <p></p> <ul> <li>Right-click on \"TFS-VM\"</li> <li>Select \"Connect to Host in Current Window\"</li> <li>Reply to the questions asked</li> <li>Platform of the remote host \"TFS-VM\": Linux</li> <li>\"TFS-VM\" has fingerprint \"\". Do you want to continue?: Continue <li>Type tfs user's password: tfs123</li> <li>You should be now connected to the TFS-VM.</li> <p>Note: if you get a connection error message, the reason might be due to wrong SSH server fingerprint. Edit file           \"&lt;...&gt;/.ssh/known_hosts\" on your local user account, check if there is a line starting with           \"[127.0.0.1]:2200\" (assuming previous port forwarding configuration), remove the entire line, save the file,           and retry connection.</p> Add SSH key to prevent typing the password every time <p> This step creates an SSH key in the VM and installs it on the VSCode to prevent having to type the password every time.</p> <ul> <li>In VSCode (connected to the VM), click menu \"Terminal &gt; New Terminal\"</li> <li>Run the following commands on the VM's terminal through VSCode</li> </ul> <pre><code>ssh-keygen -t rsa -b 4096 -f ~/.ssh/tfs-vm.key\n  # leave password empty\nssh-copy-id -i ~/.ssh/tfs-vm.key.pub tfs@10.0.2.10\n  # tfs@10.0.2.10's password: &lt;type tfs user's password: tfs123&gt;\nrm .ssh/known_hosts \n</code></pre> <ul> <li>In VSCode, click left \"Explorer\" panel to expand, if not expanded, and click \"Open Folder\" button.</li> <li>Choose \"/home/tfs/\"</li> <li>Type tfs user's password when asked</li> <li>Trust authors of the \"/home/tfs [SSH: TFS-VM]\" folder when asked</li> <li>Right click on the file \"tfs-vm.key\" in the file explorer</li> <li>Select \"Download...\" option</li> <li>Download the file into your user's accout \".ssh\" folder</li> <li> <p>Delete files \"tfs-vm.key\" and \"tfs-vm.key.pub\" on the TFS-VM.</p> </li> <li> <p>In VSCode, click left \"Remote Explorer\" panel to expand</p> </li> <li>Click the \"gear\" icon next to \"SSH TARGETS\" on top of \"Remote Explorer\" bar</li> <li>Choose to edit \"&lt;...&gt;/.ssh/config\" file (or equivalent)</li> <li>Find entry \"Host TFS-VM\" and update it as follows:</li> </ul> <pre><code>Host TFS-VM\n    HostName 127.0.0.1\n    Port 2200\n    ForwardX11 no\n    User tfs\n    IdentityFile \"&lt;path to the downloaded identity private key file&gt;\"\n</code></pre> <ul> <li>Save the file</li> <li>From now, VSCode will use the identity file to connect to the TFS-VM instead of the user's password.</li> </ul> Install VSCode Python Extension (in VSCode server) <p> This step installs Python extensions in VSCode server running in the VM.</p> <ul> <li>In VSCode (connected to the VM), click left button \"Extensions\"</li> <li>Search \"Python\" extension in the extension Marketplace.</li> <li> <p>Install official \"Python\" extension released by Microsoft.</p> <ul> <li>By default, since you're connected to the VM, it will be installed in the VSCode server running in the VM.</li> </ul> </li> <li> <p>In VSCode (connected to the VM), click left button \"Explorer\"</p> </li> <li>Click \"Ctrl+Alt+P\" and type \"Python: Select Interpreter\". Select option \"Python: 3.9.13 64-bit ('tfs')\"</li> </ul> Define environment variables for VSCode <p> The source code in the TFS controller project is hosted in folder <code>src/</code>. To help VSCode find the Python modules and packages, add the following file into your working space root folder:</p> <pre><code>echo \"PYTHONPATH=./src\" &gt;&gt; ~/tfs-ctrl/.env\n</code></pre>"},{"location":"development_guide/development_guide/#23-develop-a-component-wip","title":"2.3. Develop A Component (WIP)","text":"<p>Page under construction</p>"},{"location":"development_guide/configure_environment/configure_environment/","title":"Configure environment","text":"<ul> <li>2.1.1. Python</li> <li>2.1.2. Java (Quarkus)</li> <li>2.1.3. Java (Maven)</li> <li>2.1.4. Rust</li> <li>2.1.5. Erlang</li> <li>2.1.6. Kotlin</li> </ul>"},{"location":"development_guide/configure_environment/java_quarkus/","title":"Java quarkus","text":"<p>This section describe the steps needed to create a development environment for TFS components implemented in Java. Currently, ZTP and Policy components have been developed in Java (version 11) and use the Quarkus framework, which enables kubernetes-native development.</p>"},{"location":"development_guide/configure_environment/java_quarkus/#install-jdk","title":"Install JDK","text":"<p>To begin, make sure that you have java installed and in the correct version</p> <pre><code>java --version\n</code></pre> <p>If you don't have java installed you will get an error like the following:</p> <pre><code>Command 'java' not found, but can be installed with:\n\nsudo apt install default-jre              # version 2:1.11-72build1, or\nsudo apt install openjdk-11-jre-headless  # version 11.0.14+9-0ubuntu2\nsudo apt install openjdk-17-jre-headless  # version 17.0.2+8-1\nsudo apt install openjdk-18-jre-headless  # version 18~36ea-1\nsudo apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1\n</code></pre> <p>In which case you should use the following command to install the correct version:</p> <pre><code>sudo apt install openjdk-11-jre-headless\n</code></pre> <p>Else you should get something like the following:</p> <pre><code>openjdk 11.0.18 2023-01-17\nOpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1)\nOpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1, mixed mode, sharing)\n</code></pre>"},{"location":"development_guide/configure_environment/java_quarkus/#compiling-and-testing-existing-components","title":"Compiling and testing existing components","text":"<p>In the root directory of the existing Java components you will find an executable maven wrapper named <code>mvnw</code>. You could use this executable, which is already configured in pair with the components, instead of your local maven installation. So for example if you want to compile the project you would run the following:</p> <pre><code>./mvnw compile\n</code></pre>"},{"location":"development_guide/configure_environment/java_quarkus/#vs-code-quarkus-plugin","title":"VS Code Quarkus plugin","text":"<p>In case you are using VS Code for development, we suggest to install the official Quarkus extension. The extension should be able to automatically find the current open project and integrate with the above <code>mvnw</code> maven wrapper, making it easier to control the maven lifecycle. Make sure that you open the specific component directory (i.e., <code>src/ztp</code> or <code>src/policy</code>) and not the general controller one (i.e., <code>src</code>.</p>"},{"location":"development_guide/configure_environment/java_quarkus/#new-java-tfs-component","title":"New Java TFS component","text":""},{"location":"development_guide/configure_environment/java_quarkus/#sample-project","title":"Sample Project","text":"<p>If you want to create a new TFS component written in Java you could generate a new Quarkus project based on the following project:</p> <p>TFS Sample Quarkus Project</p> <p>In that way, you should have most of the libraries you would need to integrate with the rest of the TFS Components. Feel free however to add or remove libraries depending on your needs.</p>"},{"location":"development_guide/configure_environment/java_quarkus/#initial-setup","title":"Initial setup","text":"<p>If you used the sample project above, you should have a project with a basic structure. However there are some steps that you should take before starting development.</p> <p>First make sure that you copy the protobuff files, that are found in the root directory of the TFS SDN controller, to the <code>new-component/src/main/proto</code> directory.</p> <p>Next you should create the following files: * <code>new-component/.gitlab-ci.yml</code> * <code>new-component/Dockerfile</code> * <code>new-component/src/resources/application.yaml</code></p> <p>We suggest to copy the respective files from existing components (Automation and Policy) and change them according to your needs.</p>"},{"location":"development_guide/configure_environment/python/","title":"Python","text":"<p>This section describes how to configure the Python environment to run experiments and  develop code for the ETSI TeraFlowSDN controller. In particular, we use PyEnv to install the appropriate  version of Python and manage the virtual environments.</p>"},{"location":"development_guide/configure_environment/python/#upgrade-the-ubuntu-distribution","title":"Upgrade the Ubuntu distribution","text":"<p>Skip this step if you already did it during the installation of your machine.</p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre>"},{"location":"development_guide/configure_environment/python/#install-pyenv-dependencies","title":"Install PyEnv dependencies","text":"<pre><code>sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget \\\n    curl llvm git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev\n</code></pre>"},{"location":"development_guide/configure_environment/python/#install-pyenv","title":"Install PyEnv","text":"<p>We recommend installing PyEnv through PyEnv Installer. Below you can find the instructions, but we refer you to the link for updated  instructions.</p> <pre><code>curl https://pyenv.run | bash\n# When finished, edit ~/.bash_profile // ~/.profile // ~/.bashrc as the installer proposes.\n# In general, it means to append the following lines to ~/.bashrc:\nexport PYENV_ROOT=\"$HOME/.pyenv\"\ncommand -v pyenv &gt;/dev/null || export PATH=\"$PYENV_ROOT/bin:$PATH\"\neval \"$(pyenv init -)\"\neval \"$(pyenv virtualenv-init -)\"\n</code></pre> <p>In case .bashrc is not linked properly to your profile, you may need to append the  following line into your local .profile file:</p> <pre><code># Open ~/.profile and append this line:\n+source \"$HOME\"/.bashrc\n</code></pre>"},{"location":"development_guide/configure_environment/python/#restart-the-machine","title":"Restart the machine","text":"<p>Restart the machine for all the changes to take effect.</p> <pre><code>sudo reboot\n</code></pre>"},{"location":"development_guide/configure_environment/python/#install-python-39-over-pyenv","title":"Install Python 3.9 over PyEnv","text":"<p>ETSI TeraFlowSDN uses Python 3.9 by default. You should install the latest stable update of Python 3.9, i.e., avoid \"-dev\" versions. To find the latest version available in PyEnv, you can run the following command:</p> <pre><code>pyenv install --list | grep \" 3.9\"\n</code></pre> <p>At the time of writing, this command will output the following list:</p> <pre><code>  3.9.0\n  3.9-dev\n  3.9.1\n  3.9.2\n  3.9.4\n  3.9.5\n  3.9.6\n  3.9.7\n  3.9.8\n  3.9.9\n  3.9.10\n  3.9.11\n  3.9.12\n  3.9.13\n  3.9.14 \n  3.9.15\n  3.9.16 ** always select the latest version **\n</code></pre> <p>Therefore, the latest stable version is Python 3.9.16. To install this version, you should run:</p> <pre><code>pyenv install 3.9.16\n    # This command might take some minutes depending on your Internet connection speed \n    # and the performance of your machine.\n</code></pre>"},{"location":"development_guide/configure_environment/python/#create-the-virtual-environment-for-teraflowsdn","title":"Create the Virtual Environment for TeraFlowSDN","text":"<p>The following commands create a virtual environment named as <code>tfs</code> using Python 3.9 and  associate that environment with the current folder, i.e., <code>~/tfs-ctrl</code>. That way, when you are in that folder, the associated virtual environment will be used,  thus inheriting the Python interpreter, i.e., Python 3.9, and the Python packages  installed on it.</p> <pre><code>cd ~/tfs-ctrl\npyenv virtualenv 3.9.16 tfs\npyenv local 3.9.16/envs/tfs\n</code></pre> <p>After completing these commands, you should see in your prompt that now you're within  the virtual environment <code>3.9.16/envs/tfs</code> on folder <code>~/tfs-ctrl</code>:</p> <pre><code>(3.9.16/envs/tfs) tfs@tfs-vm:~/tfs-ctrl$\n</code></pre> <p>In case that the correct pyenv does not get automatically activated when you change to  the tfs-ctrl/ folder, then execute the following command:</p> <pre><code>cd ~/tfs-ctrl\npyenv activate 3.9.16/envs/tfs\n</code></pre>"},{"location":"development_guide/configure_environment/python/#install-the-basic-python-packages-within-the-virtual-environment","title":"Install the basic Python packages within the virtual environment","text":"<p>From within the <code>3.9.16/envs/tfs</code> environment on folder <code>~/tfs-ctrl</code>, run the following  commands to install the basic Python packages required to work with TeraFlowSDN.</p> <pre><code>cd ~/tfs-ctrl\n./install_requirements.sh\n</code></pre> <p>Some dependencies require to re-load the session, so log-out and log-in again.</p>"},{"location":"development_guide/configure_environment/python/#generate-the-python-code-from-the-grpc-proto-messages-and-services","title":"Generate the Python code from the gRPC Proto messages and services","text":"<p>The components, e.g., microservices, of the TeraFlowSDN controller, in general, use a gRPC-based open API to interoperate. All the protocol definitions can be found in sub-folder <code>proto</code> within the root project folder. For additional details on gRPC, visit the official web-page gRPC.</p> <p>In order to interact with the components, (re-)generate the Python code from gRPC definitions running the following command:</p> <pre><code>cd ~/tfs-ctrl\nproto/generate_code_python.sh\n</code></pre>"},{"location":"testing/postman/","title":"Postman","text":"<p>In this section we can use Postman to publish an API as a provider and use it as an invoker.</p>"},{"location":"testing/postman/#requisites","title":"Requisites","text":"<ul> <li>We will need to have Node.js installed since we will use a small script to create the CSRs of the certificates.</li> <li>An instance of CAPIF (If it is not local, certain variables would have to be modified both in the Node.js script and in the Postman environment variables).</li> </ul>"},{"location":"testing/postman/#first-steps","title":"First steps","text":"<ol> <li>Install the Node dependencies package.json to run the script with:</li> </ol> <pre><code>npm i\n</code></pre> <ol> <li>Run the script.js with the following command:</li> </ol> <pre><code>node script.js\n</code></pre> <ol> <li>Import Postman collection and environment variables (CAPIF.postman_collection.json and CAPIF.postman_environment.json)</li> <li>Select CAPIF Environment before start testing.</li> </ol>"},{"location":"testing/postman/#remote-capif","title":"Remote CAPIF","text":"<p>If the CAPIF is not local, the host and port of both the CAPIF and the register would have to be specified in the variables, and the CAPIF_HOSTNAME in the script, necessary to obtain the server certificate.</p> <p>Enviroments in Postman</p> <pre><code>CAPIF_HOSTNAME     capifcore\nCAPIF_PORT         8080\nREGISTER_HOSTNAME  register\nREGISTER_PORT      8084\n</code></pre> <p>Const in script.js</p> <pre><code>CAPIF_HOSTNAME    capifcore\n</code></pre>"},{"location":"testing/postman/#capif-flows","title":"CAPIF Flows","text":"<p>Once the first steps have been taken, we can now use Postman requests. These requests are numbered in the order that must be followed to obtain everything necessary from CAPIF.</p>"},{"location":"testing/postman/#creation-of-user-by-admin","title":"Creation of User by Admin","text":"<p>The first step would be for an administrator to create a user with which a provider and an invoker will be created. To do this, the admin must log in to obtain the token needed in admin requests.</p>"},{"location":"testing/postman/#01-login_admin","title":"01-Login_admin","text":""},{"location":"testing/postman/#02-creation-of-user","title":"02-Creation of User","text":""},{"location":"testing/postman/#publication-of-an-api","title":"Publication of an API","text":"<p>The next step is to register a provider using the user created by the administrator in order to publish an API.</p>"},{"location":"testing/postman/#03-getauth_provider","title":"03-getauth_provider","text":""},{"location":"testing/postman/#04-onboard_provider","title":"04-onboard_provider","text":"<p>At this point we move on to using certificate authentication in CAPIF. In Postman it is necessary to add the certificates manually and using more than one certificate for the same host as we do in CAPIF complicates things. For this reason, we use the script to overwrite a certificate and a key when it is necessary to have a specific one.</p> <p>To configure go to settings in Postman and open the certificates section. </p> <ul> <li>Here, activate the CA certificates option and add the ca_cert.pem file found in the Responses folder.</li> <li>Adds a client certificate specifying the CAPIF host being used and the files client_cert.crt and client_key.key in the Responses folder.</li> </ul> <p>Once this is done, the node script will be in charge of changing the certificate that is necessary in each request.</p>"},{"location":"testing/postman/#05-publish_api","title":"05-publish_api","text":"<p>Once the api is published, we can start it. In this case we have a test one created in python called hello_api.py that can be executed with the following command:</p> <pre><code>python3 hello_api.py\n</code></pre> <p>The API publication interface is set to localhost with port 8088, so the service must be set up locally. If you wanted to build it on another site, you would have to change the interface description in the body of publish_api.</p> <p>With this the provider part would be finished.</p>"},{"location":"testing/postman/#calling-the-api","title":"Calling the API","text":"<p>Finally, we will create an invoker with the user given by the administrator to be able to use the published api.</p>"},{"location":"testing/postman/#06-getauth_invoker","title":"06-getauth_invoker","text":""},{"location":"testing/postman/#07-onboard_invoker","title":"07-onboard_invoker","text":"<p>At this point we move on to using certificate authentication in CAPIF. If you did not configure the provider's certificates, you would have to do it now.</p>"},{"location":"testing/postman/#08-discover","title":"08-discover","text":""},{"location":"testing/postman/#09-security_context","title":"09-security_context","text":""},{"location":"testing/postman/#10-get_token","title":"10-get_token","text":""},{"location":"testing/postman/#11-call_service","title":"11-call_service","text":"<p>With this, we would have made the API call and finished the flow.</p>"},{"location":"testing/postman/#other-requests","title":"Other requests","text":"<p>Other requests that we have added are the following:</p> <ul> <li>offboard_provider      Performs offboarding of the provider, thereby eliminating the published APIs.</li> <li>offboard_invoker       Offboards the invoker, also eliminating access to the APIs of that invoker.</li> <li>remove_user            Delete the user.</li> <li>refresh_admin_token    Return a new access token to the admin.</li> </ul>"},{"location":"testing/postman/#notes","title":"Notes","text":"<ul> <li>This process is designed to teach how requests are made in Postman and the flow that should be followed to publish and use an API.</li> <li>It is possible that if external CAPIFs are used (Public CAPIF) the test data may already be used or the API already registered.</li> <li>It is necessary to have the Node service running to make the certificate change for the requests, otherwise it will not work.</li> <li>We are working on adding more requests to the Postman collection.</li> <li>This collection is a testing guide and is recommended for testing purposes only.</li> </ul>"},{"location":"testing/robotframework/","title":"Robot Framework","text":""},{"location":"testing/robotframework/#steps-to-test","title":"Steps to Test","text":"<p>To run any test locally you will need docker and docker-compose installed in order run services and execute test plan. Steps will be:</p> <ul> <li> <p>Run All Services: See section Run All CAPIF Services</p> </li> <li> <p>Run desired tests: At this point we have 2 options:</p> </li> <li> <p>Using helper script: Script Test Execution</p> </li> <li>Build robot docker image and execute manually robot docker: Manual Build And Test Execution</li> </ul>"},{"location":"testing/robotframework/#script-test-execution","title":"Script Test Execution","text":"<p>This script will build robot docker image if it's need and execute tests selected by \"include\" option. Just go to service folder, execute and follow steps.</p> <pre><code>./run_capif_tests.sh --include &lt;TAG&gt;\n</code></pre> <p>Results will be stored at /results <p>Please check parameters (include) under Test Execution at Manual Build And Test Execution.</p>"},{"location":"testing/robotframework/#mock-server","title":"Mock Server","text":"<p>Some tests on Test Plans require mockserver. That mock server must be deployed and reachable by Robot Framework and CCF under test.</p> <p>To run Mock Server locally you can just execute the next script:</p> <pre><code>cd services\n./run_mock_server.sh\n\nor\n./run.sh -s\n</code></pre> <p>If you want to launch only tests that not needed mockserver, just add \"--exclude mockserver\" parameter to robot execution:</p> <pre><code>./run_capif_tests.sh --include &lt;TAG&gt; --exclude mockserver\n</code></pre> <p>After run tests the Mock Server can be removed from local deployment:</p> <pre><code>./clean_mock_server.sh\n\nor\n./clean_capif_docker_services.sh -s\n</code></pre>"},{"location":"testing/robotframework/#manual-build-and-test-execution","title":"Manual Build And Test Execution","text":"<ul> <li>Build Robot docker image:</li> </ul> <pre><code>cd tools/robot\ndocker build . -t capif-robot-test:latest\n</code></pre> <ul> <li>Tests Execution:</li> </ul> <p>Execute all tests locally:</p> <pre><code>&lt;PATH_TO_REPOSITORY&gt;=path in local machine to repository cloned.\n&lt;PATH_RESULT_FOLDER&gt;=path to a folder on local machine to store results of Robot Framework execution.\n&lt;CAPIF_HOSTNAME&gt;=Is the hostname set when run.sh is executed, by default it is capifcore.\n&lt;CAPIF_HTTP_PORT&gt;=This is the port to reach when robot framework want to reach CAPIF deployment using http, this should be set to port without TLS set on Nginx, 8080 by default.\n&lt;CAPIF_HTTPS_PORT&gt;=This is the port to be used when we want to use https connection, this should be set to port with TLS set on Nginx, 443 by default\n&lt;CAPIF_REGISTER&gt;=This is the hostname of register service deployed. By default it is register.\n&lt;CAPIF_REGISTER_PORT&gt;=This is the port to be used to reach register service deployed. By default it is 8084.\n&lt;CAPIF_VAULT&gt;=This is the hostname of vault service. By default it is vault.\n&lt;CAPIF_VAULT_PORT&gt;=This is the port to be used to reach vault service. By default it is 8200.\n&lt;CAPIF_VAULT_TOKEN&gt;=Vault token to be used on request through vault. By default it is \"read-ca-token\".\n&lt;MOCK_SERVER_URL&gt;=Setup Mock server url to be used in notifications at tests marked with mockserver tag. By default it is not set.\n\nTo execute all tests run :\ndocker run -ti --rm --network=\"host\" \\\n    --add-host host.docker.internal:host-gateway \\\n    --add-host vault:host-gateway \\\n    --add-host register:host-gateway \\\n    --add-host mock-server:host-gateway \\\n    -v &lt;PATH_TO_REPOSITORY&gt;/tests:/opt/robot-tests/tests \\\n    -v &lt;PATH_RESULT_FOLDER&gt;:/opt/robot-tests/results capif-robot-test:latest  \\\n    --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \\\n    --variable CAPIF_HTTP_PORT:$CAPIF_HTTP_PORT \\\n    --variable CAPIF_HTTPS_PORT:$CAPIF_HTTPS_PORT \\\n    --variable CAPIF_REGISTER:$CAPIF_REGISTER \\\n    --variable CAPIF_REGISTER_PORT:$CAPIF_REGISTER_PORT \\\n    --variable CAPIF_VAULT:$CAPIF_VAULT \\\n    --variable CAPIF_VAULT_PORT:$CAPIF_VAULT_PORT \\\n    --variable CAPIF_VAULT_TOKEN:$CAPIF_VAULT_TOKEN \\\n    --variable MOCK_SERVER_URL:$MOCK_SERVER_URL \\\n    --include all\n</code></pre> <p>Execute specific tests locally:</p> <pre><code>To run more specific tests, for example, only one functionality:\n&lt;TAG&gt;=Select one from list:\n  \"capif_api_acl\",\n  \"capif_api_auditing_service\",\n  \"capif_api_discover_service\",\n  \"capif_api_events\",\n  \"capif_api_invoker_management\",\n  \"capif_api_logging_service\",\n  \"capif_api_provider_management\",\n  \"capif_api_publish_service\",\n  \"capif_security_api\n\nAnd Run:\ndocker run -ti --rm --network=\"host\" \\\n    --add-host host.docker.internal:host-gateway \\\n    --add-host vault:host-gateway \\\n    --add-host register:host-gateway \\\n    --add-host mock-server:host-gateway \\\n    -v &lt;PATH_TO_REPOSITORY&gt;/tests:/opt/robot-tests/tests \\\n    -v &lt;PATH_RESULT_FOLDER&gt;:/opt/robot-tests/results capif-robot-test:latest  \\\n    --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \\\n    --variable CAPIF_HTTP_PORT:$CAPIF_HTTP_PORT \\\n    --variable CAPIF_HTTPS_PORT:$CAPIF_HTTPS_PORT \\\n    --variable CAPIF_REGISTER:$CAPIF_REGISTER \\\n    --variable CAPIF_REGISTER_PORT:$CAPIF_REGISTER_PORT \\\n    --variable CAPIF_VAULT:$CAPIF_VAULT \\\n    --variable CAPIF_VAULT_PORT:$CAPIF_VAULT_PORT \\\n    --variable CAPIF_VAULT_TOKEN:$CAPIF_VAULT_TOKEN \\\n    --variable MOCK_SERVER_URL:$MOCK_SERVER_URL \\\n    --include &lt;TAG&gt;\n</code></pre>"},{"location":"testing/robotframework/#test-result-review","title":"Test result review","text":"<p>In order to Review results after tests, you can check general report at /report.html or if you need more detailed information /log.html, example: <ul> <li> <p>Report: </p> </li> <li> <p>Detailed information: </p> </li> </ul> <p>NOTE: If you need more detail at Robot Framework Logs you can set log level option just adding to command --loglevel DEBUG</p>"},{"location":"testing/testplan/","title":"Test Plan Index","text":"<p>List of Common API Services implemented:</p> <ul> <li>Common Operations</li> <li>Api Invoker Management</li> <li>Api Provider Management</li> <li>Api Publish Service</li> <li>Api Discover Service</li> <li>Api Events Service</li> <li>Api Security Service</li> <li>Api Logging Service</li> <li>Api Auditing Service</li> <li>Api Access Control Policy</li> </ul>"},{"location":"testing/testplan/api_access_control_policy/","title":"Test Plan for CAPIF Api Access Control Policy","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_access_control_policy/#test-case-1-retrieve-acl","title":"Test Case 1: Retrieve ACL","text":"<p>Test ID: capif_api_acl-1</p> <p>Description:</p> <p>This test case will check that an API Provider can retrieve ACL from CAPIF</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>contain only one object.</li> <li>apiInvokerId must match apiInvokerId registered previously.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-2-retrieve-acl-with-2-service-apis-published","title":"Test Case 2: Retrieve ACL with 2 Service APIs published","text":"<p>Test ID: capif_api_acl-2</p> <p>Description:</p> <p>This test case will check that an API Provider can retrieve ACL from CAPIF for 2 different serviceApis published.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had two Service API Published on CAPIF</li> <li>API Invoker had a Security Context for both Service APIs published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1 and service_2</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information for service_1.</li> <li>Provider Get ACL information for service_2.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker for both published APIs</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL for serviceApiId1</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId1}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL for serviceApiId2</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId2}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>contain one object.</li> <li>apiInvokerId must match apiInvokerId registered previously.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-3-retrieve-acl-with-security-context-created-by-two-different-invokers","title":"Test Case 3: Retrieve ACL with security context created by two different Invokers","text":"<p>Test ID: capif_api_acl-3</p> <p>Description:</p> <p>This test case will check that an API Provider can retrieve ACL from CAPIF containing 2 objects.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>Two API Invokers had a Security Context for same Service API published by provider.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1 and service_2</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker for both published APIs</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Repeat previous 3 steps in order to have a new Invoker.</p> </li> <li> <p>Provider Retrieve ACL for serviceApiId</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId1}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain two objects.</li> <li>One object must match with apiInvokerId1 and the other one with apiInvokerId2 an registered previously.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-4-retrieve-acl-filtered-by-api-invoker-id","title":"Test Case 4: Retrieve ACL filtered by api-invoker-id","text":"<p>Test ID: capif_api_acl-4</p> <p>Description:</p> <p>This test case will check that an API Provider can retrieve ACL filtering by apiInvokerId from CAPIF containing 1 objects.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>Two API Invokers had a Security Context for same Service API published by provider.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1 and service_2</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information with query parameter indicating first api-invoker-id.</li> <li>Provider Get ACL information with query parameter indicating second api-invoker-id.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker for both published APIs</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Repeat previous 3 steps in order to have a new Invoker.</p> </li> <li> <p>Provider Retrieve ACL for serviceApiId1</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={apiInvokerId1}</li> <li>Use serviceApiId, aefId and apiInvokerId1</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL for serviceApiId2</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={apiInvokerId2}</li> <li>Use serviceApiId, aefId and apiInvokerId2</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>ACL Response:</p> <ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain one objects.</li> <li>Object must match with apiInvokerId1.</li> </ol> </li> </ol> </li> <li> <p>ACL Response:</p> <ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain one objects.</li> <li>Object must match with apiInvokerId2.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-5-retrieve-acl-filtered-by-supported-features","title":"Test Case 5: Retrieve ACL filtered by supported-features","text":"<p>Test ID: capif_api_acl-5</p> <p>Description:</p> <p>CURRENTLY NOT SUPPORTED FEATURE</p> <p>This test case will check that an API Provider can retrieve ACL filtering by supportedFeatures from CAPIF containing 1 objects.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>Two API Invokers had a Security Context for same Service API published by provider.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1 and service_2</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information with query parameter indicating first supported-features.</li> <li>Provider Get ACL information with query parameter indicating second supported-features.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker for both published APIs</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Repeat previous 3 steps in order to have a new Invoker.</p> </li> <li> <p>Provider Retrieve ACL for serviceApiId</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId1}?aef-id=${aef_id}&amp;supported-features={apiInvokerId1}</li> <li>Use serviceApiId, aefId and apiInvokerId1</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL for serviceApiId</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId1}?aef-id=${aef_id}&amp;supported-features={apiInvokerId2}</li> <li>Use serviceApiId, aefId and apiInvokerId2</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>ACL Response:</p> <ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain one objects.</li> <li>Object must match with supportedFeatures1.</li> </ol> </li> </ol> </li> <li> <p>ACL Response:</p> <ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain one objects.</li> <li>Object must match with supportedFeatures1.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-6-retrieve-acl-with-aef-id-not-valid","title":"Test Case 6: Retrieve ACL with aef-id not valid","text":"<p>Test ID: capif_api_acl-6</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF if aef-id is not valid</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${AEF_ID_NOT_VALID}</li> <li>Use serviceApiId and AEF_ID_NOT_VALID</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {service_api_id}, aef_id: {aef_id}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-7-retrieve-acl-with-service-id-not-valid","title":"Test Case 7: Retrieve ACL with service-id not valid","text":"<p>Test ID: capif_api_acl-7</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF if service-api-id is not valid</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${NOT_VALID_SERVICE_API_ID}?aef-id=${aef_id}</li> <li>Use NOT_VALID_SERVICE_API_ID and aef_id</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {service_api_id}, aef_id: {aef_id}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-8-retrieve-acl-with-service-api-id-and-aef-id-not-valid","title":"Test Case 8: Retrieve ACL with service-api-id and aef-id not valid","text":"<p>Test ID: capif_api_acl-8</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF if service-api-id and aef-id are not valid</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${NOT_VALID_SERVICE_API_ID}?aef-id=${AEF_ID_NOT_VALID}</li> <li>Use NOT_VALID_SERVICE_API_ID and aef_id</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {NOT_VALID_SERVICE_API_ID}, aef_id: {AEF_ID_NOT_VALID}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-9-retrieve-acl-without-securitycontext-created-previously-by-invoker","title":"Test Case 9: Retrieve ACL without SecurityContext created previously by Invoker","text":"<p>Test ID: capif_api_acl-9</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL if no invoker had requested Security Context to CAPIF</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker created but no Security Context for Service API published had been requested.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li> <p>Discover published APIs</p> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {NOT_VALID_SERVICE_API_ID}, aef_id: {AEF_ID_NOT_VALID}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-10-retrieve-acl-filtered-by-api-invoker-id-not-present","title":"Test Case 10: Retrieve ACL filtered by api-invoker-id not present","text":"<p>Test ID: capif_api_acl-10</p> <p>Description:</p> <p>This test case will check that an API Provider get not found response if filter by not valid api-invoker-id doesn't match any registered ACL.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={NOT_VALID_API_INVOKER_ID}</li> <li>Use serviceApiId, aefId and NOT_VALID_API_INVOKER_ID</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {NOT_VALID_SERVICE_API_ID}, aef_id: {AEF_ID_NOT_VALID}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-11-retrieve-acl-with-apf-certificate","title":"Test Case 11: Retrieve ACL with APF Certificate","text":"<p>Test ID: capif_api_acl-11</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF using APF Certificate</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use APF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-12-retrieve-acl-with-amf-certificate","title":"Test Case 12: Retrieve ACL with AMF Certificate","text":"<p>Test ID: capif_api_acl-12</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF using AMF Certificate</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AMF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-13-retrieve-acl-with-invoker-certificate","title":"Test Case 13: Retrieve ACL with Invoker Certificate","text":"<p>Test ID: capif_api_acl-13</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF using Invoker Certificate</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-14-no-acl-for-invoker-after-be-removed","title":"Test Case 14: No ACL for invoker after be removed","text":"<p>Test ID: capif_api_acl-14</p> <p>Description:</p> <p>This test case will check that ACLs are removed after invoker is removed.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published and ACL is present</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information of invoker.</li> <li>Remove Invoker from CAPIF.</li> <li>Provider Get ACL information of invoker.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={api-invoker-id}</li> <li>Use serviceApiId, aefId and api-invoker-id</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li>Remove Invoker from CAPIF</li> <li>Provider Retrieve ACL<ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={api-invoker-id}</li> <li>Use serviceApiId, aefId and api-invoker-id</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:   1. ACL Response:      1. 200 OK Response.      2. body returned must accomplish AccessControlPolicyList data structure.      3. apiInvokerPolicies must:         1. contain only one object.         2. apiInvokerId must match apiInvokerId registered previously.</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {NOT_VALID_SERVICE_API_ID}, aef_id: {AEF_ID_NOT_VALID}, invoker: None and supportedFeatures: None\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/","title":"Test Plan for CAPIF Api Auditing Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_auditing_service/#test-case-1-get-capif-log-entry","title":"Test Case 1: Get CAPIF Log Entry.","text":"<p>Test ID: capif_api_auditing-1</p> <p>Description:</p> <p>This test case will check that a CAPIF AMF can get log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> <li>Log Entry exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry   4. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Create Log Entry:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs?aef-id={aefId}&amp;api-invoker-id={api-invoker-id}</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>200 OK</li> <li>Response Body must follow InvocationLog data structure with:<ul> <li>aefId</li> <li>apiInvokerId</li> <li>logs</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/#test-case-2-get-capif-log-entry-with-no-log-entry-in-capif","title":"Test Case 2: Get CAPIF Log Entry With no Log entry in CAPIF.","text":"<p>Test ID: capif_api_auditing-2</p> <p>Description:</p> <p>This test case will check that a CAPIF AEF can create log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs?aef-id={aefId}&amp;api-invoker-id={api-invoker-id}</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found Log Entry in CAPIF\".</li> <li>cause with message \"Not Exist Logs with the filters applied\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/#test-case-3-get-capif-log-entry-without-aef-id-and-api-invoker-id","title":"Test Case 3: Get CAPIF Log Entry without aef-id and api-invoker-id.","text":"<p>Test ID: capif_api_auditing-3</p> <p>Description:</p> <p>This test case will check that a CAPIF AEF can create log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is no pre-authorised (has no valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> <li>Log Entry exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry   4. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Create Log Entry:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>400 Bad Request</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 400</li> <li>title with message \"Bad Request\"</li> <li>detail with message \"aef_id and api_invoker_id parameters are mandatory\".</li> <li>cause with message \"Mandatory parameters missing\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/#test-case-4-get-capif-log-entry-with-filtter-api-version","title":"Test Case 4: Get CAPIF Log Entry with filtter api-version.","text":"<p>Test ID: capif_api_auditing-4</p> <p>Description:</p> <p>This test case will check that a CAPIF AMF can get log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> <li>Log Entry exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry   4. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Create Log Entry:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs?aef-id={aefId}&amp;api-invoker-id={api-invoker-id}&amp;api-version={v1}</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>200 OK</li> <li>Response Body must follow InvocationLog data structure with:<ul> <li>aefId</li> <li>apiInvokerId</li> <li>logs</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/#test-case-5-get-capif-log-entry-with-filter-api-version-but-not-exist-in-log-entry","title":"Test Case 5: Get CAPIF Log Entry with filter api-version but not exist in log entry.","text":"<p>Test ID: capif_api_auditing-4</p> <p>Description:</p> <p>This test case will check that a CAPIF AMF can get log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> <li>Log Entry exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry   4. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Create Log Entry:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs?aef-id={aefId}&amp;api-invoker-id={api-invoker-id}&amp;api-version={v58}</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>detail with message \"Parameters do not match any log entry\"</li> <li>cause with message \"No logs found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/","title":"Test Plan for CAPIF Discover Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_discover_service/#test-case-1-discover-published-service-apis-by-authorised-api-invoker","title":"Test Case 1: Discover Published service APIs by Authorised API Invoker","text":"<p>Test ID: capif_api_discover_service-1</p> <p>Description:</p> <p>This test case will check if Network App (Invoker) can discover published service APIs.</p> <p>Pre-Conditions:</p> <ul> <li>Service APIs are published.</li> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs:<ul> <li>Send GET to https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains the API Published previously</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-2-discover-published-service-apis-by-non-authorised-api-invoker","title":"Test Case 2: Discover Published service APIs by Non Authorised API Invoker","text":"<p>Test ID: capif_api_discover_service-2</p> <p>Description:</p> <p>This test case will check that an API Publisher can't discover published APIs because is not authorized.</p> <p>Pre-Conditions:</p> <ul> <li>Service APIs are published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by no invoker entity</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs by no invoker entity:<ul> <li>Send GET to https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Use not Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Discover Request By no invoker entity:</p> <ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"User not authorized\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-3-discover-published-service-apis-by-not-registered-api-invoker","title":"Test Case 3: Discover Published service APIs by not registered API Invoker","text":"<p>Test ID: capif_api_discover_service-3</p> <p>Description:</p> <p>This test case will check that a not registered invoker is forbidden to discover published APIs.</p> <p>Pre-Conditions:</p> <ul> <li>Service APIs are published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Publisher</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs with not valid apiInvoker:<ul> <li>Send GET to https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={INVOKER_NOT_REGISTERED}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Discover Request By Invoker:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"API Invoker does not exist\".</li> <li>cause with message \"API Invoker id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-4-discover-published-service-apis-by-registered-api-invoker-with-1-result-filtered","title":"Test Case 4: Discover Published service APIs by registered API Invoker with 1 result filtered","text":"<p>Test ID: capif_api_discover_service-4</p> <p>Description:</p> <p>This test case will check if Network App (Invoker) can discover published service APIs.</p> <p>Pre-Conditions:</p> <ul> <li>At least 2 Service APIs are published.</li> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 and service_2 at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Discover filtered by api-name service_1 Service APIs by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs filtering by api-name:<ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&amp;api-name=service_1**</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> <li>filter by api-name service_1</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Publish request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains previously registered Service APIs published.</li> </ul> </li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains only Service API published with api-name service_1</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-5-discover-published-service-apis-by-registered-api-invoker-filtered-with-no-match","title":"Test Case 5: Discover Published service APIs by registered API Invoker filtered with no match","text":"<p>Test ID: capif_api_discover_service-5</p> <p>Description:</p> <p>This test case will check if Network App (Invoker) can discover published service APIs.</p> <p>Pre-Conditions:</p> <ul> <li>At least 2 Service APIs are published.</li> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 and service_2 at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Discover filtered by api-name not published Service APIs by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs filtering by api-name not published:<ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&amp;api-name=NOT_VALID_NAME</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> <li>filter by api-name NOT_VALID_NAME</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Publish request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains previously registered Service APIs published.</li> </ul> </li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>404 Not Found response.</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"API Invoker {api_invoker_id} has no API Published that accomplish filter conditions\".</li> <li>cause with message \"No API Published accomplish filter conditions\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-6-discover-published-service-apis-by-registered-api-invoker-not-filtered","title":"Test Case 6: Discover Published service APIs by registered API Invoker not filtered","text":"<p>Test ID: capif_api_discover_service-6</p> <p>Description:</p> <p>This test case will check if Network App (Invoker) can discover published service APIs.</p> <p>Pre-Conditions:</p> <ul> <li>2 Service APIs are published.</li> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 and service_2 at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Discover without filter by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs not filtered:<ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Discover Request By Invoker:</p> <ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains the 2 previously registered Service APIs published.</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/","title":"Test Plan for CAPIF Api Events Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_events_service/#test-case-1-creates-a-new-individual-capif-event-subscription","title":"Test Case 1: Creates a new individual CAPIF Event Subscription.","text":"<p>Test ID: capif_api_events-1</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) can Subscribe to Events</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Event Subscriptions are stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-2-creates-a-new-individual-capif-event-subscription-with-invalid-subscriberid","title":"Test Case 2: Creates a new individual CAPIF Event Subscription with Invalid SubscriberId","text":"<p>Test ID: capif_api_events-2</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) cannot Subscribe to Events without valid SubcriberId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is not pre-authorised (has invalid InvokerId or apfId)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{SUBSCRIBER_NOT_REGISTERED}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker or APF or AEF or AMF Not found\".</li> <li>cause with message \"Subscriber Not Found\".</li> </ul> </li> </ol> </li> <li> <p>Event Subscriptions are not stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-3-deletes-an-individual-capif-event-subscription","title":"Test Case 3: Deletes an individual CAPIF Event Subscription","text":"<p>Test ID: capif_api_events-3</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) can Delete an Event Subscription</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header</li> <li>Remove Event Subscription</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Remove Event Subscription:</p> <ol> <li>Send DELETE to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Event Subscriptions are stored in CAPIF Database</p> </li> <li> <p>Remove Event Subscription:</p> <ol> <li>204 No Content</li> </ol> </li> <li> <p>Event Subscription is not present at CAPIF Database.</p> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-4-deletes-an-individual-capif-event-subscription-with-invalid-subscriberid","title":"Test Case 4: Deletes an individual CAPIF Event Subscription with invalid SubscriberId","text":"<p>Test ID: capif_api_events-4</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) cannot Delete to Events without valid SubcriberId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId).</li> <li>CAPIF subscriber is subscribed to Events.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> <li>Retrieve Location Header with subscriptionId.</li> <li>Remove Event Subscribed with not valid Subscriber.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Remove Event Subcription with not valid subscriber:</p> <ol> <li>Send DELETE to https://{CAPIF_HOSTNAME}/capif-events/v1/{SUBSCRIBER_ID_NOT_VALID}/subscriptions/{subcriptionId}</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Event Subscriptions are stored in CAPIF Database</p> </li> <li> <p>Error Response Body must accomplish with ProblemDetails data structure with:</p> <ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker or APF or AEF or AMF Not found\".</li> <li>cause with message \"Subscriber Not Found\".</li> </ul> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-5-deletes-an-individual-capif-event-subscription-with-invalid-subscriptionid","title":"Test Case 5: Deletes an individual CAPIF Event Subscription with invalid SubscriptionId","text":"<p>Test ID: capif_api_events-5</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) cannot Delete an Event Subscription without valid SubscriptionId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has invalid InvokerId or apfId).</li> <li>CAPIF subscriber is subscribed to Events.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> <li>Retrieve Location Header with subscriptionId.</li> <li>Remove Event Subscribed with not valid Subscriber.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Remove Event Subcription with not valid subscriber:</p> <ol> <li>Send DELETE to to https://{CAPIF_HOSTNAME}/capif-events/v1/{subcriberId}/subscriptions/{SUBSCRIPTION_ID_NOT_VALID}</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Event Subscriptions are stored in CAPIF Database</p> </li> <li>Remove Event Subscription with not valid subscriber:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>detail with message \"Service API not existing\".</li> <li>cause with message \"Event API subscription id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-6-invoker-receives-service-api-invocation-events","title":"Test Case 6: Invoker receives Service API Invocation events","text":"<p>Test ID: capif_api_events-6, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE, receive the notification when AEF Send TO logging service result of invocations to their APIs.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered and published APIs.</li> <li>API Provider had a Service API Published on CAPIF</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register provider and publish one API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover published APIs and extract apiIds and apiNames</li> <li>Subscribe to SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE event filtering by aefId.</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header</li> <li>Emulate Success and Failure on API invocation of provider by Invoker, using Invocation Logs API.</li> </ol> <p>Information of Test:</p> <ol> <li>Perform provider registration</li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform invoker onboarding</p> </li> <li> <p>Discover published APIs:</p> <ul> <li>Get Api Ids And Api Names from response.</li> </ul> </li> <li> <p>Event Subscription to SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE of provider previously registered:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['SERVICE_API_INVOCATION_SUCCESS','SERVICE_API_INVOCATION_FAILURE']</li> <li>eventFilter: only receive events from provider's aefId.</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Create Log Entry emulating provider receive Success and Failure api invocation from invoker:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body with:<ol> <li>aefId from provider published.</li> <li>apiInvokerId from invoker onboarded.</li> <li>apiId of published API</li> <li>apiName of published API</li> <li>200 and 400 results in two logs.</li> </ol> </li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Response to creation of log entry on CCF must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/api-invocation-logs/{apiVersion}/{aefId}/subscriptions/{logId}</li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>Two Events have been received.</li> <li>Validate received events follow EventNotification data structure, with invocationLog in eventDetail parameter.<ol> <li>One should be SERVICE_API_INVOCATION_SUCCESS related with 200 result at Log.</li> <li>The other one must be SERVICE_API_INVOCATION_FAILURE related with 400 result at Log.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-7-invoker-subscribe-to-service-api-available-and-unavailable-events","title":"Test Case 7: Invoker subscribe to Service API Available and Unavailable events","text":"<p>Test ID: capif_api_events-7, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE, receive the notification when AEF publish and remove it. </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered and published APIs.</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register provider and publish one API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover published APIs and extract apiIds and apiNames</li> <li>Subscribe to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE event filtering by aefId.</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header</li> <li>Provider publish new API.</li> <li>Provider remove published API.</li> </ol> <p>Information of Test:</p> <ol> <li>Perform provider registration</li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform invoker onboarding</p> </li> <li> <p>Discover published APIs:</p> <ul> <li>Get Api Ids And Api Names from response.</li> </ul> </li> <li> <p>Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']</li> <li>eventFilter: only receive events from provider's aefId.</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Publish new Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_2</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Remove published Service API at CCF:</p> <ul> <li>Send DELETE to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Mock Server received messages must accomplish:</p> <ol> <li>Two Events have been received.</li> <li>Validate received events follow EventNotification data structure, with apiIds in eventDetail parameter.<ol> <li>One should be SERVICE_API_AVAILABLE apiId of service_2 published API.</li> <li>The other one must be SERVICE_API_UNAVAILABLE apiId of service_1 published API.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-8-invoker-subscribe-to-service-api-update","title":"Test Case 8: Invoker subscribe to Service API Update","text":"<p>Test ID: capif_api_events-8, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to SERVICE_API_UPDATE, receive the notification when AEF Update some information on API Published.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered and published APIs.</li> <li>API Provider had a Service API Published on CAPIF</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider and publish one API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover published APIs and extract apiIds and apiNames</li> <li>Subscribe to SERVICE_API_UPDATE event filtering by aefId.</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header at event subscription</li> <li>Provider update information of Service API Published.</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> <li>Store serviceApiId</li> </ul> </li> <li> <p>Perform invoker onboarding</p> </li> <li> <p>Discover published APIs:</p> <ul> <li>Get Api Ids And Api Names from response.</li> </ul> </li> <li> <p>Event Subscription to SERVICE_API_UPDATE of provider previously registered:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['SERVICE_API_UPDATE']</li> <li>eventFilter: only receive events from provider's aefId.</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Update published API at CCF:</p> <ul> <li>Send PUT to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>body [service api description] with overrided apiName to service_1_modified**</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Response to Update Published Service API:<ol> <li>200 OK</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiName service_1_modified**</li> </ul> </li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>One Event has been received.</li> <li>Validate received events follow EventNotification data structure, with serviceAPIDescriptions in eventDetail parameter.<ol> <li>Event should be SERVICE_API_UPDATE with eventDetail with modified apiName.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-9-provider-subscribe-to-api-invoker-events","title":"Test Case 9: Provider subscribe to API Invoker events","text":"<p>Test ID: capif_api_events-9, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Provider subscribed to API Invoker events (API_INVOKER_ONBOARDED, API_INVOKER_UPDATED and API_INVOKER_OFFBOARDED), receive the notifications when Invoker is onboarded, updated and removed respectively.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered.</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Subscribe Provider to API_INVOKER_ONBOARDED, API_INVOKER_UPDATED and API_INVOKER_OFFBOARDED events.</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Update Onboarding Information at CCF with a minor change on \"notificationDestination\"</li> <li>Offboard Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li>Event Subscription to API_INVOKER_ONBOARDED, API_INVOKER_UPDATED and API_INVOKER_OFFBOARDED events:<ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['API_INVOKER_ONBOARDED', 'API_INVOKER_UPDATED', 'API_INVOKER_OFFBOARDED']</li> </ol> </li> <li>Use Provider AMF Certificate</li> </ol> </li> <li>Perform invoker onboarding</li> <li>Update information of previously onboarded Invoker:<ul> <li>Send PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> <li>Reference Request Body is: [put invoker onboarding body]</li> <li>\"notificationDestination\": \"http://host.docker.internal:8086/netapp_new_callback\",</li> </ul> </li> <li>Offboard:<ul> <li>Send DELETE to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Update Request (PUT) with minor change must contain:<ol> <li>200 OK response.</li> <li>notificationDestination on response must contain the new value</li> </ol> </li> <li>Response to Offboard Request (DELETE) must contain:<ol> <li>204 No Content</li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>Three Events have been received.</li> <li>Validate received events follow EventNotification data structure, with apiInvokerIds in eventDetail parameter.<ol> <li>One Event should be API_INVOKER_ONBOARDED with eventDetail with modified apiInvokerId.</li> <li>One Event should be API_INVOKER_UPDATED with eventDetail with modified apiInvokerId.</li> <li>One Event should be API_INVOKER_OFFBOARDED with eventDetail with modified apiInvokerId.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-10-provider-subscribed-to-acl-update-event","title":"Test Case 10: Provider subscribed to ACL update event","text":"<p>Test ID: capif_api_events-10, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Provider subscribed to ACCESS_CONTROL_POLICY_UPDATE receive a notification when ACL Changes.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered.</li> <li>API Provider had one Service API Published on CAPIF</li> <li>API Invoker had a Security Context for the Service API published by provider.</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF.</li> <li>Publish a provider API with name service_1.</li> <li>Register Invoker and Onboard Invoker at CCF.</li> <li>Subscribe Provider to ACCESS_CONTROL_POLICY_UPDATE event.</li> <li>Discover APIs filtered by aef_id</li> <li>Create Security Context for Invoker.</li> <li>Provider Retrieve ACL</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li>Perform invoker onboarding</li> <li>Event Subscription to ACCESS_CONTROL_POLICY_UPDATE event:<ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['ACCESS_CONTROL_POLICY_UPDATE']</li> <li>eventFilters: apiInvokerIds array with apiInvokerId of invoker</li> </ol> </li> <li>Use Provider AMF Certificate</li> </ol> </li> <li>Discover published APIs</li> <li>Create Security Context for Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li>Provider Retrieve ACL<ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Create security context:<ol> <li>201 Created response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/capif-security/v1/trustedInvokers/{apiInvokerId}</li> </ol> </li> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>contain only one object.</li> <li>apiInvokerId must match apiInvokerId registered previously.</li> </ol> </li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>One Event has been received.</li> <li>Validate received event follow EventNotification data structure, with accCtrlPolListExt in eventDetail parameter.<ol> <li>One Event should be ACCESS_CONTROL_POLICY_UPDATE with eventDetail with accCtrlPolListExt including the apiId and apiInvokerPolicies.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-11-provider-receives-an-acl-unavailable-event-when-invoker-remove-security-context","title":"Test Case 11: Provider receives an ACL unavailable event when invoker remove Security Context.","text":"<p>Test ID: capif_api_events-11, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to ACCESS_CONTROL_POLICY_UNAVAILABLE will receive the notification when AEF remove Security Context created previously.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered.</li> <li>API Provider had one Service API Published on CAPIF</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF.</li> <li>Publish a provider API with name service_1.</li> <li>Register Invoker and Onboard Invoker at CCF.</li> <li>Subscribe Invoker to ACCESS_CONTROL_POLICY_UNAVAILABLE event.</li> <li>Discover APIs filtered by aef_id</li> <li>Create Security Context for Invoker.</li> <li>Provider Retrieve ACL.</li> <li>Remove Security Context for Invoker.</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li>Perform invoker onboarding</li> <li>Event Subscription to ACCESS_CONTROL_POLICY_UNAVAILABLE event:<ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['ACCESS_CONTROL_POLICY_UNAVAILABLE']</li> <li>eventFilters: apiInvokerIds array with apiInvokerId of invoker</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li>Discover published APIs</li> <li>Create Security Context for Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li>Provider Retrieve ACL<ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li>Delete Security Context of Invoker by Provider:<ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Use AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Create security context:<ol> <li>201 Created response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/capif-security/v1/trustedInvokers/{apiInvokerId}</li> </ol> </li> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>contain only one object.</li> <li>apiInvokerId must match apiInvokerId registered previously.</li> </ol> </li> </ol> </li> <li>Delete security context:<ol> <li>204 No Content response.</li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>One Event has been received.</li> <li>Validate received event follow EventNotification data structure, without eventDetail parameter.<ol> <li>One Event should be ACCESS_CONTROL_POLICY_UNAVAILABLE without eventDetail.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-12-invoker-receives-an-invoker-authorization-revoked-and-acl-unavailable-event-when-provider-revoke-invoker-authorization","title":"Test Case 12: Invoker receives an Invoker Authorization Revoked and ACL unavailable event when Provider revoke Invoker Authorization.","text":"<p>Test ID: capif_api_events-12, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to API_INVOKER_AUTHORIZATION_REVOKED and ACCESS_CONTROL_POLICY_UNAVAILABLE receive both notification when AEF revoke invoker's authorization.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered.</li> <li>API Provider had one Service API Published on CAPIF</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF.</li> <li>Publish a provider API with name service_1.</li> <li>Register Invoker and Onboard Invoker at CCF.</li> <li>Subscribe Invoker to ACCESS_CONTROL_POLICY_UNAVAILABLE and API_INVOKER_AUTHORIZATION_REVOKED events.</li> <li>Discover APIs filtered by aef_id</li> <li>Create Security Context for Invoker.</li> <li>Revoke Authorization by Provider.</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li>Perform invoker onboarding</li> <li>Event Subscription to ACCESS_CONTROL_POLICY_UNAVAILABLE and API_INVOKER_AUTHORIZATION_REVOKED event:<ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['ACCESS_CONTROL_POLICY_UNAVAILABLE','API_INVOKER_AUTHORIZATION_REVOKED']</li> <li>eventFilters: apiInvokerIds array with apiInvokerId of invoker</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li>Discover published APIs</li> <li>Create Security Context for Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li>Revoke Authorization by Provider:<ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/delete</li> <li>body security notification body</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Create security context:<ol> <li>201 Created response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/capif-security/v1/trustedInvokers/{apiInvokerId}</li> </ol> </li> <li>Revoke Authorization:<ol> <li>204 No Content response.</li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>Two Events has been received.</li> <li>Validate received event follow EventNotification data structure, without eventDetail parameter.<ol> <li>One Event should be ACCESS_CONTROL_POLICY_UNAVAILABLE without eventDetail.</li> <li>One Event should be API_INVOKER_AUTHORIZATION_REVOKED without eventDetail.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_invoker_management/","title":"Test Plan for CAPIF Api Invoker Management","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_invoker_management/#test-case-1-onboard-network-app","title":"Test Case 1: Onboard Network App","text":"<p>Test ID: capif_api_invoker_management-1</p> <p>Description:</p> <p>This test will try to register new Network App at CAPIF Core.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was not registered previously</li> <li>Network App was not onboarded previously</li> <li>Preconditions: The administrator must have previously registered the User.</li> </ul> <p>Execution Steps:</p> <ol> <li>Retrieve access_token by User from register</li> <li>Onboard Invoker at CCF</li> <li>Store signed Certificate</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at invoker</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Onboard Invoker:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers</li> <li>Reference Request Body: invoker onboarding body</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>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_invoker_management/#test-case-2-onboard-network-app-already-onboarded","title":"Test Case 2: Onboard Network App Already onboarded","text":"<p>Test ID: capif_api_invoker_management-2</p> <p>Description:</p> <p>This test will check second onboard of same Network App is not allowed.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was onboarded previously</li> </ul> <p>Execution Steps:</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>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Repeat Onboard Invoker:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers</li> <li>Reference Request Body: invoker onboarding body</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>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Second Onboard of Network App must accomplish:<ol> <li>403 Forbidden</li> <li>Error Response Body must accomplish with ProblemDetails 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>"},{"location":"testing/testplan/api_invoker_management/#test-case-3-update-onboarded-network-app","title":"Test Case 3: Update Onboarded Network App","text":"<p>Test ID: capif_api_invoker_management-3</p> <p>Description:</p> <p>This test will try to update information of previous onboard Network App at CAPIF Core.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</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>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Update information of previously onboarded Invoker:</p> <ul> <li>Send PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> <li>Reference Request Body is: [put invoker onboarding body]</li> <li>\"notificationDestination\": \"http://host.docker.internal:8086/netapp_new_callback\",</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Update Request (PUT) with minor change must contain:<ol> <li>200 OK response.</li> <li>notificationDestination on response must contain the new value</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_invoker_management/#test-case-4-update-not-onboarded-network-app","title":"Test Case 4: Update Not Onboarded Network App","text":"<p>Test ID: capif_api_invoker_management-4</p> <p>Description:</p> <p>This test will try to update information of not onboarded Network App at CAPIF Core.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was not onboarded previously</li> </ul> <p>Execution Steps:</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>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Update information of not onboarded Invoker:</p> <ul> <li>Send PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{INVOKER_NOT_REGISTERED}</li> <li>Reference Request Body is: [put invoker onboarding body]</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> </ol> </li> <li>Response to Update Request (PUT) must contain:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails 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>"},{"location":"testing/testplan/api_invoker_management/#test-case-5-offboard-network-app","title":"Test Case 5: Offboard Network App","text":"<p>Test ID: capif_api_invoker_management-5</p> <p>Description:</p> <p>This test case will check that a Registered Network App can be deleted.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was onboarded previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker at CCF</li> <li>Onboard Invoker at CCF</li> <li>Offboard Invoker at CCF</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Offboard:</p> <ul> <li>Send DELETE to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> </ol> </li> <li>Response to Offboard Request (DELETE) must contain:<ol> <li>204 No Content</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_invoker_management/#test-case-6-offboard-not-previsouly-onboarded-network-app","title":"Test Case 6: Offboard Not previsouly Onboarded Network App","text":"<p>Test ID: capif_api_invoker_management-6</p> <p>Description:</p> <p>This test case will check that a Non-Registered Network App cannot be deleted</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was not onboarded previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker at CCF</li> <li>Offboard Invoker at CCF</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Offboard:</p> <ul> <li>Send DELETE to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{INVOKER_NOT_REGISTERED}</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Offboard Request (DELETE) must contain:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails 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>"},{"location":"testing/testplan/api_invoker_management/#test-case-7-update-onboarded-network-app-certificate","title":"Test Case 7: Update Onboarded Network App Certificate","text":"<p>Test ID: capif_api_invoker_management-7</p> <p>Description:</p> <p>This test will try to update public key and get a new signed certificate by CAPIF Core.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId} and {public_key_1}</li> </ul> <p>Execution Steps:</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>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding 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 PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</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> <p>Update information of previously onboarded Invoker Using new certificate:</p> <ul> <li>Send PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> <li>Reference Request Body is: [put invoker onboarding body]</li> <li>\"notificationDestination\": \"http://host.docker.internal:8086/netapp_new_callback\",</li> <li>Use new Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Update Request (PUT) with new public key:<ol> <li>200 OK response.</li> <li>apiInvokerCertificate with new certificate on response -&gt; store to use.</li> </ol> </li> <li>Response to Update Request (PUT) with minor change must contain:<ol> <li>200 OK response.</li> <li>notificationDestination on response must contain the new value</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_logging_service/","title":"Test Plan for CAPIF Api Logging Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_logging_service/#test-case-1-creates-a-new-individual-capif-log-entry","title":"Test Case 1: Creates a new individual CAPIF Log Entry.","text":"<p>Test ID: capif_api_logging-1</p> <p>Description:</p> <p>This test case will check that a CAPIF AEF can create log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid aefId from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow InvocationLog data structure with:<ul> <li>aefId</li> <li>apiInvokerId</li> <li>logs</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invocation-logs/v1/{aefId}/logs/{logId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_logging_service/#test-case-2-creates-a-new-individual-capif-log-entry-with-invalid-aefid","title":"Test Case 2:  Creates a new individual CAPIF Log Entry with Invalid aefId","text":"<p>Test ID: capif_api_logging-2</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (AEF) cannot create Log Entry without valid aefId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is not pre-authorised (has not valid aefId from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{not-valid-aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Exposer not exist\".</li> <li>cause with message \"Exposer id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_logging_service/#test-case-3-creates-a-new-individual-capif-log-entry-with-invalid-serviceapi","title":"Test Case 3:  Creates a new individual CAPIF Log Entry with Invalid serviceAPI","text":"<p>Test ID: capif_api_logging-3</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (AEF) cannot create Log Entry without valid aefId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid aefId from CAPIF Authority)</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body [log entry request body with serviceAPI apiName apiId not valid]</li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not exist\".</li> <li>cause with message \"Invoker id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_logging_service/#test-case-4-creates-a-new-individual-capif-log-entry-with-invalid-apiinvokerid","title":"Test Case 4:  Creates a new individual CAPIF Log Entry with Invalid apiInvokerId","text":"<p>Test ID: capif_api_logging-4</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (AEF) cannot create Log Entry without valid aefId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid aefId from CAPIF Authority)</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body [log entry request body with invokerId not valid]</li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure.</li> <li>For each apiProvFuncs, we must check:<ol> <li>apiProvFuncId is set</li> <li>apiProvCert under regInfo is set properly</li> </ol> </li> <li>Location Header must contain the new resource URL {apiRoot}/api-provider-management/v1/registrations/{registrationId}</li> </ol> </li> <li> <p>Response to Logging Service must accomplish:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not exist\".</li> <li>cause with message \"Invoker id not found\".</li> </ul> </li> </ol> </li> <li> <p>Log Entry are not stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_logging_service/#test-case-5-creates-a-new-individual-capif-log-entry-with-invalid-aefid-in-body","title":"Test Case 5:  Creates a new individual CAPIF Log Entry with Invalid aefId in body","text":"<p>Test ID: capif_api_logging-5</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (AEF) cannot create Log Entry without valid aefId in body</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body [log entry request body with bad aefId] </li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"AEF id not matching in request and body\".</li> <li>cause with message \"Not identical AEF id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/","title":"Test Plan for CAPIF Api Provider Management","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_provider_management/#test-case-1-register-api-provider","title":"Test Case 1: Register Api Provider","text":"<p>Test ID: capif_api_provider_management-1</p> <p>Description:</p> <p>This test case will check that Api Provider can be registered con CCF</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid certificate from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Create private and public key for provider and each function to register.</li> <li>Register Provider.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Register Provider at Provider Management:<ol> <li>201 Created response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure.</li> <li>For each apiProvFuncs, we must check:<ol> <li>apiProvFuncId is set</li> <li>apiProvCert under regInfo is set properly</li> </ol> </li> <li>Location Header must contain the new resource URL {apiRoot}/api-provider-management/v1/registrations/{registrationId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-2-register-api-provider-already-registered","title":"Test Case 2: Register Api Provider Already registered","text":"<p>Test ID: capif_api_provider_management-2</p> <p>Description:</p> <p>This test case will check that a Api Provider previously registered cannot be re-registered</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was registered previously and there is a {registerId} for his Api Provider in the DB</li> </ul> <p>Execution Steps:</p> <ol> <li>Create private and public key for provider and each function to register.</li> <li>Register Provider.</li> <li>Re-Register Provider.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Re-Register Provider:</p> <ul> <li>Same regSec than Previous registration</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Re-Register Provider:<ol> <li>403 Forbidden response.</li> <li> <p>body returned must accomplish ProblemDetails data structure, with:</p> <ul> <li>status 403</li> <li>title with message \"Forbidden\"</li> <li>detail with message \"Provider already registered\".</li> <li>cause with message \"Identical provider reg sec\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-3-update-registered-api-provider","title":"Test Case 3: Update Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-3</p> <p>Description:</p> <p>This test case will check that a Registered Api Provider can be updated</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was registered previously and there is a {registerId} for his Api Provider in the DB</li> </ul> <p>Execution Steps:</p> <ol> <li>Create private and public key for provider and each function to register.</li> <li>Register Provider</li> <li>Update Provider</li> </ol> <p>Information of Test:</p> <ol> <li>Create public and private key at provider for provider itself and each function (apf, aef and amf)</li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Get Resource URL from Location</li> </ul> </li> <li> <p>Update Provider:</p> <ul> <li>Send PUT to Resource URL returned at registration https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{registrationId}</li> <li>body provider request body with apiProvDomInfo set to ROBOT_TESTING_MOD</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Register Provider:</p> <ol> <li>201 Created response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/api-provider-management/v1/registrations/{registrationId}</li> </ol> </li> <li> <p>Update Provider:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure, with:<ul> <li>apiProvDomInfo set to ROBOT_TESTING_MOD</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-4-update-not-registered-api-provider","title":"Test Case 4: Update Not Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-4</p> <p>Description:</p> <p>This test case will check that a Non-Registered Api Provider cannot be updated</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was not registered previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Update Not Registered Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Update Not Registered Provider:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{API_PROVIDER_NOT_REGISTERED}</li> <li>body provider request body</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Update Not Registered Provider:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Not Exist Provider Enrolment Details\".</li> <li>cause with message \"Not found registrations to Send THIS api provider details\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-5-partially-update-registered-api-provider","title":"Test Case 5: Partially Update Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-5</p> <p>Description:</p> <p>This test case will check that a Registered Api Provider can be partially updated</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was registered previously and there is a {registerId} for his Api Provider in the DB</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Register Provider</li> <li>Partial update provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Partial update provider:</p> <ul> <li>Send PATCH https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{registrationId}</li> <li>body provider request patch body</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Partial update provider at Provider Management:<ol> <li>200 OK response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure, with:<ul> <li>apiProvDomInfo with \"ROBOT_TESTING_MOD\"</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-6-partially-update-not-registered-api-provider","title":"Test Case 6: Partially Update Not Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-6</p> <p>Description:</p> <p>This test case will check that a Non-Registered Api Provider cannot be partially updated  </p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was not registered previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Register Provider</li> <li>Partial update provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Partial update Provider:</p> <ul> <li>Send PATCH https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{API_API_PROVIDER_NOT_REGISTERED}</li> <li>body provider request patch body</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Partial update provider:<ol> <li>404 Not Found response.</li> <li> <p>body returned must accomplish ProblemDetails data structure, with:</p> <ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Not Exist Provider Enrolment Details\".</li> <li>cause with message \"Not found registrations to Send THIS api provider details\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-7-delete-registered-api-provider","title":"Test Case 7: Delete Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-7</p> <p>Description:</p> <p>This test case will check that a Registered Api Provider can be deleted</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was registered previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Register Provider</li> <li>Delete Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Delete registered provider:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{registrationId}</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Delete Provider:<ol> <li>204 No Content response.</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-8-delete-not-registered-api-provider","title":"Test Case 8: Delete Not Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-8</p> <p>Description:</p> <p>This test case will check that a Non-Registered Api Provider cannot be deleted</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was not registered previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Delete Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Delete registered provider at Provider Management:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{API_PROVIDER_NOT_REGISTERED}</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Delete Provider:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Not Exist Provider Enrolment Details\".</li> <li>cause with message \"Not found registrations to Send THIS api provider details\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/","title":"Test Plan for CAPIF Api Publish Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_publish_service/#test-case-1-publish-api-by-authorised-api-publisher","title":"Test Case 1: Publish API by Authorised API Publisher","text":"<p>Test ID: capif_api_publish_service-1</p> <p>Description:</p> <p>This test case will check that an API Publisher can Publish an API</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li> <p>Register Provider at CCF and store certificates.</p> </li> <li> <p>Publish Service API</p> </li> <li> <p>Retrieve {apiId} from body and Location header with new resource created from response</p> </li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> </li> <li> <p>Send POST to ccf_publish_url: https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</p> </li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Published Service API is stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-2-publish-api-by-non-authorised-api-publisher","title":"Test Case 2: Publish API by NON Authorised API Publisher","text":"<p>Test ID: capif_api_publish_service-2</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Publish an API withot valid apfId </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is NOT pre-authorised (has invalid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API with invalid APF ID</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API with invalid APF ID at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{APF_ID_NOT_VALID}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Publisher not existing\".</li> <li>cause with message \"Publisher id not found\".</li> </ul> </li> </ol> </li> <li> <p>Service API is NOT stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-3-retrieve-all-apis-published-by-authorised-apfid","title":"Test Case 3: Retrieve all APIs Published by Authorised apfId","text":"<p>Test ID: capif_api_publish_service-3</p> <p>Description:</p> <p>This test case will check that an API Publisher can Retrieve all API published</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>At least 2 service APIs are published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API service_1</li> <li>Retrieve {apiId1} from body and Location header with new resource created from response</li> <li>Publish Service API service_2</li> <li>Retrieve {apiId2} from body and Location header with new resource created from response</li> <li>Retrieve All published APIs and check if both are present.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Publish Other Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve all published APIs:</p> <ul> <li>Send GET to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to service 1 Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId1}</li> </ol> </li> <li> <p>Response to service 2 Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId2}</li> </ol> </li> <li> <p>Published Service APIs are stored in CAPIF Database</p> </li> <li> <p>Response to Retrieve all published APIs:</p> <ol> <li>200 OK</li> <li>Response body must return an array of ServiceAPIDescription data.</li> <li>Array must contain all previously published APIs.</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-4-retrieve-all-apis-published-by-non-authorised-apfid","title":"Test Case 4: Retrieve all APIs Published by NON Authorised apfId","text":"<p>Test ID: capif_api_publish_service-4</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Retrieve API published when apfId is not authorised </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is NOT pre-authorised (has invalid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Retrieve All published APIs</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Retrieve all published APIs:</p> <ul> <li>Send GET to https://{CAPIF_HOSTNAME}/published-apis/v1/{APF_ID_NOT_VALID}/service-apis</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>401 Non Authorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Provider not existing\".</li> <li>cause with message \"Provider id not found\".</li> </ul> </li> </ol> </li> <li> <p>Service API is NOT stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-5-retrieve-single-apis-published-by-authorised-apfid","title":"Test Case 5: Retrieve single APIs Published by Authorised apfId","text":"<p>Test ID: capif_api_publish_service-5</p> <p>Description:</p> <p>This test case will check that an API Publisher can Retrieve API published one by one</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>At least 2 service APIs are published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API service_1.</li> <li>Retrieve {apiId1} from body and Location header with new resource created from response.</li> <li>Publish Service API service_2.</li> <li>Retrieve {apiId2} from body and Location header with new resource created from response.</li> <li>Retrieve service_1 API Detail.</li> <li>Retrieve service_2 API Detail.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Publish Other Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve service_1 published APIs detail:</p> <ul> <li>Send GET to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{apiId1}</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve service_2 published APIs detail:</p> <ul> <li>Send GET to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{apiId2}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to service 1 Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId1}</li> </ol> </li> <li> <p>Response to service 2 Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId2}</li> </ol> </li> <li> <p>Published Service APIs are stored in CAPIF Database</p> </li> <li> <p>Response to Retrieve service_1 published API using apiId1:</p> <ol> <li>200 OK</li> <li>Response body must return a ServiceAPIDescription data.</li> <li>Array must contain same information than service_1 published registration response.</li> </ol> </li> <li> <p>Response to Retrieve service_2 published API using apiId2:</p> <ol> <li>200 OK</li> <li>Response body must return a ServiceAPIDescription data.</li> <li>Array must contain same information than service_2 published registration response.</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-6-retrieve-single-apis-non-published-by-authorised-apfid","title":"Test Case 6: Retrieve single APIs non Published by Authorised apfId","text":"<p>Test ID: capif_api_publish_service-6</p> <p>Description:</p> <p>This test case will check that an API Publisher try to get detail of not published api.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>No published api</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Retrieve not published API Detail.</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration</li> <li>Retrieve not published APIs detail:<ul> <li>Send GET to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID_NOT_VALID}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Retrieve for NOT published API must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Service API not found\".</li> <li>cause with message \"No Service with specific credentials exists\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-7-retrieve-single-apis-published-by-non-authorised-apfid","title":"Test Case 7: Retrieve single APIs Published by NON Authorised apfId","text":"<p>Test ID: capif_api_publish_service-7</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Retrieve detailed API published when apfId is not authorised </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is NOT pre-authorised (has invalid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API at CCF</li> <li>Retrieve {apiId} from body and Location header with new resource created from response.</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Invoker Certificate</li> <li>Retrieve detailed published API acting as Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve detailed published APIs:</p> <ul> <li>Send GET to https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/${apiId}</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Retrieve Detailed published API acting as Invoker must accomplish:</p> <ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"User not authorized\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> <li> <p>Service API is NOT stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-8-update-api-published-by-authorised-apfid-with-valid-serviceapiid","title":"Test Case 8: Update API Published by Authorised apfId with valid serviceApiId","text":"<p>Test ID: capif_api_publish_service-8</p> <p>Description:</p> <p>This test case will check that an API Publisher can Update published API with a valid serviceApiId </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>A service APIs is published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API</li> <li>Retrieve {apiId} from body and Location header with new resource url created from response</li> <li>Update published Service API.</li> <li>Retrieve detail of Service API</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>get resource url from location Header.</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Update published API at CCF:</p> <ul> <li>Send PUT to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>body service api description with overrided apiName to service_1_modified</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve detail of service API:</p> <ul> <li>Send GET to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>check apiName is service_1_modified</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Update Published Service API:</p> <ol> <li>200 OK</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiName service_1_modified</li> </ul> </li> </ol> </li> <li> <p>Response to Retrieve detail of Service API:</p> <ol> <li>200 OK</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiName service_1_modified.</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-9-update-apis-published-by-authorised-apfid-with-invalid-serviceapiid","title":"Test Case 9: Update APIs Published by Authorised apfId with invalid serviceApiId","text":"<p>Test ID: capif_api_publish_service-9</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Update published API with a invalid serviceApiId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Update published Service API.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Update published API at CCF:</p> <ul> <li>Send PUT to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID_NOT_VALID}</li> <li>body service api description with overrided apiName to service_1*_modified*</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Update Published Service API:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Service API not found\".</li> <li>cause with message \"Service API id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-10-update-apis-published-by-non-authorised-apfid","title":"Test Case 10: Update APIs Published by NON Authorised apfId","text":"<p>Test ID: capif_api_publish_service-10</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Update API published when apfId is not authorised</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is NOT pre-authorised (has invalid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API at CCF</li> <li>Retrieve {apiId} from body and Location header with new resource created from response.</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Invoker Certificate</li> <li>Update published API at CCF as Invoker</li> <li>Retrieve detail of Service API as publisher</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Update published API at CCF:</p> <ul> <li>Send PUT to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> <li>body service api description with overrided apiName to service_1*_modified*</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Retrieve detail of service API:</p> <ul> <li>Send GET to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>check apiName is service_1</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Update published API acting as Invoker must accomplish:</p> <ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"User not authorized\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> <li> <p>Response to Retrieve Detail of Service API:</p> <ol> <li>200 OK</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiName service_1.</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-11-delete-api-published-by-authorised-apfid-with-valid-serviceapiid","title":"Test Case 11: Delete API Published by Authorised apfId with valid serviceApiId","text":"<p>Test ID: capif_api_publish_service-11</p> <p>Description:</p> <p>This test case will check that an API Publisher can Delete published API with a valid serviceApiId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority).</li> <li>A service APIs is published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API</li> <li>Retrieve {apiId} from body and Location header with new resource created from response</li> <li>Remove published API at CCF</li> <li>Try to retreive deleted service API from CCF</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Remove published Service API at CCF:</p> <ul> <li>Send DELETE to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> <li>Use APF Certificate</li> </ul> </li> <li>Retrieve detail of service API:<ul> <li>Send GET to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Published Service API is stored in CAPIF Database</p> </li> <li> <p>Response to Remove published Service API at CCF:</p> <ol> <li>204 No Content</li> </ol> </li> <li> <p>Response to Retrieve for DELETED published API must accomplish:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Service API not found\".</li> <li>cause with message \"No Service with specific credentials exists\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-12-delete-apis-published-by-authorised-apfid-with-invalid-serviceapiid","title":"Test Case 12: Delete APIs Published by Authorised apfId with invalid serviceApiId","text":"<p>Test ID: capif_api_publish_service-12</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Delete with invalid serviceApiId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority).</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Remove published API at CCF with invalid serviceId</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Remove published Service API at CCF with invalid serviceId:</p> <ul> <li>Send DELETE to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID_NOT_VALID}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Remove published Service API at CCF:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Service API not found\".</li> <li>cause with message \"Service API id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-13-delete-apis-published-by-non-authorised-apfid","title":"Test Case 13: Delete APIs Published by NON Authorised apfId","text":"<p>Test ID: capif_api_publish_service-12</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Delete API published when apfId is not authorised</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority).</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Register Invoker and onboard Invoker at CCF</li> <li>Remove published API at CCF with invalid serviceId as Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Remove published Service API at CCF with invalid serviceId as Invoker:</p> <ul> <li>Send DELETE to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID_NOT_VALID}</li> <li>Use Invoker Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Remove published Service API at CCF:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"User not authorized\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/","title":"Test Plan for CAPIF Api Security Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_security_service/#test-case-1-create-a-security-context-for-an-api-invoker","title":"Test Case 1: Create a security context for an API invoker","text":"<p>Test ID: capif_security_api-1</p> <p>Description:</p> <p>This test case will check that an API Invoker can create a Security context</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Invoker Onboarding</li> <li>Create Security Context for this Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Create security context:<ol> <li>201 Created response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/capif-security/v1/trustedInvokers/{apiInvokerId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-2-create-a-security-context-for-an-api-invoker-with-provider-role","title":"Test Case 2: Create a security context for an API invoker with Provider role","text":"<p>Test ID:: capif_security_api-2</p> <p>Description:</p> <p>This test case will check that an Provider cannot create a Security context with valid apiInvokerId.</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID), but user that create Security Context with Provider role</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker but using Provider certificate.</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Create security context using Provider certificate:</p> <ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be invoker\".</li> </ul> </li> </ol> </li> <li> <p>No context stored at DB</p> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-3-create-a-security-context-for-an-api-invoker-with-provider-entity-role-and-invalid-apiinvokerid","title":"Test Case 3: Create a security context for an API invoker with Provider entity role and invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-3</p> <p>Description:</p> <p>This test case will check that an Provider cannot create a Security context with invalid apiInvokerID.</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID), but user that create Security Context with Provider role</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Create Security Context for this not valid apiInvokerId and using Provider certificate.</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>body service security body</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Create security context using Provider certificate:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be invoker\".</li> </ul> </li> </ol> </li> <li>No context stored at DB</li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-4-create-a-security-context-for-an-api-invoker-with-invoker-entity-role-and-invalid-apiinvokerid","title":"Test Case 4: Create a security context for an API invoker with Invoker entity role and invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-4</p> <p>Description:</p> <p>This test case will check that an Invoker cannot create a Security context with valid apiInvokerId.</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID), but user that create Security Context with invalid apiInvokerId</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Create Security Context using Provider certificate</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Create security context using Provider certificate:</p> <ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> <li> <p>No context stored at DB</p> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-5-retrieve-the-security-context-of-an-api-invoker","title":"Test Case 5: Retrieve the Security Context of an API Invoker","text":"<p>Test ID:: capif_security_api-5</p> <p>Description:</p> <p>This test case will check that an provider can retrieve the Security context of an API Invoker</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority) and API Invoker has created a valid Security Context</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> <li>Retrieve Security Context by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker.</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Retrieve security context:<ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-6-retrieve-the-security-context-of-an-api-invoker-with-invalid-apiinvokerid","title":"Test Case 6: Retrieve the Security Context of an API Invoker with invalid apiInvokerID","text":"<p>Test ID:: capif_security_api-6</p> <p>Description:</p> <p>This test case will check that an provider can retrieve the Security context of an API Invoker</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority) and API Invoker has created a valid Security Context</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> <li>Retrieve Security Context by Provider of invalid invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Retrieve Security Context of invalid Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Retrieve security context:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-7-retrieve-the-security-context-of-an-api-invoker-with-invalid-apfid","title":"Test Case 7: Retrieve the Security Context of an API Invoker with invalid apfId","text":"<p>Test ID:: capif_security_api-7</p> <p>Description:</p> <p>This test case will check that an Provider cannot retrieve the Security context of an API Invoker without valid apfId</p> <p>Pre-Conditions:</p> <ul> <li>API Exposure Function is not pre-authorised (has invalid apfId)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Retrieve Security Context as Provider.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Retrieve Security Context as Invoker role:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Create security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be aef\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-8-delete-the-security-context-of-an-api-invoker","title":"Test Case 8: Delete the Security Context of an API Invoker","text":"<p>Test ID:: capif_security_api-8</p> <p>Description:</p> <p>This test case will check that an Provider can delete a Security context</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority) and API Invoker has created a valid Security Context</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> <li>Delete Security Context by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker but using Provider certificate.</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using AEF Certificate</li> </ul> </li> <li> <p>Delete Security Context of Invoker by Provider:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Delete security context:</p> <ol> <li>204 No Content response.</li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Security context not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-9-delete-the-security-context-of-an-api-invoker-with-invoker-entity-role","title":"Test Case 9: Delete the Security Context of an API Invoker with Invoker entity role","text":"<p>Test ID:: capif_security_api-9</p> <p>Description:</p> <p>This test case will check that an Invoker cannot delete a Security context</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority) and API Invoker has created a valid Security Context</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> <li>Delete Security Context by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Delete Security Context of Invoker:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Delete security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be aef\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-10-delete-the-security-context-of-an-api-invoker-with-invoker-entity-role-and-invalid-apiinvokerid","title":"Test Case 10: Delete the Security Context of an API Invoker with Invoker entity role and invalid apiInvokerID","text":"<p>Test ID:: capif_security_api-10</p> <p>Description:</p> <p>This test case will check that an Invoker cannot delete a Security context with invalid </p> <p>Pre-Conditions:</p> <ul> <li>Invoker is pre-authorised.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Delete Security Context by invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Delete Security Context of Invoker:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Delete security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be aef\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-11-delete-the-security-context-of-an-api-invoker-with-invalid-apiinvokerid","title":"Test Case 11: Delete the Security Context of an API Invoker with invalid apiInvokerID","text":"<p>Test ID:: capif_security_api-11</p> <p>Description:</p> <p>This test case will check that an Provider cannot delete a Security context of invalid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority).</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Delete Security Context by provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Delete Security Context of Invoker by Provider:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>Use AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Retrieve security context:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-12-update-the-security-context-of-an-api-invoker","title":"Test Case 12: Update the Security Context of an API Invoker","text":"<p>Test ID:: capif_security_api-12</p> <p>Description:</p> <p>This test case will check that an API Invoker can update a Security context</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context By Invoker</li> <li>Update Security Context By Invoker</li> <li>Retrieve Security Context By Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Update Security Context of Invoker:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/update</li> <li>body service security body but with notification destination modified to http://robot.testing2</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Update security context:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.<ol> <li>Check is this returned object match with modified one.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-13-update-the-security-context-of-an-api-invoker-with-provider-entity-role","title":"Test Case 13: Update the Security Context of an API Invoker with Provider entity role","text":"<p>Test ID:: capif_security_api-13</p> <p>Description:</p> <p>This test case will check that an Provider cannot update a Security context</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized.</li> <li>Invoker has created the Security Context previously.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context</li> <li>Update Security Context as Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Update Security Context of Invoker by Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/update</li> <li>body service security body but with notification destination modified to http://robot.testing2</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Update security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be invoker\". </li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-14-update-the-security-context-of-an-api-invoker-with-aef-entity-role-and-invalid-apiinvokerid","title":"Test Case 14: Update the Security Context of an API Invoker with AEF entity role and invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-14</p> <p>Description:</p> <p>This test case will check that an Provider cannot update a Security context of invalid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized.</li> <li>Invoker has created the Security Context previously.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Update Security Context as Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Update Security Context of Invoker by Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}/update</li> <li>body service security body</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Update security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be invoker\". </li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-15-update-the-security-context-of-an-api-invoker-with-invalid-apiinvokerid","title":"Test Case 15: Update the Security Context of an API Invoker with invalid apiInvokerID","text":"<p>Test ID:: capif_security_api-15</p> <p>Description:</p> <p>This test case will check that an API Invoker cannot update a Security context not valid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Update Security Context</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Update Security Context of Invoker:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}/update</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Retrieve security context:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-16-revoke-the-authorization-of-the-api-invoker-for-apis","title":"Test Case 16: Revoke the authorization of the API invoker for APIs.","text":"<p>Test ID:: capif_security_api-16</p> <p>Description:</p> <p>This test case will check that a Provider can revoke the authorization for APIs</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context by Invoker</li> <li>Revoke Security Context by Provider</li> <li>Retrieve Security Context by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context By Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Revoke Authorization by Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/delete</li> <li>body security notification body</li> <li>Using AEF Certificate.</li> </ul> </li> <li> <p>Retrieve Security Context by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Revoke Authorization:</p> <ol> <li>204 No Content response.</li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Security context not found\".</li> <li>cause with message \"API Invoker has no security context\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-17-revoke-the-authorization-of-the-api-invoker-for-apis-without-valid-apfid","title":"Test Case 17: Revoke the authorization of the API invoker for APIs without valid apfID.","text":"<p>Test ID:: capif_security_api-17</p> <p>Description:</p> <p>This test case will check that an Invoker can't revoke the authorization for APIs</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context</li> <li>Revoke Security Context by invoker</li> <li>Retrieve Security Context</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Revoke Authorization by invoker:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/delete</li> <li>body security notification body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Revoke Security Context by invoker:</p> <ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be provider\". </li> </ul> </li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.<ol> <li>Check is this returned object match with created one.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-18-revoke-the-authorization-of-the-api-invoker-for-apis-with-invalid-apiinvokerid","title":"Test Case 18: Revoke the authorization of the API invoker for APIs with invalid apiInvokerId.","text":"<p>Test ID:: capif_security_api-18</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot revoke the authorization for APIs for invalid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context</li> <li>Revoke Security Context by Provider</li> <li>Retrieve Security Context</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Revoke Authorization by Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}/delete</li> <li>body security notification body</li> <li>Using AEF Certificate.</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}?authenticationInfo=true&amp;authorizationInfo=true</li> <li>This request will ask with parameter to retrieve authenticationInfo and authorizationInfo</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Revoke Security Context by invoker:</p> <ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.<ol> <li>Check is this return one object that match with created one.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-19-retrieve-access-token","title":"Test Case 19: Retrieve access token","text":"<p>Test ID:: capif_security_api-19</p> <p>Description:</p> <p>This test case will check that an API Invoker can retrieve a security access token OAuth 2.0.</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerId)</li> <li>Service API of Provider is published</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token:</li> <li>body access token req body and example example</li> <li>securityId is apiInvokerId.</li> <li>grant_type=client_credentials.</li> <li>Create Scope properly for request: 3gpp#{aef_id}:{api_name}</li> <li>Using Invoker Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>200 OK</li> <li>body must follow AccessTokenRsp with:<ol> <li>access_token present</li> <li>token_type=Bearer</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-20-retrieve-access-token-by-provider","title":"Test Case 20: Retrieve access token by Provider","text":"<p>Test ID:: capif_security_api-20</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot revoke the authorization for APIs for invalid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by provider:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token:</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error unauthorized_client</li> <li>error_description=Role not authorized for this API route</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-21-retrieve-access-token-by-provider-with-invalid-apiinvokerid","title":"Test Case 21: Retrieve access token by Provider with invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-21</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token without valid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by provider:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{API_INVOKER_NOT_VALID}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error unauthorized_client</li> <li>error_description=Role not authorized for this API route</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-22-retrieve-access-token-with-invalid-apiinvokerid","title":"Test Case 22: Retrieve access token with invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-22</p> <p>Description:</p> <p>This test case will check that an API Invoker can't retrieve a security access token without valid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerId)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs not filtered:<ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li>Create Security Context for this Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li>Request Access Token by invoker:<ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{API_INVOKER_NOT_VALID}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails29571 data structure, with:<ul> <li>status 404</li> <li>title Not Found</li> <li>detail Security context not found</li> <li>cause API Invoker has no security context</li> </ul> </li> </ol> </li> </ol> <p>NOTE: ProblemDetails29571 is the definition present for this request at swagger of ProblemDetails, and this is different from definition of ProblemDetails across other CAPIF Services</p>"},{"location":"testing/testplan/api_security_service/#test-case-23-retrieve-access-token-with-invalid-client_id","title":"Test Case 23: Retrieve access token with invalid client_id","text":"<p>Test ID:: capif_security_api-23</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token without valid client_id at body</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>client_id is not-valid </li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error invalid_client</li> <li>error_description=Client Id not found</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-24-retrieve-access-token-with-unsupported-grant_type","title":"Test Case 24: Retrieve access token with unsupported grant_type","text":"<p>Test ID:: capif_security_api-24</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token with unsupported grant_type</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=not_valid</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error unsupported_grant_type</li> <li>error_description=Invalid value for <code>grant_type</code> \\(${grant_type}\\), must be one of \\['client_credentials'\\] - 'grant_type'</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-25-retrieve-access-token-with-invalid-scope","title":"Test Case 25: Retrieve access token with invalid scope","text":"<p>Test ID:: capif_security_api-25</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token with complete invalid scope</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>scope=not-valid-scope</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error invalid_scope</li> <li>error_description=The first characters must be '3gpp'</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-26-retrieve-access-token-with-invalid-aefid-at-scope","title":"Test Case 26: Retrieve access token with invalid aefid at scope","text":"<p>Test ID:: capif_security_api-26</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token with invalid aefId at scope</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>scope=3gpp#1234:*service_1*</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error invalid_scope</li> <li>error_description=One of aef_id not belongs of your security context</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-27-retrieve-access-token-with-invalid-apiname-at-scope","title":"Test Case 27: Retrieve access token with invalid apiName at scope","text":"<p>Test ID:: capif_security_api-27</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token with invalid apiName at scope</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>scope=3gpp#{aef_id}:not-valid</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error invalid_scope</li> <li>error_description=One of the api names does not exist or is not associated with the aef id provided</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/common_operations/","title":"Common Operations","text":""},{"location":"testing/testplan/common_operations/#register-new-user","title":"Register new user","text":"<p>In order to use OpenCAPIF we must add a new user. This new user can onboard/register any Invokers or Providers.</p> <p>That new user must be created by administrator of Register Service and with the credentials shared by administrator, the new user can get the access_token by requesting it to Register service.</p> <p>The steps to register a new user at Register Service are:</p>"},{"location":"testing/testplan/common_operations/#admin-create-user","title":"Admin create User","text":"<p>1) Login as Admin to get access_token:</p> <ul> <li>Send POST to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/login<ul> <li>Include basic Auth Header with Admin credentials</li> </ul> </li> <li>Get access_token and refresh_token from response</li> </ul> <p></p> <p>2) Create User:</p> <ul> <li>Send POST to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/createUser<ul> <li>Include Admin access_token in Authorization Bearer Header</li> <li>Body user_registration_body</li> </ul> </li> </ul> <p></p>"},{"location":"testing/testplan/common_operations/#user-retrieve-access-token-and-other-information","title":"User Retrieve access token and other information","text":"<p>1) Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth<ul> <li>Include basic Auth Header with User credentials</li> </ul> </li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> <p></p>"},{"location":"testing/testplan/common_operations/#onboard-an-invoker","title":"Onboard an Invoker","text":""},{"location":"testing/testplan/common_operations/#steps-to-perform-operation","title":"Steps to perform operation","text":"<p>Preconditions: The administrator must have previously registered the User.</p> <ol> <li>Create public and private key at invoker</li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Onboard Invoker:     </p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers</li> <li>Reference Request Body: invoker onboarding body</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>"},{"location":"testing/testplan/common_operations/#checks-to-ensure-onboarding","title":"Checks to ensure onboarding","text":"<ol> <li> <p>Response to Get Auth:</p> <ol> <li>200 OK</li> <li>access_token returned.</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/common_operations/#example-flow","title":"Example Flow","text":""},{"location":"testing/testplan/common_operations/#register-a-provider","title":"Register a Provider","text":""},{"location":"testing/testplan/common_operations/#steps-to-perform-operation_1","title":"Steps to Perform operation","text":"<ol> <li>Create public and private key at provider for provider itself and each function (apf, aef and amf)</li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Send in Authorization Header the Bearer access_token obtained previously (Authorization:Bearer ${access_token})</li> <li>Store each cert in a file with according name.</li> </ul> </li> </ol>"},{"location":"testing/testplan/common_operations/#checks-to-ensure-provider-registration","title":"Checks to ensure provider registration","text":"<ol> <li> <p>Response to Register:</p> <ol> <li>201 Created</li> </ol> </li> <li> <p>Response to Get Auth:</p> <ol> <li>200 OK</li> <li>access_token returned.</li> </ol> </li> <li> <p>Register Provider at Provider Management:</p> <ol> <li>201 Created response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure.</li> <li>For each apiProvFuncs, we must check:<ol> <li>apiProvFuncId is set</li> <li>apiProvCert under regInfo is set properly</li> </ol> </li> <li>Location Header must contain the new resource URL {apiRoot}/api-provider-management/v1/registrations/{registrationId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/common_operations/#example-flow_1","title":"Example Flow","text":""}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"<p>Welcome to the ETSI TeraFlowSDN (TFS) Controller wiki!</p> <p>This wiki provides a walkthrough on how to prepare your environment for executing and contributing to the ETSI SDG TeraFlowSDN. Besides, it describes how to run some example experiments.</p>"},{"location":"#try-teraflowsdn-release-30","title":"Try TeraFlowSDN Release 3.0","text":"<p>The new release launched on April 24th, 2024 incorporates a number of new features, improvements, and bug resolutions. Try it by following the guides below, and feel free to give us your feedback. See the Release Notes.</p>"},{"location":"#requisites","title":"Requisites","text":"<p>The guides and walkthroughs below make some reasonable assumptions to simplify the deployment of the TFS controller, the execution of experiments and tests, and the development of new contributions. In particular, we assume:</p> <ul> <li>A physical server or virtual machine for running the TFS controller with the following minimum specifications (check section Configure your Machine for additional details):</li> <li>4 cores / vCPUs</li> <li>8 GB of RAM (10 GB of RAM if you want to develop)</li> <li>60 GB of disk (100 GB of disk if you want to develop)</li> <li>1 NIC card</li> <li>VSCode with the Remote SSH extension</li> <li>Working machine software:</li> <li>Ubuntu Server 22.04.4 LTS or Ubuntu Server 20.04.6 LTS</li> <li>MicroK8s v1.24.17</li> </ul> <p>Use the Wiki menu in the right side of this page to navigate through the various contents of this wiki.</p>"},{"location":"#guides-and-walkthroughs","title":"Guides and Walkthroughs","text":"<p>The following guides and walkthroughs are provided:</p> <ul> <li>1. Deployment Guide</li> <li>2. Development Guide</li> <li>3. Run Experiments</li> <li>4. Features and Bugs</li> <li>5. Supported SBIs and Network Elements</li> <li>6. Supported NBIs</li> <li>7. Supported Service Handlers</li> <li>8. Troubleshooting</li> </ul>"},{"location":"#tutorials-and-tfs-virtual-machine","title":"Tutorials and TFS Virtual Machine","text":"<p>This section provides access to the links and all the materials prepared for the tutorials and hackfests involving ETSI TeraFlowSDN.</p> <ul> <li>TFS Hackfest #3 (Castelldefels, 16-17 October 2023)</li> <li> <p>The link includes explanatory material on P4 for TeraFlowSDN, the set of guided walkthrough, and the details on the interactive sessions the participants addressed (and recordings), as well as a TFS Virtual Machine (Release 2.1).</p> </li> <li> <p>TFS Hackfest #2 (Madrid, 20-21 June 2023)</p> </li> <li> <p>The link includes explanatory material on gNMI and ContainerLab for TeraFlowSDN, the set of challenges the participants addressed (and recordings), as well as a TFS Virtual Machine (Pre-Release 2.1).</p> </li> <li> <p>OFC SC472 (San Diego, 6 March 2023)</p> </li> <li> <p>The link includes a tutorial-style slide deck, as well as a TFS Virtual Machine (Release 2).</p> </li> <li> <p>TFS Hackfest #1 (Amsterdam, 20 October 2022)</p> </li> <li>The link includes a tutorial-style slide deck (and recordings), as well as a TFS Virtual Machine (Pre-Release 2).</li> </ul>"},{"location":"#versions","title":"Versions","text":"<p>New versions of TeraFlowSDN are periodically released. Each release is properly tagged and a branch is kept for its future bug fixing, if needed.</p> <ul> <li>The branch master, points always to the latest stable version of the TeraFlowSDN controller.</li> <li>The branches release/X.Y.Z, point to the code for the different release versions indicated in branch name.</li> <li>Code in these branches can be considered stable, and no new features are planned.</li> <li>In case of bugs, point releases increasing revision number (Z) might be created.</li> <li>The main development branch is named as develop.</li> <li>Use with care! Might not be stable.</li> <li>The latest developments and contributions are added to this branch for testing and validation before reaching a release. </li> </ul> <p>To choose the appropriate branch, follow the steps described in 1.3. Deploy TeraFlowSDN &gt; Checkout the Appropriate Git Branch</p>"},{"location":"#events","title":"Events","text":"<p>Find here after the list of past and future TFS Events:</p> <ul> <li>ETSI TeraFlowSDN Events </li> </ul>"},{"location":"#contact","title":"Contact","text":"<p>If your environment does not fit with the proposed assumptions and you experience issues  preparing it to work with the ETSI TeraFlowSDN controller, contact the ETSI TeraFlowSDN  SDG team through Slack</p>"},{"location":"FAQ/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"FAQ/#does-the-user-have-to-develop-the-3-elements-of-the-provider-aef-amf-and-apf","title":"Does the user have to develop the 3 elements of the provider (AEF, AMF and APF)?","text":"<p>No, you only have to make the request to the \"/onboarding\" endpoint. In it you must specify a CSR for the AEF, APF and AMF and you will receive the certificates for each of them in the response.</p>"},{"location":"FAQ/#there-is-one-party-that-publishes-the-api-and-another-that-exposes-it-what-is-the-difference","title":"There is one party that publishes the API and another that exposes it, what is the difference?","text":"<p>There are different services, the APF, intended for publishing the APIs, and the AEF, intended so that the invoker can call it. The APF is what connects to the Capif Core Function to publish the service and when the service is up, you need the AEF service so that invokers can connect to it.</p>"},{"location":"FAQ/#before-publishing-an-api-do-you-have-to-be-registered-in-capif","title":"Before publishing an API, do you have to be registered in CAPIF?","text":"<p>Yes, before publishing an API you must register using the POST /register endpoint.</p>"},{"location":"FAQ/#where-is-the-registration-done","title":"Where is the registration done?","text":"<p>Registration is done in a REST API outside of the CAPIF specification taht we have implemented.</p>"},{"location":"FAQ/#is-the-username-and-password-chosen-by-the-user-when-registering-or-is-it-assigned-when-requesting-registration-to-capif-public-instance","title":"Is the username and password chosen by the user when registering or is it assigned when requesting registration to CAPIF public instance?","text":"<p>When you make the request to the \"/endpoint\" of register, you will be returned a username and a password determined by CAPIF.</p>"},{"location":"FAQ/#what-is-a-csr","title":"What is a CSR?","text":"<p>A CSR is a Certificate Signing Request. It is a generated data block where the certificate is planned to be installed and contains key information such as public key, organization, and location, and is used to request a certificate from a certificate authority (CA). In CAPIF, 3 CSRs are necessary to register a provider, for AEF, APF and AMF.</p>"},{"location":"FAQ/#when-doing-the-register_provider-where-can-i-find-the-csrs-that-are-generated","title":"When doing the register_provider where can I find the CSRs that are generated?","text":"<p>When using the \"register_provider\" command, if you add the \"debug\" option, it shows you a json with the data used to register the provider. There we can find in the body a list of 3 elements corresponding to AEF, APF and AMF. IN each of them, the apiProbPubKey field corresponds to the CSR.</p>"},{"location":"FAQ/#how-to-use-the-example-client-capif_invoker_gui","title":"How to use the example client (CAPIF_INVOKER_GUI)?","text":"<p>First you have to make a \"./run.sh host:port\" indicating the address of the public CAPIF. Once the Docker containers are up, you have to do a \"./terminal_to_py_netapp.sh\" and then a \"python main.py\". At this point we will find ourselves in a console with some predefined commands to use the Client. If we press tab twice it will bring up the list of available commands.</p>"},{"location":"FAQ/#where-is-the-capif-public-instance-located","title":"Where is the CAPIF public instance located?","text":"<p>The CAPIF public instance can be found at the following URLs: - capif.mobilesandbox.cloud:37211 (HTTPS) - capif.mobilesandbox.cloud:37212 (HTTP)</p>"},{"location":"FAQ/#do-you-have-to-publish-3-apis-one-for-each-instance","title":"Do you have to publish 3 APIs? one for each instance?","text":"<p>No, you only have to publish a single API but each component is responsible for a specific service, whether publishing or exposing.</p>"},{"location":"FAQ/#once-the-api-is-published-is-it-always-active-or-do-you-have-to-republish-it-every-time-you-want-to-use-it","title":"Once the API is published, is it always active? Or do you have to republish it every time you want to use it?","text":"<p>It is better to unsubscribe the API every time you exit the application since otherwise it could be republished and it would be double.</p>"},{"location":"FAQ/#would-the-same-username-and-password-be-valid-for-different-invokers","title":"Would the same username and password be valid for different invokers?","text":"<p>Yes, a user can have multiple invokers at the same time, and as such, the username and password would be the same.</p>"},{"location":"FAQ/#what-is-the-notfication-destination-field-in-the-register_invoker-request","title":"What is the notfication destination field in the register_invoker request?","text":"<p>This is the callback URL used to notify events. CAPIF has an Event service to subscribe to that notifies actions such as a subscription to an API, a change in the state of an API...</p>"},{"location":"FAQ/#is-the-notification_destination-a-required-field-in-the-register_invoker","title":"Is the notification_destination a required field in the register_invoker","text":"<p>No, it is not mandatory, but if you do not enter it you will not receive any CAPIF events. For example, the APF may delete the API, you will not be notified that the API is no longer available.</p>"},{"location":"FAQ/#what-is-the-purpose-of-the-discover_service-function-in-the-invoker-client","title":"What is the purpose of the \"discover_service\" function in the invoker client?","text":"<p>The discover_service returns a json with all the services that exist exposed in CAPIF at that moment.</p>"},{"location":"FAQ/#what-is-the-purpose-of-the-get_security_auth-function-in-the-invoker-client","title":"What is the purpose of the \"get_security_auth\" function in the invoker client?","text":"<p>Sirve para pedir el token o para refrescarlo en caso de que haya caducado. You have to use that token to call the API from the invoker.</p>"},{"location":"FAQ/#what-is-the-purpose-of-the-register_security_context-function-in-the-invoker-client","title":"What is the purpose of the \"register_security_context\" function in the invoker client?","text":"<p>To consume the API it is necessary to have a Security Context registered with the data and the authentication method.</p>"},{"location":"FAQ/#is-a-user-the-same-as-an-exposer","title":"Is a user the same as an exposer?","text":"<p>No, a user registers in CAPIF and once done can have the role of invoker, provider or both.</p>"},{"location":"FAQ/#where-can-i-put-my-endpoint","title":"Where can I put my endpoint?","text":"<p>You have to set your endpoint when doing the \"publish_service\" functionality: <code>publish_service capif_ops/config_files/service_api_description_hello.json</code></p> <p>In the file \"service_api_description_hello.json\" you configure the service that is going to be exposed and by developing one to suit you, you expose your API.</p>"},{"location":"architecture/","title":"Architecture","text":""},{"location":"architecture/#architecture","title":"Architecture","text":"<p>The CAPIF architecture has three main components, Register Service, Vault and CCF, which are represented in the following image:</p> <p></p> <p>Each component is separated into different namespaces and all communications between them use Rest APIs.</p> <p>Apart from the communication between components, there are 2 other entities that can use them:</p> <ul> <li>Admin/superadmin: Responsible for managing users with the Register or carrying out special operations in the CCF.</li> <li>Users: They are those who want to use CAPIF, registering as a user in the Register and as Invoker or Provider in the CCF.</li> </ul>"},{"location":"architecture/#register-ns","title":"Register NS","text":"<p>This namespace belongs to the Register service, and we find 2 components:</p> <ul> <li>Register Service: It is responsible for managing all users who use CAPIF, in addition to providing the necessary information for its use.</li> <li>Register MONGO DATABASE: It is the Register database, in it we store all the information about registered users.</li> </ul>"},{"location":"architecture/#vault-ns","title":"Vault NS","text":"<p>This namespace belongs to Vault. </p> <p>This component is responsible for managing all CAPIF certificates, so other components such as the Register or the CCF communicate with it to create new certificates or request keys.</p>"},{"location":"architecture/#mon-ns","title":"Mon NS","text":"<p>This is the main namespace of CAPIF, since it contains all the CCF services in addition to other components:</p> <ul> <li>NGINX: Responsible for acting as a reverse proxy to distribute CAPIF requests to the different services, controlling whether or not they are authorized to access them.</li> <li>REDIS: Used for internal communication of services.</li> <li>CAPIF MONGO DATABASE: CAPIF database, where all information related to CAPIF services such as invokers, registered providers or published services is stored.</li> <li>HELPER: Service that simplifies integration with third parties such as external management portals.</li> </ul>"},{"location":"architecture/#new-architecture","title":"New Architecture","text":"<p>You can check the details of all these changes in the conversation on the OCF wiki.</p>"},{"location":"releasenotes/","title":"Releasenotes","text":""},{"location":"releasenotes/#release-100","title":"Release 1.0.0","text":""},{"location":"releasenotes/#new-features","title":"New Features","text":""},{"location":"releasenotes/#registration-flow-improved","title":"Registration Flow improved","text":"<ul> <li>Eliminated access from CAPIF to the Register user database when onboarding is performed.</li> <li>Isolation between CCF and Register services, interaction now is only by HTTPS requested between Register, CCF and Vault.</li> <li>Eliminated the \"role\" in user creation.<ul> <li>Now a user can be an invoker or a provider at the same time</li> </ul> </li> <li>Administrator User:<ul> <li>New entity in charge of registering and managing users of the register service.</li> </ul> </li> <li>UUID to identify users.<ul> <li>When you create a user, a uuid is associated with it</li> <li>The uuid will be contained in the token requested by the user and will be used to relate invokers and providers with users.</li> </ul> </li> <li>Endpoints changed and created:<ul> <li>Administrator endpoints:<ul> <li>/createUser: /register endpoint changed to createUser. Used to register new users.</li> <li>/deleteUser: /remove endpoint changed to this. Used to delete users and all the entities they had created.</li> <li>/login: Allows administrator to log in to obtain the necessary tokens for their requests.</li> <li>/refresh: Retrieve new access token token.</li> <li>/getUsers: Returns the list with all registered users.</li> </ul> </li> <li>Customer User:<ul> <li>/getauth now also returns the urls needed to use CAPIF, used by customer.</li> </ul> </li> </ul> </li> <li> <p>Security improvements:</p> <ul> <li>/login uses basic auth with administrator credentials.</li> <li>/getauth uses basic auth with customer user credentials.</li> <li>Other requests use the administrator access token obtained from login.</li> </ul> </li> <li> <p>Current fields on user creation by administrator:</p> </li> </ul> <pre><code>required_fields = {\n    \"username\": str,\n    \"password\": str,\n    \"enterprise\": str,\n    \"country\": str,\n    \"email\": str,\n    \"purpose\": str\n}\n\noptional_fields = {\n    \"phone_number\": str,\n    \"company_web\": str,\n    \"description\": str\n}\n</code></pre> <ul> <li>Test plan has been updated with the new register flow. Please check OCF Registration Flow</li> <li>Video with explanation and demonstration of new register flow New Registration Demo</li> </ul>"},{"location":"releasenotes/#new-opencapif-architecture","title":"New OpenCAPIF architecture","text":"<ul> <li>New arquitecture with separated namespaces for Vault, CCF and Register components. Communication between them now are only allowed by using REST APIs.</li> <li> <p>New helper service inside CCF, it will simplify integration with third parties like external management portals.</p> </li> <li> <p>Helper endpoints:</p> <ul> <li>/getInvokers : Get the list of invokers from CAPIF</li> <li>/getProviders: Get the list of providers from CAPIF</li> <li>/getServices : Get the list of services published in CAPIF</li> <li>/getSecurityContext : Get the list of security contexts from CAPIF</li> <li>/getEvents : Get the list of events subscriptions from CAPIF</li> <li>/deleteEntities: Removes all entities registered by a user from the register</li> </ul> </li> <li> <p>Security in the helper</p> <ul> <li>To make requests to the helper you will need a superadmin certificate and password.</li> </ul> </li> </ul>"},{"location":"releasenotes/#events-api-upgrade","title":"Events API Upgrade","text":"<ul> <li>The event management at CCF is improved, EventNotification include Event Details with required information.</li> <li>Events updated:<ul> <li>SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE with apiIds</li> <li>SERVICE_API_UPDATE with serviceAPIDescriptions</li> <li>API_INVOKER_ONBOARDED, API_INVOKER_UPDATED, API_INVOKER_OFFBOARDED with apiInvokerIds.</li> </ul> </li> <li>Events Included:<ul> <li>SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE with invocationLogs</li> </ul> </li> <li>Test plan include 7 new tests in order to check new events implemented and scenarios of each notification implemented, with a complete check of Event Notification.</li> <li>Test plan documentation includes the new event tests OCF Event test plan documentation.</li> </ul>"},{"location":"releasenotes/#inital-implementation-of-cicd","title":"Inital implementation of CI/CD","text":"<ul> <li>The inital implementation of CI/CD on gitlab was performed.</li> <li>Detailed information in the CICD Wiki.</li> <li>Implement initial CI/CD:<ul> <li>Description of the CI process.<ul> <li>In CI phase, created design, jobs and security checks when a branch is pushed.</li> <li>The CI has jobs as:<ul> <li>Linting code, unit test (if needed),</li> <li>Build and push artifacts (images) in Git OCI register</li> <li>Security checks,</li> <li>SCA, CVS, SAST</li> <li>The vulnerabilities are exposed in Merge Request panel to be solved.</li> </ul> </li> </ul> </li> <li>Description of the CD process:<ul> <li>Defined the environments to OCF.<ul> <li>Production env.</li> <li>Pre-production env.</li> <li>Validation env.</li> <li>Dev-1, dev-2\u2026 envs (ephemeral)</li> </ul> </li> <li>Defined the naming convention to OCF releases<ul> <li>Tag in prod: v0.0.1-release</li> <li>Tag non-prod: v0.0.1-rc</li> <li>Other tags: v0.0.1-test, v0.0.1-smt</li> </ul> </li> <li>Defined the jobs of CD<ul> <li>CD ensures the deployment in multiple envs. Therefore, the CD pipeline has deploy-ocf, delete-ocf (if needed) jobs</li> </ul> </li> </ul> </li> <li>ETSI HIVE Labs:<ul> <li>Designed, created and the Kuberntes OCF cluster is running to support OCFs deployments.</li> <li>Iterating with ETSI HIVE\u2019s support to solve computing issues.<ul> <li>CPU compatibilities with OCF services (MongoDB): Fixed</li> </ul> </li> </ul> </li> </ul> </li> </ul>"},{"location":"releasenotes/#documentation","title":"Documentation","text":""},{"location":"releasenotes/#improvements-on-documentation","title":"Improvements on documentation","text":"<ul> <li>Documentation stored in OCF Documentation Repository</li> <li>Continuous Integration included at repository for web documentation:<ul> <li>Develop version of documentation is automatically generated on each merge to develop branch.</li> <li>Tagged version from main create documentation with related tag as version.</li> </ul> </li> </ul>"},{"location":"releasenotes/#technical-debt-solved","title":"Technical Debt Solved","text":""},{"location":"releasenotes/#improved-testing-with-robot-in-order-to-cover","title":"Improved Testing with Robot in order to cover","text":"<ul> <li>Support of new Register flows.</li> <li>Allow different URLs for register, ccf and vault services.</li> <li>New Variables included to manage new architecture under test.</li> <li>Mock server developed to add the functionality of write tests involving notification from Service Under Test.</li> <li>Docker image improved generation and libraries upgraded to Robot Framework 7.</li> </ul>"},{"location":"releasenotes/#improved-security-on-db","title":"Improved security on DB","text":"<ul> <li>Credentials requested to access mongo databases.</li> <li>Credentials requested also by mongo-express.</li> </ul>"},{"location":"releasenotes/#scripts-upgraded","title":"Scripts upgraded","text":"<ul> <li>Docker compose version 2 used on them.</li> <li>New cleaning script developed.</li> <li>Scripts upgraded:<ul> <li>check_services_are_running.sh: Checks if all essential services (Vault, CCF and Register) are running.</li> <li>clean_capif_docker_services.sh: Shutdowns and removes all services essential services.</li> <li>clean_capif_temporary_files.sh: Removes temporaly files from local repository. </li> <li>run.sh: Launch Essential services locally using docker compose, also monitoring can be launched.</li> <li>run_capif_tests.sh: Launch Robot Framwork Tests.</li> <li>show_logs.sh: Show locally logs of Services running.</li> <li>run_mock_server.sh: Launch mock server locally on all interfaces. This axiliary server is only used by tagged mockserver tests on Robot Framework.</li> <li>clean_mock_server.sh: Remove mock server local deployment.</li> <li>deploy.sh: This script simplify the way to download capif repository.</li> </ul> </li> </ul>"},{"location":"releasenotes/#codebase-improvements","title":"Codebase Improvements","text":"<ul> <li>Documentation is now on splitted repository OCF Documentation Repository</li> <li>Test plan was moved to OCF Documentation Repository</li> <li>Obsolote data is removed.</li> <li>Repository Reorganization: Enhanced structure and maintainability with a better directory layout and clearer module separation.</li> <li>Code Quality Enhancements: Refactored code and fixed known issues</li> </ul>"},{"location":"releasenotes/#migration-to-gunicorn","title":"Migration to GUNICORN","text":"<ul> <li>Include production server on each microservice: Release 0 use Flask developer server, now we use GUNICORN.</li> </ul>"},{"location":"releasenotes/#release-00","title":"Release 0.0","text":"<p>The APIs included in Release 0.0 are:</p> <ul> <li>JWT Authentication APIs</li> <li>CAPIF Invoker Management API</li> <li>CAPIF Publish API</li> <li>CAPIF Discover API</li> <li>CAPIF Security API</li> <li>CAPIF Events API</li> <li>CAPIF Provider Management API</li> </ul> <p>This Release also includes a Robot Test Suite for all those services and a Postman Test Suite for simple testing.</p>"},{"location":"deployment_guide/deployment_guide/","title":"1. Deployment Guide","text":"<p>This section walks you through the process of deploying TeraFlowSDN on top of a machine running MicroK8s Kubernetes platform. The guide includes the details on configuring and installing the machine, installing and  configuring MicroK8s, and deploying and reporting the status of the TeraFlowSDN  controller.</p>"},{"location":"deployment_guide/deployment_guide/#11-configure-your-machine","title":"1.1. Configure your Machine","text":"<p>In this section, we describe how to configure a machine (physical or virtual) to be used as the deployment, execution, and development environment for the ETSI TeraFlowSDN controller. Choose your preferred environment below and follow the instructions provided.</p> <p>NOTE: If you already have a remote physical server fitting the requirements specified in this section feel free to use it instead of deploying a local VM. Check 1.1.1. Physical Server for further details.</p> <p>Virtualization platforms tested are:</p> <ul> <li>Physical Server</li> <li>Oracle Virtual Box</li> <li>VMWare Fusion</li> <li>OpenStack</li> <li>Vagrant Box</li> </ul>"},{"location":"deployment_guide/deployment_guide/#111-physical-server","title":"1.1.1. Physical ServerServer SpecificationsClusterized DeploymentNetworkingOperating SystemUpgrade the Ubuntu distribution","text":"<p>This section describes how to configure a physical server for running ETSI TeraFlowSDN(TFS) controller.</p> <p>Minimum Server Specifications for development and basic deployment</p> <ul> <li>CPU: 4 cores</li> <li>RAM: 8 GB</li> <li>Disk: 60 GB</li> <li>1 GbE NIC</li> </ul> <p>Recommended Server Specifications for development and basic deployment</p> <ul> <li>CPU: 6 cores</li> <li>RAM: 12 GB</li> <li>Disk: 80 GB</li> <li>1 GbE NIC</li> </ul> <p>Server Specifications for best development and deployment experience</p> <ul> <li>CPU: 8 cores</li> <li>RAM: 32 GB</li> <li>Disk: 120 GB</li> <li>1 GbE NIC</li> </ul> <p>NOTE: the specifications listed above are provided as a reference. They depend also on the CPU clock frequency, the RAM memory, the disk technology and speed, etc.</p> <p>For development purposes, it is recommended to run the VSCode IDE (or the IDE of your choice) in a more powerful server, for instance, the recommended server specifications for development and basic deployment.</p> <p>Given that TeraFlowSDN follows a micro-services architecture, for the deployment, it might be better to use many clusterized servers with many slower cores than a single server with few highly performant cores.</p> <p>You might consider creating a cluster of machines each featuring, at least, the minimum server specifications. That solution brings you scalability in the future.</p> <p>No explicit indications are given in terms of networking besides that servers need access to the Internet for downloading dependencies, binaries, and packages while building and deploying the TeraFlowSDN components.</p> <p>Besides that, the network requirements are essentially the same than that required for running a classical Kubernetes environment. To facilitate the deployment, we extensively use MicroK8s, thus the network requirements are, essentially, the same demanded by MicroK8s, especially, if you consider creating a Kubernetes cluster.</p> <p>As a reference, the other deployment solutions based on VMs assume the VM is connected to a virtual network configured with the IP range <code>10.0.2.0/24</code> and have the gateway at IP <code>10.0.2.1</code>. The VMs have the IP address <code>10.0.2.10</code>.</p> <p>The minimum required ports to be accessible are: - 22/SSH     : for management purposes - 80/HTTP    : for the TeraFlowSDN WebUI and Grafana dashboard - 8081/HTTPS : for the CockroachDB WebUI</p> <p>Other ports might be required if you consider to deploy addons such as Kubernetes observability, etc. The details on these ports are left appart given they might vary depending on the Kubernetes environment you use.</p> <p>The recommended Operating System for deploying TeraFlowSDN is Ubuntu Server 22.04 LTS or Ubuntu Server 20.04 LTS. Other version might work, but we have not tested them. We strongly recommend using Long Term Support (LTS) versions as they provide better stability.</p> <p>Below we provide some installation guidelines: - Installation Language: English - Autodetect your keyboard - If asked, select \"Ubuntu Server\" (do not select \"Ubuntu Server (minimized)\"). - Configure static network specifications (adapt them based on your particular setup):</p> Interface IPv4 Method Subnet Address Gateway Name servers Search domains enp0s3 Manual 10.0.2.0/24 10.0.2.10 10.0.2.1 8.8.8.8,8.8.4.4 <ul> <li>Leave proxy and mirror addresses as they are</li> <li>Let the installer self-upgrade (if asked).</li> <li>Use an entire disk for the installation</li> <li>Disable setup of the disk as LVM group</li> <li>Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.</li> <li>Configure your user and system names:</li> <li>User name: <code>TeraFlowSDN</code></li> <li>Server's name: <code>tfs-vm</code></li> <li>Username: <code>tfs</code></li> <li>Password: <code>tfs123</code></li> <li>Install Open SSH Server</li> <li>Import SSH keys, if any.</li> <li>Featured Server Snaps</li> <li>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</li> <li>Let the system install and upgrade the packages.</li> <li>This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</li> <li>Restart the VM when the installation is completed.</li> </ul> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul>"},{"location":"deployment_guide/deployment_guide/#112-oracle-virtual-box","title":"1.1.2. Oracle Virtual BoxCreate a NAT Network in VirtualBoxCreate VM in VirtualBox:Install Ubuntu 22.04 LTS Operating System","text":"<p>This section describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using Oracle VirtualBox. It has been tested with VirtualBox up to version 6.1.40 r154048.</p> <p>In \"Oracle VM VirtualBox Manager\", Menu \"File &gt; Preferences... &gt; Network\", create a NAT  network with the following specifications:</p> Name CIDR DHCP IPv6 TFS-NAT-Net 10.0.2.0/24 Disabled Disabled <p>Within the newly created \"TFS-NAT-Net\" NAT network, configure the following IPv4  forwarding rules:</p> Name Protocol Host IP Host Port Guest IP Guest Port SSH TCP 127.0.0.1 2200 10.0.2.10 22 HTTP TCP 127.0.0.1 8080 10.0.2.10 80 <p>Note: IP address 10.0.2.10 is the one that will be assigned to the VM.</p> <ul> <li>Name: TFS-VM</li> <li>Type/Version: Linux / Ubuntu (64-bit)</li> <li>CPU (*): 4 vCPUs @ 100% execution capacity</li> <li>RAM: 8 GB</li> <li>Disk: 60 GB, Virtual Disk Image (VDI), Dynamically allocated</li> <li>Optical Drive ISO Image: \"ubuntu-22.04.X-live-server-amd64.iso\"</li> <li>Download the latest Long Term Support (LTS) version of the Ubuntu Server image from Ubuntu 22.04 LTS, e.g., \"ubuntu-22.04.X-live-server-amd64.iso\".</li> <li>Note: use Ubuntu Server image instead of Ubuntu Desktop to create a lightweight VM.</li> <li>Network Adapter 1 (*): enabled, attached to NAT Network \"TFS-NAT-Net\"</li> <li>Minor adjustments (*):</li> <li>Audio: disabled</li> <li>Boot order: disable \"Floppy\"</li> </ul> <p>Note: (*) settings to be editing after the VM is created.</p> <p>In \"Oracle VM VirtualBox Manager\", start the VM in normal mode, and follow the  installation procedure. Below we provide some installation guidelines: - Installation Language: English - Autodetect your keyboard - If asked, select \"Ubuntu Server\" (do not select \"Ubuntu Server (minimized)\"). - Configure static network specifications:</p> Interface IPv4 Method Subnet Address Gateway Name servers Search domains enp0s3 Manual 10.0.2.0/24 10.0.2.10 10.0.2.1 8.8.8.8,8.8.4.4 <ul> <li>Leave proxy and mirror addresses as they are</li> <li>Let the installer self-upgrade (if asked).</li> <li>Use an entire disk for the installation</li> <li>Disable setup of the disk as LVM group</li> <li>Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.</li> <li>Configure your user and system names:</li> <li>User name: TeraFlowSDN</li> <li>Server's name: tfs-vm</li> <li>Username: tfs</li> <li>Password: tfs123</li> <li>Install Open SSH Server</li> <li>Import SSH keys, if any.</li> <li>Featured Server Snaps</li> <li>Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall them in case of trouble with.</li> <li>Let the system install and upgrade the packages.</li> <li>This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your Internet connection speed.</li> <li>Restart the VM when the installation is completed.</li> </ul> <p>Upgrade the Ubuntu distribution</p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul> <p>Install VirtualBox Guest Additions On VirtualBox Manager, open the VM main screen. If you are running the VM in headless  mode, right click over the VM in the VirtualBox Manager window and click \"Show\". If a dialog informing about how to leave the interface of the VM is shown, confirm  pressing \"Switch\" button. The interface of the VM should appear.</p> <p>Click menu \"Device &gt; Insert Guest Additions CD image...\"</p> <p>On the VM terminal, type:</p> <pre><code>sudo apt-get install -y linux-headers-$(uname -r) build-essential dkms\n  # This command might take some minutes depending on your VM specs and your Internet access speed.\nsudo mount /dev/cdrom /mnt/\ncd /mnt/\nsudo ./VBoxLinuxAdditions.run\n  # This command might take some minutes depending on your VM specs.\nsudo reboot\n</code></pre>"},{"location":"deployment_guide/deployment_guide/#113-vmware-fusion","title":"1.1.3. VMWare FusionCreate VM in VMWare Fusion:Install Ubuntu 22.04.1 LTS Operating SystemUpgrade the Ubuntu distribution","text":"<p>This section describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using VMWare Fusion. It has been tested with VMWare Fusion version 12 and 13.</p> <p>In \"VMWare Fusion\" manager, create a new network from the \"Settings/Network\" menu.</p> <ul> <li>Unlock to make changes</li> <li>Press the + icon and create a new network</li> <li>Change the name to TFS-NAT-Net</li> <li>Check \"Allow virtual machines on this network to connect to external network (NAT)\"</li> <li>Do not check \"Enable IPv6\"</li> <li>Add port forwarding for HTTP and SSH</li> <li>Uncheck \"Provide address on this network via DHCP\"</li> </ul> <p>Create a new VM an Ubuntu 22.04.1 ISO:</p> <ul> <li>Display Name: TeraFlowSDN</li> <li>Username: tfs</li> <li>Password: tfs123</li> </ul> <p>On the next screen press \"Customize Settings\", save the VM and in \"Settings\" change: - Change to use 4 CPUs - Change to access 8 GB of RAM - Change disk to size 60 GB - Change the network interface to use the previously created TFS-NAT-Net</p> <p>Run the VM to start the installation.</p> <p>The installation will be automatic, without any configuration required.</p> <ul> <li>Configure the guest IP, gateway and DNS:</li> </ul> <p>Using the Network Settings for the wired connection, set the IP to 10.0.2.10,   the mask to 255.255.255.0, the gateway to 10.0.2.2 and the DNS to 10.0.2.2.</p> <ul> <li>Disable and remove swap file:</li> </ul> <p>$ sudo swapoff -a   $ sudo rm /swapfile</p> <p>Then you can remove or comment the /swapfile entry in /etc/fstab</p> <ul> <li>Install Open SSH Server</li> <li> <p>Import SSH keys, if any.</p> </li> <li> <p>Restart the VM when the installation is completed.</p> </li> </ul> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre>"},{"location":"deployment_guide/deployment_guide/#114-openstack","title":"1.1.4. OpenStackCreate a Security Group in OpenStack <p> In OpenStack, go to Project - Network - Security Groups - Create Security Group with name TFS</p> <p>Add the following rules:</p>    Direction Ether Type IP Protocol Port Range Remote IP Prefix     Ingress IPv4 TCP 22 (SSH) 0.0.0.0/0   Ingress IPv4 TCP 2200 0.0.0.0/0   Ingress IPv4 TCP 8080 0.0.0.0/0   Ingress IPv4 TCP 80 0.0.0.0/0   Egress IPv4 Any Any 0.0.0.0/0   Egress IPv6 Any Any ::/0    <p>Note: The IP address will be assigned depending on the network you have configured inside OpenStack. This IP will have to be modified in TeraFlow configuration files which by default use IP 10.0.2.10</p> Create a flavour <p></p> <p>From dashboard (Horizon)</p> <p>Go to Admin - Compute - Flavors and press Create Flavor</p> <ul> <li>Name: TFS</li> <li>VCPUs: 4</li> <li>RAM (MB): 8192</li> <li>Root Disk (GB): 60</li> </ul> <p>From CLI</p> <pre><code> openstack flavor create TFS --id auto --ram 8192 --disk 60 --vcpus 8\n</code></pre> Create an instance in OpenStack: <p></p> <ul> <li>Instance name: TFS-VM</li> <li>Origin: [Ubuntu-22.04 cloud image] (https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img)</li> <li>Create new volume: No</li> <li>Flavor: TFS</li> <li>Networks: extnet </li> <li>Security Groups: TFS</li> <li>Configuration: Include the following cloud-config</li> </ul> <pre><code>#cloud-config\n# Modifies the password for the VM instance\nusername: ubuntu\npassword: &lt;your-password&gt;\nchpasswd: { expire: False }\nssh_pwauth: True\n</code></pre> Upgrade the Ubuntu distribution <p></p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> <ul> <li>If asked to restart services, restart the default ones proposed.</li> <li>Restart the VM when the installation is completed.</li> </ul>","text":"<p>This section describes how to configure a VM for running ETSI TeraFlowSDN(TFS) controller using OpenStack. It has been tested with OpenStack Kolla up to Yoga version. </p>"},{"location":"deployment_guide/deployment_guide/#115-vagrant-box","title":"1.1.5. Vagrant Box <p>","text":""},{"location":"deployment_guide/deployment_guide/#12-install-microk8s","title":"1.2. Install MicroK8s","text":"<p>This section describes how to deploy the MicroK8s Kubernetes platform and configure it to be used with ETSI TeraFlowSDN controller. Besides, Docker is installed to build docker images for the ETSI TeraFlowSDN controller.</p> <p>The steps described in this section might take some minutes depending on your internet connection speed and the resources assigned to your VM, or the specifications of your physical server.</p> <p>To facilitate work, these steps are easier to be executed through an SSH connection, for instance using tools like PuTTY or MobaXterm.</p> Upgrade the Ubuntu distribution <p> Skip this step if you already did it during the creation of the VM.</p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> Install prerequisites <p></p> <pre><code>sudo apt-get install -y ca-certificates curl gnupg lsb-release snapd jq\n</code></pre> Install Docker CE <p> Install Docker CE and Docker BuildX plugin</p> <pre><code>sudo apt-get install -y docker.io docker-buildx\n</code></pre> <p>NOTE: Starting from Docker v23, Build architecture has been updated and <code>docker build</code> command entered into deprecation process in favor of the new <code>docker buildx build</code> command. Package <code>docker-buildx</code> provides the new <code>docker buildx build</code> command.</p> <p>Add key \"insecure-registries\" with the private repository to the daemon configuration. It is done in two commands since sometimes read from and write to same file might cause trouble.</p> <pre><code>if [ -s /etc/docker/daemon.json ]; then cat /etc/docker/daemon.json; else echo '{}'; fi \\\n    | jq 'if has(\"insecure-registries\") then . else .+ {\"insecure-registries\": []} end' -- \\\n    | jq '.\"insecure-registries\" |= (.+ [\"localhost:32000\"] | unique)' -- \\\n    | tee tmp.daemon.json\nsudo mv tmp.daemon.json /etc/docker/daemon.json\nsudo chown root:root /etc/docker/daemon.json\nsudo chmod 600 /etc/docker/daemon.json\n</code></pre> <p>Restart the Docker daemon</p> <pre><code>sudo systemctl restart docker\n</code></pre> Install MicroK8s <p></p> <p>Important: Some TeraFlowSDN dependencies need to be executed on top of MicroK8s/Kubernetes v1.24. It is not guaranteed (by now) to run on newer versions.</p> <pre><code># Install MicroK8s\nsudo snap install microk8s --classic --channel=1.24/stable\n\n# Create alias for command \"microk8s.kubectl\" to be usable as \"kubectl\"\nsudo snap alias microk8s.kubectl kubectl\n</code></pre> <p>It is important to make sure that <code>ufw</code> will not interfere with the internal pod-to-pod and pod-to-Internet traffic. To do so, first check the status. If <code>ufw</code> is active, use the following command to enable the communication.</p> <pre><code>\n# Verify status of ufw firewall\nsudo ufw status\n\n# If ufw is active, install following rules to enable access pod-to-pod and pod-to-internet\nsudo ufw allow in on cni0 &amp;&amp; sudo ufw allow out on cni0\nsudo ufw default allow routed\n</code></pre> <p>NOTE: MicroK8s can be used to compose a Highly Available Kubernetes cluster enabling you to construct an environment combining the CPU, RAM and storage resources of multiple machines. If you are interested in this procedure, review the official instructions in How to build a highly available Kubernetes cluster with MicroK8s, in particular, the step Create a MicroK8s multi-node cluster.</p> <p>References:</p> <ul> <li>The lightweight Kubernetes &gt; Install MicroK8s</li> <li>Install a local Kubernetes with MicroK8s</li> <li>How to build a highly available Kubernetes cluster with MicroK8s</li> </ul> Add user to the docker and microk8s groups <p></p> <p>It is important that your user has the permission to run <code>docker</code> and <code>microk8s</code> in the  terminal. To allow this, you need to add your user to the <code>docker</code> and <code>microk8s</code> groups with the  following commands:</p> <pre><code>sudo usermod -a -G docker $USER\nsudo usermod -a -G microk8s $USER\nsudo chown -f -R $USER $HOME/.kube\nsudo reboot\n</code></pre> <p>In case that you get trouble executing the following commands, might due to the .kube folder is not automatically provisioned into your home folder, you may follow the steps below:</p> <pre><code>mkdir -p $HOME/.kube\nsudo chown -f -R $USER $HOME/.kube\nmicrok8s config &gt; $HOME/.kube/config\nsudo reboot\n</code></pre> Check status of Kubernetes and addons <p> To retrieve the status of Kubernetes once, run the following command:</p> <pre><code>microk8s.status --wait-ready\n</code></pre> <p>To retrieve the status of Kubernetes periodically (e.g., every 1 second), run the  following command:</p> <pre><code>watch -n 1 microk8s.status --wait-ready\n</code></pre> Check all resources in Kubernetes <p> To retrieve the status of the Kubernetes resources once, run the following command:</p> <pre><code>kubectl get all --all-namespaces\n</code></pre> <p>To retrieve the status of the Kubernetes resources periodically (e.g., every 1  second), run the following command:</p> <pre><code>watch -n 1 kubectl get all --all-namespaces\n</code></pre> Enable addons <p></p> <p>First, we need to enable the community plugins (maintained by third parties):</p> <pre><code>microk8s.enable community\n</code></pre> <p>The Addons to be enabled are:</p> <ul> <li><code>dns</code>: enables resolving the pods and services by name</li> <li><code>helm3</code>: required to install NATS</li> <li><code>hostpath-storage</code>: enables providing storage for the pods (required by <code>registry</code>)</li> <li><code>ingress</code>: deploys an ingress controller to expose the microservices outside Kubernetes</li> <li><code>registry</code>: deploys a private registry for the TFS controller images</li> <li><code>linkerd</code>: deploys the linkerd service mesh used for load balancing among replicas</li> <li><code>prometheus</code>: set of tools that enable TFS observability through per-component instrumentation</li> <li><code>metrics-server</code>: deploys the Kubernetes metrics server for API access to service metrics</li> </ul> <pre><code>microk8s.enable dns helm3 hostpath-storage ingress registry prometheus metrics-server linkerd\n</code></pre> <p>Important: Enabling some of the addons might take few minutes. Do not proceed with next steps until the addons are ready. Otherwise, the deployment might fail. To confirm everything is up and running:</p> <ol> <li>Periodically    Check the status of Kubernetes    until you see the addons [dns, ha-cluster, helm3, hostpath-storage, ingress, linkerd, metrics-server, prometheus, registry, storage] in the enabled block.</li> <li>Periodically    Check Kubernetes resources    until all pods are Ready and Running.</li> <li>If it takes too long for the Pods to be ready, we observed that rebooting the machine may help.</li> </ol> <p>Then, create aliases to make the commands easier to access:</p> <pre><code>sudo snap alias microk8s.helm3 helm3\nsudo snap alias microk8s.linkerd linkerd\n</code></pre> <p>To validate that <code>linkerd</code> is working correctly, run:</p> <pre><code>linkerd check\n</code></pre> <p>To validate that the <code>metrics-server</code> is working correctly, run:</p> <pre><code>kubectl top pods --all-namespaces\n</code></pre> <p>and you should see a screen similar to the <code>top</code> command in Linux, showing the columns namespace, pod name, CPU (cores), and MEMORY (bytes).</p> <p>In case pods are not starting, check information from pods logs. For example, linkerd is sensitive for proper /etc/resolv.conf syntax.</p> <pre><code>kubectl logs &lt;podname&gt; --namespace &lt;namespace&gt;\n</code></pre> <p>If the command shows an error message, also restarting the machine might help.</p> Stop, Restart, and Redeploy <p> Find below some additional commands you might need while you work with MicroK8s:</p> <pre><code>microk8s.stop  # stop MicroK8s cluster (for instance, before power off your computer)\nmicrok8s.start # start MicroK8s cluster\nmicrok8s.reset # reset infrastructure to a clean state\n</code></pre> <p>If the following commands does not work to recover the MicroK8s cluster, you can redeploy it.</p> <p>If you want to keep MicroK8s configuration, use:</p> <pre><code>sudo snap remove microk8s\n</code></pre> <p>If you need to completely drop MicroK8s and its complete configuration, use:</p> <pre><code>sudo snap remove microk8s --purge\nsudo apt-get remove --purge docker.io docker-buildx\n</code></pre> <p>IMPORTANT: After uninstalling MicroK8s, it is convenient to reboot the computer (the VM if you work on a VM, or the physical computer if you use a physical computer). Otherwise, there are system configurations that are not correctly cleaned. Especially in what port forwarding and firewall rules matters.</p> <p>After the reboot, redeploy as it is described in this section.</p>"},{"location":"deployment_guide/deployment_guide/#13-deploy-teraflowsdn","title":"1.3. Deploy TeraFlowSDN","text":"<p>This section describes how to deploy TeraFlowSDN controller on top of MicroK8s using the environment configured in the previous sections.</p> Install prerequisites <p></p> <pre><code>sudo apt-get install -y git curl jq\n</code></pre> Clone the Git repository of the TeraFlowSDN controller <p> Clone from ETSI-hosted GitLab code repository:</p> <pre><code>mkdir ~/tfs-ctrl\ngit clone https://labs.etsi.org/rep/tfs/controller.git ~/tfs-ctrl\n</code></pre> <p>Important: The original H2020-TeraFlow project hosted on GitLab.com has been  archieved and will not receive further contributions/updates. Please, clone from ETSI-hosted GitLab code repository.</p> Checkout the appropriate Git branch <p> TeraFlowSDN controller versions can be found in the appropriate release tags and/or branches as described in Home &gt; Versions.</p> <p>By default the branch master is checked out and points to the latest stable version of the TeraFlowSDN controller, while branch develop contains the latest developments and contributions under test and validation.</p> <p>To switch to the appropriate branch run the following command, changing <code>develop</code> by the name of the branch you want to deploy:</p> <pre><code>cd ~/tfs-ctrl\ngit checkout develop\n</code></pre> Prepare a deployment script with the deployment settings <p> Create a new deployment script, e.g., <code>my_deploy.sh</code>, adding the appropriate settings as  follows. This section provides just an overview of the available settings. An example <code>my_deploy.sh</code> script is provided in the root folder of the project for your convenience with full description of all the settings.</p> <p>Note: The example <code>my_deploy.sh</code> script provides reasonable settings for deploying a functional and complete enough TeraFlowSDN controller, and a brief description of their meaning. To see extended descriptions, check scripts in the <code>deploy</code> folder.</p> <pre><code>cd ~/tfs-ctrl\ntee my_deploy.sh &gt;/dev/null &lt;&lt; EOF\n# ----- TeraFlowSDN ------------------------------------------------------------\nexport TFS_REGISTRY_IMAGES=\"http://localhost:32000/tfs/\"\nexport TFS_COMPONENTS=\"context device ztp monitoring pathcomp service slice nbi webui load_generator\"\nexport TFS_IMAGE_TAG=\"dev\"\nexport TFS_K8S_NAMESPACE=\"tfs\"\nexport TFS_EXTRA_MANIFESTS=\"manifests/nginx_ingress_http.yaml\"\nexport TFS_GRAFANA_PASSWORD=\"admin123+\"\nexport TFS_SKIP_BUILD=\"\"\n\n# ----- CockroachDB ------------------------------------------------------------\nexport CRDB_NAMESPACE=\"crdb\"\nexport CRDB_EXT_PORT_SQL=\"26257\"\nexport CRDB_EXT_PORT_HTTP=\"8081\"\nexport CRDB_USERNAME=\"tfs\"\nexport CRDB_PASSWORD=\"tfs123\"\nexport CRDB_DATABASE=\"tfs\"\nexport CRDB_DEPLOY_MODE=\"single\"\nexport CRDB_DROP_DATABASE_IF_EXISTS=\"YES\"\nexport CRDB_REDEPLOY=\"\"\n\n# ----- NATS -------------------------------------------------------------------\nexport NATS_NAMESPACE=\"nats\"\nexport NATS_EXT_PORT_CLIENT=\"4222\"\nexport NATS_EXT_PORT_HTTP=\"8222\"\nexport NATS_REDEPLOY=\"\"\n\n# ----- QuestDB ----------------------------------------------------------------\nexport QDB_NAMESPACE=\"qdb\"\nexport QDB_EXT_PORT_SQL=\"8812\"\nexport QDB_EXT_PORT_ILP=\"9009\"\nexport QDB_EXT_PORT_HTTP=\"9000\"\nexport QDB_USERNAME=\"admin\"\nexport QDB_PASSWORD=\"quest\"\nexport QDB_TABLE_MONITORING_KPIS=\"tfs_monitoring_kpis\"\nexport QDB_TABLE_SLICE_GROUPS=\"tfs_slice_groups\"\nexport QDB_DROP_TABLES_IF_EXIST=\"YES\"\nexport QDB_REDEPLOY=\"\"\n\nEOF\n</code></pre> <p>The settings are organized in 4 sections: - Section <code>TeraFlowSDN</code>:   - <code>TFS_REGISTRY_IMAGE</code> enables to specify the private Docker registry to be used, by default, we assume to use the Docker respository enabled in MicroK8s.   - <code>TFS_COMPONENTS</code> specifies the components their Docker image will be rebuilt, uploaded to the private Docker registry, and deployed in Kubernetes.   - <code>TFS_IMAGE_TAG</code> defines the tag to be used for Docker images being rebuilt and uploaded to the private Docker registry.   - <code>TFS_K8S_NAMESPACE</code> specifies the name of the Kubernetes namespace to be used for deploying the TFS components.   - <code>TFS_EXTRA_MANIFESTS</code> enables to provide additional manifests to be applied into the Kubernetes environment during the deployment. Typical use case is to deploy ingress controllers, service monitors for Prometheus, etc.   - <code>TFS_GRAFANA_PASSWORD</code> lets you specify the password you want to use for the <code>admin</code> user of the Grafana instance being deployed and linked to the Monitoring component.   - <code>TFS_SKIP_BUILD</code>, if set to <code>YES</code>, prevents rebuilding the Docker images. That means, the deploy script will redeploy existing Docker images without rebuilding/updating them.</p> <ul> <li>Section <code>CockroachDB</code>: enables to configure the deployment of the backend CockroachDB database.</li> <li> <p>Check example script <code>my_deploy.sh</code> for further details.</p> </li> <li> <p>Section <code>NATS</code>: enables to configure the deployment of the backend NATS message broker.</p> </li> <li> <p>Check example script <code>my_deploy.sh</code> for further details.</p> </li> <li> <p>Section <code>QuestDB</code>: enables to configure the deployment of the backend QuestDB timeseries database.</p> </li> <li>Check example script <code>my_deploy.sh</code> for further details.</li> </ul> Confirm that MicroK8s is running <p></p> <p>Run the following command:</p> <pre><code>microk8s status\n</code></pre> <p>If it is reported <code>microk8s is not running, try microk8s start</code>, run the following command to start MicroK8s:</p> <pre><code>microk8s start\n</code></pre> <p>Confirm everything is up and running:</p> <ol> <li>Periodically Check the status of Kubernetes until you see the addons [dns, ha-cluster, helm3, hostpath-storage, ingress, registry, storage] in the enabled block.</li> <li>Periodically Check Kubernetes resources until all pods are Ready and Running.</li> </ol> Deploy TFS controller <p> First, source the deployment settings defined in the previous section. This way, you do not need to specify the environment variables in each and every command you execute to operate the TFS controller. Be aware to re-source the file if you open new terminal sessions. Then, run the following command to deploy TeraFlowSDN controller on top of the MicroK8s Kubernetes platform.</p> <pre><code>cd ~/tfs-ctrl\nsource my_deploy.sh\n./deploy/all.sh\n</code></pre> <p>The script performs the following steps:</p> <ul> <li>Executes script <code>./deploy/crdb.sh</code> to automate deployment of CockroachDB database used by Context component.</li> <li>The script automatically checks if CockroachDB is already deployed.</li> <li>If there are settings instructing to drop the database and/or redeploy CockroachDB, it does the appropriate actions to honor them as defined in previous section.</li> <li>Executes script <code>./deploy/nats.sh</code> to automate deployment of NATS message broker used by Context component.</li> <li>The script automatically checks if NATS is already deployed.</li> <li>If there are settings instructing to redeploy the message broker, it does the appropriate actions to honor them as defined in previous section.</li> <li>Executes script <code>./deploy/qdb.sh</code> to automate deployment of QuestDB timeseries database used by Monitoring component.</li> <li>The script automatically checks if QuestDB is already deployed.</li> <li>If there are settings instructing to redeploy the timeseries database, it does the appropriate actions to honor them as defined in previous section.</li> <li>Executes script <code>./deploy/tfs.sh</code> to automate deployment of TeraFlowSDN.</li> <li>Creates the namespace defined in <code>TFS_K8S_NAMESPACE</code></li> <li>Creates secrets for CockroachDB, NATS, and QuestDB to be used by Context and Monitoring components.</li> <li>Builds the Docker images for the components defined in <code>TFS_COMPONENTS</code></li> <li>Tags the Docker images with the value of <code>TFS_IMAGE_TAG</code></li> <li>Pushes the Docker images to the repository defined in <code>TFS_REGISTRY_IMAGE</code></li> <li>Deploys the components defined in <code>TFS_COMPONENTS</code></li> <li>Creates the file <code>tfs_runtime_env_vars.sh</code> with the environment variables for the components defined in <code>TFS_COMPONENTS</code> defining their local host addresses and their port numbers.</li> <li>Applies extra manifests defined in <code>TFS_EXTRA_MANIFESTS</code> such as:<ul> <li>Creating an ingress controller listening at port 80 for HTTP connections to enable external access to the TeraFlowSDN WebUI, Grafana Dashboards, and Compute NBI interfaces.</li> <li>Deploying service monitors to enable monitoring the performance of the components, device drivers and service handlers.</li> </ul> </li> <li>Initialize and configure the Grafana dashboards (if Monitoring component is deployed)</li> <li>Report a summary of the deployment</li> <li>See Show Deployment and Logs</li> </ul>"},{"location":"deployment_guide/deployment_guide/#14-webui-and-grafana-dashboards","title":"1.4. WebUI and Grafana Dashboards","text":"<p>This section describes how to get access to the TeraFlowSDN controller WebUI and the monitoring Grafana dashboards.</p> Access the TeraFlowSDN WebUI <p> If you followed the installation steps based on MicroK8s, you got an ingress controller installed that exposes on TCP port 80.</p> <p>Besides, the ingress controller defines the following reverse proxy paths (on your local machine):</p> <ul> <li><code>http://127.0.0.1/webui</code>: points to the WebUI of TeraFlowSDN.</li> <li><code>http://127.0.0.1/grafana</code>: points to the Grafana dashboards.   This endpoint brings access to the monitoring dashboards of TeraFlowSDN.   The credentials for the <code>admin</code>user are those defined in the <code>my_deploy.sh</code> script, in the <code>TFS_GRAFANA_PASSWORD</code> variable.</li> <li><code>http://127.0.0.1/restconf</code>: points to the Compute component NBI based on RestCONF.    This endpoint enables connecting external software, such as ETSI OpenSourceMANO NFV Orchestrator, to TeraFlowSDN.</li> </ul> <p>Note: In the creation of the VM, a forward from host TCP port 8080 to VM's TCP port 80 is configured, so the WebUIs and REST APIs of TeraFlowSDN should be exposed on the endpoint <code>127.0.0.1:8080</code> of your local machine instead of <code>127.0.0.1:80</code>.</p>"},{"location":"deployment_guide/deployment_guide/#15-show-deployment-and-logs","title":"1.5. Show Deployment and Logs","text":"<p>This section presents some helper scripts to inspect the status of the deployment and  the logs of the components. These scripts are particularly helpful for troubleshooting during execution of  experiments, development, and debugging.</p> Report the deployment of the TFS controller <p></p> <p>The summary report given at the end of the Deploy TFS controller procedure can be generated manually at any time by running the following command. You can avoid sourcing <code>my_deploy.sh</code> if it has been already done.</p> <pre><code>cd ~/tfs-ctrl\nsource my_deploy.sh\n./deploy/show.sh\n</code></pre> <p>Use this script to validate that all the pods, deployments, replica sets, ingress  controller, etc. are ready and have the appropriate state, e.g., running for Pods, and  the services are deployed and have appropriate IP addresses and port numbers.</p> Report the log of a specific TFS controller component <p></p> <p>A number of scripts are pre-created in the <code>scripts</code> folder to facilitate the inspection  of the component logs. For instance, to dump the log of the Context component, run the following command. You can avoid sourcing <code>my_deploy.sh</code> if it has been already done.</p> <pre><code>source my_deploy.sh\n./scripts/show_logs_context.sh\n</code></pre>"},{"location":"development_guide/development_guide/","title":"2. Development Guide","text":""},{"location":"development_guide/development_guide/#21-configure-environment","title":"2.1. Configure Environment","text":""},{"location":"development_guide/development_guide/#211-python","title":"2.1.1. PythonUpgrade the Ubuntu distribution  <p>Skip this step if you already did it during the installation of your machine.</p> <pre><code>sudo apt-get update -y\nsudo apt-get dist-upgrade -y\n</code></pre> Install PyEnv dependencies <p></p> <pre><code>sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget \\\n    curl llvm git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev\n</code></pre> Install PyEnv <p></p> <p>We recommend installing PyEnv through PyEnv Installer. Below you can find the instructions, but we refer you to the link for updated  instructions.</p> <pre><code>curl https://pyenv.run | bash\n# When finished, edit ~/.bash_profile // ~/.profile // ~/.bashrc as the installer proposes.\n# In general, it means to append the following lines to ~/.bashrc:\nexport PYENV_ROOT=\"$HOME/.pyenv\"\ncommand -v pyenv &gt;/dev/null || export PATH=\"$PYENV_ROOT/bin:$PATH\"\neval \"$(pyenv init -)\"\neval \"$(pyenv virtualenv-init -)\"\n</code></pre> <p>In case .bashrc is not linked properly to your profile, you may need to append the  following line into your local .profile file:</p> <pre><code># Open ~/.profile and append this line:\n+source \"$HOME\"/.bashrc\n</code></pre> Restart the machine <p> Restart the machine for all the changes to take effect.</p> <pre><code>sudo reboot\n</code></pre> Install Python 3.9 over PyEnv <p></p> <p>ETSI TeraFlowSDN uses Python 3.9 by default. You should install the latest stable update of Python 3.9, i.e., avoid \"-dev\" versions. To find the latest version available in PyEnv, you can run the following command:</p> <pre><code>pyenv install --list | grep \" 3.9\"\n</code></pre> <p>At the time of writing, this command will output the following list:</p> <pre><code>  3.9.0\n  3.9-dev\n  3.9.1\n  3.9.2\n  3.9.4\n  3.9.5\n  3.9.6\n  3.9.7\n  3.9.8\n  3.9.9\n  3.9.10\n  3.9.11\n  3.9.12\n  3.9.13\n  3.9.14 \n  3.9.15\n  3.9.16 ** always select the latest version **\n</code></pre> <p>Therefore, the latest stable version is Python 3.9.16. To install this version, you should run:</p> <pre><code>pyenv install 3.9.16\n    # This command might take some minutes depending on your Internet connection speed \n    # and the performance of your machine.\n</code></pre> Create the Virtual Environment for TeraFlowSDN <p> The following commands create a virtual environment named as <code>tfs</code> using Python 3.9 and  associate that environment with the current folder, i.e., <code>~/tfs-ctrl</code>. That way, when you are in that folder, the associated virtual environment will be used,  thus inheriting the Python interpreter, i.e., Python 3.9, and the Python packages  installed on it.</p> <pre><code>cd ~/tfs-ctrl\npyenv virtualenv 3.9.16 tfs\npyenv local 3.9.16/envs/tfs\n</code></pre> <p>After completing these commands, you should see in your prompt that now you're within  the virtual environment <code>3.9.16/envs/tfs</code> on folder <code>~/tfs-ctrl</code>:</p> <pre><code>(3.9.16/envs/tfs) tfs@tfs-vm:~/tfs-ctrl$\n</code></pre> <p>In case that the correct pyenv does not get automatically activated when you change to  the tfs-ctrl/ folder, then execute the following command:</p> <pre><code>cd ~/tfs-ctrl\npyenv activate 3.9.16/envs/tfs\n</code></pre> Install the basic Python packages within the virtual environment <p> From within the <code>3.9.16/envs/tfs</code> environment on folder <code>~/tfs-ctrl</code>, run the following  commands to install the basic Python packages required to work with TeraFlowSDN.</p> <pre><code>cd ~/tfs-ctrl\n./install_requirements.sh\n</code></pre> <p>Some dependencies require to re-load the session, so log-out and log-in again.</p> Generate the Python code from the gRPC Proto messages and services <p></p> <p>The components, e.g., microservices, of the TeraFlowSDN controller, in general, use a gRPC-based open API to interoperate. All the protocol definitions can be found in sub-folder <code>proto</code> within the root project folder. For additional details on gRPC, visit the official web-page gRPC.</p> <p>In order to interact with the components, (re-)generate the Python code from gRPC definitions running the following command:</p> <pre><code>cd ~/tfs-ctrl\nproto/generate_code_python.sh\n</code></pre>","text":"<p>This section describes how to configure the Python environment to run experiments and  develop code for the ETSI TeraFlowSDN controller. In particular, we use PyEnv to install the appropriate  version of Python and manage the virtual environments.</p>"},{"location":"development_guide/development_guide/#212-java-quarkus","title":"2.1.2. Java (Quarkus) <p>This section describe the steps needed to create a development environment for TFS components implemented in Java. Currently, ZTP and Policy components have been developed in Java (version 11) and use the Quarkus framework, which enables kubernetes-native development.</p> Install JDK <p> To begin, make sure that you have java installed and in the correct version</p> <pre><code>java --version\n</code></pre> <p>If you don't have java installed you will get an error like the following:</p> <pre><code>Command 'java' not found, but can be installed with:\n\nsudo apt install default-jre              # version 2:1.11-72build1, or\nsudo apt install openjdk-11-jre-headless  # version 11.0.14+9-0ubuntu2\nsudo apt install openjdk-17-jre-headless  # version 17.0.2+8-1\nsudo apt install openjdk-18-jre-headless  # version 18~36ea-1\nsudo apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1\n</code></pre> <p>In which case you should use the following command to install the correct version:</p> <pre><code>sudo apt install openjdk-11-jre-headless\n</code></pre> <p>Else you should get something like the following:</p> <pre><code>openjdk 11.0.18 2023-01-17\nOpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1)\nOpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1, mixed mode, sharing)\n</code></pre> Compiling and testing existing components <p> In the root directory of the existing Java components you will find an executable maven wrapper named <code>mvnw</code>. You could use this executable, which is already configured in pair with the components, instead of your local maven installation. So for example if you want to compile the project you would run the following:</p> <pre><code>./mvnw compile\n</code></pre> VS Code Quarkus plugin <p> In case you are using VS Code for development, we suggest to install the official Quarkus extension. The extension should be able to automatically find the current open project and integrate with the above <code>mvnw</code> maven wrapper, making it easier to control the maven lifecycle. Make sure that you open the specific component directory (i.e., <code>src/ztp</code> or <code>src/policy</code>) and not the general controller one (i.e., <code>src</code>.</p> New Java TFS component <p></p> <p>Sample Project</p> <p>If you want to create a new TFS component written in Java you could generate a new Quarkus project based on the following project:</p> <p>TFS Sample Quarkus Project</p> <p>In that way, you should have most of the libraries you would need to integrate with the rest of the TFS Components. Feel free however to add or remove libraries depending on your needs.</p> <p>Initial setup</p> <p>If you used the sample project above, you should have a project with a basic structure. However there are some steps that you should take before starting development.</p> <p>First make sure that you copy the protobuff files, that are found in the root directory of the TFS SDN controller, to the <code>new-component/src/main/proto</code> directory.</p> <p>Next you should create the following files:</p> <ul> <li><code>new-component/.gitlab-ci.yml</code></li> <li><code>new-component/Dockerfile</code></li> <li><code>new-component/src/resources/application.yaml</code></li> </ul> <p>We suggest to copy the respective files from existing components (Automation and Policy) and change them according to your needs.</p>","text":""},{"location":"development_guide/development_guide/#213-java-maven","title":"2.1.3. Java (Maven) <p>Page under construction</p>","text":""},{"location":"development_guide/development_guide/#214-rust","title":"2.1.4. Rust <p>Page under construction</p>","text":""},{"location":"development_guide/development_guide/#215-erlang","title":"2.1.5. Erlang <p>This section describes how to configure the Erlang environment to run experiments and develop code for the ETSI TeraFlowSDN controller.</p> <p>First we need to install Erlang. There is multiple way, for development we will be using ASDF, a tool that allows the installation of multiple version of Erlang at the same time, and switch from one version to the other at will.</p> <ul> <li>First, install any missing dependencies:</li> </ul> <pre><code>sudo apt install curl git autoconf libncurses-dev build-essential m4 libssl-dev \n</code></pre> <ul> <li>Download ASDF tool to the local account:</li> </ul> <pre><code>git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2\n</code></pre> <ul> <li>Make ASDF activate on login by adding these lines at the end of the <code>~/.bashrc</code> file:</li> </ul> <pre><code>. $HOME/.asdf/asdf.sh\n. $HOME/.asdf/completions/asdf.bash\n</code></pre> <ul> <li>Logout and log back in to activate ASDF.</li> </ul> <p>ASDF supports multiple tools by installing there corresponding plugins.</p> <ul> <li>Install ASDF plugin for Erlang:</li> </ul> <pre><code>asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git\n</code></pre> <ul> <li>Install a version of Erlang:</li> </ul> <pre><code>asdf install erlang 24.3.4.2\n</code></pre> <ul> <li>Activate Erlang locally for TFS controller. This will create a local file called <code>.tool-versions</code> defining which version of the tools to use when running under the current directory:</li> </ul> <pre><code>cd tfs-ctrl/\nasdf local erlang 24.3.4.2\n</code></pre> <p>Erlang projects uses a build tool called rebar3. It is used to manager project dependenecies, compile a project and generate project releases.</p> <ul> <li>Install rebar3 localy from source:</li> </ul> <pre><code>cd ~\ngit clone https://github.com/erlang/rebar3.git\ncd rebar3\nasdf local erlang 24.3.4.2\n./bootstrap\n./rebar3 local install\n</code></pre> <ul> <li>Update <code>~/.bashrc</code> to use rebar3 by adding this line at the end:</li> </ul> <pre><code>export PATH=$HOME/.cache/rebar3/bin:$PATH\n</code></pre> <ul> <li>Logout and log back in.</li> </ul>","text":""},{"location":"development_guide/development_guide/#216-kotlin","title":"2.1.6. Kotlin <p>This section describes the steps needed to establish a development environment for TFS (TeraFlowSDN) components implemented in Kotlin. Currently, the <code>Gateway</code> component stands as the sole component developed in Kotlin.</p> Install Kotlin <p> To begin, make sure that you have kotlin installed and its current version:</p> <pre><code>kotlin -version\n</code></pre> <p>If you don't have kotlin installed you will get an error like the following:</p> <pre><code>Command 'kotlin' not found, but can be installed with:\nsudo snap install --classic kotlin\n</code></pre> <p>In which case you should use the following command to install the correct version:</p> <pre><code> sudo snap install --classic kotlin\n</code></pre> <p>Currently, the recommended version is 1.6.21, which uses Java Runtime Environment (JRE) version 11.</p> Compiling and testing existing components <p> To compile a Kotlin project using Gradle, similarly to using the Maven wrapper (mvnw) for Java projects, you can use the Gradle wrapper (gradlew) within the root directory of your Kotlin component, specifically the gateway directory.</p> <p>Navigate to the gateway directory within your Kotlin project. Ensure that it contains the gradlew script along with the gradle directory. Then, create a directory named <code>proto</code> and move all the files with extension <code>.proto</code> in this way:</p> <pre><code>mkdir proto\ncp ../../../proto/*.proto ./proto \n</code></pre> <p>For building the application, open a terminal or command prompt, navigate to the gateway directory, and run the following command:</p> <pre><code>./gradlew build\n</code></pre> <p>The following program runs the gateway application:</p> <pre><code>./gradlew runServer \n</code></pre> New Kotlin TFS component <p></p> <p>Sample Project</p> <p>If you want to create a new TFS component written in Kotlin you could generate a Kotlin project using <code>gradle</code>. The recommended version is 7.1. Follow the following Gradle guide for its installation. For building the prokect follow this link instead.</p> <p>From inside the new project directory, run the init task using the following command in a terminal: <code>gradle init</code>. </p> <p>The output will look like this:</p> <pre><code>$ gradle init\n\nSelect type of project to generate:\n  1: basic\n  2: application\n  3: library\n  4: Gradle plugin\nEnter selection (default: basic) [1..4] 2\n\nSelect implementation language:\n  1: C++\n  2: Groovy\n  3: Java\n  4: Kotlin\n  5: Scala\n  6: Swift\nEnter selection (default: Java) [1..6] 4\n\nSelect build script DSL:\n  1: Groovy\n  2: Kotlin\nEnter selection (default: Groovy) [1..2] 1\n\nProject name (default: demo):\nSource package (default: demo):\n\n\nBUILD SUCCESSFUL\n2 actionable tasks: 2 executed\n</code></pre> <p>Initial setup</p> <p>The <code>gradle init</code> command generates the new project. </p> <p>First, ensure the protobuf files are copied from the root directory of the TFS SDN controller. Run the following command in the directory of the new project:</p> <pre><code>mkdir proto \ncp TFS/project/root/path/proto/*.proto ./proto/\n</code></pre> <p>The file <code>build.gradle.ktl</code> is fundamental as it manages dependencies. Adjust it for adding external libraries.  </p> <p>Next you should create the following files:</p> <ol> <li><code>new-component/.gitlab-ci.yml</code></li> <li><code>new-component/Dockerfile</code></li> </ol> <p>We recommend leveraging the structures and configurations found in the files of existing components for inspiration.</p> <p>Docker Container This project operates with Docker containers. Ensure the production of the container version for your component. To generate the container version of the project, modify the 'new-component/Dockerfile.' Execute the following command from the project's root directory:</p> <pre><code>docker build -t new-image -f new-component/Dockerfile ./\n</code></pre>","text":""},{"location":"development_guide/development_guide/#22-configure-vscode","title":"2.2. Configure VScode","text":"Install VSCode and the required extensions <p>If not already done, install VSCode and the \"Remote SSH\" extension on your local machine, not in the VM.</p> <p>Note: \"Python\" extension is not required here. It will be installed later on the VSCode server running on the VM.</p> Configure the \"Remote SSH\" extension <p></p> <ul> <li>Go to left icon \"Remote Explorer\"</li> <li>Click the \"gear\" icon next to \"SSH TARGETS\" on top of \"Remote Explorer\" bar</li> <li>Choose to edit \"&lt;...&gt;/.ssh/config\" file (or equivalent)</li> <li>Add the following entry (assuming previous port forwarding configuration):</li> </ul> <pre><code>Host TFS-VM\n    HostName 127.0.0.1\n    Port 2200\n    ForwardX11 no\n    User tfs\n</code></pre> <ul> <li>Save the file</li> <li>An entry \"TFS-VM\" should appear on \"SSH TARGETS\".</li> </ul> Connect VSCode to the VM through \"Remote SSH\" extension <p></p> <ul> <li>Right-click on \"TFS-VM\"</li> <li>Select \"Connect to Host in Current Window\"</li> <li>Reply to the questions asked</li> <li>Platform of the remote host \"TFS-VM\": Linux</li> <li>\"TFS-VM\" has fingerprint \"\". Do you want to continue?: Continue <li>Type tfs user's password: tfs123</li> <li>You should be now connected to the TFS-VM.</li> <p>Note: if you get a connection error message, the reason might be due to wrong SSH server fingerprint. Edit file           \"&lt;...&gt;/.ssh/known_hosts\" on your local user account, check if there is a line starting with           \"[127.0.0.1]:2200\" (assuming previous port forwarding configuration), remove the entire line, save the file,           and retry connection.</p> Add SSH key to prevent typing the password every time <p> This step creates an SSH key in the VM and installs it on the VSCode to prevent having to type the password every time.</p> <ul> <li>In VSCode (connected to the VM), click menu \"Terminal &gt; New Terminal\"</li> <li>Run the following commands on the VM's terminal through VSCode</li> </ul> <pre><code>ssh-keygen -t rsa -b 4096 -f ~/.ssh/tfs-vm.key\n  # leave password empty\nssh-copy-id -i ~/.ssh/tfs-vm.key.pub tfs@10.0.2.10\n  # tfs@10.0.2.10's password: &lt;type tfs user's password: tfs123&gt;\nrm .ssh/known_hosts \n</code></pre> <ul> <li>In VSCode, click left \"Explorer\" panel to expand, if not expanded, and click \"Open Folder\" button.</li> <li>Choose \"/home/tfs/\"</li> <li>Type tfs user's password when asked</li> <li>Trust authors of the \"/home/tfs [SSH: TFS-VM]\" folder when asked</li> <li>Right click on the file \"tfs-vm.key\" in the file explorer</li> <li>Select \"Download...\" option</li> <li>Download the file into your user's accout \".ssh\" folder</li> <li> <p>Delete files \"tfs-vm.key\" and \"tfs-vm.key.pub\" on the TFS-VM.</p> </li> <li> <p>In VSCode, click left \"Remote Explorer\" panel to expand</p> </li> <li>Click the \"gear\" icon next to \"SSH TARGETS\" on top of \"Remote Explorer\" bar</li> <li>Choose to edit \"&lt;...&gt;/.ssh/config\" file (or equivalent)</li> <li>Find entry \"Host TFS-VM\" and update it as follows:</li> </ul> <pre><code>Host TFS-VM\n    HostName 127.0.0.1\n    Port 2200\n    ForwardX11 no\n    User tfs\n    IdentityFile \"&lt;path to the downloaded identity private key file&gt;\"\n</code></pre> <ul> <li>Save the file</li> <li>From now, VSCode will use the identity file to connect to the TFS-VM instead of the user's password.</li> </ul> Install VSCode Python Extension (in VSCode server) <p> This step installs Python extensions in VSCode server running in the VM.</p> <ul> <li>In VSCode (connected to the VM), click left button \"Extensions\"</li> <li>Search \"Python\" extension in the extension Marketplace.</li> <li> <p>Install official \"Python\" extension released by Microsoft.</p> <ul> <li>By default, since you're connected to the VM, it will be installed in the VSCode server running in the VM.</li> </ul> </li> <li> <p>In VSCode (connected to the VM), click left button \"Explorer\"</p> </li> <li>Click \"Ctrl+Alt+P\" and type \"Python: Select Interpreter\". Select option \"Python: 3.9.13 64-bit ('tfs')\"</li> </ul> Define environment variables for VSCode <p> The source code in the TFS controller project is hosted in folder <code>src/</code>. To help VSCode find the Python modules and packages, add the following file into your working space root folder:</p> <pre><code>echo \"PYTHONPATH=./src\" &gt;&gt; ~/tfs-ctrl/.env\n</code></pre>"},{"location":"development_guide/development_guide/#23-develop-a-component-wip","title":"2.3. Develop A Component (WIP)","text":"<p>Page under construction</p>"},{"location":"testing/postman/","title":"Postman","text":"<p>In this section we can use Postman to publish an API as a provider and use it as an invoker.</p>"},{"location":"testing/postman/#requisites","title":"Requisites","text":"<ul> <li>We will need to have Node.js installed since we will use a small script to create the CSRs of the certificates.</li> <li>An instance of CAPIF (If it is not local, certain variables would have to be modified both in the Node.js script and in the Postman environment variables).</li> </ul>"},{"location":"testing/postman/#first-steps","title":"First steps","text":"<ol> <li>Install the Node dependencies package.json to run the script with:</li> </ol> <pre><code>npm i\n</code></pre> <ol> <li>Run the script.js with the following command:</li> </ol> <pre><code>node script.js\n</code></pre> <ol> <li>Import Postman collection and environment variables (CAPIF.postman_collection.json and CAPIF.postman_environment.json)</li> <li>Select CAPIF Environment before start testing.</li> </ol>"},{"location":"testing/postman/#remote-capif","title":"Remote CAPIF","text":"<p>If the CAPIF is not local, the host and port of both the CAPIF and the register would have to be specified in the variables, and the CAPIF_HOSTNAME in the script, necessary to obtain the server certificate.</p> <p>Enviroments in Postman</p> <pre><code>CAPIF_HOSTNAME     capifcore\nCAPIF_PORT         8080\nREGISTER_HOSTNAME  register\nREGISTER_PORT      8084\n</code></pre> <p>Const in script.js</p> <pre><code>CAPIF_HOSTNAME    capifcore\n</code></pre>"},{"location":"testing/postman/#capif-flows","title":"CAPIF Flows","text":"<p>Once the first steps have been taken, we can now use Postman requests. These requests are numbered in the order that must be followed to obtain everything necessary from CAPIF.</p>"},{"location":"testing/postman/#creation-of-user-by-admin","title":"Creation of User by Admin","text":"<p>The first step would be for an administrator to create a user with which a provider and an invoker will be created. To do this, the admin must log in to obtain the token needed in admin requests.</p>"},{"location":"testing/postman/#01-login_admin","title":"01-Login_admin","text":""},{"location":"testing/postman/#02-creation-of-user","title":"02-Creation of User","text":""},{"location":"testing/postman/#publication-of-an-api","title":"Publication of an API","text":"<p>The next step is to register a provider using the user created by the administrator in order to publish an API.</p>"},{"location":"testing/postman/#03-getauth_provider","title":"03-getauth_provider","text":""},{"location":"testing/postman/#04-onboard_provider","title":"04-onboard_provider","text":"<p>At this point we move on to using certificate authentication in CAPIF. In Postman it is necessary to add the certificates manually and using more than one certificate for the same host as we do in CAPIF complicates things. For this reason, we use the script to overwrite a certificate and a key when it is necessary to have a specific one.</p> <p>To configure go to settings in Postman and open the certificates section. </p> <ul> <li>Here, activate the CA certificates option and add the ca_cert.pem file found in the Responses folder.</li> <li>Adds a client certificate specifying the CAPIF host being used and the files client_cert.crt and client_key.key in the Responses folder.</li> </ul> <p>Once this is done, the node script will be in charge of changing the certificate that is necessary in each request.</p>"},{"location":"testing/postman/#05-publish_api","title":"05-publish_api","text":"<p>Once the api is published, we can start it. In this case we have a test one created in python called hello_api.py that can be executed with the following command:</p> <pre><code>python3 hello_api.py\n</code></pre> <p>The API publication interface is set to localhost with port 8088, so the service must be set up locally. If you wanted to build it on another site, you would have to change the interface description in the body of publish_api.</p> <p>With this the provider part would be finished.</p>"},{"location":"testing/postman/#calling-the-api","title":"Calling the API","text":"<p>Finally, we will create an invoker with the user given by the administrator to be able to use the published api.</p>"},{"location":"testing/postman/#06-getauth_invoker","title":"06-getauth_invoker","text":""},{"location":"testing/postman/#07-onboard_invoker","title":"07-onboard_invoker","text":"<p>At this point we move on to using certificate authentication in CAPIF. If you did not configure the provider's certificates, you would have to do it now.</p>"},{"location":"testing/postman/#08-discover","title":"08-discover","text":""},{"location":"testing/postman/#09-security_context","title":"09-security_context","text":""},{"location":"testing/postman/#10-get_token","title":"10-get_token","text":""},{"location":"testing/postman/#11-call_service","title":"11-call_service","text":"<p>With this, we would have made the API call and finished the flow.</p>"},{"location":"testing/postman/#other-requests","title":"Other requests","text":"<p>Other requests that we have added are the following:</p> <ul> <li>offboard_provider      Performs offboarding of the provider, thereby eliminating the published APIs.</li> <li>offboard_invoker       Offboards the invoker, also eliminating access to the APIs of that invoker.</li> <li>remove_user            Delete the user.</li> <li>refresh_admin_token    Return a new access token to the admin.</li> </ul>"},{"location":"testing/postman/#notes","title":"Notes","text":"<ul> <li>This process is designed to teach how requests are made in Postman and the flow that should be followed to publish and use an API.</li> <li>It is possible that if external CAPIFs are used (Public CAPIF) the test data may already be used or the API already registered.</li> <li>It is necessary to have the Node service running to make the certificate change for the requests, otherwise it will not work.</li> <li>We are working on adding more requests to the Postman collection.</li> <li>This collection is a testing guide and is recommended for testing purposes only.</li> </ul>"},{"location":"testing/robotframework/","title":"Robot Framework","text":""},{"location":"testing/robotframework/#steps-to-test","title":"Steps to Test","text":"<p>To run any test locally you will need docker and docker-compose installed in order run services and execute test plan. Steps will be:</p> <ul> <li> <p>Run All Services: See section Run All CAPIF Services</p> </li> <li> <p>Run desired tests: At this point we have 2 options:</p> </li> <li> <p>Using helper script: Script Test Execution</p> </li> <li>Build robot docker image and execute manually robot docker: Manual Build And Test Execution</li> </ul>"},{"location":"testing/robotframework/#script-test-execution","title":"Script Test Execution","text":"<p>This script will build robot docker image if it's need and execute tests selected by \"include\" option. Just go to service folder, execute and follow steps.</p> <pre><code>./run_capif_tests.sh --include &lt;TAG&gt;\n</code></pre> <p>Results will be stored at /results <p>Please check parameters (include) under Test Execution at Manual Build And Test Execution.</p>"},{"location":"testing/robotframework/#mock-server","title":"Mock Server","text":"<p>Some tests on Test Plans require mockserver. That mock server must be deployed and reachable by Robot Framework and CCF under test.</p> <p>To run Mock Server locally you can just execute the next script:</p> <pre><code>cd services\n./run_mock_server.sh\n\nor\n./run.sh -s\n</code></pre> <p>If you want to launch only tests that not needed mockserver, just add \"--exclude mockserver\" parameter to robot execution:</p> <pre><code>./run_capif_tests.sh --include &lt;TAG&gt; --exclude mockserver\n</code></pre> <p>After run tests the Mock Server can be removed from local deployment:</p> <pre><code>./clean_mock_server.sh\n\nor\n./clean_capif_docker_services.sh -s\n</code></pre>"},{"location":"testing/robotframework/#manual-build-and-test-execution","title":"Manual Build And Test Execution","text":"<ul> <li>Build Robot docker image:</li> </ul> <pre><code>cd tools/robot\ndocker build . -t capif-robot-test:latest\n</code></pre> <ul> <li>Tests Execution:</li> </ul> <p>Execute all tests locally:</p> <pre><code>&lt;PATH_TO_REPOSITORY&gt;=path in local machine to repository cloned.\n&lt;PATH_RESULT_FOLDER&gt;=path to a folder on local machine to store results of Robot Framework execution.\n&lt;CAPIF_HOSTNAME&gt;=Is the hostname set when run.sh is executed, by default it is capifcore.\n&lt;CAPIF_HTTP_PORT&gt;=This is the port to reach when robot framework want to reach CAPIF deployment using http, this should be set to port without TLS set on Nginx, 8080 by default.\n&lt;CAPIF_HTTPS_PORT&gt;=This is the port to be used when we want to use https connection, this should be set to port with TLS set on Nginx, 443 by default\n&lt;CAPIF_REGISTER&gt;=This is the hostname of register service deployed. By default it is register.\n&lt;CAPIF_REGISTER_PORT&gt;=This is the port to be used to reach register service deployed. By default it is 8084.\n&lt;CAPIF_VAULT&gt;=This is the hostname of vault service. By default it is vault.\n&lt;CAPIF_VAULT_PORT&gt;=This is the port to be used to reach vault service. By default it is 8200.\n&lt;CAPIF_VAULT_TOKEN&gt;=Vault token to be used on request through vault. By default it is \"read-ca-token\".\n&lt;MOCK_SERVER_URL&gt;=Setup Mock server url to be used in notifications at tests marked with mockserver tag. By default it is not set.\n\nTo execute all tests run :\ndocker run -ti --rm --network=\"host\" \\\n    --add-host host.docker.internal:host-gateway \\\n    --add-host vault:host-gateway \\\n    --add-host register:host-gateway \\\n    --add-host mock-server:host-gateway \\\n    -v &lt;PATH_TO_REPOSITORY&gt;/tests:/opt/robot-tests/tests \\\n    -v &lt;PATH_RESULT_FOLDER&gt;:/opt/robot-tests/results capif-robot-test:latest  \\\n    --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \\\n    --variable CAPIF_HTTP_PORT:$CAPIF_HTTP_PORT \\\n    --variable CAPIF_HTTPS_PORT:$CAPIF_HTTPS_PORT \\\n    --variable CAPIF_REGISTER:$CAPIF_REGISTER \\\n    --variable CAPIF_REGISTER_PORT:$CAPIF_REGISTER_PORT \\\n    --variable CAPIF_VAULT:$CAPIF_VAULT \\\n    --variable CAPIF_VAULT_PORT:$CAPIF_VAULT_PORT \\\n    --variable CAPIF_VAULT_TOKEN:$CAPIF_VAULT_TOKEN \\\n    --variable MOCK_SERVER_URL:$MOCK_SERVER_URL \\\n    --include all\n</code></pre> <p>Execute specific tests locally:</p> <pre><code>To run more specific tests, for example, only one functionality:\n&lt;TAG&gt;=Select one from list:\n  \"capif_api_acl\",\n  \"capif_api_auditing_service\",\n  \"capif_api_discover_service\",\n  \"capif_api_events\",\n  \"capif_api_invoker_management\",\n  \"capif_api_logging_service\",\n  \"capif_api_provider_management\",\n  \"capif_api_publish_service\",\n  \"capif_security_api\n\nAnd Run:\ndocker run -ti --rm --network=\"host\" \\\n    --add-host host.docker.internal:host-gateway \\\n    --add-host vault:host-gateway \\\n    --add-host register:host-gateway \\\n    --add-host mock-server:host-gateway \\\n    -v &lt;PATH_TO_REPOSITORY&gt;/tests:/opt/robot-tests/tests \\\n    -v &lt;PATH_RESULT_FOLDER&gt;:/opt/robot-tests/results capif-robot-test:latest  \\\n    --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \\\n    --variable CAPIF_HTTP_PORT:$CAPIF_HTTP_PORT \\\n    --variable CAPIF_HTTPS_PORT:$CAPIF_HTTPS_PORT \\\n    --variable CAPIF_REGISTER:$CAPIF_REGISTER \\\n    --variable CAPIF_REGISTER_PORT:$CAPIF_REGISTER_PORT \\\n    --variable CAPIF_VAULT:$CAPIF_VAULT \\\n    --variable CAPIF_VAULT_PORT:$CAPIF_VAULT_PORT \\\n    --variable CAPIF_VAULT_TOKEN:$CAPIF_VAULT_TOKEN \\\n    --variable MOCK_SERVER_URL:$MOCK_SERVER_URL \\\n    --include &lt;TAG&gt;\n</code></pre>"},{"location":"testing/robotframework/#test-result-review","title":"Test result review","text":"<p>In order to Review results after tests, you can check general report at /report.html or if you need more detailed information /log.html, example: <ul> <li> <p>Report: </p> </li> <li> <p>Detailed information: </p> </li> </ul> <p>NOTE: If you need more detail at Robot Framework Logs you can set log level option just adding to command --loglevel DEBUG</p>"},{"location":"testing/testplan/","title":"Test Plan Index","text":"<p>List of Common API Services implemented:</p> <ul> <li>Common Operations</li> <li>Api Invoker Management</li> <li>Api Provider Management</li> <li>Api Publish Service</li> <li>Api Discover Service</li> <li>Api Events Service</li> <li>Api Security Service</li> <li>Api Logging Service</li> <li>Api Auditing Service</li> <li>Api Access Control Policy</li> </ul>"},{"location":"testing/testplan/api_access_control_policy/","title":"Test Plan for CAPIF Api Access Control Policy","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_access_control_policy/#test-case-1-retrieve-acl","title":"Test Case 1: Retrieve ACL","text":"<p>Test ID: capif_api_acl-1</p> <p>Description:</p> <p>This test case will check that an API Provider can retrieve ACL from CAPIF</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>contain only one object.</li> <li>apiInvokerId must match apiInvokerId registered previously.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-2-retrieve-acl-with-2-service-apis-published","title":"Test Case 2: Retrieve ACL with 2 Service APIs published","text":"<p>Test ID: capif_api_acl-2</p> <p>Description:</p> <p>This test case will check that an API Provider can retrieve ACL from CAPIF for 2 different serviceApis published.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had two Service API Published on CAPIF</li> <li>API Invoker had a Security Context for both Service APIs published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1 and service_2</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information for service_1.</li> <li>Provider Get ACL information for service_2.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker for both published APIs</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL for serviceApiId1</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId1}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL for serviceApiId2</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId2}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>contain one object.</li> <li>apiInvokerId must match apiInvokerId registered previously.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-3-retrieve-acl-with-security-context-created-by-two-different-invokers","title":"Test Case 3: Retrieve ACL with security context created by two different Invokers","text":"<p>Test ID: capif_api_acl-3</p> <p>Description:</p> <p>This test case will check that an API Provider can retrieve ACL from CAPIF containing 2 objects.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>Two API Invokers had a Security Context for same Service API published by provider.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1 and service_2</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker for both published APIs</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Repeat previous 3 steps in order to have a new Invoker.</p> </li> <li> <p>Provider Retrieve ACL for serviceApiId</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId1}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain two objects.</li> <li>One object must match with apiInvokerId1 and the other one with apiInvokerId2 an registered previously.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-4-retrieve-acl-filtered-by-api-invoker-id","title":"Test Case 4: Retrieve ACL filtered by api-invoker-id","text":"<p>Test ID: capif_api_acl-4</p> <p>Description:</p> <p>This test case will check that an API Provider can retrieve ACL filtering by apiInvokerId from CAPIF containing 1 objects.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>Two API Invokers had a Security Context for same Service API published by provider.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1 and service_2</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information with query parameter indicating first api-invoker-id.</li> <li>Provider Get ACL information with query parameter indicating second api-invoker-id.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker for both published APIs</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Repeat previous 3 steps in order to have a new Invoker.</p> </li> <li> <p>Provider Retrieve ACL for serviceApiId1</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={apiInvokerId1}</li> <li>Use serviceApiId, aefId and apiInvokerId1</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL for serviceApiId2</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={apiInvokerId2}</li> <li>Use serviceApiId, aefId and apiInvokerId2</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>ACL Response:</p> <ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain one objects.</li> <li>Object must match with apiInvokerId1.</li> </ol> </li> </ol> </li> <li> <p>ACL Response:</p> <ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain one objects.</li> <li>Object must match with apiInvokerId2.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-5-retrieve-acl-filtered-by-supported-features","title":"Test Case 5: Retrieve ACL filtered by supported-features","text":"<p>Test ID: capif_api_acl-5</p> <p>Description:</p> <p>CURRENTLY NOT SUPPORTED FEATURE</p> <p>This test case will check that an API Provider can retrieve ACL filtering by supportedFeatures from CAPIF containing 1 objects.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>Two API Invokers had a Security Context for same Service API published by provider.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1 and service_2</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information with query parameter indicating first supported-features.</li> <li>Provider Get ACL information with query parameter indicating second supported-features.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker for both published APIs</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Repeat previous 3 steps in order to have a new Invoker.</p> </li> <li> <p>Provider Retrieve ACL for serviceApiId</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId1}?aef-id=${aef_id}&amp;supported-features={apiInvokerId1}</li> <li>Use serviceApiId, aefId and apiInvokerId1</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL for serviceApiId</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId1}?aef-id=${aef_id}&amp;supported-features={apiInvokerId2}</li> <li>Use serviceApiId, aefId and apiInvokerId2</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>ACL Response:</p> <ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain one objects.</li> <li>Object must match with supportedFeatures1.</li> </ol> </li> </ol> </li> <li> <p>ACL Response:</p> <ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>Contain one objects.</li> <li>Object must match with supportedFeatures1.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-6-retrieve-acl-with-aef-id-not-valid","title":"Test Case 6: Retrieve ACL with aef-id not valid","text":"<p>Test ID: capif_api_acl-6</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF if aef-id is not valid</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${AEF_ID_NOT_VALID}</li> <li>Use serviceApiId and AEF_ID_NOT_VALID</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {service_api_id}, aef_id: {aef_id}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-7-retrieve-acl-with-service-id-not-valid","title":"Test Case 7: Retrieve ACL with service-id not valid","text":"<p>Test ID: capif_api_acl-7</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF if service-api-id is not valid</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${NOT_VALID_SERVICE_API_ID}?aef-id=${aef_id}</li> <li>Use NOT_VALID_SERVICE_API_ID and aef_id</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {service_api_id}, aef_id: {aef_id}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-8-retrieve-acl-with-service-api-id-and-aef-id-not-valid","title":"Test Case 8: Retrieve ACL with service-api-id and aef-id not valid","text":"<p>Test ID: capif_api_acl-8</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF if service-api-id and aef-id are not valid</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${NOT_VALID_SERVICE_API_ID}?aef-id=${AEF_ID_NOT_VALID}</li> <li>Use NOT_VALID_SERVICE_API_ID and aef_id</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {NOT_VALID_SERVICE_API_ID}, aef_id: {AEF_ID_NOT_VALID}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-9-retrieve-acl-without-securitycontext-created-previously-by-invoker","title":"Test Case 9: Retrieve ACL without SecurityContext created previously by Invoker","text":"<p>Test ID: capif_api_acl-9</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL if no invoker had requested Security Context to CAPIF</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker created but no Security Context for Service API published had been requested.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li> <p>Discover published APIs</p> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {NOT_VALID_SERVICE_API_ID}, aef_id: {AEF_ID_NOT_VALID}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-10-retrieve-acl-filtered-by-api-invoker-id-not-present","title":"Test Case 10: Retrieve ACL filtered by api-invoker-id not present","text":"<p>Test ID: capif_api_acl-10</p> <p>Description:</p> <p>This test case will check that an API Provider get not found response if filter by not valid api-invoker-id doesn't match any registered ACL.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={NOT_VALID_API_INVOKER_ID}</li> <li>Use serviceApiId, aefId and NOT_VALID_API_INVOKER_ID</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {NOT_VALID_SERVICE_API_ID}, aef_id: {AEF_ID_NOT_VALID}, invoker: {api_invoker_id} and supportedFeatures: {supported_features}\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-11-retrieve-acl-with-apf-certificate","title":"Test Case 11: Retrieve ACL with APF Certificate","text":"<p>Test ID: capif_api_acl-11</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF using APF Certificate</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use APF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-12-retrieve-acl-with-amf-certificate","title":"Test Case 12: Retrieve ACL with AMF Certificate","text":"<p>Test ID: capif_api_acl-12</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF using AMF Certificate</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AMF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-13-retrieve-acl-with-invoker-certificate","title":"Test Case 13: Retrieve ACL with Invoker Certificate","text":"<p>Test ID: capif_api_acl-13</p> <p>Description:</p> <p>This test case will check that an API Provider can't retrieve ACL from CAPIF using Invoker Certificate</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_access_control_policy/#test-case-14-no-acl-for-invoker-after-be-removed","title":"Test Case 14: No ACL for invoker after be removed","text":"<p>Test ID: capif_api_acl-14</p> <p>Description:</p> <p>This test case will check that ACLs are removed after invoker is removed.</p> <p>Pre-Conditions:</p> <ul> <li>API Provider had a Service API Published on CAPIF</li> <li>API Invoker had a Security Context for Service API published and ACL is present</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Provider at CCF.</li> <li>Publish a provider API with name service_1</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Provider Get ACL information of invoker.</li> <li>Remove Invoker from CAPIF.</li> <li>Provider Get ACL information of invoker.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform Invoker Onboarding store apiInvokerId</p> </li> <li>Discover published APIs</li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Provider Retrieve ACL</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={api-invoker-id}</li> <li>Use serviceApiId, aefId and api-invoker-id</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li>Remove Invoker from CAPIF</li> <li>Provider Retrieve ACL<ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}&amp;api-invoker-id={api-invoker-id}</li> <li>Use serviceApiId, aefId and api-invoker-id</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:   1. ACL Response:      1. 200 OK Response.      2. body returned must accomplish AccessControlPolicyList data structure.      3. apiInvokerPolicies must:         1. contain only one object.         2. apiInvokerId must match apiInvokerId registered previously.</p> <ol> <li>ACL Response:<ol> <li>404 Not Found Response.</li> <li>body returned must accomplish Problem Details data structure.</li> <li>apiInvokerPolicies must:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"No ACLs found for the requested service: {NOT_VALID_SERVICE_API_ID}, aef_id: {AEF_ID_NOT_VALID}, invoker: None and supportedFeatures: None\".</li> <li>cause with message \"Wrong id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/","title":"Test Plan for CAPIF Api Auditing Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_auditing_service/#test-case-1-get-capif-log-entry","title":"Test Case 1: Get CAPIF Log Entry.","text":"<p>Test ID: capif_api_auditing-1</p> <p>Description:</p> <p>This test case will check that a CAPIF AMF can get log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> <li>Log Entry exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry   4. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Create Log Entry:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs?aef-id={aefId}&amp;api-invoker-id={api-invoker-id}</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>200 OK</li> <li>Response Body must follow InvocationLog data structure with:<ul> <li>aefId</li> <li>apiInvokerId</li> <li>logs</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/#test-case-2-get-capif-log-entry-with-no-log-entry-in-capif","title":"Test Case 2: Get CAPIF Log Entry With no Log entry in CAPIF.","text":"<p>Test ID: capif_api_auditing-2</p> <p>Description:</p> <p>This test case will check that a CAPIF AEF can create log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs?aef-id={aefId}&amp;api-invoker-id={api-invoker-id}</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found Log Entry in CAPIF\".</li> <li>cause with message \"Not Exist Logs with the filters applied\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/#test-case-3-get-capif-log-entry-without-aef-id-and-api-invoker-id","title":"Test Case 3: Get CAPIF Log Entry without aef-id and api-invoker-id.","text":"<p>Test ID: capif_api_auditing-3</p> <p>Description:</p> <p>This test case will check that a CAPIF AEF can create log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is no pre-authorised (has no valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> <li>Log Entry exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry   4. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Create Log Entry:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>400 Bad Request</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 400</li> <li>title with message \"Bad Request\"</li> <li>detail with message \"aef_id and api_invoker_id parameters are mandatory\".</li> <li>cause with message \"Mandatory parameters missing\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/#test-case-4-get-capif-log-entry-with-filtter-api-version","title":"Test Case 4: Get CAPIF Log Entry with filtter api-version.","text":"<p>Test ID: capif_api_auditing-4</p> <p>Description:</p> <p>This test case will check that a CAPIF AMF can get log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> <li>Log Entry exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry   4. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Create Log Entry:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs?aef-id={aefId}&amp;api-invoker-id={api-invoker-id}&amp;api-version={v1}</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>200 OK</li> <li>Response Body must follow InvocationLog data structure with:<ul> <li>aefId</li> <li>apiInvokerId</li> <li>logs</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_auditing_service/#test-case-5-get-capif-log-entry-with-filter-api-version-but-not-exist-in-log-entry","title":"Test Case 5: Get CAPIF Log Entry with filter api-version but not exist in log entry.","text":"<p>Test ID: capif_api_auditing-4</p> <p>Description:</p> <p>This test case will check that a CAPIF AMF can get log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid AMF cert from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> <li>Log Entry exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry   4. Get Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding, invoker onboarding </p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Create Log Entry:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Get Log:</p> <ol> <li>Send GET to https://{CAPIF_HOSTNAME}/logs/v1/apiInvocationLogs?aef-id={aefId}&amp;api-invoker-id={api-invoker-id}&amp;api-version={v58}</li> <li>Use AMF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>detail with message \"Parameters do not match any log entry\"</li> <li>cause with message \"No logs found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/","title":"Test Plan for CAPIF Discover Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_discover_service/#test-case-1-discover-published-service-apis-by-authorised-api-invoker","title":"Test Case 1: Discover Published service APIs by Authorised API Invoker","text":"<p>Test ID: capif_api_discover_service-1</p> <p>Description:</p> <p>This test case will check if Network App (Invoker) can discover published service APIs.</p> <p>Pre-Conditions:</p> <ul> <li>Service APIs are published.</li> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs:<ul> <li>Send GET to https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains the API Published previously</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-2-discover-published-service-apis-by-non-authorised-api-invoker","title":"Test Case 2: Discover Published service APIs by Non Authorised API Invoker","text":"<p>Test ID: capif_api_discover_service-2</p> <p>Description:</p> <p>This test case will check that an API Publisher can't discover published APIs because is not authorized.</p> <p>Pre-Conditions:</p> <ul> <li>Service APIs are published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by no invoker entity</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs by no invoker entity:<ul> <li>Send GET to https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Use not Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Discover Request By no invoker entity:</p> <ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"User not authorized\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-3-discover-published-service-apis-by-not-registered-api-invoker","title":"Test Case 3: Discover Published service APIs by not registered API Invoker","text":"<p>Test ID: capif_api_discover_service-3</p> <p>Description:</p> <p>This test case will check that a not registered invoker is forbidden to discover published APIs.</p> <p>Pre-Conditions:</p> <ul> <li>Service APIs are published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Publisher</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs with not valid apiInvoker:<ul> <li>Send GET to https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={INVOKER_NOT_REGISTERED}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Discover Request By Invoker:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"API Invoker does not exist\".</li> <li>cause with message \"API Invoker id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-4-discover-published-service-apis-by-registered-api-invoker-with-1-result-filtered","title":"Test Case 4: Discover Published service APIs by registered API Invoker with 1 result filtered","text":"<p>Test ID: capif_api_discover_service-4</p> <p>Description:</p> <p>This test case will check if Network App (Invoker) can discover published service APIs.</p> <p>Pre-Conditions:</p> <ul> <li>At least 2 Service APIs are published.</li> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 and service_2 at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Discover filtered by api-name service_1 Service APIs by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs filtering by api-name:<ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&amp;api-name=service_1**</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> <li>filter by api-name service_1</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Publish request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains previously registered Service APIs published.</li> </ul> </li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains only Service API published with api-name service_1</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-5-discover-published-service-apis-by-registered-api-invoker-filtered-with-no-match","title":"Test Case 5: Discover Published service APIs by registered API Invoker filtered with no match","text":"<p>Test ID: capif_api_discover_service-5</p> <p>Description:</p> <p>This test case will check if Network App (Invoker) can discover published service APIs.</p> <p>Pre-Conditions:</p> <ul> <li>At least 2 Service APIs are published.</li> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 and service_2 at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Discover filtered by api-name not published Service APIs by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs filtering by api-name not published:<ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}&amp;api-name=NOT_VALID_NAME</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> <li>filter by api-name NOT_VALID_NAME</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Publish request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains previously registered Service APIs published.</li> </ul> </li> </ol> </li> <li>Response to Discover Request By Invoker:<ol> <li>404 Not Found response.</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"API Invoker {api_invoker_id} has no API Published that accomplish filter conditions\".</li> <li>cause with message \"No API Published accomplish filter conditions\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_discover_service/#test-case-6-discover-published-service-apis-by-registered-api-invoker-not-filtered","title":"Test Case 6: Discover Published service APIs by registered API Invoker not filtered","text":"<p>Test ID: capif_api_discover_service-6</p> <p>Description:</p> <p>This test case will check if Network App (Invoker) can discover published service APIs.</p> <p>Pre-Conditions:</p> <ul> <li>2 Service APIs are published.</li> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 and service_2 at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Discover without filter by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs not filtered:<ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Discover Request By Invoker:</p> <ol> <li>200 OK response.</li> <li>Response body must follow DiscoveredAPIs data structure:<ul> <li>Check if DiscoveredAPIs contains the 2 previously registered Service APIs published.</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/","title":"Test Plan for CAPIF Api Events Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_events_service/#test-case-1-creates-a-new-individual-capif-event-subscription","title":"Test Case 1: Creates a new individual CAPIF Event Subscription.","text":"<p>Test ID: capif_api_events-1</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) can Subscribe to Events</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Event Subscriptions are stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-2-creates-a-new-individual-capif-event-subscription-with-invalid-subscriberid","title":"Test Case 2: Creates a new individual CAPIF Event Subscription with Invalid SubscriberId","text":"<p>Test ID: capif_api_events-2</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) cannot Subscribe to Events without valid SubcriberId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is not pre-authorised (has invalid InvokerId or apfId)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{SUBSCRIBER_NOT_REGISTERED}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker or APF or AEF or AMF Not found\".</li> <li>cause with message \"Subscriber Not Found\".</li> </ul> </li> </ol> </li> <li> <p>Event Subscriptions are not stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-3-deletes-an-individual-capif-event-subscription","title":"Test Case 3: Deletes an individual CAPIF Event Subscription","text":"<p>Test ID: capif_api_events-3</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) can Delete an Event Subscription</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header</li> <li>Remove Event Subscription</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Remove Event Subscription:</p> <ol> <li>Send DELETE to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Event Subscriptions are stored in CAPIF Database</p> </li> <li> <p>Remove Event Subscription:</p> <ol> <li>204 No Content</li> </ol> </li> <li> <p>Event Subscription is not present at CAPIF Database.</p> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-4-deletes-an-individual-capif-event-subscription-with-invalid-subscriberid","title":"Test Case 4: Deletes an individual CAPIF Event Subscription with invalid SubscriberId","text":"<p>Test ID: capif_api_events-4</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) cannot Delete to Events without valid SubcriberId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId).</li> <li>CAPIF subscriber is subscribed to Events.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> <li>Retrieve Location Header with subscriptionId.</li> <li>Remove Event Subscribed with not valid Subscriber.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Remove Event Subcription with not valid subscriber:</p> <ol> <li>Send DELETE to https://{CAPIF_HOSTNAME}/capif-events/v1/{SUBSCRIBER_ID_NOT_VALID}/subscriptions/{subcriptionId}</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Event Subscriptions are stored in CAPIF Database</p> </li> <li> <p>Error Response Body must accomplish with ProblemDetails data structure with:</p> <ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker or APF or AEF or AMF Not found\".</li> <li>cause with message \"Subscriber Not Found\".</li> </ul> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-5-deletes-an-individual-capif-event-subscription-with-invalid-subscriptionid","title":"Test Case 5: Deletes an individual CAPIF Event Subscription with invalid SubscriptionId","text":"<p>Test ID: capif_api_events-5</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (Invoker or Publisher) cannot Delete an Event Subscription without valid SubscriptionId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has invalid InvokerId or apfId).</li> <li>CAPIF subscriber is subscribed to Events.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Subscribe to Events</li> <li>Retrieve Location Header with subscriptionId.</li> <li>Remove Event Subscribed with not valid Subscriber.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Event Subscription:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body</li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Remove Event Subcription with not valid subscriber:</p> <ol> <li>Send DELETE to to https://{CAPIF_HOSTNAME}/capif-events/v1/{subcriberId}/subscriptions/{SUBSCRIPTION_ID_NOT_VALID}</li> <li>Use Invoker Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Event Subscriptions are stored in CAPIF Database</p> </li> <li>Remove Event Subscription with not valid subscriber:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>detail with message \"Service API not existing\".</li> <li>cause with message \"Event API subscription id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-6-invoker-receives-service-api-invocation-events","title":"Test Case 6: Invoker receives Service API Invocation events","text":"<p>Test ID: capif_api_events-6, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE, receive the notification when AEF Send TO logging service result of invocations to their APIs.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered and published APIs.</li> <li>API Provider had a Service API Published on CAPIF</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register provider and publish one API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover published APIs and extract apiIds and apiNames</li> <li>Subscribe to SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE event filtering by aefId.</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header</li> <li>Emulate Success and Failure on API invocation of provider by Invoker, using Invocation Logs API.</li> </ol> <p>Information of Test:</p> <ol> <li>Perform provider registration</li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform invoker onboarding</p> </li> <li> <p>Discover published APIs:</p> <ul> <li>Get Api Ids And Api Names from response.</li> </ul> </li> <li> <p>Event Subscription to SERVICE_API_INVOCATION_SUCCESS and SERVICE_API_INVOCATION_FAILURE of provider previously registered:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['SERVICE_API_INVOCATION_SUCCESS','SERVICE_API_INVOCATION_FAILURE']</li> <li>eventFilter: only receive events from provider's aefId.</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Create Log Entry emulating provider receive Success and Failure api invocation from invoker:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body with:<ol> <li>aefId from provider published.</li> <li>apiInvokerId from invoker onboarded.</li> <li>apiId of published API</li> <li>apiName of published API</li> <li>200 and 400 results in two logs.</li> </ol> </li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Response to creation of log entry on CCF must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/api-invocation-logs/{apiVersion}/{aefId}/subscriptions/{logId}</li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>Two Events have been received.</li> <li>Validate received events follow EventNotification data structure, with invocationLog in eventDetail parameter.<ol> <li>One should be SERVICE_API_INVOCATION_SUCCESS related with 200 result at Log.</li> <li>The other one must be SERVICE_API_INVOCATION_FAILURE related with 400 result at Log.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-7-invoker-subscribe-to-service-api-available-and-unavailable-events","title":"Test Case 7: Invoker subscribe to Service API Available and Unavailable events","text":"<p>Test ID: capif_api_events-7, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE, receive the notification when AEF publish and remove it. </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered and published APIs.</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register provider and publish one API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover published APIs and extract apiIds and apiNames</li> <li>Subscribe to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE event filtering by aefId.</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header</li> <li>Provider publish new API.</li> <li>Provider remove published API.</li> </ol> <p>Information of Test:</p> <ol> <li>Perform provider registration</li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Perform invoker onboarding</p> </li> <li> <p>Discover published APIs:</p> <ul> <li>Get Api Ids And Api Names from response.</li> </ul> </li> <li> <p>Event Subscription to SERVICE_API_AVAILABLE and SERVICE_API_UNAVAILABLE of provider previously registered:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['SERVICE_API_AVAILABLE','SERVICE_API_UNAVAILABLE']</li> <li>eventFilter: only receive events from provider's aefId.</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Publish new Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_2</li> <li>Store serviceApiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Remove published Service API at CCF:</p> <ul> <li>Send DELETE to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Event Subscription must accomplish:</p> <ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li> <p>Mock Server received messages must accomplish:</p> <ol> <li>Two Events have been received.</li> <li>Validate received events follow EventNotification data structure, with apiIds in eventDetail parameter.<ol> <li>One should be SERVICE_API_AVAILABLE apiId of service_2 published API.</li> <li>The other one must be SERVICE_API_UNAVAILABLE apiId of service_1 published API.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-8-invoker-subscribe-to-service-api-update","title":"Test Case 8: Invoker subscribe to Service API Update","text":"<p>Test ID: capif_api_events-8, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to SERVICE_API_UPDATE, receive the notification when AEF Update some information on API Published.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered and published APIs.</li> <li>API Provider had a Service API Published on CAPIF</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider and publish one API at CCF</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Discover published APIs and extract apiIds and apiNames</li> <li>Subscribe to SERVICE_API_UPDATE event filtering by aefId.</li> <li>Retrieve {subscriberId} and {subscriptionId} from Location Header at event subscription</li> <li>Provider update information of Service API Published.</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> <li>Store serviceApiId</li> </ul> </li> <li> <p>Perform invoker onboarding</p> </li> <li> <p>Discover published APIs:</p> <ul> <li>Get Api Ids And Api Names from response.</li> </ul> </li> <li> <p>Event Subscription to SERVICE_API_UPDATE of provider previously registered:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['SERVICE_API_UPDATE']</li> <li>eventFilter: only receive events from provider's aefId.</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li> <p>Update published API at CCF:</p> <ul> <li>Send PUT to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>body [service api description] with overrided apiName to service_1_modified**</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Response to Update Published Service API:<ol> <li>200 OK</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiName service_1_modified**</li> </ul> </li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>One Event has been received.</li> <li>Validate received events follow EventNotification data structure, with serviceAPIDescriptions in eventDetail parameter.<ol> <li>Event should be SERVICE_API_UPDATE with eventDetail with modified apiName.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-9-provider-subscribe-to-api-invoker-events","title":"Test Case 9: Provider subscribe to API Invoker events","text":"<p>Test ID: capif_api_events-9, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Provider subscribed to API Invoker events (API_INVOKER_ONBOARDED, API_INVOKER_UPDATED and API_INVOKER_OFFBOARDED), receive the notifications when Invoker is onboarded, updated and removed respectively.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered.</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Subscribe Provider to API_INVOKER_ONBOARDED, API_INVOKER_UPDATED and API_INVOKER_OFFBOARDED events.</li> <li>Register Invoker and Onboard Invoker at CCF</li> <li>Update Onboarding Information at CCF with a minor change on \"notificationDestination\"</li> <li>Offboard Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li>Event Subscription to API_INVOKER_ONBOARDED, API_INVOKER_UPDATED and API_INVOKER_OFFBOARDED events:<ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['API_INVOKER_ONBOARDED', 'API_INVOKER_UPDATED', 'API_INVOKER_OFFBOARDED']</li> </ol> </li> <li>Use Provider AMF Certificate</li> </ol> </li> <li>Perform invoker onboarding</li> <li>Update information of previously onboarded Invoker:<ul> <li>Send PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> <li>Reference Request Body is: [put invoker onboarding body]</li> <li>\"notificationDestination\": \"http://host.docker.internal:8086/netapp_new_callback\",</li> </ul> </li> <li>Offboard:<ul> <li>Send DELETE to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Update Request (PUT) with minor change must contain:<ol> <li>200 OK response.</li> <li>notificationDestination on response must contain the new value</li> </ol> </li> <li>Response to Offboard Request (DELETE) must contain:<ol> <li>204 No Content</li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>Three Events have been received.</li> <li>Validate received events follow EventNotification data structure, with apiInvokerIds in eventDetail parameter.<ol> <li>One Event should be API_INVOKER_ONBOARDED with eventDetail with modified apiInvokerId.</li> <li>One Event should be API_INVOKER_UPDATED with eventDetail with modified apiInvokerId.</li> <li>One Event should be API_INVOKER_OFFBOARDED with eventDetail with modified apiInvokerId.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-10-provider-subscribed-to-acl-update-event","title":"Test Case 10: Provider subscribed to ACL update event","text":"<p>Test ID: capif_api_events-10, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Provider subscribed to ACCESS_CONTROL_POLICY_UPDATE receive a notification when ACL Changes.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered.</li> <li>API Provider had one Service API Published on CAPIF</li> <li>API Invoker had a Security Context for the Service API published by provider.</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF.</li> <li>Publish a provider API with name service_1.</li> <li>Register Invoker and Onboard Invoker at CCF.</li> <li>Subscribe Provider to ACCESS_CONTROL_POLICY_UPDATE event.</li> <li>Discover APIs filtered by aef_id</li> <li>Create Security Context for Invoker.</li> <li>Provider Retrieve ACL</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li>Perform invoker onboarding</li> <li>Event Subscription to ACCESS_CONTROL_POLICY_UPDATE event:<ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['ACCESS_CONTROL_POLICY_UPDATE']</li> <li>eventFilters: apiInvokerIds array with apiInvokerId of invoker</li> </ol> </li> <li>Use Provider AMF Certificate</li> </ol> </li> <li>Discover published APIs</li> <li>Create Security Context for Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li>Provider Retrieve ACL<ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Create security context:<ol> <li>201 Created response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/capif-security/v1/trustedInvokers/{apiInvokerId}</li> </ol> </li> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>contain only one object.</li> <li>apiInvokerId must match apiInvokerId registered previously.</li> </ol> </li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>One Event has been received.</li> <li>Validate received event follow EventNotification data structure, with accCtrlPolListExt in eventDetail parameter.<ol> <li>One Event should be ACCESS_CONTROL_POLICY_UPDATE with eventDetail with accCtrlPolListExt including the apiId and apiInvokerPolicies.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-11-provider-receives-an-acl-unavailable-event-when-invoker-remove-security-context","title":"Test Case 11: Provider receives an ACL unavailable event when invoker remove Security Context.","text":"<p>Test ID: capif_api_events-11, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to ACCESS_CONTROL_POLICY_UNAVAILABLE will receive the notification when AEF remove Security Context created previously.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered.</li> <li>API Provider had one Service API Published on CAPIF</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF.</li> <li>Publish a provider API with name service_1.</li> <li>Register Invoker and Onboard Invoker at CCF.</li> <li>Subscribe Invoker to ACCESS_CONTROL_POLICY_UNAVAILABLE event.</li> <li>Discover APIs filtered by aef_id</li> <li>Create Security Context for Invoker.</li> <li>Provider Retrieve ACL.</li> <li>Remove Security Context for Invoker.</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li>Perform invoker onboarding</li> <li>Event Subscription to ACCESS_CONTROL_POLICY_UNAVAILABLE event:<ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['ACCESS_CONTROL_POLICY_UNAVAILABLE']</li> <li>eventFilters: apiInvokerIds array with apiInvokerId of invoker</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li>Discover published APIs</li> <li>Create Security Context for Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li>Provider Retrieve ACL<ul> <li>Send GET https://{CAPIF_HOSTNAME}/access-control-policy/v1/accessControlPolicyList/${serviceApiId}?aef-id=${aef_id}</li> <li>Use serviceApiId and aefId</li> <li>Use AEF Provider Certificate</li> </ul> </li> <li>Delete Security Context of Invoker by Provider:<ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Use AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Create security context:<ol> <li>201 Created response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/capif-security/v1/trustedInvokers/{apiInvokerId}</li> </ol> </li> <li>ACL Response:<ol> <li>200 OK Response.</li> <li>body returned must accomplish AccessControlPolicyList data structure.</li> <li>apiInvokerPolicies must:<ol> <li>contain only one object.</li> <li>apiInvokerId must match apiInvokerId registered previously.</li> </ol> </li> </ol> </li> <li>Delete security context:<ol> <li>204 No Content response.</li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>One Event has been received.</li> <li>Validate received event follow EventNotification data structure, without eventDetail parameter.<ol> <li>One Event should be ACCESS_CONTROL_POLICY_UNAVAILABLE without eventDetail.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_events_service/#test-case-12-invoker-receives-an-invoker-authorization-revoked-and-acl-unavailable-event-when-provider-revoke-invoker-authorization","title":"Test Case 12: Invoker receives an Invoker Authorization Revoked and ACL unavailable event when Provider revoke Invoker Authorization.","text":"<p>Test ID: capif_api_events-12, mockserver</p> <p>Description:</p> <p>This test case will check that a CAPIF Invoker subscribed to API_INVOKER_AUTHORIZATION_REVOKED and ACCESS_CONTROL_POLICY_UNAVAILABLE receive both notification when AEF revoke invoker's authorization.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid InvokerId or apfId from CAPIF Authority)</li> <li>CAPIF provider is correctly registered.</li> <li>API Provider had one Service API Published on CAPIF</li> <li>Mock Server is up and running to receive requests.</li> <li>Mock Server is clean.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF.</li> <li>Publish a provider API with name service_1.</li> <li>Register Invoker and Onboard Invoker at CCF.</li> <li>Subscribe Invoker to ACCESS_CONTROL_POLICY_UNAVAILABLE and API_INVOKER_AUTHORIZATION_REVOKED events.</li> <li>Discover APIs filtered by aef_id</li> <li>Create Security Context for Invoker.</li> <li>Revoke Authorization by Provider.</li> </ol> <p>Information of Test:</p> <ol> <li>Check and Clean Mock Server</li> <li>Perform provider registration</li> <li>Perform invoker onboarding</li> <li>Event Subscription to ACCESS_CONTROL_POLICY_UNAVAILABLE and API_INVOKER_AUTHORIZATION_REVOKED event:<ol> <li>Send POST to https://{CAPIF_HOSTNAME}/capif-events/v1/{subscriberId}/subscriptions</li> <li>body event subscription request body with:<ol> <li>events: ['ACCESS_CONTROL_POLICY_UNAVAILABLE','API_INVOKER_AUTHORIZATION_REVOKED']</li> <li>eventFilters: apiInvokerIds array with apiInvokerId of invoker</li> </ol> </li> <li>Use Invoker Certificate</li> </ol> </li> <li>Discover published APIs</li> <li>Create Security Context for Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> <li>Revoke Authorization by Provider:<ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/delete</li> <li>body security notification body</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Event Subscription must accomplish:<ol> <li>201 Created</li> <li>The URI of the created resource shall be returned in the \"Location\" HTTP header, following this structure: {apiRoot}/capif-events/{apiVersion}/{subscriberId}/subscriptions/{subscriptionId}</li> <li>Response Body must follow EventSubscription data structure.</li> </ol> </li> <li>Create security context:<ol> <li>201 Created response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/capif-security/v1/trustedInvokers/{apiInvokerId}</li> </ol> </li> <li>Revoke Authorization:<ol> <li>204 No Content response.</li> </ol> </li> <li>Mock Server received messages must accomplish:<ol> <li>Two Events has been received.</li> <li>Validate received event follow EventNotification data structure, without eventDetail parameter.<ol> <li>One Event should be ACCESS_CONTROL_POLICY_UNAVAILABLE without eventDetail.</li> <li>One Event should be API_INVOKER_AUTHORIZATION_REVOKED without eventDetail.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_invoker_management/","title":"Test Plan for CAPIF Api Invoker Management","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_invoker_management/#test-case-1-onboard-network-app","title":"Test Case 1: Onboard Network App","text":"<p>Test ID: capif_api_invoker_management-1</p> <p>Description:</p> <p>This test will try to register new Network App at CAPIF Core.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was not registered previously</li> <li>Network App was not onboarded previously</li> <li>Preconditions: The administrator must have previously registered the User.</li> </ul> <p>Execution Steps:</p> <ol> <li>Retrieve access_token by User from register</li> <li>Onboard Invoker at CCF</li> <li>Store signed Certificate</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at invoker</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Onboard Invoker:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers</li> <li>Reference Request Body: invoker onboarding body</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>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_invoker_management/#test-case-2-onboard-network-app-already-onboarded","title":"Test Case 2: Onboard Network App Already onboarded","text":"<p>Test ID: capif_api_invoker_management-2</p> <p>Description:</p> <p>This test will check second onboard of same Network App is not allowed.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was onboarded previously</li> </ul> <p>Execution Steps:</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>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Repeat Onboard Invoker:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers</li> <li>Reference Request Body: invoker onboarding body</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>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Second Onboard of Network App must accomplish:<ol> <li>403 Forbidden</li> <li>Error Response Body must accomplish with ProblemDetails 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>"},{"location":"testing/testplan/api_invoker_management/#test-case-3-update-onboarded-network-app","title":"Test Case 3: Update Onboarded Network App","text":"<p>Test ID: capif_api_invoker_management-3</p> <p>Description:</p> <p>This test will try to update information of previous onboard Network App at CAPIF Core.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId}</li> </ul> <p>Execution Steps:</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>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Update information of previously onboarded Invoker:</p> <ul> <li>Send PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> <li>Reference Request Body is: [put invoker onboarding body]</li> <li>\"notificationDestination\": \"http://host.docker.internal:8086/netapp_new_callback\",</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Update Request (PUT) with minor change must contain:<ol> <li>200 OK response.</li> <li>notificationDestination on response must contain the new value</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_invoker_management/#test-case-4-update-not-onboarded-network-app","title":"Test Case 4: Update Not Onboarded Network App","text":"<p>Test ID: capif_api_invoker_management-4</p> <p>Description:</p> <p>This test will try to update information of not onboarded Network App at CAPIF Core.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was not onboarded previously</li> </ul> <p>Execution Steps:</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>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Update information of not onboarded Invoker:</p> <ul> <li>Send PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{INVOKER_NOT_REGISTERED}</li> <li>Reference Request Body is: [put invoker onboarding body]</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> </ol> </li> <li>Response to Update Request (PUT) must contain:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails 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>"},{"location":"testing/testplan/api_invoker_management/#test-case-5-offboard-network-app","title":"Test Case 5: Offboard Network App","text":"<p>Test ID: capif_api_invoker_management-5</p> <p>Description:</p> <p>This test case will check that a Registered Network App can be deleted.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was onboarded previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker at CCF</li> <li>Onboard Invoker at CCF</li> <li>Offboard Invoker at CCF</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Offboard:</p> <ul> <li>Send DELETE to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> </ol> </li> <li>Response to Offboard Request (DELETE) must contain:<ol> <li>204 No Content</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_invoker_management/#test-case-6-offboard-not-previsouly-onboarded-network-app","title":"Test Case 6: Offboard Not previsouly Onboarded Network App","text":"<p>Test ID: capif_api_invoker_management-6</p> <p>Description:</p> <p>This test case will check that a Non-Registered Network App cannot be deleted</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was not onboarded previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Invoker at CCF</li> <li>Offboard Invoker at CCF</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Offboard:</p> <ul> <li>Send DELETE to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{INVOKER_NOT_REGISTERED}</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Offboard Request (DELETE) must contain:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails 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>"},{"location":"testing/testplan/api_invoker_management/#test-case-7-update-onboarded-network-app-certificate","title":"Test Case 7: Update Onboarded Network App Certificate","text":"<p>Test ID: capif_api_invoker_management-7</p> <p>Description:</p> <p>This test will try to update public key and get a new signed certificate by CAPIF Core.</p> <p>Pre-Conditions:</p> <ul> <li>Network App was registered previously</li> <li>Network App was onboarded previously with {onboardingId} and {public_key_1}</li> </ul> <p>Execution Steps:</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>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding 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 PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</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> <p>Update information of previously onboarded Invoker Using new certificate:</p> <ul> <li>Send PUT to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{onboardingId}</li> <li>Reference Request Body is: [put invoker onboarding body]</li> <li>\"notificationDestination\": \"http://host.docker.internal:8086/netapp_new_callback\",</li> <li>Use new Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Onboard request must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> <li>Response to Update Request (PUT) with new public key:<ol> <li>200 OK response.</li> <li>apiInvokerCertificate with new certificate on response -&gt; store to use.</li> </ol> </li> <li>Response to Update Request (PUT) with minor change must contain:<ol> <li>200 OK response.</li> <li>notificationDestination on response must contain the new value</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_logging_service/","title":"Test Plan for CAPIF Api Logging Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_logging_service/#test-case-1-creates-a-new-individual-capif-log-entry","title":"Test Case 1: Creates a new individual CAPIF Log Entry.","text":"<p>Test ID: capif_api_logging-1</p> <p>Description:</p> <p>This test case will check that a CAPIF AEF can create log entry to Logging Service</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid aefId from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>201 Created</li> <li>Response Body must follow InvocationLog data structure with:<ul> <li>aefId</li> <li>apiInvokerId</li> <li>logs</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invocation-logs/v1/{aefId}/logs/{logId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_logging_service/#test-case-2-creates-a-new-individual-capif-log-entry-with-invalid-aefid","title":"Test Case 2:  Creates a new individual CAPIF Log Entry with Invalid aefId","text":"<p>Test ID: capif_api_logging-2</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (AEF) cannot create Log Entry without valid aefId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is not pre-authorised (has not valid aefId from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{not-valid-aefId}/logs</li> <li>body log entry request body</li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Exposer not exist\".</li> <li>cause with message \"Exposer id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_logging_service/#test-case-3-creates-a-new-individual-capif-log-entry-with-invalid-serviceapi","title":"Test Case 3:  Creates a new individual CAPIF Log Entry with Invalid serviceAPI","text":"<p>Test ID: capif_api_logging-3</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (AEF) cannot create Log Entry without valid aefId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid aefId from CAPIF Authority)</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body [log entry request body with serviceAPI apiName apiId not valid]</li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not exist\".</li> <li>cause with message \"Invoker id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_logging_service/#test-case-4-creates-a-new-individual-capif-log-entry-with-invalid-apiinvokerid","title":"Test Case 4:  Creates a new individual CAPIF Log Entry with Invalid apiInvokerId","text":"<p>Test ID: capif_api_logging-4</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (AEF) cannot create Log Entry without valid aefId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid aefId from CAPIF Authority)</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body [log entry request body with invokerId not valid]</li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure.</li> <li>For each apiProvFuncs, we must check:<ol> <li>apiProvFuncId is set</li> <li>apiProvCert under regInfo is set properly</li> </ol> </li> <li>Location Header must contain the new resource URL {apiRoot}/api-provider-management/v1/registrations/{registrationId}</li> </ol> </li> <li> <p>Response to Logging Service must accomplish:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not exist\".</li> <li>cause with message \"Invoker id not found\".</li> </ul> </li> </ol> </li> <li> <p>Log Entry are not stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_logging_service/#test-case-5-creates-a-new-individual-capif-log-entry-with-invalid-aefid-in-body","title":"Test Case 5:  Creates a new individual CAPIF Log Entry with Invalid aefId in body","text":"<p>Test ID: capif_api_logging-5</p> <p>Description:</p> <p>This test case will check that a CAPIF subscriber (AEF) cannot create Log Entry without valid aefId in body</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF provider is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>Service exist in CAPIF</li> <li>Invoker exist in CAPIF</li> </ul> <p>Execution Steps:   1. Register Provider and Invoker CCF   2. Publish Service   3. Create Log Entry</p> <p>Information of Test:</p> <ol> <li> <p>Perform provider onboarding and invoker onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Log Entry:</p> <ol> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invocation-logs/v1/{aefId}/logs</li> <li>body [log entry request body with bad aefId] </li> <li>Use AEF Certificate</li> </ol> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Logging Service must accomplish:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"AEF id not matching in request and body\".</li> <li>cause with message \"Not identical AEF id\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/","title":"Test Plan for CAPIF Api Provider Management","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_provider_management/#test-case-1-register-api-provider","title":"Test Case 1: Register Api Provider","text":"<p>Test ID: capif_api_provider_management-1</p> <p>Description:</p> <p>This test case will check that Api Provider can be registered con CCF</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid certificate from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Create private and public key for provider and each function to register.</li> <li>Register Provider.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Register Provider at Provider Management:<ol> <li>201 Created response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure.</li> <li>For each apiProvFuncs, we must check:<ol> <li>apiProvFuncId is set</li> <li>apiProvCert under regInfo is set properly</li> </ol> </li> <li>Location Header must contain the new resource URL {apiRoot}/api-provider-management/v1/registrations/{registrationId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-2-register-api-provider-already-registered","title":"Test Case 2: Register Api Provider Already registered","text":"<p>Test ID: capif_api_provider_management-2</p> <p>Description:</p> <p>This test case will check that a Api Provider previously registered cannot be re-registered</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was registered previously and there is a {registerId} for his Api Provider in the DB</li> </ul> <p>Execution Steps:</p> <ol> <li>Create private and public key for provider and each function to register.</li> <li>Register Provider.</li> <li>Re-Register Provider.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Re-Register Provider:</p> <ul> <li>Same regSec than Previous registration</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Re-Register Provider:<ol> <li>403 Forbidden response.</li> <li> <p>body returned must accomplish ProblemDetails data structure, with:</p> <ul> <li>status 403</li> <li>title with message \"Forbidden\"</li> <li>detail with message \"Provider already registered\".</li> <li>cause with message \"Identical provider reg sec\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-3-update-registered-api-provider","title":"Test Case 3: Update Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-3</p> <p>Description:</p> <p>This test case will check that a Registered Api Provider can be updated</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was registered previously and there is a {registerId} for his Api Provider in the DB</li> </ul> <p>Execution Steps:</p> <ol> <li>Create private and public key for provider and each function to register.</li> <li>Register Provider</li> <li>Update Provider</li> </ol> <p>Information of Test:</p> <ol> <li>Create public and private key at provider for provider itself and each function (apf, aef and amf)</li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Get Resource URL from Location</li> </ul> </li> <li> <p>Update Provider:</p> <ul> <li>Send PUT to Resource URL returned at registration https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{registrationId}</li> <li>body provider request body with apiProvDomInfo set to ROBOT_TESTING_MOD</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Register Provider:</p> <ol> <li>201 Created response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/api-provider-management/v1/registrations/{registrationId}</li> </ol> </li> <li> <p>Update Provider:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure, with:<ul> <li>apiProvDomInfo set to ROBOT_TESTING_MOD</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-4-update-not-registered-api-provider","title":"Test Case 4: Update Not Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-4</p> <p>Description:</p> <p>This test case will check that a Non-Registered Api Provider cannot be updated</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was not registered previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Update Not Registered Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Update Not Registered Provider:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{API_PROVIDER_NOT_REGISTERED}</li> <li>body provider request body</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Update Not Registered Provider:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Not Exist Provider Enrolment Details\".</li> <li>cause with message \"Not found registrations to Send THIS api provider details\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-5-partially-update-registered-api-provider","title":"Test Case 5: Partially Update Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-5</p> <p>Description:</p> <p>This test case will check that a Registered Api Provider can be partially updated</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was registered previously and there is a {registerId} for his Api Provider in the DB</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Register Provider</li> <li>Partial update provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Partial update provider:</p> <ul> <li>Send PATCH https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{registrationId}</li> <li>body provider request patch body</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Partial update provider at Provider Management:<ol> <li>200 OK response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure, with:<ul> <li>apiProvDomInfo with \"ROBOT_TESTING_MOD\"</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-6-partially-update-not-registered-api-provider","title":"Test Case 6: Partially Update Not Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-6</p> <p>Description:</p> <p>This test case will check that a Non-Registered Api Provider cannot be partially updated  </p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was not registered previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Register Provider</li> <li>Partial update provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Partial update Provider:</p> <ul> <li>Send PATCH https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{API_API_PROVIDER_NOT_REGISTERED}</li> <li>body provider request patch body</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Partial update provider:<ol> <li>404 Not Found response.</li> <li> <p>body returned must accomplish ProblemDetails data structure, with:</p> <ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Not Exist Provider Enrolment Details\".</li> <li>cause with message \"Not found registrations to Send THIS api provider details\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-7-delete-registered-api-provider","title":"Test Case 7: Delete Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-7</p> <p>Description:</p> <p>This test case will check that a Registered Api Provider can be deleted</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was registered previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Register Provider</li> <li>Delete Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Delete registered provider:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{registrationId}</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Delete Provider:<ol> <li>204 No Content response.</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_provider_management/#test-case-8-delete-not-registered-api-provider","title":"Test Case 8: Delete Not Registered Api Provider","text":"<p>Test ID: capif_api_provider_management-8</p> <p>Description:</p> <p>This test case will check that a Non-Registered Api Provider cannot be deleted</p> <p>Pre-Conditions:</p> <ul> <li>Api Provider was not registered previously</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Delete Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Create public and private key at provider for provider itself and each function (apf, aef and amf)</p> </li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Authentication Bearer with access_token</li> <li>Store each cert in a file with according name.</li> </ul> </li> <li> <p>Delete registered provider at Provider Management:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations/{API_PROVIDER_NOT_REGISTERED}</li> <li>Use AMF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Delete Provider:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Not Exist Provider Enrolment Details\".</li> <li>cause with message \"Not found registrations to Send THIS api provider details\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/","title":"Test Plan for CAPIF Api Publish Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_publish_service/#test-case-1-publish-api-by-authorised-api-publisher","title":"Test Case 1: Publish API by Authorised API Publisher","text":"<p>Test ID: capif_api_publish_service-1</p> <p>Description:</p> <p>This test case will check that an API Publisher can Publish an API</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li> <p>Register Provider at CCF and store certificates.</p> </li> <li> <p>Publish Service API</p> </li> <li> <p>Retrieve {apiId} from body and Location header with new resource created from response</p> </li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> </li> <li> <p>Send POST to ccf_publish_url: https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</p> </li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Published Service API is stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-2-publish-api-by-non-authorised-api-publisher","title":"Test Case 2: Publish API by NON Authorised API Publisher","text":"<p>Test ID: capif_api_publish_service-2</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Publish an API withot valid apfId </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is NOT pre-authorised (has invalid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API with invalid APF ID</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API with invalid APF ID at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{APF_ID_NOT_VALID}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Publisher not existing\".</li> <li>cause with message \"Publisher id not found\".</li> </ul> </li> </ol> </li> <li> <p>Service API is NOT stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-3-retrieve-all-apis-published-by-authorised-apfid","title":"Test Case 3: Retrieve all APIs Published by Authorised apfId","text":"<p>Test ID: capif_api_publish_service-3</p> <p>Description:</p> <p>This test case will check that an API Publisher can Retrieve all API published</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>At least 2 service APIs are published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API service_1</li> <li>Retrieve {apiId1} from body and Location header with new resource created from response</li> <li>Publish Service API service_2</li> <li>Retrieve {apiId2} from body and Location header with new resource created from response</li> <li>Retrieve All published APIs and check if both are present.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Publish Other Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve all published APIs:</p> <ul> <li>Send GET to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to service 1 Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId1}</li> </ol> </li> <li> <p>Response to service 2 Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId2}</li> </ol> </li> <li> <p>Published Service APIs are stored in CAPIF Database</p> </li> <li> <p>Response to Retrieve all published APIs:</p> <ol> <li>200 OK</li> <li>Response body must return an array of ServiceAPIDescription data.</li> <li>Array must contain all previously published APIs.</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-4-retrieve-all-apis-published-by-non-authorised-apfid","title":"Test Case 4: Retrieve all APIs Published by NON Authorised apfId","text":"<p>Test ID: capif_api_publish_service-4</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Retrieve API published when apfId is not authorised </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is NOT pre-authorised (has invalid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Retrieve All published APIs</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Retrieve all published APIs:</p> <ul> <li>Send GET to https://{CAPIF_HOSTNAME}/published-apis/v1/{APF_ID_NOT_VALID}/service-apis</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>401 Non Authorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Provider not existing\".</li> <li>cause with message \"Provider id not found\".</li> </ul> </li> </ol> </li> <li> <p>Service API is NOT stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-5-retrieve-single-apis-published-by-authorised-apfid","title":"Test Case 5: Retrieve single APIs Published by Authorised apfId","text":"<p>Test ID: capif_api_publish_service-5</p> <p>Description:</p> <p>This test case will check that an API Publisher can Retrieve API published one by one</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>At least 2 service APIs are published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API service_1.</li> <li>Retrieve {apiId1} from body and Location header with new resource created from response.</li> <li>Publish Service API service_2.</li> <li>Retrieve {apiId2} from body and Location header with new resource created from response.</li> <li>Retrieve service_1 API Detail.</li> <li>Retrieve service_2 API Detail.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Publish Other Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_2</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve service_1 published APIs detail:</p> <ul> <li>Send GET to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{apiId1}</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve service_2 published APIs detail:</p> <ul> <li>Send GET to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{apiId2}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to service 1 Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId1}</li> </ol> </li> <li> <p>Response to service 2 Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId2}</li> </ol> </li> <li> <p>Published Service APIs are stored in CAPIF Database</p> </li> <li> <p>Response to Retrieve service_1 published API using apiId1:</p> <ol> <li>200 OK</li> <li>Response body must return a ServiceAPIDescription data.</li> <li>Array must contain same information than service_1 published registration response.</li> </ol> </li> <li> <p>Response to Retrieve service_2 published API using apiId2:</p> <ol> <li>200 OK</li> <li>Response body must return a ServiceAPIDescription data.</li> <li>Array must contain same information than service_2 published registration response.</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-6-retrieve-single-apis-non-published-by-authorised-apfid","title":"Test Case 6: Retrieve single APIs non Published by Authorised apfId","text":"<p>Test ID: capif_api_publish_service-6</p> <p>Description:</p> <p>This test case will check that an API Publisher try to get detail of not published api.</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>No published api</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Retrieve not published API Detail.</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration</li> <li>Retrieve not published APIs detail:<ul> <li>Send GET to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID_NOT_VALID}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Retrieve for NOT published API must accomplish:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Service API not found\".</li> <li>cause with message \"No Service with specific credentials exists\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-7-retrieve-single-apis-published-by-non-authorised-apfid","title":"Test Case 7: Retrieve single APIs Published by NON Authorised apfId","text":"<p>Test ID: capif_api_publish_service-7</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Retrieve detailed API published when apfId is not authorised </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is NOT pre-authorised (has invalid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API at CCF</li> <li>Retrieve {apiId} from body and Location header with new resource created from response.</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Invoker Certificate</li> <li>Retrieve detailed published API acting as Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve detailed published APIs:</p> <ul> <li>Send GET to https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/${apiId}</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Retrieve Detailed published API acting as Invoker must accomplish:</p> <ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"User not authorized\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> <li> <p>Service API is NOT stored in CAPIF Database</p> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-8-update-api-published-by-authorised-apfid-with-valid-serviceapiid","title":"Test Case 8: Update API Published by Authorised apfId with valid serviceApiId","text":"<p>Test ID: capif_api_publish_service-8</p> <p>Description:</p> <p>This test case will check that an API Publisher can Update published API with a valid serviceApiId </p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> <li>A service APIs is published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API</li> <li>Retrieve {apiId} from body and Location header with new resource url created from response</li> <li>Update published Service API.</li> <li>Retrieve detail of Service API</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>get resource url from location Header.</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Update published API at CCF:</p> <ul> <li>Send PUT to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>body service api description with overrided apiName to service_1_modified</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Retrieve detail of service API:</p> <ul> <li>Send GET to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>check apiName is service_1_modified</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Update Published Service API:</p> <ol> <li>200 OK</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiName service_1_modified</li> </ul> </li> </ol> </li> <li> <p>Response to Retrieve detail of Service API:</p> <ol> <li>200 OK</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiName service_1_modified.</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-9-update-apis-published-by-authorised-apfid-with-invalid-serviceapiid","title":"Test Case 9: Update APIs Published by Authorised apfId with invalid serviceApiId","text":"<p>Test ID: capif_api_publish_service-9</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Update published API with a invalid serviceApiId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Update published Service API.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Update published API at CCF:</p> <ul> <li>Send PUT to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID_NOT_VALID}</li> <li>body service api description with overrided apiName to service_1*_modified*</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Response to Update Published Service API:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Service API not found\".</li> <li>cause with message \"Service API id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-10-update-apis-published-by-non-authorised-apfid","title":"Test Case 10: Update APIs Published by NON Authorised apfId","text":"<p>Test ID: capif_api_publish_service-10</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Update API published when apfId is not authorised</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is NOT pre-authorised (has invalid apfId from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API at CCF</li> <li>Retrieve {apiId} from body and Location header with new resource created from response.</li> <li>Register and onboard Invoker at CCF</li> <li>Store signed Invoker Certificate</li> <li>Update published API at CCF as Invoker</li> <li>Retrieve detail of Service API as publisher</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Update published API at CCF:</p> <ul> <li>Send PUT to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> <li>body service api description with overrided apiName to service_1*_modified*</li> <li>Use Invoker Certificate</li> </ul> </li> <li> <p>Retrieve detail of service API:</p> <ul> <li>Send GET to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>check apiName is service_1</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Update published API acting as Invoker must accomplish:</p> <ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"User not authorized\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> <li> <p>Response to Retrieve Detail of Service API:</p> <ol> <li>200 OK</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiName service_1.</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-11-delete-api-published-by-authorised-apfid-with-valid-serviceapiid","title":"Test Case 11: Delete API Published by Authorised apfId with valid serviceApiId","text":"<p>Test ID: capif_api_publish_service-11</p> <p>Description:</p> <p>This test case will check that an API Publisher can Delete published API with a valid serviceApiId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority).</li> <li>A service APIs is published.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Publish Service API</li> <li>Retrieve {apiId} from body and Location header with new resource created from response</li> <li>Remove published API at CCF</li> <li>Try to retreive deleted service API from CCF</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Remove published Service API at CCF:</p> <ul> <li>Send DELETE to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> <li>Use APF Certificate</li> </ul> </li> <li>Retrieve detail of service API:<ul> <li>Send GET to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{serivceApiId}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Response to Publish request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow ServiceAPIDescription data structure with:<ul> <li>apiId</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/published-apis/v1/{apfId}/service-apis/{serviceApiId}</li> </ol> </li> <li> <p>Published Service API is stored in CAPIF Database</p> </li> <li> <p>Response to Remove published Service API at CCF:</p> <ol> <li>204 No Content</li> </ol> </li> <li> <p>Response to Retrieve for DELETED published API must accomplish:</p> <ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Service API not found\".</li> <li>cause with message \"No Service with specific credentials exists\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-12-delete-apis-published-by-authorised-apfid-with-invalid-serviceapiid","title":"Test Case 12: Delete APIs Published by Authorised apfId with invalid serviceApiId","text":"<p>Test ID: capif_api_publish_service-12</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Delete with invalid serviceApiId</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority).</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Remove published API at CCF with invalid serviceId</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Remove published Service API at CCF with invalid serviceId:</p> <ul> <li>Send DELETE to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID_NOT_VALID}</li> <li>Use APF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Remove published Service API at CCF:<ol> <li>404 Not Found</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Service API not found\".</li> <li>cause with message \"Service API id not found\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_publish_service/#test-case-13-delete-apis-published-by-non-authorised-apfid","title":"Test Case 13: Delete APIs Published by NON Authorised apfId","text":"<p>Test ID: capif_api_publish_service-12</p> <p>Description:</p> <p>This test case will check that an API Publisher cannot Delete API published when apfId is not authorised</p> <p>Pre-Conditions:</p> <ul> <li>CAPIF subscriber is pre-authorised (has valid apfId from CAPIF Authority).</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF and store certificates.</li> <li>Register Invoker and onboard Invoker at CCF</li> <li>Remove published API at CCF with invalid serviceId as Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body service api description with apiName service_1</li> <li>Get apiId</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Remove published Service API at CCF with invalid serviceId as Invoker:</p> <ul> <li>Send DELETE to resource URL https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis/{SERVICE_API_ID_NOT_VALID}</li> <li>Use Invoker Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Remove published Service API at CCF:<ol> <li>401 Unauthorized</li> <li>Error Response Body must accomplish with ProblemDetails data structure with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"User not authorized\".</li> <li>cause with message \"Certificate not authorized\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/","title":"Test Plan for CAPIF Api Security Service","text":"<p>At this documentation you will have all information and related files and examples of test plan for this API.</p>"},{"location":"testing/testplan/api_security_service/#test-case-1-create-a-security-context-for-an-api-invoker","title":"Test Case 1: Create a security context for an API invoker","text":"<p>Test ID: capif_security_api-1</p> <p>Description:</p> <p>This test case will check that an API Invoker can create a Security context</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Invoker Onboarding</li> <li>Create Security Context for this Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Create security context:<ol> <li>201 Created response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> <li>Location Header must contain the new resource URL {apiRoot}/capif-security/v1/trustedInvokers/{apiInvokerId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-2-create-a-security-context-for-an-api-invoker-with-provider-role","title":"Test Case 2: Create a security context for an API invoker with Provider role","text":"<p>Test ID:: capif_security_api-2</p> <p>Description:</p> <p>This test case will check that an Provider cannot create a Security context with valid apiInvokerId.</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID), but user that create Security Context with Provider role</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker but using Provider certificate.</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Create security context using Provider certificate:</p> <ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be invoker\".</li> </ul> </li> </ol> </li> <li> <p>No context stored at DB</p> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-3-create-a-security-context-for-an-api-invoker-with-provider-entity-role-and-invalid-apiinvokerid","title":"Test Case 3: Create a security context for an API invoker with Provider entity role and invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-3</p> <p>Description:</p> <p>This test case will check that an Provider cannot create a Security context with invalid apiInvokerID.</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID), but user that create Security Context with Provider role</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Create Security Context for this not valid apiInvokerId and using Provider certificate.</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>body service security body</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Create security context using Provider certificate:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be invoker\".</li> </ul> </li> </ol> </li> <li>No context stored at DB</li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-4-create-a-security-context-for-an-api-invoker-with-invoker-entity-role-and-invalid-apiinvokerid","title":"Test Case 4: Create a security context for an API invoker with Invoker entity role and invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-4</p> <p>Description:</p> <p>This test case will check that an Invoker cannot create a Security context with valid apiInvokerId.</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID), but user that create Security Context with invalid apiInvokerId</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Create Security Context using Provider certificate</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>body service security body</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Create security context using Provider certificate:</p> <ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> <li> <p>No context stored at DB</p> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-5-retrieve-the-security-context-of-an-api-invoker","title":"Test Case 5: Retrieve the Security Context of an API Invoker","text":"<p>Test ID:: capif_security_api-5</p> <p>Description:</p> <p>This test case will check that an provider can retrieve the Security context of an API Invoker</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority) and API Invoker has created a valid Security Context</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> <li>Retrieve Security Context by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker.</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Retrieve security context:<ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-6-retrieve-the-security-context-of-an-api-invoker-with-invalid-apiinvokerid","title":"Test Case 6: Retrieve the Security Context of an API Invoker with invalid apiInvokerID","text":"<p>Test ID:: capif_security_api-6</p> <p>Description:</p> <p>This test case will check that an provider can retrieve the Security context of an API Invoker</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority) and API Invoker has created a valid Security Context</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> <li>Retrieve Security Context by Provider of invalid invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Retrieve Security Context of invalid Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Retrieve security context:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-7-retrieve-the-security-context-of-an-api-invoker-with-invalid-apfid","title":"Test Case 7: Retrieve the Security Context of an API Invoker with invalid apfId","text":"<p>Test ID:: capif_security_api-7</p> <p>Description:</p> <p>This test case will check that an Provider cannot retrieve the Security context of an API Invoker without valid apfId</p> <p>Pre-Conditions:</p> <ul> <li>API Exposure Function is not pre-authorised (has invalid apfId)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Store signed Certificate</li> <li>Create Security Context</li> <li>Retrieve Security Context as Provider.</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Retrieve Security Context as Invoker role:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Create security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be aef\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-8-delete-the-security-context-of-an-api-invoker","title":"Test Case 8: Delete the Security Context of an API Invoker","text":"<p>Test ID:: capif_security_api-8</p> <p>Description:</p> <p>This test case will check that an Provider can delete a Security context</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority) and API Invoker has created a valid Security Context</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> <li>Delete Security Context by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker but using Provider certificate.</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using AEF Certificate</li> </ul> </li> <li> <p>Delete Security Context of Invoker by Provider:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Use AEF Certificate</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Delete security context:</p> <ol> <li>204 No Content response.</li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Security context not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-9-delete-the-security-context-of-an-api-invoker-with-invoker-entity-role","title":"Test Case 9: Delete the Security Context of an API Invoker with Invoker entity role","text":"<p>Test ID:: capif_security_api-9</p> <p>Description:</p> <p>This test case will check that an Invoker cannot delete a Security context</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority) and API Invoker has created a valid Security Context</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Create Security Context using Provider certificate</li> <li>Delete Security Context by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Delete Security Context of Invoker:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Delete security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be aef\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-10-delete-the-security-context-of-an-api-invoker-with-invoker-entity-role-and-invalid-apiinvokerid","title":"Test Case 10: Delete the Security Context of an API Invoker with Invoker entity role and invalid apiInvokerID","text":"<p>Test ID:: capif_security_api-10</p> <p>Description:</p> <p>This test case will check that an Invoker cannot delete a Security context with invalid </p> <p>Pre-Conditions:</p> <ul> <li>Invoker is pre-authorised.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Delete Security Context by invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Invoker Onboarding</p> </li> <li> <p>Delete Security Context of Invoker:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>Use Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Delete security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be aef\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-11-delete-the-security-context-of-an-api-invoker-with-invalid-apiinvokerid","title":"Test Case 11: Delete the Security Context of an API Invoker with invalid apiInvokerID","text":"<p>Test ID:: capif_security_api-11</p> <p>Description:</p> <p>This test case will check that an Provider cannot delete a Security context of invalid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>Provider is pre-authorised (has valid apfId from CAPIF Authority).</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Delete Security Context by provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Delete Security Context of Invoker by Provider:</p> <ul> <li>Send DELETE https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}</li> <li>Use AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Retrieve security context:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-12-update-the-security-context-of-an-api-invoker","title":"Test Case 12: Update the Security Context of an API Invoker","text":"<p>Test ID:: capif_security_api-12</p> <p>Description:</p> <p>This test case will check that an API Invoker can update a Security context</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context By Invoker</li> <li>Update Security Context By Invoker</li> <li>Retrieve Security Context By Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Update Security Context of Invoker:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/update</li> <li>body service security body but with notification destination modified to http://robot.testing2</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Update security context:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.</li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.<ol> <li>Check is this returned object match with modified one.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-13-update-the-security-context-of-an-api-invoker-with-provider-entity-role","title":"Test Case 13: Update the Security Context of an API Invoker with Provider entity role","text":"<p>Test ID:: capif_security_api-13</p> <p>Description:</p> <p>This test case will check that an Provider cannot update a Security context</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized.</li> <li>Invoker has created the Security Context previously.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context</li> <li>Update Security Context as Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Update Security Context of Invoker by Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/update</li> <li>body service security body but with notification destination modified to http://robot.testing2</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Update security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be invoker\". </li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-14-update-the-security-context-of-an-api-invoker-with-aef-entity-role-and-invalid-apiinvokerid","title":"Test Case 14: Update the Security Context of an API Invoker with AEF entity role and invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-14</p> <p>Description:</p> <p>This test case will check that an Provider cannot update a Security context of invalid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized.</li> <li>Invoker has created the Security Context previously.</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF</li> <li>Update Security Context as Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration</p> </li> <li> <p>Update Security Context of Invoker by Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}/update</li> <li>body service security body</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Update security context:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be invoker\". </li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-15-update-the-security-context-of-an-api-invoker-with-invalid-apiinvokerid","title":"Test Case 15: Update the Security Context of an API Invoker with invalid apiInvokerID","text":"<p>Test ID:: capif_security_api-15</p> <p>Description:</p> <p>This test case will check that an API Invoker cannot update a Security context not valid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Update Security Context</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Update Security Context of Invoker:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}/update</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Retrieve security context:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-16-revoke-the-authorization-of-the-api-invoker-for-apis","title":"Test Case 16: Revoke the authorization of the API invoker for APIs.","text":"<p>Test ID:: capif_security_api-16</p> <p>Description:</p> <p>This test case will check that a Provider can revoke the authorization for APIs</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context by Invoker</li> <li>Revoke Security Context by Provider</li> <li>Retrieve Security Context by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context By Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Revoke Authorization by Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/delete</li> <li>body security notification body</li> <li>Using AEF Certificate.</li> </ul> </li> <li> <p>Retrieve Security Context by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Revoke Authorization:</p> <ol> <li>204 No Content response.</li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Security context not found\".</li> <li>cause with message \"API Invoker has no security context\".</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-17-revoke-the-authorization-of-the-api-invoker-for-apis-without-valid-apfid","title":"Test Case 17: Revoke the authorization of the API invoker for APIs without valid apfID.","text":"<p>Test ID:: capif_security_api-17</p> <p>Description:</p> <p>This test case will check that an Invoker can't revoke the authorization for APIs</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context</li> <li>Revoke Security Context by invoker</li> <li>Retrieve Security Context</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Revoke Authorization by invoker:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}/delete</li> <li>body security notification body</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>Using Provider Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Revoke Security Context by invoker:</p> <ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 401</li> <li>title with message \"Unauthorized\"</li> <li>detail with message \"Role not authorized for this API route\".</li> <li>cause with message \"User role must be provider\". </li> </ul> </li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.<ol> <li>Check is this returned object match with created one.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-18-revoke-the-authorization-of-the-api-invoker-for-apis-with-invalid-apiinvokerid","title":"Test Case 18: Revoke the authorization of the API invoker for APIs with invalid apiInvokerId.","text":"<p>Test ID:: capif_security_api-18</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot revoke the authorization for APIs for invalid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register and onboard Invoker at CCF</li> <li>Register Provider at CCF</li> <li>Create Security Context</li> <li>Revoke Security Context by Provider</li> <li>Retrieve Security Context</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Create Security Context for this Invoker:</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> </ul> </li> <li> <p>Revoke Authorization by Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/trustedInvokers/{API_INVOKER_NOT_VALID}/delete</li> <li>body security notification body</li> <li>Using AEF Certificate.</li> </ul> </li> <li> <p>Retrieve Security Context of Invoker by Provider:</p> <ul> <li>Send GET https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}?authenticationInfo=true&amp;authorizationInfo=true</li> <li>This request will ask with parameter to retrieve authenticationInfo and authorizationInfo</li> <li>Using AEF Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li> <p>Revoke Security Context by invoker:</p> <ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails data structure, with:<ul> <li>status 404</li> <li>title with message \"Not Found\"</li> <li>detail with message \"Invoker not found\".</li> <li>cause with message \"API Invoker not exists or invalid ID\".</li> </ul> </li> </ol> </li> <li> <p>Retrieve security context:</p> <ol> <li>200 OK response.</li> <li>body returned must accomplish ServiceSecurity data structure.<ol> <li>Check is this return one object that match with created one.</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-19-retrieve-access-token","title":"Test Case 19: Retrieve access token","text":"<p>Test ID:: capif_security_api-19</p> <p>Description:</p> <p>This test case will check that an API Invoker can retrieve a security access token OAuth 2.0.</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerId)</li> <li>Service API of Provider is published</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token:</li> <li>body access token req body and example example</li> <li>securityId is apiInvokerId.</li> <li>grant_type=client_credentials.</li> <li>Create Scope properly for request: 3gpp#{aef_id}:{api_name}</li> <li>Using Invoker Certificate.</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>200 OK</li> <li>body must follow AccessTokenRsp with:<ol> <li>access_token present</li> <li>token_type=Bearer</li> </ol> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-20-retrieve-access-token-by-provider","title":"Test Case 20: Retrieve access token by Provider","text":"<p>Test ID:: capif_security_api-20</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot revoke the authorization for APIs for invalid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerID from CAPIF Authority) and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by provider:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token:</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error unauthorized_client</li> <li>error_description=Role not authorized for this API route</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-21-retrieve-access-token-by-provider-with-invalid-apiinvokerid","title":"Test Case 21: Retrieve access token by Provider with invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-21</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token without valid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Provider</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by provider:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{API_INVOKER_NOT_VALID}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>Using AEF Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>401 Unauthorized response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error unauthorized_client</li> <li>error_description=Role not authorized for this API route</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-22-retrieve-access-token-with-invalid-apiinvokerid","title":"Test Case 22: Retrieve access token with invalid apiInvokerId","text":"<p>Test ID:: capif_security_api-22</p> <p>Description:</p> <p>This test case will check that an API Invoker can't retrieve a security access token without valid apiInvokerId</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised (has valid apiInvokerId)</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li>Perform Provider Registration and Invoker Onboarding</li> <li>Publish Service API at CCF:<ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li>Request Discover Published APIs not filtered:<ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li>Create Security Context for this Invoker<ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li>Request Access Token by invoker:<ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{API_INVOKER_NOT_VALID}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>404 Not Found response.</li> <li>body returned must accomplish ProblemDetails29571 data structure, with:<ul> <li>status 404</li> <li>title Not Found</li> <li>detail Security context not found</li> <li>cause API Invoker has no security context</li> </ul> </li> </ol> </li> </ol> <p>NOTE: ProblemDetails29571 is the definition present for this request at swagger of ProblemDetails, and this is different from definition of ProblemDetails across other CAPIF Services</p>"},{"location":"testing/testplan/api_security_service/#test-case-23-retrieve-access-token-with-invalid-client_id","title":"Test Case 23: Retrieve access token with invalid client_id","text":"<p>Test ID:: capif_security_api-23</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token without valid client_id at body</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>client_id is not-valid </li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error invalid_client</li> <li>error_description=Client Id not found</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-24-retrieve-access-token-with-unsupported-grant_type","title":"Test Case 24: Retrieve access token with unsupported grant_type","text":"<p>Test ID:: capif_security_api-24</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token with unsupported grant_type</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=not_valid</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error unsupported_grant_type</li> <li>error_description=Invalid value for <code>grant_type</code> \\(${grant_type}\\), must be one of \\['client_credentials'\\] - 'grant_type'</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-25-retrieve-access-token-with-invalid-scope","title":"Test Case 25: Retrieve access token with invalid scope","text":"<p>Test ID:: capif_security_api-25</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token with complete invalid scope</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>scope=not-valid-scope</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error invalid_scope</li> <li>error_description=The first characters must be '3gpp'</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-26-retrieve-access-token-with-invalid-aefid-at-scope","title":"Test Case 26: Retrieve access token with invalid aefid at scope","text":"<p>Test ID:: capif_security_api-26</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token with invalid aefId at scope</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>scope=3gpp#1234:*service_1*</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error invalid_scope</li> <li>error_description=One of aef_id not belongs of your security context</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/api_security_service/#test-case-27-retrieve-access-token-with-invalid-apiname-at-scope","title":"Test Case 27: Retrieve access token with invalid apiName at scope","text":"<p>Test ID:: capif_security_api-27</p> <p>Description:</p> <p>This test case will check that an API Exposure Function cannot retrieve a security access token with invalid apiName at scope</p> <p>Pre-Conditions:</p> <ul> <li>API Invoker is pre-authorised and Provider is also authorized</li> </ul> <p>Execution Steps:</p> <ol> <li>Register Provider at CCF, store certificates and Publish Service API service_1 at CCF</li> <li>Register and onboard Invoker at CCF</li> <li>Discover Service APIs by Invoker.</li> <li>Create Security Context According to Service APIs discovered.</li> <li>Request Access Token by Invoker</li> </ol> <p>Information of Test:</p> <ol> <li> <p>Perform Provider Registration and Invoker Onboarding</p> </li> <li> <p>Publish Service API at CCF:</p> <ul> <li>Send POST to ccf_publish_url https://{CAPIF_HOSTNAME}/published-apis/v1/{apfId}/service-apis</li> <li>body [service api description] with apiName service_1</li> <li>Use APF Certificate</li> </ul> </li> <li> <p>Request Discover Published APIs not filtered:</p> <ul> <li>Send GET to ccf_discover_url https://{CAPIF_HOSTNAME}/service-apis/v1/allServiceAPIs?api-invoker-id={apiInvokerId}</li> <li>Param api-invoker-id is mandatory</li> <li>Using Invoker Certificate</li> </ul> </li> <li> <p>Create Security Context for this Invoker</p> <ul> <li>Send PUT https://{CAPIF_HOSTNAME}/trustedInvokers/{apiInvokerId}</li> <li>body service security body</li> <li>Using Invoker Certificate.</li> <li>Create Security Information Body with one securityInfo for each aef present at each serviceAPIDescription present at Discover.</li> </ul> </li> <li> <p>Request Access Token by invoker:</p> <ul> <li>Sent POST https://{CAPIF_HOSTNAME}/securities/{securityId}/token.</li> <li>body access token req body</li> <li>securityId is apiInvokerId</li> <li>grant_type=client_credentials</li> <li>scope=3gpp#{aef_id}:not-valid</li> <li>Using Invoker Certificate</li> </ul> </li> </ol> <p>Expected Result:</p> <ol> <li>Response to Request of Access Token:<ol> <li>400 Bad Request response.</li> <li>body returned must accomplish AccessTokenErr data structure, with:<ul> <li>error invalid_scope</li> <li>error_description=One of the api names does not exist or is not associated with the aef id provided</li> </ul> </li> </ol> </li> </ol>"},{"location":"testing/testplan/common_operations/","title":"Common Operations","text":""},{"location":"testing/testplan/common_operations/#register-new-user","title":"Register new user","text":"<p>In order to use OpenCAPIF we must add a new user. This new user can onboard/register any Invokers or Providers.</p> <p>That new user must be created by administrator of Register Service and with the credentials shared by administrator, the new user can get the access_token by requesting it to Register service.</p> <p>The steps to register a new user at Register Service are:</p>"},{"location":"testing/testplan/common_operations/#admin-create-user","title":"Admin create User","text":"<p>1) Login as Admin to get access_token:</p> <ul> <li>Send POST to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/login<ul> <li>Include basic Auth Header with Admin credentials</li> </ul> </li> <li>Get access_token and refresh_token from response</li> </ul> <p></p> <p>2) Create User:</p> <ul> <li>Send POST to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/createUser<ul> <li>Include Admin access_token in Authorization Bearer Header</li> <li>Body user_registration_body</li> </ul> </li> </ul> <p></p>"},{"location":"testing/testplan/common_operations/#user-retrieve-access-token-and-other-information","title":"User Retrieve access token and other information","text":"<p>1) Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth<ul> <li>Include basic Auth Header with User credentials</li> </ul> </li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> <p></p>"},{"location":"testing/testplan/common_operations/#onboard-an-invoker","title":"Onboard an Invoker","text":""},{"location":"testing/testplan/common_operations/#steps-to-perform-operation","title":"Steps to perform operation","text":"<p>Preconditions: The administrator must have previously registered the User.</p> <ol> <li>Create public and private key at invoker</li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Onboard Invoker:     </p> <ul> <li>Send POST to https://{CAPIF_HOSTNAME}/api-invoker-management/v1/onboardedInvokers</li> <li>Reference Request Body: invoker onboarding body</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>"},{"location":"testing/testplan/common_operations/#checks-to-ensure-onboarding","title":"Checks to ensure onboarding","text":"<ol> <li> <p>Response to Get Auth:</p> <ol> <li>200 OK</li> <li>access_token returned.</li> </ol> </li> <li> <p>Response to Onboard request must accomplish:</p> <ol> <li>201 Created</li> <li>Response Body must follow APIInvokerEnrolmentDetails data structure with:<ul> <li>apiInvokerId</li> <li>onboardingInformation-&gt;apiInvokerCertificate must contain the public key signed.</li> </ul> </li> <li>Response Header Location must be received with URI to new resource created, following this structure: {apiRoot}/api-invoker-management/{apiVersion}/onboardedInvokers/{onboardingId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/common_operations/#example-flow","title":"Example Flow","text":""},{"location":"testing/testplan/common_operations/#register-a-provider","title":"Register a Provider","text":""},{"location":"testing/testplan/common_operations/#steps-to-perform-operation_1","title":"Steps to Perform operation","text":"<ol> <li>Create public and private key at provider for provider itself and each function (apf, aef and amf)</li> <li> <p>Retrieve access_token by User:</p> <ul> <li>Send GET to https://${CAPIF_REGISTER}:${CAPIF_REGISTER_PORT}/getauth</li> <li>Include basic Auth Header with Admin user/password</li> <li>Retrieve access_token and the urls needed for next requests from response body user_getauth_response_body_example</li> </ul> </li> <li> <p>Register Provider:</p> <ul> <li>Send POST https://{CAPIF_HOSTNAME}/api-provider-management/v1/registrations</li> <li>body provider request body</li> <li>Send in Authorization Header the Bearer access_token obtained previously (Authorization:Bearer ${access_token})</li> <li>Store each cert in a file with according name.</li> </ul> </li> </ol>"},{"location":"testing/testplan/common_operations/#checks-to-ensure-provider-registration","title":"Checks to ensure provider registration","text":"<ol> <li> <p>Response to Register:</p> <ol> <li>201 Created</li> </ol> </li> <li> <p>Response to Get Auth:</p> <ol> <li>200 OK</li> <li>access_token returned.</li> </ol> </li> <li> <p>Register Provider at Provider Management:</p> <ol> <li>201 Created response.</li> <li>body returned must accomplish APIProviderEnrolmentDetails data structure.</li> <li>For each apiProvFuncs, we must check:<ol> <li>apiProvFuncId is set</li> <li>apiProvCert under regInfo is set properly</li> </ol> </li> <li>Location Header must contain the new resource URL {apiRoot}/api-provider-management/v1/registrations/{registrationId}</li> </ol> </li> </ol>"},{"location":"testing/testplan/common_operations/#example-flow_1","title":"Example Flow","text":""}]}
\ No newline at end of file
diff --git a/public/develop/sitemap.xml b/public/develop/sitemap.xml
index c42e738..313e9c1 100644
--- a/public/develop/sitemap.xml
+++ b/public/develop/sitemap.xml
@@ -20,62 +20,10 @@
          <loc>https://tfs.etsi.org/develop/deployment_guide/deployment_guide/</loc>
          <lastmod>2024-10-21</lastmod>
     </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/configure_your_machine/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/openstack/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/oracle_virtual_box/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/physical_server/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/vagrant_box/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/configure_your_machine/vm_ware_fusion/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/deploy_TeraFlowSDN/deploy_TeraFlowSDN/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/install_micro_k8s/install_micro_k8s/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/show_deployment_and_logs/show_deployment_and_logs/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/deployment_guide/webUI_and_grafana_dashboards/webUI_and_grafana_dashboards/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
     <url>
          <loc>https://tfs.etsi.org/develop/development_guide/development_guide/</loc>
          <lastmod>2024-10-21</lastmod>
     </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/development_guide/configure_environment/configure_environment/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/development_guide/configure_environment/java_quarkus/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
-    <url>
-         <loc>https://tfs.etsi.org/develop/development_guide/configure_environment/python/</loc>
-         <lastmod>2024-10-21</lastmod>
-    </url>
     <url>
          <loc>https://tfs.etsi.org/develop/testing/postman/</loc>
          <lastmod>2024-10-21</lastmod>
diff --git a/public/develop/sitemap.xml.gz b/public/develop/sitemap.xml.gz
index 220d8a488d72bb2564a9009975c9befeaa3afaf0..1a21b4456f7e7f056b86ea788dd04f61edd8a60e 100644
GIT binary patch
delta 368
zcmV-$0gwK#1pWe$7k^egZ-X!p-SaCDdoYPQv=t%hlD$$pBgb5b72~sf2AY50gG5n3
zrm7OLmxJfyy{9v_uh@RHCh5VGM!QK@S)L|f71r7|oAmu{w|q>u<)Y}kAqWX4TiT?@
z5Ztp6!!Tr|1GLgnhQ1M`j{HL63W_{?O3OvUV<fmdO`|ZV%72lCm?j)3gFt$ssG$dg
zP84EH`TB*V&|+P#^Yz1Wl`q#TPPt+i331c-v)b<Eb!J8B)sd^DLg!&-X%7Y@fyDqc
zvvdv4;JF1Gs;1L5{08RsGsSO)ej@Wa;x!4p_k=?xl=e>Q9`_gyUbZlxKi$d17@fIW
z4Q}$%=}IaEL}`^m8$6oIq0#Cbg|V*IBU%yoUMq;fQ>{rM-zhP9;yD{ACP&)#c;X`Q
zE|(3A2TlyG3^q+<zmxOW^FbV2rChf+nvOA5ia>Q<hjT2R6t*qe3LSVExWW8KyD<fB
OLCa61fTCow3IG7739wiI

delta 547
zcmV+;0^I%n0<Q#+7k`(*Zrd;nhVOlf!1u&SutPT_DFzGyb{R0NJqwJ?*ji*!6J@)8
z`_XREb!#$U7!b=B*}r7+10_+^=I*h!vlasza@%aRSY|VHnhN8}ZT4`#pWkM8yPHiD
zEMuI>V8`36iqU__^RDX_Y$Dd+c|oDfSy%GG`LmcW7w@y(&3{au!NAko_-ric-C%{q
zOg!=eBb(7gfh}6{`6eHRy#50?)>Q1)%k{hYYB^u8WXQAj<RX9Z@z37&AHQDNBLrPZ
zlyqzYUfFd(i@@k8B462cf!<PIql>C+Oo4BOiFq`+qbX%hR8LJ%HOMTvi*lN<<k4{i
zeM*%tfVQYw6Mtd@RvqXuQBYs?Y_uRU21${LQnpYAkU{Cjv8`1HA|9LJlu0AysCx{s
zx72<6^yQp1F{BxGu(hf-I*>Zu@)>1fM6Re)uT*e_vQ+Zrj){RgJUo0JX=KA3!GS7(
zs{=tO`0t(91|Qqsmh7L()I`5_Iyy<@<c7WrYMQLyp??MSqk(X0I8j93$Li|&Qi{ST
z#eeQe48m02105(H1Ju}2I86jGwBAk@gBSPUjRLKaS;<0)fvoamjqZ~GYYH={W07Pu
zrodDf)+7~MN=(w{BBw-TTuUb$$}|ThPLQh4Qc0yyCbpb>pjNVUYLW8I!5XeoiWH-6
lf{A@9OdOi(nw*jwaeydykN-I7$A&TPegZclO6@Zf006~)4eI~^

-- 
GitLab