summaryrefslogtreecommitdiffstats
path: root/robot/resources/test_templates/vnf_instantiation_ovp.robot
diff options
context:
space:
mode:
authorstark, steven <steven.stark@att.com>2019-08-28 16:11:53 -0700
committerDaniel Rose <dr695h@att.com>2019-09-12 21:58:03 +0000
commitea4af0caf0a786b9b8d05dc3d2749f965050f398 (patch)
tree07e8ecd1557a35e564cd35db2296bb3b3f397bd0 /robot/resources/test_templates/vnf_instantiation_ovp.robot
parent956f45b32feb53a8da60025ca1ea3980ddf49bbe (diff)
[INT] Add testsuite for vnf lifecycle validation
The new testsuite is intended for heat-based VNFs going through the OPNFV VNF lifecycle validation. At the end of the test it will package up the results into a tarball for submission to the OVP portal. The testcase uploads a VNF pacakge and - executes the VVP validation scripts - models and distributes in SDC - instantiates via VID - validates the stack in OpenStack WIP instructions available here: https://wiki.onap.org/pages/viewpage.action?pageId=68546123 Issue-ID: INT-1197 Change-Id: I2ef827c64b64bdc7e2259806d86d6272cf77221c Signed-off-by: stark, steven <steven.stark@att.com>
Diffstat (limited to 'robot/resources/test_templates/vnf_instantiation_ovp.robot')
-rw-r--r--robot/resources/test_templates/vnf_instantiation_ovp.robot158
1 files changed, 158 insertions, 0 deletions
diff --git a/robot/resources/test_templates/vnf_instantiation_ovp.robot b/robot/resources/test_templates/vnf_instantiation_ovp.robot
new file mode 100644
index 00000000..ea7b0f92
--- /dev/null
+++ b/robot/resources/test_templates/vnf_instantiation_ovp.robot
@@ -0,0 +1,158 @@
+*** Settings ***
+Documentation This test can be used for an arbitrary VNF.
+Resource ../vid/vid_interface.robot
+Resource ../vid/create_vid_vnf.robot
+Resource ../sdnc_interface.robot
+
+Library ONAPLibrary.Openstack
+Library SeleniumLibrary
+Library Collections
+Library ONAPLibrary.Utilities
+Library ONAPLibrary.JSON
+Library ONAPLibrary.ServiceMapping WITH NAME ServiceMapping
+
+*** Keywords ***
+Instantiate VNF
+ [Documentation] Log into VID, create service instance, vnf instance, and module. This handles an arbitrary, single VNF service w/ volume modules.
+ [Arguments] ${customer_name} ${service} ${service_type} ${service_name} ${service_model_type} ${vnf_type} ${vf_modules} ${catalog_resources} ${product_family} ${tenant_name} ${lcp_region} ${cloud_owner} ${project_name} ${owning_entity} ${api_type} ${line_of_business}=LOB-Demonstration ${platform}=Platform-Demonstration
+ ${uuid}= Generate UUID4
+ ${list}= Create List
+ ${report_data}= Create List
+ Setup Browser
+ Login To VID GUI api_type=${api_type}
+
+ Log Creating ${service_name} in VID console=yes
+ ${service_instance_id}= Wait Until Keyword Succeeds 900s 5s Create VID Service Instance ${customer_name} ${service_model_type} ${service_type} ${service_name} ${project_name} ${owning_entity}
+
+ Validate Service Instance ${service_instance_id} ${service_type} ${customer_name}
+ ServiceMapping.Set Directory default ${GLOBAL_SERVICE_MAPPING_DIRECTORY}
+ ${vnflist}= ServiceMapping.Get Service Vnf Mapping default ${service}
+ ${vnf_name_index}= Set Variable 0
+ ${vf_module_name_list}= Create List
+ ${uuid}= Evaluate str("${uuid}")[:8]
+
+ ##### INSTANTIATING VNF IN VID #####
+ :FOR ${vnf} IN @{vnflist}
+ # APPC max is 50 characters
+ \ ${vnf_name}= Catenate Ete_${vnf}_${uuid}_${vnf_name_index}
+ \ ${generic_vnf_type}= Set Variable ${service_name}/${vnf_type} ${vnf_name_index}
+ \ ${vnf_name_index}= Evaluate ${vnf_name_index} + 1
+ \ Log Creating VNF ${vnf_name} in VID console=yes
+ \ Wait Until Keyword Succeeds 900s 5s Create VID VNF ${service_instance_id} ${vnf_name} ${product_family} ${lcp_region} ${tenant_name} ${vnf_type} ${CUSTOMER_NAME} line_of_business=${line_of_business} platform=${platform} cloud_owner_uc=${cloud_owner}
+
+ #### Calling Keyword To Create Each Module ####
+ \ ${report_data}= Loop and Create Modules in VID ${vf_modules} ${vnf_name} ${generic_vnf_type} ${service_instance_id} ${lcp_region} ${tenant_name} ${cloud_owner} ${customer_name} ${vnf} ${catalog_resources}
+
+ [Return] ${report_data}
+
+Loop and Create Modules in VID
+ [Documentation] Loops through the VF modules in a VNF and instantiates in VID
+ [Arguments] ${vf_modules} ${vnf_name} ${generic_vnf_type} ${service_instance_id} ${lcp_region} ${tenant_name} ${cloud_owner} ${customer_name} ${vnf} ${resources}
+ ${temp_list_for_report} Create List
+
+ ### Base Module
+ :FOR ${module} IN @{vf_modules}
+ \ ${vf_module_type}= Get From Dictionary ${module} name
+ \ ${template_name}= Get Heat Template Name From Catalog Resource ${resources} ${vnf} ${vf_module_type}
+ \ ${preload_file} ${isBase}= Retrieve Module Preload and isBase ${template_name}
+ \ ${temp_dict_for_report} = Run Keyword If "${isBase}"=="true" Create Module in VID ${vnf_name} ${template_name} ${vf_module_type} ${generic_vnf_type} ${preload_file} ${service_instance_id} ${lcp_region} ${tenant_name} ${customer_name} ${cloud_owner}
+ \ Run Keyword If "${isBase}"=="true" Append To List ${temp_list_for_report} ${temp_dict_for_report}
+
+ ### Incremental Modules
+ :FOR ${module} IN @{vf_modules}
+ \ ${vf_module_type}= Get From Dictionary ${module} name
+ \ ${template_name}= Get Heat Template Name From Catalog Resource ${resources} ${vnf} ${vf_module_type}
+ \ ${preload_file} ${isBase}= Retrieve Module Preload and isBase ${template_name}
+ \ ${temp_dict_for_report} = Run Keyword If "${isBase}"=="false" Create Module in VID ${vnf_name} ${template_name} ${vf_module_type} ${generic_vnf_type} ${preload_file} ${service_instance_id} ${lcp_region} ${tenant_name} ${customer_name} ${cloud_owner}
+ \ Run Keyword If "${isBase}"=="false" Append To List ${temp_list_for_report} ${temp_dict_for_report}
+
+ [Return] ${temp_list_for_report}
+
+Create Module in VID
+ [Arguments] ${vnf_name} ${template_name} ${vf_module_type} ${generic_vnf_type} ${preload_file} ${service_instance_id} ${lcp_region} ${tenant_name} ${customer_name} ${cloud_owner}
+
+ ${vf_module_name}= Catenate Vfmodule_${vnf_name}_${template_name}
+ ${vf_module_name}= Remove String ${vf_module_name} .yaml .yml
+ ${Module_name}= Set Variable
+ ${api_type}= Retrieve Manifest Data api_type
+
+ Create Preload From JSON ${BUILD_DIR}/preloads/${preload_file} ${api_type} ${vf_module_name} ${vf_module_type} ${vnf_name} ${generic_vnf_type}
+
+ ${temp_dict_for_report} Create Dictionary stack_name=${vf_module_name} template_name=${BUILD_DIR}/templates/${template_name} preload_name=${BUILD_DIR}/preloads/${preload_file}
+
+ Log Creating ${vf_module_name} in VID console=yes
+ ${vf_module_id}= Create VID VNF module ${service_instance_id} ${vf_module_name} ${lcp_region} ${tenant_name} ${vf_module_type} ${customer_name} ${vnf_name} cloud_owner_uc=${cloud_owner}
+ [Return] ${temp_dict_for_report}
+
+Retrieve Module Preload and isBase
+ [Arguments] ${file_name}
+ ${json}= OperatingSystem.Get File ${BUILD_DIR}/vnf-details.json
+ ${object}= Evaluate json.loads('''${json}''') json
+ :FOR ${vnf} IN @{object["modules"]}
+ \ ${module_present}= set variable True
+ \ ${file_name_m}= set variable ${vnf["filename"]}
+ \ ${preload_name}= set variable if '${file_name_m}' == '${file_name}' ${vnf["preload"]}
+ \ ${isBase}= set variable if '${file_name_m}' == '${file_name}' ${vnf["isBase"]}
+ \ Exit For Loop If '${file_name_m}' == '${file_name}'
+ \ ${module_present}= set variable False
+ Return From Keyword If ${module_present}==True ${preload_name} ${isBase}
+ Fail msg=ERROR: A module with the file name: ${file_name} is not present.
+
+##### Getting The Heat Template Name From the Module ID, using the catalog data #####
+Get Heat Template Name From Catalog Resource
+ [Documentation] Searching through the catalog resources looking for the heat template name
+ [Arguments] ${resources} ${vnf} ${module_id}
+
+ ${keys}= Get Dictionary Keys ${resources}
+ ${artifact_ids}= Get Artifact IDs From CSAR ${resources} ${vnf} ${module_id}
+
+ :FOR ${key} IN @{keys}
+ \ ${cr}= Get From Dictionary ${resources} ${key}
+ \ ${artifacts}= Set Variable ${cr['allArtifacts']}
+ \ ${artifactName}= Get Artifact Name From Artifacts ${artifacts} ${artifact_ids}
+ \ Return From Keyword If "${artifactName}" != "NOTFOUND" ${artifactName}
+
+Get Artifact Name From Artifacts
+ [Arguments] ${artifacts} ${artifact_ids}
+
+ ${keys}= Get Dictionary Keys ${artifacts}
+
+ :FOR ${key} IN @{keys}
+ \ ${artifact}= Get From Dictionary ${artifacts} ${key}
+ \ ${artifactType}= Get From Dictionary ${artifact} artifactType
+ \ ${csar_id}= Set Variable ''
+ \ ${csar_id}= Run Keyword If "${artifactType}"=="HEAT" Get From Dictionary ${artifact} artifactUUID
+ \ ${artifactName}= Run Keyword If $csar_id in $artifact_ids Get From Dictionary ${artifact} artifactName
+ \ Return From Keyword If $csar_id in $artifact_ids ${artifactName}
+
+ [Return] NOTFOUND
+
+Get Artifact IDs From CSAR
+ [Documentation] Looking for the artifact ID for a given module
+ [Arguments] ${resources} ${vnf} ${module_id}
+
+ ${keys}= Get Dictionary Keys ${resources}
+
+ :FOR ${key} IN @{keys}
+ \ ${cr}= Get From Dictionary ${resources} ${key}
+ \ ${groups}= Set Variable ${cr['groups']}
+ \ ${artifact_ids}= Get Artifact IDs From Module ${groups} ${module_id}
+ \ Return From Keyword If ${artifact_ids} is not None ${artifact_ids}
+
+ ${empty_list}= Create List
+
+ [Return] ${empty_list}
+
+Get Artifact IDs From Module
+ [Arguments] ${groups} ${module_id}
+
+ :FOR ${group} IN @{groups}
+ \ ${invariant_name}= Get From Dictionary ${group} invariantName
+ \ ${artifact_ids}= Create List
+ \ ${artifact_ids}= Run Keyword If "${invariant_name}"== "${module_id}" Get From Dictionary ${group} artifactsUuid
+ \ Return From Keyword If ${artifact_ids} is not None ${artifact_ids}
+
+ ${empty_list}= Create List
+
+ [Return] ${empty_list}
+##### End of catalog manipulation #####