summaryrefslogtreecommitdiffstats
path: root/docs/developer_info/ETSI_CSIT_NFVO_VNFM.rst
blob: 3bc8393d56b082d44c131c31447700e5d4172cb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2022 Ericsson Software Technologies

SO ETSI CSIT (NFVO and VNFM)
============================
This guide will go through the CSIT of the ETSI NFVO and VNFM.

Ensure you have a healthy ONAP Deployment running. The following components will be required/used as part of this guide:

- SO
- SDC
- AAI
- DMAAP
- Modeling

What is ETSI?
-------------
The European Telecommunications Standards Institute (ETSI) produces globally-applicable standards
for Information and Communications Technologies. ETSI  set out standards covering the functionalities
of the interfaces specified on the reference points, which use the acronym NFV-SOL
(standing for “NFV Solutions”). As of ONAPs Dublin release the  SO SVNFM adapter supports
SOL003 standards for Create, Instantiate, Terminate and Delete operations with Granting, Subscription
and Notification. As of ONAP Honolulu release, the SO ETSI NFVO sub-component supports
SOL005 (NBI) and SOL003 (SBI) standards for Create, Instantiate, Terminate and Delete NS and VNF
(through the SOL003 Adapter) operations.

How to Run CSIT Tests
---------------------
The follow steps are to install and run on an Ubuntu 18.04 (desktop) installation.
Later versions of Ubuntu and Java may work for the tests.

First pull the CSIT repo from Gerrit, either with or without the hooks

.. code-block::

    git clone "https://gerrit.onap.org/r/integration/csit"

or

.. code-block::

    git clone "https://gerrit.onap.org/r/integration/csit" && (cd "csit" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.onap.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)

Once this is downloaded a few more installations are required.

Install pip (if required)

.. code-block::

    sudo apt install python-pip

Install Robot Framework through pip

.. code-block::

    pip install robotframework

Run Script

Once all of this is done, then the tests should be run by calling the run-csit.sh script and giving it the location of our test folder (csit/plans/so/integration-etsi-testing).
From the csit projects root folder run the following command:

.. code-block::

    ./run-csit.sh plans/so/integration-etsi-testing

This should successfully run the ETSI CSIT suite

How to run tests againt specific SO versions
--------------------------------------------
It is possible to run the ETSI CSIT suite against local docker images although it is not the default.
Through this method specific versions of SO can be tested.
There are two changes required to make this work.
The env file, located at [containing folder]/csit/plans/so/integration-etsi-testing/config/env,
first needs to be changed. The DOCKER_ENVIROMENT needs to be changed from "remote" to "local".
Also the TAG value might need to be changed. This Tag relates to the version of images being used.

Secondly all of the required docker images must be present on system.

This should be enough to run the ETSI CSIT test suite locally.

ETSI NFVO Automated CSIT Tests High Level Scenarios
---------------------------------------------------
**Step 1:**

Perform Configuration / Setup Steps prior to running tests

**Step 2:**

Onboard SOL004 Package and SOL007 directly into ETSI Catalog using ROBOT framework

**Step 3:**

ETSI Catalog Gets Package from SDC Simulator (New: ETSI Catalog and Modeling ETSI Catalog DB will need to be set up and spun up for CSIT. May be some impact on SDC Simulator here)

**Step 4:**

ETSI Catalog Stores Package in its Modeling ETSI Catalog DB

**Step 5:**

ROBOT framework used to trigger NS LCM requests, e.g., INSTANTIATE NS

**Step 6:**

ETSI NFVO NS LCM gets required data from ETSI Catalog, e.g., Get and Parse NSD

**Step 7:**

If e.g., a CREATE NS task, ETSI NFVO NS LCM checks to see if already exists in ETSI NFVO DB

**Step 8:**

Create Generic VNF and connect to Service Instance in A&AI Simulator (May be some impact on A&AI Simulator here)

**Step 9:**

Instantiate VNF through SOL003 Adapter

**Step 10:**

SOL003 Adapter processes requests through A&AI and (May be some impact on A&AI Simulator here)

**Step 11:**

SOL003 Adapter processes requests through ETSI-Catalog

**Step 12:**

SOL003 Adapter sends notification to SOL003 NBI, etc.

What are the tests doing?
-------------------------
There are three tests currently being run "Distribute Service Template", "Invoke Service Instantiation",
"Invoke NS Instantiation", "Delete NS Instance", "Invoke VNF Instantiation", "Delete VNF Instance" and
"Delete Service Instance".

Distribute Service Template

As the name would suggest the aim for the "Distribute Service Template" test is to distribute a service
template within the SDC controller pod. Once a http session of the SDC controller is created a post request
can be made to it. This post requests sends binary data from "distributeServiceTemplate.json".
This json file contains resources and artifacts required to distribute a service. Once this post request
is sent, the response status code is checked to see if it is 200. If the code is not equal to 200 then
the test is thought to be a failure.

Invoke Service Instantiation

The aim of the "Invoke Service Instantiation" test is to invoke the service distributed to the sdc controller
in the previous test. A http session of the api handler pod is created. This session is sent a post request
containing "serviceInstantiationRequest.json". Once this request is made the response is checked if it
a valid code is returned.  A for loop is used to continually make calls to check the orchestration request,
to check the status of service instantiation. Only once this orchestration returns either a fail or success,
will we break out of the for loop.Once outside the for loop a final statement is used to check if service
has been successfully instantiated.

Invoke NS Instance

The aim of "Invoke NS Instantiation" test is to now instantiate the NS that relates to service in the
previous test. This test requires the ID of the service instance created in the previous test. If this is
not provided then the test will fail from the get go. Once again a http session of the api handler pod is
created. Similarly a post request using the json data within "nsInstantiationRequest.json".
Once this request is made if it returns a success code then the test moves on to a for loop. Within this
for a loop an orchestration request is made each time, when this request signals that either the instantiation
request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending
on this final orchestration request.

Delete NS Instance

This test will delete the NS Instance created in the previous test. Both the ID of the NS instance created
in the previous test and the service instance created in the test before that. If either of these values is
not provided then the test will fail. This test once again makes use of a session of the api handler pod.
A post request is made using the data from  "nsDeleteRequest.json". Once this request is made if it returns
a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made
each time, when this request signals that either the instantiation request has failed or fully succeeded
then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.

Invoke VNF Instance

The aim of "Invoke VNF Instantiation" test is to now instantiate the VNF that relates to service in
the previous test. This test requires the ID of the service instance created in the previous test.
If this is not provided then the test will fail from the get go. Once again a http session of the
api handler pod is created. Similarly a post request using the json data within "vnfInstantiationRequest.json".
Once this request is made if it returns a success code then the test moves on to a for loop. Within this
for a loop an orchestration request is made each time, when this request signals that either the instantiation
request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail
depending on this final orchestration request.

Delete VNF Instance

This test will delete the VNF Instance created in the previous test. Both the ID of the vnf instance created
in the previous test and the service instance created in the test before that. If either of these values is
not provided then the test will fail. This test once again makes use of a session of the api handler pod.
A post request is made using the data from  "vnfDeleteRequest.json". Once this request is made if it returns
a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made
each time, when this request signals that either the instantiation request has failed or fully succeeded then
the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.

Delete Service Instance

This test will delete the service instance created in earlier test. To delete the service the ID of previously
 created Service Instance is required, if this is not supplied then the test will fail before starting.
 A post request is then made to the API handler containing data from "serviceDeleteRquest.json".
 Once this request is made if it returns a success code then the test moves on to a for loop.
 Within this for a loop an orchestration request is made each time, when this request signals that either
 the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be
 a pass or fail depending on this final orchestration request.

Troubleshooting
---------------
There are a number of simple issues relating from Python and its libraries

A correct installation of the robot framework to run our tests requiring python and the following pip libraries.

- robotframework
- robotframework-extendedselenium2library
- robotframework-httplibrary
- robotframework-onap
- robotframework-requests
- robotframework-selenium2library

To make sure each of the previous libraries is installed run the following command

.. code-block::

    pip -list