Commit f363742d authored by Giacomo Bernini's avatar Giacomo Bernini
Browse files

Merge branch '2.7.1-dev-SOL002-reference-descriptors' into '2.7.1-dev'

SOL002 - Implementation of additional test steps for checks against VNFD content in v2.7.1

See merge request !142
parents 8c282eb0 dedf94bb
......@@ -37,6 +37,7 @@ GET Information about an individual VNF Instance
GET individual vnfInstance
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is vnfInstance
Check HTTP Response Body vnfInstance content against VNF Descriptor
PUT Individual VNFInstance - Method not implemented
[Documentation] Test ID: 6.3.5.2.3
......
......@@ -28,7 +28,8 @@ Get status information about multiple VNF instances
... Post-Conditions: none
Get Individual VNF LCM OP occurrences
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is VnfLcmOpOcc
Check HTTP Response Body Json Schema Is vnfLcmOpOcc
Check HTTP Response Body vnf LCM OpOCC content against VNF Descriptor
PUT status information about multiple VNF instances - Method not implemented
[Documentation] Test ID: 6.3.5.12.3
......
......@@ -19,6 +19,7 @@ POST Create a new vnfInstance
POST Create a new vnfInstance
Check HTTP Response Status Code Is 201
Check HTTP Response Body Json Schema Is vnfInstance
Check HTTP Response Body vnfInstance content against VNF Descriptor
GET information about multiple VNF instances
[Documentation] Test ID: 6.3.5.1.2
......@@ -32,8 +33,8 @@ GET information about multiple VNF instances
GET multiple vnfInstances
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is vnfInstances
Check HTTP Response Body vnfInstances content against VNF Descriptor
GET information about multiple VNF instances Bad Request Invalid attribute-based filtering parameters
[Documentation] Test ID: 6.3.5.1.3
... Test title: GET information about multiple VNF instances Bad Request Invalid attribute-based filtering parameters
......
......@@ -10,6 +10,8 @@ Library JSONLibrary
Library Collections
Library JSONSchemaLibrary schemas/
Library String
Variables descriptors/SOL001/VNFD/vnfd_SOL001.yaml
Variables descriptors/SOL006/VNFD/vnfd_SOL006.yaml
*** Keywords ***
......@@ -75,12 +77,13 @@ Check HTTP Response Header Contains
Log Header is present
POST Create a new vnfInstance
Log Create VNF instance by POST to ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances
Log Create VNF instance by POST to ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances
Set Headers {"Accept":"${ACCEPT}"}
Set Headers {"Content-Type": "${CONTENT_TYPE}"}
Set Headers {"Authorization":"${AUTHORIZATION}"}
Run Keyword If ${check_descriptors} == 1 PARSE the Descriptor File
${template} = Get File jsons/createVnfRequest.json
${body}= Format String ${template} vnfdId=${vnfdId}
${body}= Format String ${template} vnfdId=${Descriptor_ID}
Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances ${body}
${outputResponse}= Output response
Set Global Variable ${response} ${outputResponse}
......@@ -202,7 +205,9 @@ PATCH individual vnfInstance
Set Headers {"Content-Type": "${CONTENT_TYPE_PATCH}"}
Set Headers {"If-Match": "${original_etag}"}
Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"}
#Run Keyword If ${check_descriptors} == 1 Add VNF Descriptor Content to VNF Instance
${body}= Get File jsons/patchBodyRequest.json
#${body}= Format String ${template} vnfdId=${descriptor_id}
Patch ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId} ${body}
${outputResponse}= Output response
Set Global Variable ${response} ${outputResponse}
......@@ -1037,4 +1042,180 @@ Get VNF LCM Operation occurrences with exclude_fields attribute selector
Check HTTP Response Header Contain Link
${linkURL}= Get Value From Json ${response['headers']} $..Link
Should Not Be Empty ${linkURL}
\ No newline at end of file
Should Not Be Empty ${linkURL}
Check HTTP Response Body vnfInstances content against VNF Descriptor
#{check_multiple_instances} flag, set to 1 to check multiple instances against descriptors
Run Keyword If ${check_multiple_instances} == 1 Check Multiple VNF Instances Content
Check Multiple VNF Instances Content
#${number_of_instances}= Get Length ${response['body']}
#FOR ${i} IN RANGE ${number_of_instances}
${response['body']}= Get Variable Value ${response['body'][0]} #Gets the first instance at index 0
Check Individual VNF Instance Content
#END
Check HTTP Response Body vnfInstance content against VNF Descriptor
#${check_descriptors} flag, 1 to check descriptors
Run Keyword If ${check_descriptors} == 1 Check Individual VNF Instance Content
Check Individual VNF Instance Content
PARSE the Descriptor File
Match the VNF Instance Response Attributes with Descriptors
PARSE the Descriptor File
Run Keyword If '${descriptorType}'=='SOL001' Fetch Information from SOL001 descriptor file ELSE Fetch Information from SOL006 descriptor file
Fetch Information from SOL001 descriptor file
@{VDU_labels}= Create List
@{VNF_labels}= Create List
@{VirtualLink_labels}= Create List
@{CP_labels}= Create List
@{Storage_labels}= Create List
FOR ${key} IN @{topology_template.node_templates.keys()}
${key_type}= Get Variable Value ${topology_template.node_templates.${key}.type}
${VDU_check}= Run Keyword And Return Status Should Be Equal As Strings ${key_type} ${tosca_type_VDU_compute}
${VNF_check}= Run Keyword And Return Status Should Be Equal As Strings ${key_type} ${tosca_type_VNF}
${Link_check}= Run Keyword And Return Status Should Be Equal As Strings ${key_type} ${tosca_type_virtual_link}
${VDUcp_check}= Run Keyword And Return Status Should Be Equal As Strings ${key_type} ${tosca_type_VDU_cp}
${Storage_check}= Run Keyword And Return Status Should Be Equal As Strings ${key_type} ${tosca_type_storage}
Run Keyword If ${VDU_check} Append To List ${VDU_labels} ${key}
Run Keyword If ${VNF_check} Append To List ${VNF_labels} ${key}
Run Keyword If ${VNF_check} Get VNF Attributes from SOL001 ${key}
Run Keyword If ${Link_check} Append To List ${VirtualLink_labels} ${key}
Run Keyword If ${VDUcp_check} Append To List ${CP_labels} ${key}
Run Keyword If ${Storage_check} Append To List ${Storage_labels} ${key}
END
Set Global Variable @{VDU_IDs} @{VDU_labels}
Set Global Variable @{VNF_IDs} @{VNF_labels}
Set Global Variable @{VirtualLink_IDs} @{VirtualLink_labels}
Set Global Variable @{CP_IDs} @{CP_labels}
Set Global Variable @{Storage_IDs} @{Storage_labels}
Get VNF Attributes from SOL001
[Arguments] ${VNF_label}
${descriptor_id}= Get Variable Value ${topology_template.node_templates.${VNF_label}.properties.descriptor_id}
${provider}= Get Variable Value ${topology_template.node_templates.${VNF_label}.properties.provider}
${product_name}= Get Variable Value ${topology_template.node_templates.${VNF_label}.properties.product_name}
${software_version}= Get Variable Value ${topology_template.node_templates.${VNF_label}.properties.software_version}
${descriptor_version}= Get Variable Value ${topology_template.node_templates.${VNF_label}.properties.descriptor_version}
${flavour_id}= Get Variable Value ${topology_template.node_templates.${VNF_label}.properties.flavour_id}
Set Global Variable ${Descriptor_ID} ${descriptor_id}
Set Global Variable ${Provider} ${provider}
Set Global Variable ${Product_Name} ${product_name}
Set Global Variable ${Software_Version} ${software_version}
Set Global Variable ${Descriptor_Version} ${descriptor_version}
Set Global Variable ${Flavour_ID} ${flavour_id}
Fetch Information from SOL006 descriptor file
${descriptor_id}= Get Variable Value ${nfv.vnfd[0].id}
${provider}= Get Variable Value ${nfv.vnfd[0].provider}
${product_name}= Get Variable Value ${nfv.vnfd[0]['product-name']}
${software_version}= Get Variable Value ${nfv.vnfd[0]['software-version']}
${descriptor_version}= Get Variable Value ${nfv.vnfd[0].version}
${VDUcount}= Get Length ${nfv.vnfd[0].vdu}
${extCP_count}= Get Length ${nfv.vnfd[0]['ext-cpd']}
${virtualLink_count}= Get length ${nfv.vnfd[0]['int-virtual-link-desc']}
${instantiation_levels}= Get Length ${nfv.vnfd[0].df['instantiation-level']}
FOR ${key} IN @{nfv.vnfd[0].keys()}
${VDU_check}= Run Keyword And Return Status Should Be Equal As Strings ${key} vdu
Run Keyword If ${VDU_check} Get VDU IDs ${VDUcount}
${extCP_check}= Run Keyword And Return Status Should Be Equal As Strings ${key} ext-cpd
Run Keyword If ${extCP_check} Get External CP IDs ${extCP_count}
${virtualLink_check}= Run Keyword And Return Status Should Be Equal As Strings ${key} int-virtual-link-desc
Run Keyword If ${virtualLink_check} Get Virtual Link IDs ${virtualLink_count}
${DF_check}= Run Keyword And Return Status Should Be Equal As Strings ${key} df
Run Keyword If ${DF_check} Get Instantiation Levels ${instantiation_levels}
END
Set Global Variable ${Descriptor_ID} ${descriptor_id}
Set Global Variable ${Provider} ${provider}
Set Global Variable ${Product_Name} ${product_name}
Set Global Variable ${Software_Version} ${software_version}
Set Global Variable ${Descriptor_Version} ${descriptor_version}
Get VDU IDs
[Arguments] ${count}
@{VDU_labels}= Create List
${Storage_labels}= Create List
FOR ${i} IN RANGE ${count}
Append To List ${VDU_labels} ${nfv.vnfd[0].vdu[${i}]['id']}
Append To List ${Storage_labels} ${nfv.vnfd[0].vdu[${i}]['virtual-storage-desc']}
Get Internal CPs for each VDU ${i}
END
Set Global Variable ${VDU_IDs} ${VDU_labels}
Set Global Variable ${Storage_IDs} ${Storage_labels}
Get Internal CPs for each VDU
[Arguments] ${vdu}
${count}= Get Length ${nfv.vnfd[0].vdu[${vdu}]['int-cpd']}
${internal_CPs}= Create List
FOR ${i} IN RANGE ${count}
Append To List ${internal_CPs} ${nfv.vnfd[0].vdu[${vdu}]['int-cpd'][${i}]['id']}
END
Set Global Variable ${internalCP_IDs} ${internal_CPs}
Get External CP IDs
[Arguments] ${count}
@{external_CPs}= Create List
FOR ${i} IN RANGE ${count}
Append To List ${external_CPs} ${nfv.vnfd[0]['ext-cpd'][${i}]['id']}
END
Set Global Variable ${externalCP_IDs} ${external_CPs}
Get Virtual Link IDs
[Arguments] ${count}
${VirtualLink_labels}= Create List
FOR ${i} IN RANGE ${count}
Append To List ${VirtualLink_labels} ${nfv.vnfd[0]['int-virtual-link-desc'][${i}]['id']}
END
Set Global Variable ${VirtualLink_IDs} ${VirtualLink_labels}
Get Instantiation Levels
[Arguments] ${count}
@{Instantiation_Levels}= Create List
FOR ${i} IN RANGE ${count}
Append To List ${Instantiation_Levels} ${nfv.vnfd[0].df['instantiation-level'][${i}]['id']}
END
Set Global Variable ${InstantiationLevel_IDs} ${Instantiation_Levels}
Match the VNF Instance Response Attributes with Descriptors
#Checking Response attributes with VNF Descriptors
Should Be Equal As Strings ${response['body']['vnfdId']} ${Descriptor_ID}
Should Be Equal As Strings ${response['body']['vnfProvider']} ${Provider}
Should Be Equal As Strings ${response['body']['vnfProductName']} ${Product_Name}
Should Be Equal As Strings ${response['body']['vnfSoftwareVersion']} ${Software_Version}
Should Be Equal As Strings ${response['body']['vnfdVersion']} ${Descriptor_Version}
Should Be Equal As Strings ${response['body']['instantiatedVnfInfo']['flavourId']} ${Flavour_ID}
List Should Contain Value ${VDU_IDs} ${response['body']['instantiatedVnfInfo']['vnfcResourceInfo'][0]['vduId']}
Run Keyword If '${descriptorType}'=='SOL006' List Should Contain Value ${externalCP_IDs} ${response['body']['instantiatedVnfInfo']['extCpInfo'][0]['cpdId']}
Run Keyword If '${descriptorType}'=='SOL006' List Should Contain Value ${internalCP_IDs} ${response['body']['instantiatedVnfInfo']['vnfcResourceInfo'][0]['vnfcCpInfo'][0]['cpdId']}
Run Keyword If '${descriptorType}'=='SOL001' List Should Contain Value @{CP_IDs} ${response['body']['instantiatedVnfInfo']['extCpInfo'][0]['cpdId']}
Run Keyword If '${descriptorType}'=='SOL001' List Should Contain Value @{CP_IDs} ${response['body']['instantiatedVnfInfo']['vnfcResourceInfo'][0]['vnfcCpInfo'][0]['cpdId']}
List Should Contain value ${Storage_IDs} ${response['body']['instantiatedVnfInfo']['virtualStorageResourceInfo'][0]['virtualStorageDescId']}
List Should Contain Value ${VirtualLink_IDs} ${response['body']['instantiatedVnfInfo']['extManagedVirtualLinkInfo'][0]['vnfVirtualLinkDescId']}
Check HTTP Response Body vnf LCM OpOCCs content against VNF Descriptor
#{check_multiple_instances} flag, set to 1 to check multiple instances against descriptors
Run Keyword If ${check_multiple_instances} == 1 Check Multiple VNF LCM OpOCCs Content
Check Multiple VNF LCM OpOCCs Content
#${number_of_instances}= Get Length ${response['body']}
#FOR ${i} IN RANGE ${number_of_instances}
${response['body']}= Get Variable Value ${response['body'][0]} #Gets the first instance at index 0
Check Individual VNF LCM Operation Occurence Content
#END
Check HTTP Response Body vnf LCM OpOCC content against VNF Descriptor
Run Keyword If ${check_descriptors} == 1 Check Individual VNF LCM Operation Occurence Content
Check Individual VNF LCM Operation Occurence Content
PARSE the Descriptor File
Match the VNF LCM Operation Occurence Response Attributes with Descriptors
Match the VNF LCM Operation Occurence Response Attributes with Descriptors
Should Be Equal As Strings ${response['body']['changedInfo']['vnfdId']} ${Descriptor_ID}
Should Be Equal As Strings ${response['body']['changedInfo']['vnfdVersion']} ${Descriptor_Version}
List Should Contain Value ${VDU_IDs} ${response['body']['resourceChanges']['affectedVnfcs'][0]['vduId']}
List Should Contain value ${Storage_IDs} ${response['body']['resourceChanges']['affectedVirtualStorages'][0]['virtualStorageDescId']}
List Should Contain Value ${VirtualLink_IDs} ${response['body']['resourceChanges']['affectedVirtualLinks'][0]['vnfVirtualLinkDescId']}
......@@ -32,7 +32,8 @@ GET status information about multiple VNF LCM operation occurrences
GET VNF LCM OP occurrences
Check HTTP Response Status Code Is 202
Check HTTP Response Body Json Schema Is VnfLcmOpOccs
Check HTTP Response Body vnf LCM OpOCCs content against VNF Descriptor
GET status information about multiple VNF LCM operation occurrences Bad Request Invalid attribute-based filtering parameters
[Documentation] Test ID: 6.3.5.11.3
... Test title: GET status information about multiple VNF LCM operation occurrences Bad Request Invalid attribute-based filtering parameters
......
tosca_definitions_version: tosca_simple_yaml_1_2
description: "TST010 reference VNF-B"
metadata:
descriptor_id: "VNF-B"
vendor: "ETSI TST WG"
version: "2.0"
topology_template:
substitution_mappings:
node_type: "tosca.nodes.nfv.VNF"
requirements:
virtual_link_management:
[management, virtual_link_management]
virtual_link_left:
[left, virtual_link_left]
virtual_link_right:
[right, virtual_link_right]
node_templates:
right:
type: "tosca.nodes.nfv.VduCp"
properties:
order: 1
requirements:
virtual_link_right:
virtual_binding: VDU-B-2
management:
type: "tosca.nodes.nfv.VduCp"
properties:
order: 0
requirements:
virtual_link_management:
virtual_binding: VDU-B-1
left:
type: "tosca.nodes.nfv.VduCp"
properties:
order: 2
requirements:
virtual_link_left:
virtual_binding: VDU-B-1
internal_vl:
type: "tosca.nodes.nfv.VnfVirtualLink"
properties:
connectivity_type:
layer_protocols: [ ipv4 ]
description: Internal Virtual link in the VNF
vl_profile:
max_bitrate_requirements:
root: 100000
leaf: 20000
min_bitrate_requirements:
root: 10000
leaf: 10000
internal_vdu_b_1_cp:
type: "tosca.nodes.nfv.VduCp"
properties:
order: 2
requirements:
- virtual_binding: VDU-B-1
- virtual_link: internal_vl
internal_vdu_b_2_cp:
type: "tosca.nodes.nfv.VduCp"
properties:
order: 0
requirements:
- virtual_binding: VDU-B-2
- virtual_link: internal_vl
vdu_b_1_vsd:
type: "tosca.nodes.nfv.Vdu.VirtualBlockStorage"
properties:
virtual_block_storage_data:
size_of_storage: 20
rdma_enabled: false
sw_image_data:
name: "vdu-b-1 image"
version: "1.1"
checksum:
algorithm: "sha-224"
hash: "somehashfortst010"
container_format: "bare"
disk-format: qcow2
min-disk: '1'
min-ram: '2'
size: '1'
artifacts:
sw_image:
type: "tosca.artifacts.nfv.SwImage"
file: vdu-b-1.qcow2
vdu_b_2_vsd:
type: "tosca.nodes.nfv.Vdu.VirtualBlockStorage"
properties:
virtual_block_storage_data:
size_of_storage: 20
rdma_enabled: false
sw_image_data:
name: "vdu-b-2 image"
version: "1.1"
checksum:
algorithm: "sha-224"
hash: "somehashfortst010"
container_format: "bare"
disk-format: qcow2
min-disk: '1'
min-ram: '2'
size: '1'
artifacts:
sw_image:
type: tosca.artifacts.nfv.SwImage
file: vdu-b-2.qcow2
vnf_b_1_VNF:
type: "tosca.nodes.nfv.VNF"
properties:
descriptor_id: "VNF-B-2VDUs"
descriptor_version: "2.0"
provider: "ETSI TST WG"
product_name: "VNF-B-2VDUs"
software_version: "2.0"
product_info_name: "VNF-B-2VDUs"
product_info_description: "TST010 reference VNF-B with 2 VDUs"
flavour_id: "VNF-B-2VDU_flavor"
flavour_description: "VNF-B with 2 VDUs flavor"
vnfm_info:
etsivnfm:
- v2.3.1
interfaces:
Vnflcm:
scale:
implementation: scale-example.yaml
terminate:
implementation: terminate-example.yaml
operate:
implementation: operate-example.yaml
VDU_B_1:
type: "tosca.nodes.nfv.Vdu.Compute"
properties:
name: "vdu-b-1-vcd"
descriptor: "Description of VDU-B-1"
vdu_profile:
min_number_of_instances: 1
max_number_of_instances: 2
capabilities:
virtual_compute:
properties:
virtual_memory:
virtual_mem_size: 4096
numa_enabled: false
virtual_cpu:
num_virtual_cpu: 2
requirements:
virtual_storage:
- "vdu-b-1-vsd"
VDU_B_2:
type: "tosca.nodes.nfv.Vdu.Compute"
properties:
name: "vdu-b-2-vcd"
descriptor: "Description of VDU-B-2"
vdu_profile:
min_number_of_instances: 1
max_number_of_instances: 4
capabilities:
virtual_compute:
properties:
virtual_memory:
virtual_mem_size: 6144
numa_enabled: false
virtual_cpu:
num_virtual_cpu: 2
requirements:
virtual_storage:
- "vdu-b-2-vsd"
\ No newline at end of file
nfv:
vnfd:
- id: VNF-B-2vdu
provider: ETSI TST WG
product-name: TST010 reference VNF-B with 2 VDUs
software-version: '2.2'
version: '2.2'
vnfm-info: ETSI VNFM
vdu:
- id: vdu-b-1
name: VNF-B VDU 1
int-cpd:
- id: left
layer-protocol: ethernet
- id: management
layer-protocol: ethernet
- id: internal
layer-protocol: ethernet
int-virtual-link-desc: internal-vl
virtual-compute-desc: vdu-b-1-vcd
virtual-storage-desc: vdu-b-1-vsd
sw-image-desc: vdu-b-1-image
- id: vdu-b-2
name: VNF-B VDU 2
int-cpd:
- id: right
layer-protocol: ethernet
- id: management
layer-protocol: ethernet
- id: internal
layer-protocol: ethernet
int-virtual-link-desc: internal-vl
virtual-compute-desc: vdu-b-2-vcd
virtual-storage-desc: vdu-b-2-vsd
sw-image-desc: vdu-b-2-image
virtual-compute-desc:
id: vdu-b-1-vcd
virtual-memory:
size: '4.0'
virtual-cpu:
num-virtual-cpu: '2'
virtual-storage-desc:
id: vdu-b-1-vsd
type-of-storage: root-storage
size-of-storage: '0'
sw-image-desc:
id: vdu-b-1-image
name: VNF-B image
version: '1.1'
checksum:
algorithm: sha-224
hash: somehashfortst010
container-format: bare
disk-format: qcow2
min-disk: '1'
min-ram: '2.0'
size: '1'
image: 'http://someurl.com/VNF-B.qcow2'
virtual-compute-desc:
id: vdu-b-2-vcd
virtual-memory:
size: '6.0'
virtual-cpu:
num-virtual-cpu: '2'
virtual-storage-desc:
id: vdu-b-2-vsd
type-of-storage: root-storage
size-of-storage: '0'
sw-image-desc:
id: vdu-b-2-image
name: VNF-B-2 image
version: '1.1'
checksum:
algorithm: sha-224
hash: somehashfortst010
container-format: bare
disk-format: qcow2
min-disk: '1'
min-ram: '2.0'
size: '1'
image: 'http://someurl.com/VNF-B-2.qcow2'
int-virtual-link-desc:
- id: internal-vl
flavour:
id: internal-vl-flavour
qos:
latency: '1'
packet-delay-variation: '1'
packet-loss-ratio: '0.05'
connectivity-type:
layer-protocol: ethernet
ext-cpd:
- id: ext-b-left
int-cpd:
vdu-id: vdu-b-1
cpd: left
layer-protocol: ethernet
- id: management
int-cpd:
vdu-id: vdu-b-1
cpd: management
layer-protocol: ethernet
- id: ext-b-right
int-cpd:
vdu-id: vdu-b-2
cpd: right
layer-protocol: ethernet
df:
id: normal
vdu-profile:
- id: vdu-b-1
min-number-of-instances: '1'
max-number-of-instances: '2'
- id: vdu-b-2
min-number-of-instances: '1'
max-number-of-instances: '4'
instantiation-level:
- id: double
vdu-level:
- vdu-id: vdu-b-1
number-of-instances: '2'
- vdu-id: vdu-b-2
number-of-instances: '2'
- id: single
vdu-level:
- vdu-id: vdu-b-1
number-of-instances: '1'
- vdu-id: vdu-b-2
number-of-instances: '1'
default-instantiation-level: single
lcm-operations-configuration:
scale-vnf-to-level-op-config:
arbitrary-target-levels-supported: 'true'
terminate-vnf-op-config:
min-graceful-termination: '1'
operate-vnf-op-config:
min-graceful-stop-timeout: '1'
\ No newline at end of file
......@@ -78,4 +78,30 @@ ${changeStateTo} STOPPED
${vnfdIds} 6fc3539c-e602-4afa-8e13-962fb5a7d81f