blob: 5f6feade0ecd17bfce94c68983ff37ed7c64d4c7 [file] [log] [blame]
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2019 Huawei Technologies Co., Ltd.
.. _vnf-test-platform:
VNF Test Platform (VTP)
=======================
Deploy VNF/PNF test cases once and trigger it safely from anywhere
Objectives
----------
* LFN/ONAP wants test platform where VNF packages could be certified using ONAP requirements to drive industry adoption
* Provide an platform where vendor/operator can develop, deploy, run test cases and query the results
* Test cases, test results and VNF should be manageable .i,e with authorization, so only user with given roles is allowed to perform operation like VNF package upload/download, run compliance verification tests, allow only specific VIM for specific users, etc.
* Test results should be persisted and should be available for human analysis later via LFN infrastructure.
* Provides test flow where author make flow across different test cases for a given program like compliance verification and VNFREQS/SOL0004.
* Provide integration with OPNFV dovetail to run test cases across dovetail and VNFSDK.
* Deployable as docker container.
|image0|
.. |image0| image:: VTP.png
:height: 600px
:width: 900px
Architecture
------------
|image1|
.. |image1| image:: VTParch.png
:height: 600px
:width: 900px
VTP deployment
----------------
Install VTP Backend
~~~~~~~~~~~~~~~~~~~~~~~~~~
export NEXUS_DOCKER_REPO=nexus3.onap.org:10001
docker login $NEXUS_DOCKER_REPO -u docker -p docker
export REFREPO_TAG=1.3.0
export POSTGRES_TAG=latest
export MTU=1450
wget https://raw.githubusercontent.com/onap/vnfsdk-refrepo/master/vnfmarket-be/deployment/install/docker-compose.yml
docker-compose up -d
run docker ps and following entries would be reported::
root@mrkanag:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d42ef0bc1b3 nexus3.onap.org:10001/onap/vnfsdk/refrepo:1.3.0 "/service/docker-ent…" 2 days ago Up 2 days 0.0.0.0:8000->8000/tcp, 0.0.0.0:8702-8703->8702-8703/tcp, 0.0.0.0:50051->50051/tcp refrepo
25a86d9b0e81 nexus3.onap.org:10001/onap/vnfsdk/refrepo/postgres:latest "docker-entrypoint.s…" 2 days ago Up 2 days 0.0.0.0:5432->5432/tcp postgres
VTP usage guide
---------------
**1. List scenario**::
GET {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/scenarios
[
{
"name": "scenario-1",
"description": "Test scenario 1 \n"
},
{
"name": "scenario-2",
"description": "Test scenario 1 \n"
},
{
"name": "open-cli",
"description": "OPEN CLI PLATFORM provides a dynamic platform to load and execute commands\nbased on the Open Command Specification (OCS) 1.0. \n"
}
]
**2. List Test suites**::
GET {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/scenarios/scenario-1/testsuites
[
{
"name": "testsuite-1",
"description": "testsuite 1"
},
{
"name": "testsuite-2",
"description": "testsuite 2"
}
]
**3. List Test cases**::
GET {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/scenarios/scenario-1/testcases
[
{
"testCaseName": "s1.ts1.testcase-1",
"testSuiteName": "testsuite-1"
},
{
"testCaseName": "s1.ts1.testcase-2",
"testSuiteName": "testsuite-1"
},
{
"testCaseName": "s1.ts1.testcase-3",
"testSuiteName": "testsuite-1"
},
{
"testCaseName": "s1.ts2.testcase-1",
"testSuiteName": "testsuite-2"
},
{
"testCaseName": "s1.ts2.testcase-2",
"testSuiteName": "testsuite-2"
}
]
**4. Show Test case details**::
GET {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/scenarios/scenario-1/testsuites/testsuite-1/testcases/s1.ts1.testcase-1
{
"testCaseName": "s1.ts1.testcase-1",
"testSuiteName": "testsuite-1",
"descripton": "s1.ts1.testcase-1",
"author": "Kanagaraj Manickam kanagaraj.manickam@huawei.com",
"inputs": [
{
"name": "input1",
"description": "Input 1",
"type": "string",
"isOptional": false,
"metadata": {
"allowed_value": [
"a",
"b",
"c"
]
}
},
{
"name": "input2",
"description": "Input 2",
"type": "string",
"defaultValue": "v2",
"isOptional": true
}
],
"outputs": [
{
"name": "output1",
"description": "output 1",
"type": "string"
}
]
}
**5. List Test cases in test suite**::
GET {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/scenarios/scenario-2/testcases?testSuiteName=testsuite-1
[
{
"testCaseName": "s2.ts1.testcase-1",
"testSuiteName": "testsuite-1"
}
]
**6. Run a test case**::
GET {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/executions
[
{
"scenario": "open-cli",
"testCaseName": "schema-list",
"testSuiteName": "schema",
"executionId": "00dfda6c-df16-4c5b-a731-3d531a7aafa5-1550505316115",
"requestId": "00dfda6c-df16-4c5b-a731-3d531a7aafa5",
"status": "completed",
"startTime": "2019-02-18T15:55:16.138",
"endTime": "2019-02-18T15:55:16.220"
}
]
**7. Retrieve the execution result**::
GET {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/executions/ebaa5f21-ed68-4098-97a9-775ac8800f09-1550575025614
{
"scenario": "scenario-1",
"testCaseName": "s1.ts2.testcase-1",
"testSuiteName": "testsuite-2",
"executionId": "ebaa5f21-ed68-4098-97a9-775ac8800f09-1550575025614",
"parameters": {
"input2": "v2",
"input1": "v1"
},
"results": {
"output1": "v1=v2"
},
"status": "completed",
"startTime": "2019-02-19T11:17:05.670",
"endTime": "2019-02-19T11:17:05.683"
}
**8. Execute test case without file content (across scenario, test suites)**::
POST {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/executions?requestId=ebaa5f21-ed68-4098-97a9-775ac8800f09
content-type multipart/form-data
BODY:
executions:
[{
"scenario": "scenario-1",
"testSuiteName": "testsuite-1",
"testCaseName": "s1.ts1.testcase-1",
"parameters": {
"input1": "v1",
"input2": "v2"
}
},{
"scenario": "scenario-1",
"testSuiteName": "testsuite-2",
"testCaseName": "s1.ts2.testcase-1",
"parameters": {
"input1": "v1"
}
},
{
"scenario": "open-cli",
"testSuiteName": "schema",
"testCaseName": "schema-validate",
"parameters": {
"schema-location": "file://s1.ts1.testcase-1.yaml"
}
}]
RESPONSE:
[
{
"scenario": "scenario-1",
"testCaseName": "s1.ts1.testcase-1",
"testSuiteName": "testsuite-1",
"executionId": "ebaa5f21-ed68-4098-97a9-775ac8800f09-1550575025516",
"parameters": {
"input1": "v1",
"input2": "v2"
},
"results": {
"output1": "v1-v2"
},
"status": "COMPLETED",
"startTime": "2019-02-19T11:17:05.464",
"endTime": "2019-02-19T11:17:05.579"
},
{
"scenario": "scenario-1",
"testCaseName": "s1.ts2.testcase-1",
"testSuiteName": "testsuite-2",
"executionId": "ebaa5f21-ed68-4098-97a9-775ac8800f09-1550575025614",
"parameters": {
"input1": "v1"
},
"results": {
"output1": "v1=v2"
},
"status": "COMPLETED",
"startTime": "2019-02-19T11:17:05.579",
"endTime": "2019-02-19T11:17:05.701"
}
]
**9. Execute test case with file content**::
POST {{vtp-host}}/onapapi/vnfsdk-marketplace/v1/vtp/executions?requestId=ebaa5f21-ed68-4098-97a9-775ac8800f07
content-type multipart/form-data
BODY:
file -- file s1.ts1.testcase-1.yaml content
executions:
[{
"scenario": "open-cli",
"testSuiteName": "schema",
"testCaseName": "schema-validate",
"parameters": {
"schema-location": "file://s1.ts1.testcase-1.yaml"
}
}]
RESPONSE:
[
{
"scenario": "open-cli",
"testCaseName": "schema-validate",
"testSuiteName": "schema",
"executionId": "ebaa5f21-ed68-4098-97a9-775ac8800f07-1550575843353",
"parameters": {
"schema-location": "d:/temp/vtp/temp-files/s1.ts1.testcase-1.yaml"
},
"results": [
{}
],
"status": "COMPLETED",
"startTime": "2019-02-19T11:30:43.288",
"endTime": "2019-02-19T11:30:43.672"
}
]
Reference
----------
ONAP VTP Wiki_.
.. _Wiki: https://wiki.onap.org/pages/viewpage.action?pageId=43386304