diff --git a/devops-stages/stage-test.sh b/devops-stages/stage-test.sh index 4be5aaa211923354a692830c07a418d75da05e47..335f9de76474b5c911dcbf31b5dec8d27d690998 100755 --- a/devops-stages/stage-test.sh +++ b/devops-stages/stage-test.sh @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# python3 -m rflint testsuites + check_tabs () { folder="$1" tabs="y" diff --git a/robot-systest/lib/connectivity_lib.resource b/robot-systest/lib/connectivity_lib.robot similarity index 60% rename from robot-systest/lib/connectivity_lib.resource rename to robot-systest/lib/connectivity_lib.robot index e91aedd861cd495ec992ec6cc8ae848a47c84ed7..79381e47c5b637e7b9e0fe7ee02d614fcf5d442d 100644 --- a/robot-systest/lib/connectivity_lib.resource +++ b/robot-systest/lib/connectivity_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,17 +10,10 @@ # See the License for the specific language governing permissions and # limitations under the License. - -*** Settings *** -Documentation Library providing keywords for testing connectivity to hosts via ping. -Library OperatingSystem - - *** Variables *** -${SUCCESS_RETURN_CODE} 0 -${CONNECTIVITY_POL_TIME} 5sec -${CONNECTIVITY_MAX_WAIT_TIME} 30sec - +${success_return_code} 0 +${connectivity_pol_time} 5sec +${connectivity_max_wait_time} 30sec *** Keywords *** Test Ping Host @@ -30,12 +22,14 @@ Test Ping Host ... host: IP or name of the host ... Execution example: ... Ping Test \${host} + [Arguments] ${host} - ${rc} ${stdout}= Run And Return Rc And Output ping -c 2 -W 1 ${host} + + ${rc} ${stdout}= Run and Return RC and Output ping -c 2 -W 1 ${host} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} Test Connectivity - [Documentation] Ping a host several times during ${CONNECTIVITY_MAX_WAIT_TIME} until it succeeds or raises a timeout. [Arguments] ${host} - Wait Until Keyword Succeeds ${CONNECTIVITY_MAX_WAIT_TIME} ${CONNECTIVITY_POL_TIME} Test Ping Host ${host} + + WAIT UNTIL KEYWORD SUCCEEDS ${connectivity_max_wait_time} ${connectivity_pol_time} Test Ping Host ${host} diff --git a/robot-systest/lib/juju_lib.resource b/robot-systest/lib/juju_lib.robot similarity index 78% rename from robot-systest/lib/juju_lib.resource rename to robot-systest/lib/juju_lib.robot index 3d02901c751bead3c16e60556753ade2a0a8f47c..45208a8b82b48805d78f17854ec3b1e38e1f7fa4 100644 --- a/robot-systest/lib/juju_lib.resource +++ b/robot-systest/lib/juju_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,66 +10,59 @@ # See the License for the specific language governing permissions and # limitations under the License. - -*** Settings *** -Documentation Library providing keywords to read objects from Juju using juju client. -Library String -Resource ssh_lib.resource - - *** Variables *** -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Keywords *** Get Scale Number - [Documentation] Get from Juju the number of units (scale) of a juju application and return it. [Arguments] ${endpoint} ${username} ${password} ${privatekey} ${application_name} ${model_name} + Should Not Be Empty ${application_name} ${model_name} ${host}= Remove String Using Regexp ${endpoint} :([0-9]+)$ ${stdout}= Execute Remote Command Check Rc Return Output ${host} ${username} ${password} ${privatekey} juju show-status ${application_name} --format yaml -m ${model_name} | grep scale | awk -F ': ' '{print $2}' Log ${stdout} - RETURN ${stdout} + [Return] ${stdout} Get Model Name - [Documentation] Get from Juju the model from a KDU name and a NS id. [Arguments] ${endpoint} ${username} ${password} ${privatekey} ${ns_id} ${kdu_name} + Should Not Be Empty ${ns_id} ${kdu_name} ${host}= Remove String Using Regexp ${endpoint} :([0-9]+)$ ${stdout}= Execute Remote Command Check Rc Return Output ${host} ${username} ${password} ${privatekey} juju models | grep -i ${kdu_name} | grep -i ${ns_id} | cut -f1 -d " " Log ${stdout} ${model_name}= Set Variable ${kdu_name}-${ns_id} Should Be Equal As Strings ${model_name} ${stdout} - RETURN ${stdout} + [Return] ${stdout} Get Application Name VDU Level Charm - [Documentation] Get from Juju the application name matching a model and a VDU profile id passed as arguments. The application name must contain the EE passed as argument. [Arguments] ${endpoint} ${username} ${password} ${privatekey} ${model_name} ${vdu_profile_id} ${ee_name} + Should Not Be Empty ${model_name} ${host}= Remove String Using Regexp ${endpoint} :([0-9]+)$ ${stdout}= Execute Remote Command Check Rc Return Output ${host} ${username} ${password} ${privatekey} juju status -m ${model_name} | grep "\\-vdu" | grep -v "*" | grep -i ${vdu_profile_id} | cut -f1 -d " " Log ${stdout} Should Not Be Empty ${stdout} Should Contain ${stdout} ${ee_name} - RETURN ${stdout} + [Return] ${stdout} Get Application Name NS Level Charm - [Documentation] Get from Juju the application name matching a model and a NS charm passed as arguments. [Arguments] ${endpoint} ${username} ${password} ${privatekey} ${model_name} ${charm_name} + Should Not Be Empty ${model_name} ${host}= Remove String Using Regexp ${endpoint} :([0-9]+)$ ${stdout}= Execute Remote Command Check Rc Return Output ${host} ${username} ${password} ${privatekey} juju status -m ${model_name} | grep "\\-ns" | grep -v "*" | grep -i ${charm_name} | cut -f1 -d " " Log ${stdout} Should Not Be Empty ${stdout} - RETURN ${stdout} + [Return] ${stdout} Get Application Name VNF Level Charm - [Documentation] Get from Juju the application name matching a model and a VNF profile id passed as arguments. The application name must contain the EE passed as argument. [Arguments] ${endpoint} ${username} ${password} ${privatekey} ${model_name} ${vnf_profile_id} ${ee_name} + Should Not Be Empty ${model_name} ${host}= Remove String Using Regexp ${endpoint} :([0-9]+)$ ${stdout}= Execute Remote Command Check Rc Return Output ${host} ${username} ${password} ${privatekey} juju status -m ${model_name} | grep "\\-vnf" | grep -v "*" | grep -i ${vnf_profile_id} | cut -f1 -d " " Log ${stdout} Should Not Be Empty ${stdout} Should Contain ${stdout} ${ee_name} - RETURN ${stdout} + [Return] ${stdout} \ No newline at end of file diff --git a/robot-systest/lib/k8scluster_lib.resource b/robot-systest/lib/k8scluster_lib.resource deleted file mode 100644 index 0895da7dd4e10ca9afd80afc84d9653ebae27a5e..0000000000000000000000000000000000000000 --- a/robot-systest/lib/k8scluster_lib.resource +++ /dev/null @@ -1,90 +0,0 @@ -*** Comments *** -# Copyright 2020 Canonical Ltd. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -*** Settings *** -Documentation Library providing keywords for CRUD operations over Kubernetes clusters with OSM client. -Library OperatingSystem - - -*** Variables *** -${SUCCESS_RETURN_CODE} 0 -${K8SCLUSTER_LAUNCH_MAX_WAIT_TIME} 6min -${K8SCLUSTER_LAUNCH_POL_TIME} 30sec -${K8SCLUSTER_DELETE_MAX_WAIT_TIME} 2min -${K8SCLUSTER_DELETE_POL_TIME} 15sec - - -*** Keywords *** -Create K8s Cluster - [Documentation] Register a Kubernetes cluster in OSM using the name, version and credentials passed as arguments. - [Arguments] ${k8scluster_creds} ${k8scluster_version} ${k8scluster_vim} ${k8scluster_net} ${k8scluster_name} - ${rc} ${stdout}= Run And Return Rc And Output osm k8scluster-add --creds ${k8scluster_creds} --version ${k8scluster_version} --vim ${k8scluster_vim} --k8s-nets '{"net1": "${k8scluster_net}"}' ${k8scluster_name} --description "Robot cluster" - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Wait Until Keyword Succeeds ${K8SCLUSTER_LAUNCH_MAX_WAIT_TIME} ${K8SCLUSTER_LAUNCH_POL_TIME} Check For K8s Cluster To Be Ready ${k8scluster_name} - Check For K8s Cluster To Be Enabled ${k8scluster_name} - RETURN ${stdout} - -Delete K8s Cluster - [Documentation] Unregister/delete a Kubernetes cluster from OSM. - [Arguments] ${k8scluster_name} - ${rc} ${stdout}= Run And Return Rc And Output osm k8scluster-delete ${k8scluster_name} - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Wait Until Keyword Succeeds ${K8SCLUSTER_DELETE_MAX_WAIT_TIME} ${K8SCLUSTER_DELETE_POL_TIME} Check For K8s Cluster To Be Deleted ${k8scluster_name} - -Get K8s Cluster - [Documentation] Get the list of Kubernetes clusters in OSM, and return it. - ${rc} ${stdout}= Run And Return Rc And Output osm k8scluster-list - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Log ${stdout} - RETURN ${stdout} - -Check For K8s Cluster - [Documentation] Check if a Kubernetes cluster identified by name exists in OSM, and return it. - [Arguments] ${k8scluster_name} - ${rc} ${stdout}= Run And Return Rc And Output osm k8scluster-list --filter name="${k8scluster_name}" - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} - -Check For K8s Cluster To Be Deleted - [Documentation] Check if a Kubernetes cluster identified by name is not present in OSM. - [Arguments] ${k8scluster_name} - ${rc} ${stdout}= Run And Return Rc And Output osm k8scluster-list --filter name="${k8scluster_name}" | awk '{print $2}' | grep ${k8scluster_name} - Log ${rc},${stdout} - Should Be Empty ${stdout} - -Check For K8s Cluster To Be Ready - [Documentation] Check if a Kubernetes cluster registered in OSM is ready (the state must be ENABLED or DEGRADED). - [Arguments] ${k8scluster_name} - ${rc} ${stdout}= Run And Return Rc And Output osm k8scluster-list --filter name="${k8scluster_name}" --filter _admin.operationalState="ENABLED,DEGRADED" - Log ${rc},${stdout} - ${rc} ${stdout}= Run And Return Rc And Output echo "${stdout}" | awk '{print $2}' | grep ${k8scluster_name} - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Be Equal As Strings ${stdout} ${k8scluster_name} - -Check For K8s Cluster To Be Enabled - [Documentation] Check if the state of Kubernetes cluster registered in OSM is ENABLED. - [Arguments] ${k8scluster_name} - ${rc} ${stdout}= Run And Return Rc And Output osm k8scluster-show ${k8scluster_name} - Log ${rc},${stdout} - ${rc} ${stdout}= Run And Return Rc And Output osm k8scluster-list --filter name="${k8scluster_name}" --filter _admin.operationalState="ENABLED" - Log ${rc},${stdout} - ${rc} ${stdout}= Run And Return Rc And Output echo "${stdout}" | awk '{print $2}' | grep ${k8scluster_name} - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Be Equal As Strings ${stdout} ${k8scluster_name} diff --git a/robot-systest/lib/k8scluster_lib.robot b/robot-systest/lib/k8scluster_lib.robot new file mode 100644 index 0000000000000000000000000000000000000000..8f642a345efc2a87e31e8bdfbf6183f15b6a1138 --- /dev/null +++ b/robot-systest/lib/k8scluster_lib.robot @@ -0,0 +1,71 @@ +# Copyright 2020 Canonical Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Variables *** +${success_return_code} 0 +${k8scluster_launch_max_wait_time} 6min +${k8scluster_launch_pol_time} 30sec +${k8scluster_delete_max_wait_time} 2min +${k8scluster_delete_pol_time} 15sec + +*** Keywords *** +Create K8s Cluster + [Arguments] ${k8scluster_creds} ${k8scluster_version} ${k8scluster_vim} ${k8scluster_net} ${k8scluster_name} + ${rc} ${stdout}= Run and Return RC and Output osm k8scluster-add --creds ${k8scluster_creds} --version ${k8scluster_version} --vim ${k8scluster_vim} --k8s-nets '{"net1": "${k8scluster_net}"}' ${k8scluster_name} --description "Robot cluster" + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + WAIT UNTIL KEYWORD SUCCEEDS ${k8scluster_launch_max_wait_time} ${k8scluster_launch_pol_time} Check For K8s Cluster To Be Ready ${k8scluster_name} + Check For K8s Cluster To Be Enabled ${k8scluster_name} + [Return] ${stdout} + +Delete K8s Cluster + [Arguments] ${k8scluster_name} + ${rc} ${stdout}= Run and Return RC and Output osm k8scluster-delete ${k8scluster_name} + Should Be Equal As Integers ${rc} ${success_return_code} + WAIT UNTIL KEYWORD SUCCEEDS ${k8scluster_delete_max_wait_time} ${k8scluster_delete_pol_time} Check For K8s Cluster To Be Deleted ${k8scluster_name} + +Get K8s Cluster + ${rc} ${stdout}= Run and Return RC and Output osm k8scluster-list + Should Be Equal As Integers ${rc} ${success_return_code} + Log ${stdout} + [Return] ${stdout} + +Check for K8s Cluster + [Arguments] ${k8scluster_name} + ${rc} ${stdout}= Run and Return RC and Output osm k8scluster-list --filter name="${k8scluster_name}" + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + +Check For K8s Cluster To Be Deleted + [Arguments] ${k8scluster_name} + ${rc} ${stdout}= Run and Return RC and Output osm k8scluster-list --filter name="${k8scluster_name}" | awk '{print $2}' | grep ${k8scluster_name} + Should Be Empty ${stdout} + +Check For K8s Cluster To Be Ready + [Arguments] ${k8scluster_name} + ${rc} ${stdout}= Run and Return RC and Output osm k8scluster-list --filter name="${k8scluster_name}" --filter _admin.operationalState="ENABLED,DEGRADED" + Log ${stdout} + ${rc} ${stdout}= Run and Return RC and Output echo "${stdout}" | awk '{print $2}' | grep ${k8scluster_name} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Be Equal As Strings ${stdout} ${k8scluster_name} + +Check For K8s Cluster To Be Enabled + [Arguments] ${k8scluster_name} + ${rc2} ${stdout2}= Run and Return RC and Output osm k8scluster-show ${k8scluster_name} + Log ${stdout2} + ${rc} ${stdout}= Run and Return RC and Output osm k8scluster-list --filter name="${k8scluster_name}" --filter _admin.operationalState="ENABLED" + Log ${stdout} + ${rc} ${stdout}= Run and Return RC and Output echo "${stdout}" | awk '{print $2}' | grep ${k8scluster_name} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Be Equal As Strings ${stdout} ${k8scluster_name} diff --git a/robot-systest/lib/ns_lib.resource b/robot-systest/lib/ns_lib.resource deleted file mode 100644 index 9d7276f77145e305ee36832e5049ed4f90fdb3e9..0000000000000000000000000000000000000000 --- a/robot-systest/lib/ns_lib.resource +++ /dev/null @@ -1,221 +0,0 @@ -*** Comments *** -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -*** Settings *** -Documentation Library to deploy and delete NS, and run operations on them. - -Library Collections -Library DateTime -Library OperatingSystem -Library String - - -*** Variables *** -${SUCCESS_RETURN_CODE} 0 -${NS_LAUNCH_POL_TIME} 30sec -${NS_DELETE_POL_TIME} 15sec -${VIM_TIMEOUT_MULTIPLIER} %{OSM_VIM_MULTIPLIER_TIMEOUT=1.0} - - -*** Keywords *** -Create Network Service - [Documentation] Launch the instantation of a NS and verify in a loop that the NS instance is successfully created in a given time, and return the NS instance id. - [Arguments] ${nsd} ${vim_name} ${ns_name} ${ns_config} ${publickey} ${ns_launch_max_wait_time}=5min ${config_file}=${EMPTY} - ${ns_launch_max_wait_time}= Convert Time ${ns_launch_max_wait_time} result_format=number - ${ns_launch_max_wait_time}= Evaluate ${ns_launch_max_wait_time} * ${VIM_TIMEOUT_MULTIPLIER} - Log ${ns_launch_max_wait_time} - ${config_attr}= Set Variable If "${ns_config}" != "${EMPTY}" --config '${ns_config}' ${EMPTY} - ${sshkeys_attr}= Set Variable If "${publickey}" != "${EMPTY}" --ssh_keys ${publickey} ${EMPTY} - ${config_file_attr}= Set Variable If "${config_file}" != "${EMPTY}" --config_file '${config_file}' ${EMPTY} - ${ns_id}= Instantiate Network Service ${ns_name} ${nsd} ${vim_name} ${config_attr} ${sshkeys_attr} ${config_file_attr} - Log ${ns_id} - Wait Until Keyword Succeeds ${ns_launch_max_wait_time} ${NS_LAUNCH_POL_TIME} Check For NS Instance To Configured ${ns_name} - Check For NS Instance For Failure ${ns_name} - RETURN ${ns_id} - -Instantiate Network Service - [Documentation] Launch the instantation of a NS, and return the NS instance id. - [Arguments] ${ns_name} ${nsd} ${vim_name} ${ns_extra_args} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-create --ns_name ${ns_name} --nsd_name ${nsd} --vim_account ${vim_name} ${ns_extra_args} - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} - -Get Vnf Management Ip Address - [Documentation] Get the mgmt IP address of a member VNF in a NS instance, and return it. - [Arguments] ${ns_id} ${vnf_member_index} - Should Not Be Empty ${ns_id} - Should Not Be Empty ${vnf_member_index} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-list --filter member-vnf-index-ref=${vnf_member_index} | grep ${ns_id} | awk '{print $14}' 2>&1 - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} - -Get Vnf Id - [Documentation] Get the VNF instance ID of a member VNF in a NS instance, and return it. - [Arguments] ${ns_id} ${vnf_member_index} - Should Not Be Empty ${ns_id} - Should Not Be Empty ${vnf_member_index} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-list --filter member-vnf-index-ref=${vnf_member_index} | grep ${ns_id} | awk '{print $2}' 2>&1 - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} - -Get Ns Id - [Documentation] Get the NS instance ID from a NS instance name passed as argument, and return it. - [Arguments] ${ns_name} - Should Not Be Empty ${ns_name} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-list | grep ${ns_name} | awk '{print $4}' 2>&1 - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Not Be Empty ${stdout} - RETURN ${stdout} - -Get Ns List - [Documentation] Get the list of NS instances and return it. - ${rc} ${stdout}= Run And Return Rc And Output osm ns-list 2>&1 - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} - -Get Ns Vnf List - [Documentation] Get the list of VNF instances of a given NS instance id, and return it. - [Arguments] ${ns_id} - Should Not Be Empty ${ns_id} - @{vnf_list_string}= Run And Return Rc And Output osm vnf-list --ns ${ns_id} | grep ${ns_id} | awk '{print $2}' 2>&1 - # Returns a String of vnf_id and needs to be converted into a list - @{vnf_list}= Split String ${vnf_list_string}[1] - Log List ${vnf_list} - RETURN @{vnf_list} - -Get Ns Ip List - [Documentation] Obtain the list of IP addresses of all VM in a NS, and return it. - [Arguments] @{vnf_list} - Should Not Be Empty @{vnf_list} - @{temp_list}= Create List - FOR ${vnf_id} IN @{vnf_list} - Log ${vnf_id} - @{vnf_ip_list}= Get Vnf Ip List ${vnf_id} - @{temp_list}= Combine Lists ${temp_list} ${vnf_ip_list} - END - Should Not Be Empty ${temp_list} - RETURN @{temp_list} - -Get Vnf Ip List - [Documentation] Obtain the list of IP addresses of all VM in a VNF, and return it. - [Arguments] ${vnf_id} - Should Not Be Empty ${vnf_id} - @{vnf_ip_list_string}= Run And Return Rc And Output osm vnf-list --filter id=${vnf_id} | grep -o '[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}' | sort -t: -u -k1,1 2>&1 - # returns a string of ip addresses and needs to be converted into a list - Should Not Be Empty ${vnf_ip_list_string}[1] - @{vnf_ip_list}= Split String ${vnf_ip_list_string}[1] - Log Many ${vnf_ip_list} - Should Not Be Empty ${vnf_ip_list} - RETURN @{vnf_ip_list} - -Check For Ns Instance To Configured - [Documentation] Check if a given NS instance has completed the instantiation, no matter if it succeeded (the status should be READY or BROKEN). - [Arguments] ${ns_name} - ${rc} ${stdout}= Run And Return Rc And Output openstack server list - Log ${rc},${stdout} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-list --filter name="${ns_name}" - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Contain Any ${stdout} READY BROKEN - -Check For NS Instance For Failure - [Documentation] Check if a given NS instance has not failed in the instantiation (the status should not be BROKEN). - [Arguments] ${ns_name} - ${rc} ${stdout}= Run And Return Rc And Output openstack server list - Log ${rc},${stdout} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-list --filter name="${ns_name}" - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Not Contain ${stdout} BROKEN - -Check For NS Instance To Be Deleted - [Documentation] Check if a given NS instance is not present in OSM. - [Arguments] ${ns} - ${rc} ${stdout}= Run And Return Rc And Output openstack server list - Log ${rc},${stdout} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-list | awk '{print $2}' | grep ${ns} - Log ${rc},${stdout} - Should Not Be Equal As Strings ${stdout} ${ns} - -Delete NS - [Documentation] Delete a NS instance. - [Arguments] ${ns} ${ns_delete_max_wait_time}=4min - ${ns_delete_max_wait_time}= Convert Time ${ns_delete_max_wait_time} result_format=number - ${ns_delete_max_wait_time}= Evaluate ${ns_delete_max_wait_time} * ${VIM_TIMEOUT_MULTIPLIER} - Log ${ns_delete_max_wait_time} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-delete ${ns} - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Wait Until Keyword Succeeds ${ns_delete_max_wait_time} ${NS_DELETE_POL_TIME} Check For NS Instance To Be Deleted ${ns} - -Get Ns Vnfr Ids - [Documentation] Return a list with the IDs of the VNF records of a NS instance. - [Arguments] ${ns_id} - Should Not Be Empty ${ns_id} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-list --ns ${ns_id} | grep ${ns_id} | awk '{print $2}' 2>&1 - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - @{vdur}= Split String ${stdout} - RETURN @{vdur} - -Get Vnf Vdur Names - [Documentation] Return a list with the names of the VDU records of a VNF instance. - [Arguments] ${vnf_id} - Should Not Be Empty ${vnf_id} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-show ${vnf_id} --literal | yq -r .vdur[].name - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - @{vdur}= Split String ${stdout} - RETURN @{vdur} - -Get Vnf Kdu Replica Count - [Documentation] Return the number of KDU replicas (empty if none) of a VNF instance. - [Arguments] ${vnf_id} ${kdu_name} - Should Not Be Empty ${vnf_id} - Should Not Be Empty ${kdu_name} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-show ${vnf_id} --kdu ${kdu_name} | yq -r .config.replicaCount - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - ${return}= Set Variable If '${stdout}' == 'null' ${EMPTY} ${stdout} - RETURN ${return} - -Get Application Names - [Documentation] Return the list of the application of a VNF instance. - [Arguments] ${ns_name} - Should Not Be Empty ${ns_name} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-show ${ns_name} --literal | yq -r ._admin.deployed.VCA[].application - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - @{app_names}= Split String ${stdout} - RETURN ${app_names} - -Get VDU Affinity Group Name - [Documentation] Return the affinity group name for a NF - [Arguments] ${ns_name} ${vnf_id} ${vdur_id} - ${rc} ${affinity_group_id}= Run And Return Rc And Output osm vnf-show ${vnf_id} --literal | yq '.vdur[] | select(.id == "'${vdur_id}'")' | yq -r '."affinity-or-anti-affinity-group-id"[0]' 2>&1 - Log ${affinity_group_id} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${affinity_group_id} values=False - ${rc} ${affinity_group_name}= Run And Return Rc And Output osm ns-show ${ns_name} --literal | yq '."affinity-or-anti-affinity-group"[] | select(.id == "'${affinity_group_id}'")' | yq -r '.name' 2>&1 - Log ${affinity_group_name} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${affinity_group_name} values=False - RETURN ${affinity_group_name} - -GET Dual Ip - [Documentation] Get dual ip from the ns list - [Arguments] ${ns_id} - Should Not Be Empty ${ns_id} - ${rc} ${stdout}= Run And Return RC And Output osm ns-show ${ns_id} --literal | grep -A2 ip-address | awk '{print $2}' | paste -sd ',' | sed 's/^,//; s/,/, /g' | sed 's/^/[/; s/$/]/' - Log ${rc},${stdout} - RETURN ${stdout} diff --git a/robot-systest/lib/ns_lib.robot b/robot-systest/lib/ns_lib.robot new file mode 100644 index 0000000000000000000000000000000000000000..c8da2713e73425735c9559d003011a09ec3e3845 --- /dev/null +++ b/robot-systest/lib/ns_lib.robot @@ -0,0 +1,427 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +Documentation Library to deploy and delete NS, and run operations on them. + +Library DateTime + + +*** Variables *** +${success_return_code} 0 +${ns_launch_pol_time} 30sec +${ns_delete_pol_time} 15sec +${ns_action_max_wait_time} 1min +${ns_action_pol_time} 15sec +${vnf_scale_pol_time} 15sec +${healing_pol_time} 15sec +${vim_timeout_multiplier} %{OSM_VIM_MULTIPLIER_TIMEOUT=1.0} + + +*** Keywords *** +Create Network Service + [Arguments] ${nsd} ${vim_name} ${ns_name} ${ns_config} ${publickey} ${ns_launch_max_wait_time}=5min ${config_file}=${EMPTY} + + ${ns_launch_max_wait_time}= Convert Time ${ns_launch_max_wait_time} result_format=number + ${ns_launch_max_wait_time}= Evaluate ${ns_launch_max_wait_time} * ${vim_timeout_multiplier} + Log ${ns_launch_max_wait_time} + ${config_attr} Set Variable If '${ns_config}'!='${EMPTY}' --config '${ns_config}' \ + ${sshkeys_attr} Set Variable If '${publickey}'!='${EMPTY}' --ssh_keys ${publickey} \ + ${config_file_attr} Set Variable If '${config_file}'!='${EMPTY}' --config_file '${config_file}' \ + + ${ns_id}= Instantiate Network Service ${ns_name} ${nsd} ${vim_name} ${config_attr} ${sshkeys_attr} ${config_file_attr} + Log ${ns_id} + + WAIT UNTIL KEYWORD SUCCEEDS ${ns_launch_max_wait_time} ${ns_launch_pol_time} Check For NS Instance To Configured ${ns_name} + Check For NS Instance For Failure ${ns_name} + [Return] ${ns_id} + + +Instantiate Network Service + [Arguments] ${ns_name} ${nsd} ${vim_name} ${ns_extra_args} + + ${rc} ${stdout}= Run and Return RC and Output osm ns-create --ns_name ${ns_name} --nsd_name ${nsd} --vim_account ${vim_name} ${ns_extra_args} + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + + +Update Network Service + [Arguments] ${ns_id} ${update_type} ${ns_update_config} ${ns_update_timeout} + + ${rc} ${stdout}= Run and Return RC and Output osm ns-update ${ns_id} --updatetype ${update_type} --config ${ns_update_config} --timeout ${ns_update_timeout} --wait + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + + +Get Vnf Management Ip Address + [Arguments] ${ns_id} ${vnf_member_index} + + Should Not Be Empty ${ns_id} + Should Not Be Empty ${vnf_member_index} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-list --filter member-vnf-index-ref=${vnf_member_index} | grep ${ns_id} | awk '{print $14}' 2>&1 + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + + +Get Vnf Id + [Arguments] ${ns_id} ${vnf_member_index} + + Should Not Be Empty ${ns_id} + Should Not Be Empty ${vnf_member_index} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-list --filter member-vnf-index-ref=${vnf_member_index} | grep ${ns_id} | awk '{print $2}' 2>&1 + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + + +Get Ns Id + [Arguments] ${ns_name} + + Should Not Be Empty ${ns_name} + ${rc} ${stdout}= Run and Return RC and Output osm ns-list | grep ${ns_name} | awk '{print $4}' 2>&1 + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Not Be Empty ${stdout} + [Return] ${stdout} + + +Get Ns List + ${rc} ${stdout}= Run and Return RC and Output osm ns-list 2>&1 + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + + +Get Ns Vnf List + [Arguments] ${ns_id} + + Should Not Be Empty ${ns_id} + @{vnf_list_string}= Run and Return RC and Output osm vnf-list --ns ${ns_id} | grep ${ns_id} | awk '{print $2}' 2>&1 + # Returns a String of vnf_id and needs to be converted into a list + @{vnf_list} = Split String ${vnf_list_string}[1] + Log List ${vnf_list} + [Return] @{vnf_list} + + +Get Ns Ip List + [Arguments] @{vnf_list} + + should not be empty @{vnf_list} + @{temp_list}= Create List + FOR ${vnf_id} IN @{vnf_list} + Log ${vnf_id} + @{vnf_ip_list} Get Vnf Ip List ${vnf_id} + @{temp_list}= Combine Lists ${temp_list} ${vnf_ip_list} + END + should not be empty ${temp_list} + [return] @{temp_list} + + +Get Vnf Ip List + [arguments] ${vnf_id} + + should not be empty ${vnf_id} + @{vnf_ip_list_string}= run and return rc and output osm vnf-list --filter id=${vnf_id} | grep -o '[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}' | sort -t: -u -k1,1 2>&1 + # returns a string of ip addresses and needs to be converted into a list + should not be empty ${vnf_ip_list_string}[1] + @{vnf_ip_list} = split string ${vnf_ip_list_string}[1] + Log Many ${vnf_ip_list} + should not be empty ${vnf_ip_list} + [return] @{vnf_ip_list} + + +Check For Ns Instance To Configured + [arguments] ${ns_name} + + ${rc} ${stdout}= Run and Return RC and Output openstack server list + Log ${stdout} + ${rc} ${stdout}= run and return rc and output osm ns-list --filter name="${ns_name}" + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Contain Any ${stdout} READY BROKEN + +Check For NS Instance For Failure + [Arguments] ${ns_name} + + ${rc} ${stdout}= Run and Return RC and Output openstack server list + Log ${stdout} + ${rc} ${stdout}= Run and Return RC and Output osm ns-list --filter name="${ns_name}" + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Not Contain ${stdout} BROKEN + +Check For NS Instance To Be Deleted + [Arguments] ${ns} + + ${rc} ${stdout}= Run and Return RC and Output openstack server list + Log ${stdout} + ${rc} ${stdout}= Run and Return RC and Output osm ns-list | awk '{print $2}' | grep ${ns} + Should Not Be Equal As Strings ${stdout} ${ns} + +Delete NS + [Documentation] Delete ns + [Arguments] ${ns} ${ns_delete_max_wait_time}=4min + + ${ns_delete_max_wait_time}= Convert Time ${ns_delete_max_wait_time} result_format=number + ${ns_delete_max_wait_time}= Evaluate ${ns_delete_max_wait_time} * ${vim_timeout_multiplier} + Log ${ns_delete_max_wait_time} + ${rc} ${stdout}= Run and Return RC and Output osm ns-delete ${ns} + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + + WAIT UNTIL KEYWORD SUCCEEDS ${ns_delete_max_wait_time} ${ns_delete_pol_time} Check For NS Instance To Be Deleted ${ns} + +Execute NS Action + [Documentation] Execute an action over the desired NS. + ... Parameters are given to this function in key=value format (one argument per key/value pair). + ... Return the ID of the operation associated to the executed action. + ... Examples of execution: + ... \${ns_op_id}= Execute NS Action \${ns_name} \${ns_action} \${vnf_member_index} + ... \${ns_op_id}= Execute NS Action \${ns_name} \${ns_action} \${vnf_member_index} \${param1}=\${value1} \${param2}=\${value2} + + [Arguments] ${ns_name} ${ns_action} ${vnf_member_index} @{action_params} + + ${params}= Set Variable ${EMPTY} + FOR ${param} IN @{action_params} + ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in parameters + ${params}= Catenate SEPARATOR= ${params} "${param_name}":"${param_value}", + END + ${osm_ns_action_command}= Set Variable osm ns-action --action_name ${ns_action} --vnf_name ${vnf_member_index} + ${osm_ns_action_command}= Run Keyword If '${params}'!='${EMPTY}' Catenate ${osm_ns_action_command} --params '{${params}}' + ... ELSE Set Variable ${osm_ns_action_command} + ${osm_ns_action_command}= Catenate ${osm_ns_action_command} ${ns_name} + ${rc} ${stdout}= Run and Return RC and Output ${osm_ns_action_command} + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Wait Until Keyword Succeeds ${ns_action_max_wait_time} ${ns_action_pol_time} Check For NS Operation Ended ${stdout} + Check For NS Operation Completed ${stdout} + [Return] ${stdout} + + +Execute NS K8s Action + [Documentation] Execute an action over the desired K8s NS. + ... Parameters are given to this function in key=value format (one argument per key/value pair). + ... Return the ID of the operation associated to the executed action. + ... Examples of execution: + ... \${ns_op_id}= Execute NS Action \${ns_name} \${ns_action} \${vnf_member_index} + ... \${ns_op_id}= Execute NS Action \${ns_name} \${ns_action} \${vnf_member_index} \${param1}=\${value1} \${param2}=\${value2} + + [Arguments] ${ns_name} ${ns_action} ${vnf_member_index} ${kdu_name} @{action_params} + + ${params}= Set Variable ${EMPTY} + FOR ${param} IN @{action_params} + ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in parameters + ${params}= Catenate SEPARATOR= ${params} "${param_name}":"${param_value}", + END + ${osm_ns_action_command}= Set Variable osm ns-action --action_name ${ns_action} --vnf_name ${vnf_member_index} --kdu_name ${kdu_name} + ${osm_ns_action_command}= Run Keyword If '${params}'!='${EMPTY}' Catenate ${osm_ns_action_command} --params '{${params}}' + ... ELSE Set Variable ${osm_ns_action_command} + ${osm_ns_action_command}= Catenate ${osm_ns_action_command} ${ns_name} + ${rc} ${stdout}= Run and Return RC and Output ${osm_ns_action_command} + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Wait Until Keyword Succeeds ${ns_action_max_wait_time} ${ns_action_pol_time} Check For NS Operation Ended ${stdout} + Check For NS Operation Completed ${stdout} + [Return] ${stdout} + + +Execute Manual VNF Scale + [Documentation] Execute a manual VNF Scale action. + ... The parameter 'scale_type' must be SCALE_IN or SCALE_OUT. + ... Return the ID of the operation associated to the executed scale action. + + [Arguments] ${ns_name} ${vnf_member_index} ${scaling_group} ${scale_type} ${vnf_scale_max_wait_time}=2min + + ${vnf_scale_max_wait_time}= Convert Time ${vnf_scale_max_wait_time} result_format=number + ${vnf_scale_max_wait_time}= Evaluate ${vnf_scale_max_wait_time} * ${vim_timeout_multiplier} + Should Contain Any ${scale_type} SCALE_IN SCALE_OUT msg=Unknown scale type: ${scale_type} values=False + ${osm_vnf_scale_command}= Set Variable osm vnf-scale --scaling-group ${scaling_group} + ${osm_vnf_scale_command}= Run Keyword If '${scale_type}'=='SCALE_IN' Catenate ${osm_vnf_scale_command} --scale-in + ... ELSE Catenate ${osm_vnf_scale_command} --scale-out + ${osm_vnf_scale_command}= Catenate ${osm_vnf_scale_command} ${ns_name} ${vnf_member_index} + ${rc} ${stdout}= Run and Return RC and Output ${osm_vnf_scale_command} + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Wait Until Keyword Succeeds ${vnf_scale_max_wait_time} ${vnf_scale_pol_time} Check For NS Operation Ended ${stdout} + Check For NS Operation Completed ${stdout} + [Return] ${stdout} + + +Heal Network Service + [Documentation] Execute healing operation over one NS. + ... Return the ID of the operation associated to the executed healing action. + + [Arguments] ${ns_name} ${params} ${healing_max_wait_time}=10m + + Should Not Be Empty ${ns_name} + Should Not Be Empty ${params} + ${healing_max_wait_time}= Convert Time ${healing_max_wait_time} result_format=number + ${healing_max_wait_time}= Evaluate ${healing_max_wait_time} * ${vim_timeout_multiplier} + ${rc} ${stdout}= Run and Return RC and Output osm ns-heal ${ns_name} ${params} + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Wait Until Keyword Succeeds ${healing_max_wait_time} ${healing_pol_time} Check For NS Operation Ended ${stdout} + Check For NS Operation Completed ${stdout} + [Return] ${stdout} + + +Get Operations List + [Arguments] ${ns_name} + + Should Not Be Empty ${ns_name} + ${rc} ${stdout}= Run and Return RC and Output osm ns-op-list ${ns_name} + Log ${stdout} + Log ${rc} + Should Be Equal As Integers ${rc} ${success_return_code} + + +Check For NS Operation Completed + [Documentation] Check whether the status of the desired operation is "COMPLETED" or not. + + [Arguments] ${ns_operation_id} + + Should Not Be Empty ${ns_operation_id} + ${rc} ${stdout}= Run and Return RC and Output osm ns-op-show ${ns_operation_id} --literal | yq -r .operationState + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Contain ${stdout} COMPLETED msg=The ns-action with id ${ns_operation_id} was not completed values=False + + +Check For NS Operation Failed + [Documentation] Check whether the status of the desired operation is "FAILED" or not. + + [Arguments] ${ns_operation_id} + + Should Not Be Empty ${ns_operation_id} + ${rc} ${stdout}= Run and Return RC and Output osm ns-op-show ${ns_operation_id} --literal | yq -r .operationState + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Contain ${stdout} FAILED msg=Timeout waiting for ns-action with id ${ns_operation_id} values=False + + +Check For NS Operation Ended + [Documentation] Check whether the status of the desired operation is "FAILED" or "COMPLETED". + + [Arguments] ${ns_operation_id} + + Should Not Be Empty ${ns_operation_id} + ${rc} ${stdout}= Run and Return RC and Output osm ns-op-show ${ns_operation_id} --literal | yq -r .operationState + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Contain Any ${stdout} FAILED COMPLETED msg=Timeout waiting for ns-action with id ${ns_operation_id} values=False + + +Check For NS Operation Cancelled + [Documentation] Check whether the operation was cancelled or not. + + [Arguments] ${ns_operation_id} + + Should Not Be Empty ${ns_operation_id} + ${rc} ${stdout}= Run and Return RC and Output osm ns-op-show ${ns_operation_id} --literal | yq -r '.operationState, .isCancelPending' + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Contain ${stdout} FAILED_TEMP\nfalse msg=Timeout waiting for ns-action with id ${ns_operation_id} values=False + + +Get Ns Vnfr Ids + [Documentation] Return a list with the IDs of the VNF records of a NS instance. + + [Arguments] ${ns_id} + + Should Not Be Empty ${ns_id} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-list --ns ${ns_id} | grep ${ns_id} | awk '{print $2}' 2>&1 + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + @{vdur} = Split String ${stdout} + [Return] @{vdur} + + +Get Vnf Vdur Names + [Documentation] Return a list with the names of the VDU records of a VNF instance. + + [Arguments] ${vnf_id} + + Should Not Be Empty ${vnf_id} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq -r .vdur[].name + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + @{vdur} = Split String ${stdout} + [Return] @{vdur} + + +Get Vnf Kdu Replica Count + [Documentation] Return the number of KDU replicas (empty if none) of a VNF instance. + + [Arguments] ${vnf_id} ${kdu_name} + + Should Not Be Empty ${vnf_id} + Should Not Be Empty ${kdu_name} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --kdu ${kdu_name} | yq -r .config.replicaCount + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + ${return} = Set Variable If '${stdout}' == 'null' ${EMPTY} ${stdout} + [Return] ${return} + + +Get Application Names + [Documentation] Return the list of the application of a VNF instance. + + [Arguments] ${ns_name} + + Should Not Be Empty ${ns_name} + ${rc} ${stdout}= Run and Return RC and Output osm ns-show ${ns_name} --literal | yq -r ._admin.deployed.VCA[].application + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + @{app_names} = Split String ${stdout} + [Return] ${app_names} + + +Get VDU Affinity Group Name + [Documentation] Return the affinity group name for a NF + + [Arguments] ${ns_name} ${vnf_id} ${vdur_id} + + ${rc} ${affinity_group_id}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[] | select(.id == "'${vdur_id}'")' | yq -r '."affinity-or-anti-affinity-group-id"[0]' 2>&1 + Log ${affinity_group_id} + Should Be Equal As Integers ${rc} ${success_return_code} msg=${affinity_group_id} values=False + ${rc} ${affinity_group_name}= Run and Return RC and Output osm ns-show ${ns_name} --literal | yq '."affinity-or-anti-affinity-group"[] | select(.id == "'${affinity_group_id}'")' | yq -r '.name' 2>&1 + Log ${affinity_group_name} + Should Be Equal As Integers ${rc} ${success_return_code} msg=${affinity_group_name} values=False + [Return] ${affinity_group_name} + +Get Operations By Type + [Documentation] Keyword to get the operation by type + + [Arguments] ${ns_id} ${type} + + Should Not Be Empty ${ns_id} + Should Not Be Empty ${type} + ${rc} ${stdout}= Run and Return RC and Output osm ns-op-list ${ns_id} | grep ${type} | awk '{print $2}' 2>&1 + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + Should Not Be Empty ${stdout} + [Return] ${stdout} + +Cancel operation By Id + [Documentation] Cancels an ongoing operation by operation ID + + [Arguments] ${op_id} ${cancel_mode}=GRACEFUL + + Should Not Be Empty ${op_id} + ${rc} ${stdout}= Run and Return RC and Output osm ns-op-cancel ${op_id} --cancel_mode ${cancel_mode} --wait + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + +GET Dual Ip + [Documentation] Get dual ip from the ns list + [Arguments] ${ns_id} + Should Not Be Empty ${ns_id} + ${rc} ${stdout}= Run and Return RC and Output osm ns-show ${ns_id} --literal | grep -A2 ip-address | awk '{print $2}' | paste -sd ',' | sed 's/^,//; s/,/, /g' | sed 's/^/[/; s/$/]/' + Log ${stdout} + [Return] ${stdout} + diff --git a/robot-systest/lib/ns_operation_lib.resource b/robot-systest/lib/ns_operation_lib.resource deleted file mode 100644 index 968fdd99bbfe314116f12f40e2210991a1cbd91f..0000000000000000000000000000000000000000 --- a/robot-systest/lib/ns_operation_lib.resource +++ /dev/null @@ -1,189 +0,0 @@ -*** Comments *** -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -*** Settings *** -Documentation Library to deploy and delete NS, and run operations on them. - -Library Collections -Library DateTime -Library OperatingSystem -Library String - - -*** Variables *** -${SUCCESS_RETURN_CODE} 0 -${NS_ACTION_MAX_WAIT_TIME} 1min -${NS_ACTION_POL_TIME} 15sec -${VNF_SCALE_POL_TIME} 15sec -${HEALING_POL_TIME} 15sec -${VIM_TIMEOUT_MULTIPLIER} %{OSM_VIM_MULTIPLIER_TIMEOUT=1.0} - - -*** Keywords *** -Update Network Service - [Documentation] Run an update operation over a NS instance, and return the operation id. - [Arguments] ${ns_id} ${update_type} ${ns_update_config} ${ns_update_timeout} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-update ${ns_id} --updatetype ${update_type} --config ${ns_update_config} --timeout ${ns_update_timeout} --wait - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} - -Execute NS Action - [Documentation] Execute an action over the desired NS. - ... Parameters are given to this function in key=value format (one argument per key/value pair). - ... Return the ID of the operation associated to the executed action. - ... Examples of execution: - ... \${ns_op_id}= Execute NS Action \${ns_name} \${ns_action} \${vnf_member_index} - ... \${ns_op_id}= Execute NS Action \${ns_name} \${ns_action} \${vnf_member_index} \${param1}=\${value1} \${param2}=\${value2} - - [Arguments] ${ns_name} ${ns_action} ${vnf_member_index} @{action_params} - ${params}= Set Variable ${EMPTY} - FOR ${param} IN @{action_params} - ${match} ${param_name} ${param_value}= Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in parameters - Log ${match},${param_name},${param_value} - ${params}= Catenate SEPARATOR= ${params} "${param_name}":"${param_value}", - END - ${osm_ns_action_command}= Set Variable osm ns-action --action_name ${ns_action} --vnf_name ${vnf_member_index} - IF '${params}' != '${EMPTY}' - ${osm_ns_action_command}= Catenate ${osm_ns_action_command} --params '{${params}}' - ELSE - ${osm_ns_action_command}= Set Variable ${osm_ns_action_command} - END - ${osm_ns_action_command}= Catenate ${osm_ns_action_command} ${ns_name} - ${rc} ${stdout}= Run And Return Rc And Output ${osm_ns_action_command} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Wait Until Keyword Succeeds ${NS_ACTION_MAX_WAIT_TIME} ${NS_ACTION_POL_TIME} Check For NS Operation Ended ${stdout} - Check For NS Operation Completed ${stdout} - RETURN ${stdout} - -Execute NS K8s Action - [Documentation] Execute an action over the desired K8s NS. - ... Parameters are given to this function in key=value format (one argument per key/value pair). - ... Return the ID of the operation associated to the executed action. - ... Examples of execution: - ... \${ns_op_id}= Execute NS Action \${ns_name} \${ns_action} \${vnf_member_index} - ... \${ns_op_id}= Execute NS Action \${ns_name} \${ns_action} \${vnf_member_index} \${param1}=\${value1} \${param2}=\${value2} - - [Arguments] ${ns_name} ${ns_action} ${vnf_member_index} ${kdu_name} @{action_params} - - ${params}= Set Variable ${EMPTY} - FOR ${param} IN @{action_params} - ${match} ${param_name} ${param_value}= Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in parameters - Log ${match},${param_name},${param_value} - ${params}= Catenate SEPARATOR= ${params} "${param_name}":"${param_value}", - END - ${osm_ns_action_command}= Set Variable osm ns-action --action_name ${ns_action} --vnf_name ${vnf_member_index} --kdu_name ${kdu_name} - IF '${params}' != '${EMPTY}' - ${osm_ns_action_command}= Catenate ${osm_ns_action_command} --params '{${params}}' - ELSE - ${osm_ns_action_command}= Set Variable ${osm_ns_action_command} - END - ${osm_ns_action_command}= Catenate ${osm_ns_action_command} ${ns_name} - ${rc} ${stdout}= Run And Return Rc And Output ${osm_ns_action_command} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Wait Until Keyword Succeeds ${NS_ACTION_MAX_WAIT_TIME} ${NS_ACTION_POL_TIME} Check For NS Operation Ended ${stdout} - Check For NS Operation Completed ${stdout} - RETURN ${stdout} - -Execute Manual VNF Scale - [Documentation] Execute a manual VNF Scale action. - ... The parameter 'scale_type' must be SCALE_IN or SCALE_OUT. - ... Return the ID of the operation associated to the executed scale action. - [Arguments] ${ns_name} ${vnf_member_index} ${scaling_group} ${scale_type} ${vnf_scale_max_wait_time}=2min - ${vnf_scale_max_wait_time}= Convert Time ${vnf_scale_max_wait_time} result_format=number - ${vnf_scale_max_wait_time}= Evaluate ${vnf_scale_max_wait_time} * ${VIM_TIMEOUT_MULTIPLIER} - Should Contain Any ${scale_type} SCALE_IN SCALE_OUT msg=Unknown scale type: ${scale_type} values=False - ${osm_vnf_scale_command}= Set Variable osm vnf-scale --scaling-group ${scaling_group} - IF ${scale_type}=='SCALE_IN' - ${osm_vnf_scale_command}= Catenate ${osm_vnf_scale_command} --scale-in - ELSE - ${osm_vnf_scale_command}= Catenate ${osm_vnf_scale_command} --scale-out - END - ${osm_vnf_scale_command}= Catenate ${osm_vnf_scale_command} ${ns_name} ${vnf_member_index} - ${rc} ${stdout}= Run And Return Rc And Output ${osm_vnf_scale_command} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Wait Until Keyword Succeeds ${vnf_scale_max_wait_time} ${VNF_SCALE_POL_TIME} Check For NS Operation Ended ${stdout} - Check For NS Operation Completed ${stdout} - RETURN ${stdout} - -Heal Network Service - [Documentation] Execute healing operation over one NS. - ... Return the ID of the operation associated to the executed healing action. - [Arguments] ${ns_name} ${params} ${healing_max_wait_time}=10m - Should Not Be Empty ${ns_name} - Should Not Be Empty ${params} - ${healing_max_wait_time}= Convert Time ${healing_max_wait_time} result_format=number - ${healing_max_wait_time}= Evaluate ${healing_max_wait_time} * ${VIM_TIMEOUT_MULTIPLIER} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-heal ${ns_name} ${params} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Wait Until Keyword Succeeds ${healing_max_wait_time} ${HEALING_POL_TIME} Check For NS Operation Ended ${stdout} - Check For NS Operation Completed ${stdout} - RETURN ${stdout} - -Get Operations List - [Documentation] Get the list of operations of a given NS instance. - [Arguments] ${ns_name} - Should Not Be Empty ${ns_name} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-op-list ${ns_name} - Log ${stdout} - Log ${rc} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - -Check For NS Operation Completed - [Documentation] Check wheter the status of the desired operation is "COMPLETED" or not. - [Arguments] ${ns_operation_id} - Should Not Be Empty ${ns_operation_id} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-op-show ${ns_operation_id} --literal | yq -r .operationState - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Contain ${stdout} COMPLETED msg=The ns-action with id ${ns_operation_id} was not completed values=False - -Check For NS Operation Failed - [Documentation] Check wheter the status of the desired operation is "FAILED" or not. - [Arguments] ${ns_operation_id} - Should Not Be Empty ${ns_operation_id} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-op-show ${ns_operation_id} --literal | yq -r .operationState - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Contain ${stdout} FAILED msg=Timeout waiting for ns-action with id ${ns_operation_id} values=False - -Check For NS Operation Ended - [Documentation] Check wheter the status of the desired operation is "FAILED" or "COMPLETED". - [Arguments] ${ns_operation_id} - Should Not Be Empty ${ns_operation_id} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-op-show ${ns_operation_id} --literal | yq -r .operationState - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Contain Any ${stdout} FAILED COMPLETED msg=Timeout waiting for ns-action with id ${ns_operation_id} values=False - -Get Operations By Type - [Documentation] Keyword to get the operation by type - [Arguments] ${ns_id} ${type} - Should Not Be Empty ${ns_id} - Should Not Be Empty ${type} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-op-list ${ns_id} | grep ${type} | awk '{print $2}' 2>&1 - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Should Not Be Empty ${stdout} - RETURN ${stdout} - -Cancel Operation By Id - [Documentation] Cancels an ongoing operation by operation ID - [Arguments] ${op_id} ${cancel_mode}=GRACEFUL - - Should Not Be Empty ${op_id} - ${rc} ${stdout}= Run And Return RC And Output osm ns-op-cancel ${op_id} --cancel_mode ${cancel_mode} --wait - Log ${stdout} - Should Be Equal As Integers ${rc} ${success_return_code} - RETURN ${stdout} diff --git a/robot-systest/lib/nsd_lib.resource b/robot-systest/lib/nsd_lib.robot similarity index 52% rename from robot-systest/lib/nsd_lib.resource rename to robot-systest/lib/nsd_lib.robot index 175322bf81c42570e390337b3189d339d1fd230f..40132d77188c5a659d36bf98380546071ae2e919 100644 --- a/robot-systest/lib/nsd_lib.resource +++ b/robot-systest/lib/nsd_lib.robot @@ -1,4 +1,6 @@ -*** Comments *** +# -*- coding: utf-8 -*- + +## # Copyright 2019 Tech Mahindra Limited # # All Rights Reserved. @@ -14,50 +16,52 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +## +## Change log: +# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-sep-2019 +## *** Settings *** -Documentation Library providing keywords for CRUD operations over NSD/NSpkg with OSM client. - -Library OperatingSystem Library String *** Variables *** -${SUCCESS_RETURN_CODE} 0 -${NSD_DELETE_MAX_WAIT_TIME} 1min -${NSD_DELETE_POL_TIME} 15sec +${success_return_code} 0 +${delete_max_wait_time} 1min +${delete_pol_time} 15sec *** Keywords *** Get NSDs List - [Documentation] Get the list of NS packages and log it. - ${rc} ${stdout}= Run And Return Rc And Output osm nspkg-list + ${rc} ${stdout}= Run and Return RC and Output osm nspkg-list Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Create NSD - [Documentation] Upload a NS package to OSM and return the id. [Arguments] ${nsd_pkg} - ${rc} ${stdout}= Run And Return Rc And Output osm nspkg-create ${nsd_pkg} + + ${rc} ${stdout}= Run and Return RC and Output osm nspkg-create ${nsd_pkg} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} ${lines}= Get Line Count ${stdout} ${last}= Evaluate ${lines} - 1 ${id}= Get Line ${stdout} ${last} - RETURN ${id} + [Return] ${id} + Delete NSD - [Documentation] Delete a NS package from OSM. [Arguments] ${nsd_id} - ${rc} ${stdout}= Run Keyword And Continue On Failure Run And Return Rc And Output osm nspkg-delete ${nsd_id} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + + ${rc} ${stdout}= Run Keyword And Continue On Failure Run and Return RC and Output osm nspkg-delete ${nsd_id} + Should Be Equal As Integers ${rc} ${success_return_code} Log ${stdout} - Wait Until Keyword Succeeds ${NSD_DELETE_MAX_WAIT_TIME} ${NSD_DELETE_POL_TIME} Check For NSD ${nsd_id} + WAIT UNTIL KEYWORD SUCCEEDS ${delete_max_wait_time} ${delete_pol_time} Check For NSD ${nsd_id} + Check For NSD - [Documentation] Check that a NS package exists in OSM. [Arguments] ${nsd_id} - ${rc} ${stdout}= Run And Return Rc And Output osm nspkg-list | awk '{print $2}' | grep ${nsd_id} - Log ${rc},${stdout} + + ${rc} ${stdout}= Run and Return RC and Output osm nspkg-list | awk '{print $2}' | grep ${nsd_id} Should Not Be Equal As Strings ${stdout} ${nsd_id} diff --git a/robot-systest/lib/nsi_lib.resource b/robot-systest/lib/nsi_lib.robot similarity index 76% rename from robot-systest/lib/nsi_lib.resource rename to robot-systest/lib/nsi_lib.robot index 74c67a6af155556b4de1d1840f487a4fc1c64330..1b883960f1c928bd7f5c60602df00948e7fd9e5f 100644 --- a/robot-systest/lib/nsi_lib.resource +++ b/robot-systest/lib/nsi_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Copyright 2020 Atos # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,26 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** -Documentation Library providing keywords for CRUD operations over Network Slice Instances with OSM client. - Library Collections -Library OperatingSystem -Library DateTime -Library String - -Resource ns_lib.resource *** Variables *** -${SUCCESS_RETURN_CODE} 0 -${SLICE_LAUNCH_POL_TIME} 30sec -${SLICE_DELETE_POL_TIME} 15sec -${VIM_TIMEOUT_MULTIPLIER} %{OSM_VIM_MULTIPLIER_TIMEOUT=1.0} +${success_return_code} 0 +${slice_launch_pol_time} 30sec +${slice_delete_pol_time} 15sec +${vim_timeout_multiplier} %{OSM_VIM_MULTIPLIER_TIMEOUT=1.0} *** Keywords *** + Create Network Slice [Documentation] Instantiates a NST and returns an instantiation id (nsi), verifying the slice is successfully instantiated ... Parameters: @@ -43,17 +35,22 @@ Create Network Slice ... publickey: SSH public key of the local machine ... Execution example: ... \${nsi}= Create Network Slice \${nst} \${vim_name} \${slice_name} \${slice_config} \${publickey} + [Arguments] ${nst} ${vim_name} ${slice_name} ${slice_config} ${publickey} ${slice_launch_max_wait_time}=6min ${config_file}=${EMPTY} + ${slice_launch_max_wait_time}= Convert Time ${slice_launch_max_wait_time} result_format=number - ${slice_launch_max_wait_time}= Evaluate ${slice_launch_max_wait_time} * ${VIM_TIMEOUT_MULTIPLIER} - ${config_attr}= Set Variable If "${slice_config}" != "${EMPTY}" --config '${slice_config}' ${EMPTY} - ${sshkeys_attr}= Set Variable If "${publickey}" != "${EMPTY}" --ssh_keys ${publickey} ${EMPTY} - ${config_file_attr}= Set Variable If "${config_file}" != "${EMPTY}" --config_file '${config_file}' ${EMPTY} + ${slice_launch_max_wait_time}= Evaluate ${slice_launch_max_wait_time} * ${vim_timeout_multiplier} + ${config_attr} Set Variable If '${slice_config}'!='${EMPTY}' --config '${slice_config}' \ + ${sshkeys_attr} Set Variable If '${publickey}'!='${EMPTY}' --ssh_keys ${publickey} \ + ${config_file_attr} Set Variable If '${config_file}'!='${EMPTY}' --config_file '${config_file}' \ + ${nsi_id}= Instantiate Network Slice ${slice_name} ${nst} ${vim_name} ${config_attr} ${config_file_attr} ${sshkeys_attr} Log ${nsi_id} - Wait Until Keyword Succeeds ${slice_launch_max_wait_time} ${SLICE_LAUNCH_POL_TIME} Check For Network Slice Instance To Configured ${slice_name} + + WAIT UNTIL KEYWORD SUCCEEDS ${slice_launch_max_wait_time} ${slice_launch_pol_time} Check For Network Slice Instance To Configured ${slice_name} Check For Network Slice Instance For Failure ${slice_name} - RETURN ${nsi_id} + [Return] ${nsi_id} + Instantiate Network Slice [Documentation] Instantiates a NST and returns an instantiation id (nsi) @@ -64,11 +61,14 @@ Instantiate Network Slice ... slice_extra_args: Extra parameters that might require the slice instantiation i.e. configuration attributes ... Execution example: ... \${nsi}= Instantiate Network Slice \${slice_name} \${nst} \${vim_name} \${config_attr} + [Arguments] ${slice_name} ${nst} ${vim_name} ${slice_extra_args} ${sshkeys_attr} - ${rc} ${stdout}= Run And Return Rc And Output osm nsi-create --nsi_name ${slice_name} --nst_name ${nst} --vim_account ${vim_name} ${sshkeys_attr} ${slice_extra_args} - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + + ${rc} ${stdout}= Run and Return RC and Output osm nsi-create --nsi_name ${slice_name} --nst_name ${nst} --vim_account ${vim_name} ${sshkeys_attr} ${slice_extra_args} + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Get Slice Ns List [Documentation] Retrieves the list of NS in a slice @@ -76,13 +76,16 @@ Get Slice Ns List ... slice_name: Name of the slice instance ... Execution example: ... \@{slice_ns_list}= Get Slice Ns List \${slice_name} + [Arguments] ${slice_name} + Should Not Be Empty ${slice_name} - @{ns_list_string}= Run And Return Rc And Output osm ns-list | grep ${slice_name} | awk '{print $4}' 2>&1 + @{ns_list_string}= Run and Return RC and Output osm ns-list | grep ${slice_name} | awk '{print $4}' 2>&1 # Returns a String of ns_id and needs to be converted into a list - @{ns_list}= Split String ${ns_list_string}[1] + @{ns_list} = Split String ${ns_list_string}[1] Log List ${ns_list} - RETURN @{ns_list} + [Return] @{ns_list} + Get Slice Ns List Except One [Documentation] Retrieves the list of NS in a slice removing one from the list. This is done to save time in the tests, avoiding one VNF to ping itself. @@ -91,14 +94,18 @@ Get Slice Ns List Except One ... exception_ns: Name of the ns that will not appear in the final list ... Execution example: ... \@{slice_ns_list}= Get Slice Ns List Except One \${slice_name} \${exception_ns} + [Arguments] ${slice_name} ${exception_ns} + Should Not Be Empty ${slice_name} Should Not Be Empty ${exception_ns} - @{ns_list_string}= Run And Return Rc And Output osm ns-list | grep ${slice_name} | awk '!/${exception_ns}/' | awk '{print $4}' 2>&1 + + @{ns_list_string}= Run and Return RC and Output osm ns-list | grep ${slice_name} | awk '!/${exception_ns}/' | awk '{print $4}' 2>&1 # Returns a String of ns_id and needs to be converted into a list - @{ns_list}= Split String ${ns_list_string}[1] + @{ns_list} = Split String ${ns_list_string}[1] Log List ${ns_list} - RETURN @{ns_list} + [Return] @{ns_list} + Get Slice Ns Count [Documentation] Returns the count of all the NS in a slice @@ -106,12 +113,15 @@ Get Slice Ns Count ... slice_name: Name of the slice instance ... Execution example: ... \${slice_ns_count}= Get Slice Ns Count \${slice_name} + [Arguments] ${slice_name} + Should Not Be Empty ${slice_name} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-list | grep ${slice_name} | wc -l 2>&1 + ${rc} ${stdout}= Run and Return RC and Output osm ns-list | grep ${slice_name} | wc -l 2>&1 Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Get Slice Vnf Ip Addresses [Documentation] Retrieves the list of IP addresses that belong to each of the VNFs in the slice @@ -119,21 +129,24 @@ Get Slice Vnf Ip Addresses ... slice_name: Name of the slice instance ... Execution example: ... \@{slice_ip_address_list}= Get Slice Vnf Ip Addresses \${slice_name} + [Arguments] ${slice_name} + # Get all the ns_id in the slice - @{slice_ns_list}= Get Slice Ns List ${slice_name} + @{slice_ns_list} Get Slice Ns List ${slice_name} Log Many @{slice_ns_list} @{temp_list}= Create List # For each ns_id in the list, get all the vnf_id and their IP addresses FOR ${ns_id} IN @{slice_ns_list} Log ${ns_id} - @{vnf_id_list}= Get Ns Vnf List ${ns_id} + @{vnf_id_list} Get Ns Vnf List ${ns_id} # For each vnf_id in the list, get all its IP addresses - @{ns_ip_list}= Get Ns Ip List @{vnf_id_list} + @{ns_ip_list} Get Ns Ip List @{vnf_id_list} @{temp_list}= Combine Lists ${temp_list} ${ns_ip_list} END Log List ${temp_list} - RETURN @{temp_list} + [Return] @{temp_list} + Check For Network Slice Instance To Configured [Documentation] Verify the slice has been instantiated @@ -141,24 +154,30 @@ Check For Network Slice Instance To Configured ... slice_name: Name of the slice instance ... Execution example: ... Check For Network Slice Instance To Configured \${slice_name} + [Arguments] ${slice_name} - ${rc} ${stdout}= Run And Return Rc And Output osm nsi-list --filter name="${slice_name}" + + ${rc} ${stdout}= Run and Return RC and Output osm nsi-list --filter name="${slice_name}" Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} Should Contain Any ${stdout} READY BROKEN configured + Check For Network Slice Instance For Failure [Documentation] Verify the slice instance is not in failure ... Parameters: ... slice_name: Name of the slice instance ... Execution example: ... Check For Network Slice Instance For Failure \${slice_name} + [Arguments] ${slice_name} - ${rc} ${stdout}= Run And Return Rc And Output osm nsi-list --filter name="${slice_name}" + + ${rc} ${stdout}= Run and Return RC and Output osm nsi-list --filter name="${slice_name}" Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} Should Not Contain ${stdout} failed + Delete NSI [Documentation] Delete Network Slice Instance (NSI) ... Parameters: @@ -166,13 +185,17 @@ Delete NSI ... slice_delete_max_wait_time: Delete operation timeout ... Execution example: ... Delete NST \${slice_name} + [Arguments] ${slice_name} ${slice_delete_max_wait_time}=4min - ${rc} ${stdout}= Run And Return Rc And Output osm nsi-delete ${slice_name} + + ${rc} ${stdout}= Run and Return RC and Output osm nsi-delete ${slice_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + ${slice_delete_max_wait_time}= Convert Time ${slice_delete_max_wait_time} result_format=number - ${slice_delete_max_wait_time}= Evaluate ${slice_delete_max_wait_time} * ${VIM_TIMEOUT_MULTIPLIER} - Wait Until Keyword Succeeds ${slice_delete_max_wait_time} ${SLICE_DELETE_POL_TIME} Check For Network Slice Instance To Be Deleted ${slice_name} + ${slice_delete_max_wait_time}= Evaluate ${slice_delete_max_wait_time} * ${vim_timeout_multiplier} + WAIT UNTIL KEYWORD SUCCEEDS ${slice_delete_max_wait_time} ${slice_delete_pol_time} Check For Network Slice Instance To Be Deleted ${slice_name} + Check For Network Slice Instance To Be Deleted [Documentation] Verify the slice instance is not present @@ -180,7 +203,10 @@ Check For Network Slice Instance To Be Deleted ... slice_name: Name of the slice instance ... Execution example: ... Check For Network Slice Instance \${slice_name} + [Arguments] ${slice_name} - ${rc} ${stdout}= Run And Return Rc And Output osm nsi-list | awk '{print $2}' | grep ${slice_name} - Log ${rc},${stdout} + + ${rc} ${stdout}= Run and Return RC and Output osm nsi-list | awk '{print $2}' | grep ${slice_name} Should Not Be Equal As Strings ${stdout} ${slice_name} + + diff --git a/robot-systest/lib/nst_lib.resource b/robot-systest/lib/nst_lib.resource deleted file mode 100644 index 0bb2e1b9fa5660315d5af8a3279121edf6e2b45f..0000000000000000000000000000000000000000 --- a/robot-systest/lib/nst_lib.resource +++ /dev/null @@ -1,57 +0,0 @@ -*** Comments *** -# Copyright 2020 Atos -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -*** Settings *** -Documentation Library providing keywords for CRUD operations over Network Slice Templates with OSM client. -Library OperatingSystem - - -*** Variables *** -${SUCCESS_RETURN_CODE} 0 -${NST_DELETE_MAX_WAIT_TIME} 1min -${NST_DELETE_POL_TIME} 15sec - - -*** Keywords *** -Get NST List - [Documentation] Get the list of Network Slice Templates (NST) and log it. - ${rc} ${stdout}= Run And Return Rc And Output osm netslice-template-list - Log ${stdout} - Log ${rc} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - -Create NST - [Documentation] Upload a Network Slice Template (NST) to OSM and return the id. - [Arguments] ${nst} - ${rc} ${stdout}= Run And Return Rc And Output osm netslice-template-create ${nst} - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} - -Delete NST - [Documentation] Delete a Network Slice Template (NST) from OSM. - [Arguments] ${nst_id} - ${rc} ${stdout}= Run And Return Rc And Output osm netslice-template-delete ${nst_id} - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Wait Until Keyword Succeeds ${NST_DELETE_MAX_WAIT_TIME} ${NST_DELETE_POL_TIME} Check For NST ${nst_id} - -Check For NST - [Documentation] Check that a Network Slice Template (NST) exists in OSM. - [Arguments] ${nst_id} - ${rc} ${stdout}= Run And Return Rc And Output osm netslice-template-list | awk '{print $2}' | grep ${nst_id} - Log ${rc},${stdout} - Should Not Be Equal As Strings ${stdout} ${nst_id} diff --git a/robot-systest/lib/nst_lib.robot b/robot-systest/lib/nst_lib.robot new file mode 100644 index 0000000000000000000000000000000000000000..6fac72926e109d877b44850a2657d86ee7bb08ff --- /dev/null +++ b/robot-systest/lib/nst_lib.robot @@ -0,0 +1,53 @@ +# Copyright 2020 Atos +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Variables *** +${success_return_code} 0 +${ns_launch_max_wait_time} 5min +${ns_launch_pol_time} 30sec +${ns_delete_max_wait_time} 1min +${ns_delete_pol_time} 15sec + +*** Keywords *** +Get NST List + ${rc} ${stdout}= Run and Return RC and Output osm netslice-template-list + Log ${stdout} + Log ${rc} + Should Be Equal As Integers ${rc} ${success_return_code} + + +Create NST + [Arguments] ${nst} + + ${rc} ${stdout}= Run and Return RC and Output osm netslice-template-create ${nst} + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + + +Delete NST + [Arguments] ${nst_id} + + ${rc} ${stdout}= Run and Return RC and Output osm netslice-template-delete ${nst_id} + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + WAIT UNTIL KEYWORD SUCCEEDS ${delete_max_wait_time} ${delete_pol_time} Check For NST ${nst_id} + + +Check For NST + [Arguments] ${nst_id} + + ${rc} ${stdout}= Run and Return RC and Output osm netslice-template-list | awk '{print $2}' | grep ${nst_id} + Should Not Be Equal As Strings ${stdout} ${nst_id} + diff --git a/robot-systest/lib/openstack_lib.resource b/robot-systest/lib/openstack_lib.robot similarity index 62% rename from robot-systest/lib/openstack_lib.resource rename to robot-systest/lib/openstack_lib.robot index 385362be10da23e459e9c6ff6667f212f6be3c78..b654cfd504d0ff163c1d1baa54e5b81acfca291d 100644 --- a/robot-systest/lib/openstack_lib.resource +++ b/robot-systest/lib/openstack_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,183 +10,204 @@ # See the License for the specific language governing permissions and # limitations under the License. - -*** Settings *** -Documentation Library providing keywords to interact with Openstack with openstack client. - -Library OperatingSystem -Library String - -Resource ns_lib.resource -Resource vnf_lib.resource - - *** Variables *** -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Keywords *** Get Server Flavor ID - [Documentation] Get from Openstack the flavor id of a server/VM passed as argument. [Arguments] ${server_id} + Should Not Be Empty ${server_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack server show ${server_id} | grep flavor | awk 'NR>1{print $1}' RS='(' FS=')' + ${rc} ${stdout}= Run and Return RC and Output openstack server show ${server_id} | grep flavor | awk 'NR>1{print $1}' RS='(' FS=')' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Get Flavor Properties - [Documentation] Get from Openstack the properties of a flavor passed as argument. [Arguments] ${flavor_id} + Should Not Be Empty ${flavor_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack flavor show ${flavor_id} | grep properties | awk -F '|' '{print $3}' + ${rc} ${stdout}= Run and Return RC and Output openstack flavor show ${flavor_id} | grep properties | awk -F '|' '{print $3}' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Check NS Servers In VIM [Documentation] Check if the number of servers in Openstack by filtering by NS name is as expected. [Arguments] ${ns_name} ${number} + Should Not Be Empty ${ns_name} - ${rc} ${stdout}= Run And Return Rc And Output openstack server list | grep ${ns_name} | awk '{print $4}' + ${rc} ${stdout}= Run and Return RC and Output openstack server list | grep ${ns_name} | awk '{print $4}' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - @{servers}= Split String ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + @{servers} = Split String ${stdout} ${n_servers}= Get Length ${servers} Should Be Equal As Integers ${number} ${n_servers} + Check If Volume Bootable [Documentation] Check the volume properties and return whether it is bootable or not. [Arguments] ${volume_id} + Should Not Be Empty ${volume_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack volume show ${volume_id} | grep bootable | awk '{print $4}' - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + ${rc} ${stdout}= Run and Return RC and Output openstack volume show ${volume_id} | grep bootable | awk '{print $4}' + log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Get Project Quota [Documentation] Get a field (ram, cores, ports, etc.) from quota in current project. [Arguments] ${field} + Should Not Be Empty ${field} - ${rc} ${stdout}= Run And Return Rc And Output openstack quota show -f yaml | yq '.[] | select(.Resource=="${field}") | .Limit' + ${rc} ${stdout}= Run and Return RC and Output openstack quota show -f yaml | yq '.[] | select(.Resource=="${field}") | .Limit' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Get Server Property [Documentation] Get a field (flavor, image, volumes_attached, etc.) from a server. [Arguments] ${server_id} ${field} + Should Not Be Empty ${server_id} Should Not Be Empty ${field} - ${rc} ${stdout}= Run And Return Rc And Output openstack server show ${server_id} -c ${field} -f value + ${rc} ${stdout}= Run and Return RC and Output openstack server show ${server_id} -c ${field} -f value Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Check VM In Server Group [Documentation] Check if a given server is included in an Openstack server group [Arguments] ${server_id} ${server_group_name} + Should Not Be Empty ${server_group_name} Should Not Be Empty ${server_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack server group show ${server_group_name} -c members -f value + ${rc} ${stdout}= Run and Return RC and Output openstack server group show ${server_group_name} -c members -f value Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} Should Contain ${stdout} ${server_id} + Set Volume Id [Documentation] Sets the root volume ID and ordinary volume ID by checking bootable property of volumes [Arguments] ${volume_match} ${index} + Should Not Be Empty ${volume_match} ${index} ${bootable}= Check If Volume Bootable ${volume_match}[${index}] - IF ${bootable}=='true' - Set Suite Variable ${ROOT_VOL_ID} ${volume_match}[${index}] - IF not ${index} - Set Suite Variable ${ORDINARY_VOL_ID} ${volume_match}[1] + Set Suite Variable ${bootable} + IF '${bootable}'=='true' + Set Suite Variable ${root_vol_id} ${volume_match}[${index}] + IF ${index}==0 + Set Suite Variable ${ordinary_vol_id} ${volume_match}[1] ELSE - Set Suite Variable ${ORDINARY_VOL_ID} ${volume_match}[0] + Set Suite Variable ${ordinary_vol_id} ${volume_match}[0] END END + Get Persistent Volumes Attached To Vm [Documentation] Sets the root volume ID and ordinary volume ID by checking bootable property of volumes [Arguments] ${ns_id} + Variable Should Exist ${ns_id} msg=NS is not available ${vnfs_list}= Get Ns Vnf List ${ns_id} ${vim_id}= Get VNF VIM ID ${vnfs_list}[0] ${volumes_attached}= Get Server Property ${vim_id} volumes_attached - Log ${volumes_attached} + log ${volumes_attached} ${stdout}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 - Log ${stdout} - RETURN ${stdout} + log ${stdout} + [Return] ${stdout} + Check If Volume Exists [Documentation] Checks if a volume id exists [Arguments] ${volume_id} + Should Not Be Empty ${volume_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack volume list | grep ${volume_id} | wc -l + ${rc} ${stdout}= Run and Return RC and Output openstack volume list | grep ${volume_id} | wc -l Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Delete Volume [Documentation] Delete a volume by its identifier [Arguments] ${volume_id} + Should Not Be Empty ${volume_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack volume delete ${volume_id} + ${rc} ${stdout}= Run and Return RC and Output openstack volume delete ${volume_id} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Get Subnet [Documentation] Get subnet information in JSON format [Arguments] ${subnet_id} + Should Not Be Empty ${subnet_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack subnet show ${subnet_id} -f json + ${rc} ${stdout}= Run and Return RC and Output openstack subnet show ${subnet_id} -f json Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Stop Server [Documentation] Stop a server [Arguments] ${server_id} + Should Not Be Empty ${server_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack server stop ${server_id} + ${rc} ${stdout}= Run and Return RC and Output openstack server stop ${server_id} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Halt Server [Documentation] Reset a server [Arguments] ${server_id} + Should Not Be Empty ${server_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack server set --state error ${server_id} + ${rc} ${stdout}= Run and Return RC and Output openstack server set --state error ${server_id} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Delete Server [Documentation] Delete a server [Arguments] ${server_id} + Should Not Be Empty ${server_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack server delete ${server_id} + ${rc} ${stdout}= Run and Return RC and Output openstack server delete ${server_id} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Create Flavor [Documentation] Create a Flavor [Arguments] ${flavor_name} ${cpu}=1 ${ram}=1024 ${disk}=10 + Should Not Be Empty ${flavor_name} - ${rc} ${flavor_id}= Run And Return Rc And Output openstack flavor create ${flavor_name} --ram ${ram} --disk ${disk} --vcpus ${cpu} -c id -f value + ${rc} ${flavor_id}= Run and Return RC and Output openstack flavor create ${flavor_name} --ram ${ram} --disk ${disk} --vcpus ${cpu} -c id -f value Log ${flavor_id} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${flavor_id} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${flavor_id} + Delete Flavor [Documentation] Delete a Flavor [Arguments] ${flavor_id} + Should Not Be Empty ${flavor_id} - ${rc} ${stdout}= Run And Return Rc And Output openstack flavor delete ${flavor_id} + ${rc} ${stdout}= Run and Return RC and Output openstack flavor delete ${flavor_id} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} diff --git a/robot-systest/lib/package_lib.resource b/robot-systest/lib/package_lib.robot similarity index 57% rename from robot-systest/lib/package_lib.resource rename to robot-systest/lib/package_lib.robot index b5634630645f7924ec48caed2981822c73e6da7f..a9d3804b280f1b84a445917ec2062ac5d79ce93a 100644 --- a/robot-systest/lib/package_lib.resource +++ b/robot-systest/lib/package_lib.robot @@ -1,4 +1,6 @@ -*** Comments *** +# -*- coding: utf-8 -*- + +## # Copyright ETSI Contributors and Others. # # All Rights Reserved. @@ -14,16 +16,17 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. - +## *** Settings *** -Documentation Library providing keywords for building, validating and uploading tar.gz NS and VNF package files with OSM client. Library String Library OperatingSystem *** Variables *** -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 +${delete_max_wait_time} 1min +${delete_pol_time} 15sec *** Keywords *** @@ -31,37 +34,46 @@ Upload Package [Documentation] Onboards ("creates") a NF Package into OSM. ... - Parameters: ... - pkg: Name (and location) of the NF Package + [Arguments] ${pkg} - # Proceeds with the onboarding with the appropriate arguments - ${rc} ${stdout}= Run And Return Rc And Output tar -czf ${pkg}.tar.gz -C ${pkg} . - Log ${rc},${stdout} - ${rc} ${stdout}= Run And Return Rc And Output osm upload-package ${pkg}.tar.gz - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + + # Proceedes with the onboarding with the appropriate arguments + ${rc} ${stdout}= Run and Return RC and Output tar -czf ${pkg}.tar.gz -C ${pkg} . + ${rc} ${stdout}= Run and Return RC and Output osm upload-package ${pkg}.tar.gz + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Delete Package - [Documentation] Delete a tar.gz package passed as argument from the filesystem. [Arguments] ${pkg} - # Proceeds with the onboarding with the appropriate arguments - ${rc} ${stdout}= Run And Return Rc And Output rm ${pkg}.tar.gz - Log ${rc},${stdout} + + # Proceedes with the onboarding with the appropriate arguments + ${rc} ${stdout}= Run and Return RC and Output rm ${pkg}.tar.gz + Package Build [Documentation] Build the package NS, VNF given the package_folder + [Arguments] ${pkg_folder} ${skip_charm_build}=${EMPTY} - ${skip_charm}= Set Variable If "${skip_charm_build}" != "${EMPTY}" "--skip-charm-build" ${EMPTY} - ${rc} ${stdout}= Run And Return Rc And Output osm package-build ${pkg_folder} ${skip_charm} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + + ${skip_charm} Set Variable If '${skip_charm_build}'!='${EMPTY}' --skip-charm-build \ + ${rc} ${stdout}= Run and Return RC and Output osm package-build ${pkg_folder} ${skip_charm} + Should Be Equal As Integers ${rc} ${success_return_code} Should Contain ${stdout} Package created ${package}= Get Line ${stdout} -1 - RETURN ${package} + + [Return] ${package} + Package Validate [Documentation] Validate descriptors given a base directory + [Arguments] ${pkg_folder} - ${rc} ${stdout}= Run And Return Rc And Output osm package-validate ${pkg_folder} | awk -F\| '$2 !~ /-/ && $4 ~ /OK|ERROR/ {print $4}' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + ${rc} ${stdout}= Run and Return RC and Output osm package-validate ${pkg_folder} | awk -F\| '$2 !~ /-/ && $4 ~ /OK|ERROR/ {print $4}' + Should Be Equal As Integers ${rc} ${success_return_code} Should Contain ${stdout} 'OK' ${package}= Get Line ${stdout} -1 - RETURN ${package} + + [Return] ${package} + diff --git a/robot-systest/lib/project_lib.resource b/robot-systest/lib/project_lib.robot similarity index 59% rename from robot-systest/lib/project_lib.resource rename to robot-systest/lib/project_lib.robot index a46ee6131f1c04f1d638be1a442fee7f3f46a178..35366e258aa13d82c0a938961287d9cb856000f2 100644 --- a/robot-systest/lib/project_lib.resource +++ b/robot-systest/lib/project_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,115 +10,121 @@ # See the License for the specific language governing permissions and # limitations under the License. - -*** Settings *** -Documentation Library providing keywords for CRUD operations over projects with OSM client. -Library OperatingSystem - - *** Variables *** -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Keywords *** Create Project - [Documentation] Create a project in OSM with the name passed as argument, and return the project id. [Arguments] ${project_name} + Should Not Be Empty ${project_name} - ${rc} ${stdout}= Run And Return Rc And Output osm project-create ${project_name} + ${rc} ${stdout}= Run and Return RC and Output osm project-create ${project_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Create Project With Quotas - [Documentation] Create a project in OSM with the name and quotas passed as arguments, and return the project id. [Arguments] ${project_name} ${project_quotas} + Should Not Be Empty ${project_name} Should Not Be Empty ${project_quotas} - ${rc} ${stdout}= Run And Return Rc And Output osm project-create ${project_name} --quotas ${project_quotas} + ${rc} ${stdout}= Run and Return RC and Output osm project-create ${project_name} --quotas ${project_quotas} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Get Project Quotas - [Documentation] Get from OSM a specific quota parameter from the project passed as argument. [Arguments] ${project_name} ${quotas_name} + Should Not Be Empty ${project_name} Should Not Be Empty ${quotas_name} - ${rc} ${stdout}= Run And Return Rc And Output osm project-show ${project_name} | grep '${quotas_name}' | awk -F ',|: ' '{print $2}' | awk '{print $1}' + ${rc} ${stdout}= Run and Return RC and Output osm project-show ${project_name} | grep '${quotas_name}' | awk -F ',|: ' '{print $2}' | awk '{print $1}' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Update Project Quotas - [Documentation] Update in OSM the quotas of a project with the new quotas passed as arguments. [Arguments] ${project_name} ${project_quotas} + Should Not Be Empty ${project_name} Should Not Be Empty ${project_quotas} - ${rc} ${stdout}= Run And Return Rc And Output osm project-update ${project_name} --quotas ${project_quotas} + ${rc} ${stdout}= Run and Return RC and Output osm project-update ${project_name} --quotas ${project_quotas} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Update Project Name - [Documentation] Update in OSM the name of a project with the new name passed as argument. [Arguments] ${project_name} ${new_name} + Should Not Be Empty ${project_name} Should Not Be Empty ${new_name} - ${rc} ${stdout}= Run And Return Rc And Output osm project-update ${project_name} --name ${new_name} + ${rc} ${stdout}= Run and Return RC and Output osm project-update ${project_name} --name ${new_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Check If User Is Assigned To Project - [Documentation] Check in OSM if a user exists in a project passed as argument. [Arguments] ${user_name} ${project_name} + Should Not Be Empty ${user_name} Should Not Be Empty ${project_name} ${rc} ${stdout}= Run And Return RC And Output osm user-show ${user_name} | grep "project_name" | grep "${project_name}" Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Create VNFD In Project - [Documentation] Onboards a VNF package into an OSM project. + [Documentation] Onboards a VNFD package into an OSM project. ... Extra parameters (such as 'override') are given to this function in name=value format. These parameters will be appended to the 'osm vnfpkg-create' command with the next syntax: --param_name=param_value + [Arguments] ${project_name} ${vnfd_pkg} ${project_user} ${user_password} @{optional_parameters} + Should Not Be Empty ${project_name} Should Not Be Empty ${vnfd_pkg} Should Not Be Empty ${project_user} Should Not Be Empty ${user_password} + ${osm_pkg_create_command}= Set Variable osm --project ${project_name} --user ${project_user} --password ${user_password} vnfpkg-create ${vnfd_pkg} FOR ${param} IN @{optional_parameters} - ${match} ${param_name} ${param_value}= Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in optional parameters - Log ${match},${param_name},${param_value} + ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in optional parameters ${osm_pkg_create_command}= Catenate ${osm_pkg_create_command} --${param_name}=${param_value} END - ${rc} ${stdout}= Run And Return Rc And Output ${osm_pkg_create_command} + + ${rc} ${stdout}= Run and Return RC and Output ${osm_pkg_create_command} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Delete VNFD In Project - [Documentation] Deletes a VNF package from an OSM project. [Arguments] ${project_name} ${vnfd_pkg} ${project_user} ${user_password} + Should Not Be Empty ${project_name} Should Not Be Empty ${vnfd_pkg} Should Not Be Empty ${project_user} Should Not Be Empty ${user_password} - ${rc} ${stdout}= Run And Return Rc And Output osm --project ${project_name} --user ${project_user} --password ${user_password} vnfpkg-delete ${vnfd_pkg} + ${rc} ${stdout}= Run and Return RC and Output osm --project ${project_name} --user ${project_user} --password ${user_password} vnfpkg-delete ${vnfd_pkg} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Remove User From Project - [Documentation] Remove a specific user from a specific project in OSM. [Arguments] ${user_name} ${project_name} + Should Not Be Empty ${user_name} Should Not Be Empty ${project_name} ${rc} ${stdout}= Run And Return RC And Output osm user-update ${user_name} --remove-project ${project_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Delete Project - [Documentation] Delete from OSM the project passed as argument. [Arguments] ${project_name} - ${rc} ${stdout}= Run And Return Rc And Output osm project-delete ${project_name} + + ${rc} ${stdout}= Run and Return RC and Output osm project-delete ${project_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} diff --git a/robot-systest/lib/prometheus_lib.resource b/robot-systest/lib/prometheus_lib.robot similarity index 71% rename from robot-systest/lib/prometheus_lib.resource rename to robot-systest/lib/prometheus_lib.robot index be3c120d6739e09712e3c2b4a17523ec169b964f..0f4f07c0a8ff14bf5754b2091bff1f84eee8f8f7 100644 --- a/robot-systest/lib/prometheus_lib.resource +++ b/robot-systest/lib/prometheus_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation Library to obtain metrics from Prometheus. @@ -22,27 +20,28 @@ Library RequestsLibrary *** Variables *** -${TIMEOUT} 30 -${MAX_RETRIES} 1 -${PROMETHEUS_HOST} %{PROMETHEUS_HOSTNAME=UNKNOWN} -${PROMETHEUS_PORT} %{PROMETHEUS_PORT=9090} -${PROMETHEUS_USER} %{PROMETHEUS_USER=""} -${PROMETHEUS_PASSWORD} %{PROMETHEUS_PASSWORD=""} +${timeout} 30 +${max_retries} 1 +${prometheus_host} %{PROMETHEUS_HOSTNAME=UNKNOWN} +${prometheus_port} %{PROMETHEUS_PORT=9090} +${prometheus_user} %{PROMETHEUS_USER=""} +${prometheus_password} %{PROMETHEUS_PASSWORD=""} *** Keywords *** Set Testsuite Prometheus Variables [Documentation] Set Testsuite Prometheus Variables to be used in subsequent test cases - IF ${PROMETHEUS_HOST} == 'UNKNOWN' + IF '${prometheus_host}' == 'UNKNOWN' ${local_prometheus_host}= Get Environment Variable OSM_HOSTNAME - Set Suite Variable ${PROMETHEUS_HOST} ${local_prometheus_host} - Set Suite Variable ${PROMETHEUS_HOST} 9091 + Set Suite Variable ${prometheus_host} ${local_prometheus_host} + Set Suite Variable ${prometheus_port} 9091 END - Log ${PROMETHEUS_PORT} - Log ${PROMETHEUS_HOST} - Log ${PROMETHEUS_USER} - Log ${PROMETHEUS_PASSWORD} + Log ${prometheus_port} + Log ${prometheus_host} + Log ${prometheus_user} + Log ${prometheus_password} + Get Metric [Documentation] Get the instant value of a metric from Prometheus using multiple filter parameters. @@ -51,27 +50,30 @@ Get Metric ... Examples of execution: ... \${metric}= Get Metric \${prometheus_ip} \${prometheus_port} ${prometheus_password} \${metric} ... \${metric}= Get Metric \${prometheus_ip} \${prometheus_port} ${prometheus_password} \${metric} \${param1}=\${value1} \${param2}=\${value2} + [Arguments] ${prometheus_ip} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric} @{filter_parameters} + ${filter}= Set Variable ${EMPTY} FOR ${param} IN @{filter_parameters} - ${match} ${param_name} ${param_value}= Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in filter parameters - Log ${match},${param_name},${param_value} + ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in filter parameters ${filter}= Catenate SEPARATOR= ${filter} ${param_name}="${param_value}", END - ${resp}= Execute Prometheus Instant Query ${prometheus_ip} ${prometheus_port} ${prometheus_user} ${prometheus_password} query=${metric}{${filter}} + ${resp}= Execute Prometheus Instant Query ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} query=${metric}{${filter}} ${result_list}= Convert To List ${resp["data"]["result"]} ${results}= Get Length ${result_list} Should Not Be Equal As Numbers 0 ${results} msg=Metric ${metric} not found values=false Should Be Equal As Integers 1 ${results} msg=Metric ${metric} with multiple values values=false - RETURN ${result_list[0]["value"][1]} + [Return] ${result_list[0]["value"][1]} + Execute Prometheus Instant Query [Documentation] Execute a Prometheus Instant Query using HTTP API. ... Return an inline json with the result of the query. ... The requested URL is the next: http://\${prometheus_ip}:\${prometheus_port}/api/v1/query?\${querystring} + [Arguments] ${prometheus_ip} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${querystring} - ${auth}= IF '${prometheus_password}' != '${EMPTY}' Create List ${prometheus_user} ${prometheus_password} ELSE Set Variable None - Create Session prometheus http://${prometheus_ip}:${prometheus_port} timeout=${TIMEOUT} max_retries=${MAX_RETRIES} verify=false auth=${auth} - ${resp}= GET On Session prometheus /api/v1/query?${querystring} timeout=${TIMEOUT} + ${auth}= IF '${prometheus_password}'!='${EMPTY}' Create List ${prometheus_user} ${prometheus_password} ELSE Set Variable None + Create Session prometheus http://${prometheus_ip}:${prometheus_port} timeout=${timeout} max_retries=${max_retries} verify=false auth=${auth} + ${resp}= GET On Session prometheus /api/v1/query?${querystring} timeout=${timeout} Status Should Be 200 ${resp} - RETURN ${resp.json()} + [Return] ${resp.json()} diff --git a/robot-systest/lib/repo_lib.resource b/robot-systest/lib/repo_lib.resource deleted file mode 100644 index a339255546a1e51e35cb401aeceeaddfaef12823..0000000000000000000000000000000000000000 --- a/robot-systest/lib/repo_lib.resource +++ /dev/null @@ -1,59 +0,0 @@ -*** Comments *** -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -*** Settings *** -Documentation Library to deploy and delete OSM repos. - -Library OperatingSystem - -Resource ../lib/nsd_lib.resource - - -*** Variables *** -${SUCCESS_RETURN_CODE} 0 -${REPO_DELETE_MAX_WAIT_TIME} 1min -${REPO_DELETE_POL_TIME} 15sec - - -*** Keywords *** -Get Repos List - [Documentation] Get the list of repos and log it. - ${rc} ${stdout}= Run And Return RC And Output osm repo-list - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - -Create Repo - [Documentation] Create a repository in OSM with the name and options passed as arguments, and return the repo id. - [Arguments] ${repo_name} ${repo_uri} ${repo_type} ${user} ${password} ${additional_options}="" - ${user_attr}= Set Variable If '${user}'!='${EMPTY}' --user ${user} \ - ${password_attr}= Set Variable If '${password}'!='${EMPTY}' --password ${password} \ - ${rc} ${stdout}= Run And Return RC And Output osm repo-add --type ${repo_type} ${user_attr} ${password_attr} ${additional_options} ${repo_name} ${repo_uri} - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} - -Delete Repo - [Documentation] Delete from OSM the repo passed as argument. - [Arguments] ${repo_id} - ${rc} ${stdout}= Run Keyword And Continue On Failure Run And Return RC And Output osm repo-delete ${repo_id} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Log ${stdout} - WAIT UNTIL KEYWORD SUCCEEDS ${REPO_DELETE_MAX_WAIT_TIME} ${REPO_DELETE_POL_TIME} Check For NSD ${repo_id} - -Check For Repo - [Documentation] Check that a repository exists in OSM. - [Arguments] ${repo_id} - ${rc} ${stdout}= Run And Return RC And Output osm repo-list | awk '{print $2}' | grep ${repo_id} - Log ${rc},${stdout} - Should Not Be Equal As Strings ${stdout} ${repo_id} diff --git a/robot-systest/lib/repo_lib.robot b/robot-systest/lib/repo_lib.robot new file mode 100644 index 0000000000000000000000000000000000000000..8237b183413cf769e82443f6da0c380e93593217 --- /dev/null +++ b/robot-systest/lib/repo_lib.robot @@ -0,0 +1,52 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +Documentation Library to deploy and delete OSM repos. + + +*** Variables *** +${success_return_code} 0 + +*** Keywords *** +Get Repos List + ${rc} ${stdout}= Run and Return RC and Output osm repo-list + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + + +Create Repo + [Arguments] ${repo_name} ${repo_uri} ${repo_type} ${user} ${password} ${additional_options}="" + + ${user_attr} Set Variable If '${user}'!='${EMPTY}' --user ${user} \ + ${password_attr} Set Variable If '${password}'!='${EMPTY}' --password ${password} \ + + ${rc} ${stdout}= Run and Return RC and Output osm repo-add --type ${repo_type} ${user_attr} ${password_attr} ${additional_options} ${repo_name} ${repo_uri} + Log ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + + +Delete Repo + [Arguments] ${repo_id} + + ${rc} ${stdout}= Run Keyword And Continue On Failure Run and Return RC and Output osm repo-delete ${repo_id} + Should Be Equal As Integers ${rc} ${success_return_code} + Log ${stdout} + WAIT UNTIL KEYWORD SUCCEEDS ${delete_max_wait_time} ${delete_pol_time} Check For NSD ${repo_id} + + +Check For Repo + [Arguments] ${repo_id} + + ${rc} ${stdout}= Run and Return RC and Output osm repo-list | awk '{print $2}' | grep ${repo_id} + Should Not Be Equal As Strings ${stdout} ${repo_id} diff --git a/robot-systest/lib/rest_lib.resource b/robot-systest/lib/rest_lib.resource deleted file mode 100644 index 74e97e9230baa1da274d8cdfd1f2803f0b1c9c66..0000000000000000000000000000000000000000 --- a/robot-systest/lib/rest_lib.resource +++ /dev/null @@ -1,109 +0,0 @@ -*** Comments *** -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License - - -*** Settings *** -Documentation Library with sol003 keywords and variables . - -Library String -Library OperatingSystem -Library RequestsLibrary -Library JsonValidator -Library yaml -Library JSONLibrary - -Resource ../lib/vim_lib.resource - - -*** Variables *** -@{SUCCESS_STATUS_CODE_LIST} 200 201 202 204 -${AUTH_TOKEN_URI} /osm/admin/v1/tokens -${REST_API_HOST} ${EMPTY} -${OSM_USER} %{OSM_USER=admin} -${OSM_PASSWORD} %{OSM_PASSWORD=admin} -${OSM_PROJECT} %{OSM_PROJECT=admin} - - -*** Keywords *** -Get Auth Token - [Documentation] Send a REST POST message to OSM to get an authentication token, - ... and store the authentication token in a suite variable to be used later on. - Set REST API Host - Create Session osmhit ${REST_API_HOST} disable_warnings=1 - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json - &{data}= Create Dictionary username=${OSM_USER} password=${OSM_PASSWORD} project-id=${OSM_PROJECT} - ${resp}= Post On Session osmhit ${AUTH_TOKEN_URI} json=${data} headers=${headers} - Log ${resp} - Pass Execution If ${resp.status_code} in ${SUCCESS_STATUS_CODE_LIST} Get Auth Token completed - Set Suite Variable ${TOKEN_STATUS_CODE} ${resp.status_code} - ${access_token}= Get Value From Json ${resp.json()} $..id - Set Test Variable ${ACCESS_TOKEN} ${access_token[0]} - Set Test Variable ${TOKEN_RESPONSE} ${resp} - Sleep 2s - -Set Dockerized Host - [Documentation] Set the suite variable REST_API_HOST to be used in this library and the testsuites using it. - ... This method must be used if the tests are run from a container in the same K8s cluster where OSM is running. - [Arguments] ${env_host} - Set Suite Variable ${REST_API_HOST} https://${env_host} - -Set Standalone Host - [Documentation] Set a suite variable REST_API_HOST to be used in this library and the testsuites using it. - ... This method must be used if the tests are run from any place outside the K8s cluster where OSM is running. - [Arguments] ${env_host} - Set Suite Variable ${REST_API_HOST} https://${env_host}:9999 - -Read Directory - [Documentation] Read Current Directory and return it - ${Directory}= Replace String ${CURDIR} lib resources/ - ${json_path}= Set Variable ${Directory} - RETURN ${json_path} - -Post Api Request - [Documentation] Send to OSM a POST API message to OSM to the given uri with the given json data, - ... and save response and status code in suite variables to be used later on. - [Arguments] ${PostApi} ${json_data} - Create Session APISession ${REST_API_HOST} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json Authorization=Bearer ${ACCESS_TOKEN} - ${request_response}= Post On Session APISession ${PostApi} json=${json_data} headers=${headers} - Set Suite Variable ${REQUEST_RESPONSE} ${request_response} - ${response_statuscode}= Convert To String ${request_response.status_code} - Set Suite Variable ${RESPONSE_STATUSCODE} ${response_statuscode} - -Set REST API Host - [Documentation] Set the REST_API_HOST suite variable from OSM_HOSTNAME env variable - ${nbi_host}= Get Environment Variable OSM_HOSTNAME - ${passed}= Run Keyword And Return Status Should Contain ${nbi_host} : - IF ${passed} - Set Dockerized Host ${nbi_host} - ELSE - Set Standalone Host ${nbi_host} - END - -Get ID - [Documentation] Examine a REQUEST_RESPONSE dictionary as JSON and return the requested key passed as argument. - [Arguments] ${Key} - Pass Execution If ${REQUEST_RESPONSE.status_code} in ${SUCCESS_STATUS_CODE_LIST} Get Auth Token completed - ${id}= Get Value From Json ${REQUEST_RESPONSE.json()} $..${Key} - RETURN ${id[0]} - -Get Api Request - [Documentation] Send to OSM a GET API message to OSM to the given uri, - ... and save response and status code in suite variables to be used later on. - [Arguments] ${uri} - Create Session Session ${REST_API_HOST} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json Authorization=Bearer ${ACCESS_TOKEN} - ${request_response}= Get On Session Session ${uri} headers=${headers} - Set Suite Variable ${REQUEST_RESPONSE} ${request_response} - ${response_statuscode}= Convert To String ${request_response.status_code} - Set Suite Variable ${RESPONSE_STATUSCODE} ${response_statuscode} diff --git a/robot-systest/lib/rest_lib.robot b/robot-systest/lib/rest_lib.robot new file mode 100644 index 0000000000000000000000000000000000000000..ced8a2164b91bc5d6443ad09cdb5371b7de1cc10 --- /dev/null +++ b/robot-systest/lib/rest_lib.robot @@ -0,0 +1,95 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License + +*** Settings *** +Documentation Library with sol003 keywords and variables . + +Library RequestsLibrary +Library JsonValidator +Library yaml +Library JSONLibrary +Library String +Library OperatingSystem + +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot + +*** Variables *** +@{success_status_code_list} 200 201 202 204 +${auth_token_uri} /osm/admin/v1/tokens +${HOST} ${EMPTY} +${osm_user} %{OSM_USER=admin} +${osm_password} %{OSM_PASSWORD=admin} +${osm_project} %{OSM_PROJECT=admin} + +*** Keywords *** +Get Auth Token + [Tags] auth_token + Get Hostname + Create Session osmhit ${HOST} disable_warnings=1 + &{headers} Create Dictionary Content-Type=application/json Accept=application/json + &{data} Create Dictionary username=${osm_user} password=${osm_password} project-id=${osm_project} + ${resp}= Post On Session osmhit ${auth_token_uri} json=${data} headers=${headers} + Log ${resp} + Pass Execution If ${resp.status_code} in ${success_status_code_list} Get Auth Token completed + Set Suite Variable ${token_status_code} ${resp.status_code} + ${access_token}= Get Value From Json ${resp.json()} $..id + Set Test Variable ${access_token} ${access_token[0]} + Set Test Variable ${token_response} ${resp} + sleep 2s + +Set Dockerized Host + [Arguments] ${env_host} + Set Suite Variable ${HOST} https://${env_host} + +Set Standalone Host + [Arguments] ${env_host} + Set Suite Variable ${HOST} https://${env_host}:9999 + +Read Directory + [Documentation] To Read Current Direct ory + ${Directory}= Replace String ${CURDIR} lib resources/ + ${json_path}= Set Variable ${Directory} + [Return] ${JsonPath} + +Post Api Request + [Arguments] ${PostApi} + [Documentation] Keword to Post API Request + Create Session APISession ${HOST} + &{headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Bearer ${access_token} + ${request_response}= Post On Session APISession ${PostApi} json=${updated_json_obj} headers=${headers} + Set Suite Variable ${request_response} + ${response_statuscode} Convert To String ${request_response.status_code} + Set Suite Variable ${response_statuscode} + +Get Hostname + [Documentation] Keyword to get the default osm Hostname + ${nbi_host}= Get Environment Variable OSM_HOSTNAME + ${passed}= Run Keyword And Return Status Should Contain ${nbi_host} : + Run Keyword If ${passed} Set Dockerized Host ${nbi_host} + ... ELSE Set Standalone Host ${nbi_host} + +Get ID + [Arguments] ${Key} + Pass Execution If ${request_response.status_code} in ${success_status_code_list} Get Auth Token completed + ${id}= Get Value From Json ${request_response.json()} $..${Key} + Set Suite Variable ${value} ${id[0]} + [Return] ${value} + +Get Api Request + [Arguments] ${uri} + [Documentation] Keyword to Get API Request + Create Session Session ${HOST} + &{headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Bearer ${access_token} + ${request_response}= Get On Session Session ${uri} headers=${Headers} + Set Suite Variable ${request_response} + ${response_statuscode} Convert To String ${request_response.status_code} + Set Suite Variable ${response_statuscode} diff --git a/robot-systest/lib/role_lib.resource b/robot-systest/lib/role_lib.robot similarity index 63% rename from robot-systest/lib/role_lib.resource rename to robot-systest/lib/role_lib.robot index 1ba3a2d7a11df4daa94108004e5c7b720b05cded..984b69a504e415445ffc279caf96283cf79d41cf 100644 --- a/robot-systest/lib/role_lib.resource +++ b/robot-systest/lib/role_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,63 +10,62 @@ # See the License for the specific language governing permissions and # limitations under the License. - -*** Settings *** -Documentation Library providing keywords for CRUD operations over roles with OSM client. -Library OperatingSystem - - *** Variables *** -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Keywords *** Create Role - [Documentation] Create a role in OSM with the name passed as argument, and return the role id. [Arguments] ${role_name} + Should Not Be Empty ${role_name} - ${rc} ${stdout}= Run And Return Rc And Output osm role-create ${role_name} + ${rc} ${stdout}= Run and Return RC and Output osm role-create ${role_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Update Role - [Documentation] Update a role in OSM. + [Documentation] Updates a role in OSM. ... The extra parameters (like '--add') are given to this function in name=value format. These parameters will be appended to the 'osm role-update' command with the next syntax: --param_name=param_value ... Example of execution: ... Update Role \${role_name} add='vims: true' + [Arguments] ${role_name} @{optional_parameters} + ${osm_update_command}= Set Variable osm role-update ${role_name} FOR ${param} IN @{optional_parameters} - ${match} ${param_name} ${param_value}= Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in optional parameters - Log ${match},${param_name},${param_value} + ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in optional parameters ${osm_update_command}= Catenate ${osm_update_command} --${param_name}=${param_value} END - ${rc} ${stdout}= Run And Return Rc And Output ${osm_update_command} + ${rc} ${stdout}= Run and Return RC and Output ${osm_update_command} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Check If Role Exists - [Documentation] Check if a role exists in OSM. [Arguments] ${role_name} + Should Not Be Empty ${role_name} ${rc} ${stdout}= Run And Return RC And Output osm role-list | awk 'NR>3 {print $2}' | grep "${role_name}" Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Check If User Has Role - [Documentation] Check if a user has a role in a specific project in OSM. [Arguments] ${user_name} ${role_name} ${project_name} + Should Not Be Empty ${user_name} Should Not Be Empty ${role_name} Should Not Be Empty ${project_name} ${rc} ${stdout}= Run And Return RC And Output osm user-show ${user_name} | grep -B1 "role_name" | grep -B1 "${role_name}" | grep "project_name" | grep "${project_name}" Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Delete Role - [Documentation] Delete from OSM the role passed as argument. [Arguments] ${role_name} - ${rc} ${stdout}= Run And Return Rc And Output osm role-delete ${role_name} + + ${rc} ${stdout}= Run and Return RC and Output osm role-delete ${role_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} diff --git a/robot-systest/lib/sdnc_lib.resource b/robot-systest/lib/sdnc_lib.robot similarity index 56% rename from robot-systest/lib/sdnc_lib.resource rename to robot-systest/lib/sdnc_lib.robot index c9cd8c75cce23bb6de6554c66808904dc5e8cbbd..a8976752afcb6f1b2e0539e4cc4da000a0dd420b 100644 --- a/robot-systest/lib/sdnc_lib.resource +++ b/robot-systest/lib/sdnc_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation Library to manage SDNCs. @@ -19,79 +17,85 @@ Library String Library Collections Library OperatingSystem -Resource ../lib/prometheus_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot *** Variables *** -${SUCCESS_RETURN_CODE} 0 -${SDNC_DELETE_MAX_WAIT_TIME} 1min -${SDNC_DELETE_POL_TIME} 15sec -${SDNC_STATUS_MAX_WAIT_TIME} 6min -${SDNC_STATUS_POL_TIME} 1min +${success_return_code} 0 +${delete_max_wait_time} 1min +${delete_pol_time} 15sec +${sdnc_status_max_wait_time} 6min +${sdnc_status_pol_time} 1min *** Keywords *** Create SDNC - [Documentation] Register an SDN Controller in OSM. + [Documentation] Creates an SDNC in OSM. ... The optional parameters (such as 'switch_dpid' or 'ip-address') are given to this function in name=value format. These parameters will be appended to the 'osm sdnc-create' command with the next syntax: --param_name=param_value ... Returns the ID of the created SDNC Target. ... Example of execution: ... \${sdnc_id}= Create SDNC \${sdnc_name} \${sdnc_user} \${sdnc_password} \${sdnc_url} \${sdnc_type} switch_dpid='{...}' + [Arguments] ${sdnc_name} ${sdnc_user} ${sdnc_password} ${sdnc_url} ${sdnc_type} @{optional_parameters} + ${osm_sdnc_create_command}= Set Variable osm sdnc-create --name ${sdnc_name} --user ${sdnc_user} --password ${sdnc_password} --url ${sdnc_url} --type ${sdnc_type} FOR ${param} IN @{optional_parameters} - ${match} ${param_name} ${param_value}= Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in optional parameters - Log ${match},${param_name},${param_value} + ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in optional parameters ${osm_sdnc_create_command}= Catenate ${osm_sdnc_create_command} --${param_name}=${param_value} END - ${rc} ${stdout}= Run And Return Rc And Output ${osm_sdnc_create_command} + ${rc} ${stdout}= Run and Return RC and Output ${osm_sdnc_create_command} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + -Check For SDNC To Be Deleted - [Documentation] Check if an SDN controller identified by name is not present in OSM. +Check for SDNC To Be Deleted [Arguments] ${sdnc_name} - ${rc} ${stdout}= Run And Return Rc And Output osm sdnc-list | awk '{print $2}' | grep ${sdnc_name} - Log ${rc},${stdout} + + ${rc} ${stdout}= Run and Return RC and Output osm sdnc-list | awk '{print $2}' | grep ${sdnc_name} Should Not Be Equal As Strings ${stdout} ${sdnc_name} + Delete SDNC - [Documentation] Unregister/delete from OSM an SDN controller identified by name. [Arguments] ${sdnc_name} - ${rc} ${stdout}= Run Keyword And Continue On Failure Run And Return Rc And Output osm sdnc-delete ${sdnc_name} + + ${rc} ${stdout}= Run Keyword And Continue On Failure Run and Return RC and Output osm sdnc-delete ${sdnc_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Wait Until Keyword Succeeds ${SDNC_DELETE_MAX_WAIT_TIME} ${SDNC_DELETE_POL_TIME} Check For SDNC To Be Deleted ${sdnc_name} + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Wait Until Keyword Succeeds ${delete_max_wait_time} ${delete_pol_time} Check for SDNC To Be Deleted ${sdnc_name} + Get SDNC List - [Documentation] Get the list of SDN controllers from OSM and log it. - ${rc} ${stdout}= Run And Return Rc And Output osm sdnc-list + ${rc} ${stdout}= Run and Return RC and Output osm sdnc-list Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} -Check For SDNC - [Documentation] Check if an SDN Controller identified by name or id exists in OSM and is enabled. + +Check for SDNC [Arguments] ${sdnc_id} - ${rc} ${stdout}= Run And Return Rc And Output osm sdnc-show ${sdnc_id} | grep -io ENABLED + + ${rc} ${stdout}= Run and Return RC and Output osm sdnc-show ${sdnc_id} | grep -io ENABLED Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} -Check For SDNC Status - [Documentation] Check in a loop if the value of the metric osm_sdnc_status in Prometheus for the SDN controller is 1 (reachable). + +Check for SDNC Status [Arguments] ${sdnc_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} - Wait Until Keyword Succeeds ${SDNC_STATUS_MAX_WAIT_TIME} ${SDNC_STATUS_POL_TIME} Check If SDNC Is Available ${sdnc_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + + Wait Until Keyword Succeeds ${sdnc_status_max_wait_time} ${sdnc_status_pol_time} Check If SDNC Is Available ${sdnc_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + Get SDNC ID - [Documentation] Check if an SDN controller identified by name exists in OSM, and return the id. [Arguments] ${sdnc_name} - ${rc} ${stdout}= Run And Return Rc And Output osm sdnc-list | grep " ${sdnc_name} " | awk '{print $4}' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + + ${rc} ${stdout}= Run and Return RC and Output osm sdnc-list | grep " ${sdnc_name} " | awk '{print $4}' + Should Be Equal As Integers ${rc} ${success_return_code} Should Not Be Equal As Strings ${stdout} ${EMPTY} msg=SDNC '${sdnc_name}' not found values=false - RETURN ${stdout} + [Return] ${stdout} + Check If SDNC Is Available - [Documentation] Check if the value of the metric osm_sdnc_status in Prometheus for the SDN controller is 1 (reachable). [Arguments] ${sdnc_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + ${metric}= Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} osm_sdnc_status sdnc_id=${sdnc_id} Should Be Equal As Integers ${metric} 1 msg=SDNC '${sdnc_id}' is not active values=false diff --git a/robot-systest/lib/ssh_lib.resource b/robot-systest/lib/ssh_lib.robot similarity index 55% rename from robot-systest/lib/ssh_lib.resource rename to robot-systest/lib/ssh_lib.robot index 15d48a6722dacd5d330628bc549d1945a9fa8624..3e3c00b58bebb7ee76ca7ae73fecca02a2a3b010 100644 --- a/robot-systest/lib/ssh_lib.resource +++ b/robot-systest/lib/ssh_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,73 +10,52 @@ # See the License for the specific language governing permissions and # limitations under the License. - -*** Settings *** -Documentation Library providing keywords to interact with NF via SSH. -Library SSHLibrary - - *** Keywords *** Test SSH Connection - [Documentation] Test the SSH connection to the host with the user and credentials passed as arguments. [Arguments] ${host} ${username} ${password} ${privatekey} + Open Connection ${host} - IF "${password}" != "${EMPTY}" - Login ${username} ${password} - ELSE - Login With Public Key ${username} ${privatekey} - END + Run Keyword If '${password}'!='${EMPTY}' Login ${username} ${password} + ... ELSE Login With Public Key ${username} ${privatekey} Execute Command hostname Close All Connections -Check If Remote File Exists - [Documentation] Check via SSH if a file exists in in the remote host, using the user and credentials passed as arguments. +Check If remote File Exists [Arguments] ${host} ${username} ${password} ${privatekey} ${file} + Open Connection ${host} - IF "${password}" != "${EMPTY}" - Login ${username} ${password} - ELSE - Login With Public Key ${username} ${privatekey} - END + Run Keyword If '${password}'!='${EMPTY}' Login ${username} ${password} + ... ELSE Login With Public Key ${username} ${privatekey} ${rc}= Execute Command ls ${file} >& /dev/null return_stdout=False return_rc=True Close All Connections Should Be Equal As Integers ${rc} 0 Check If Remote Folder Exists - [Documentation] Check via SSH if a folder exists in in the remote host, using the user and credentials passed as arguments. [Arguments] ${host} ${username} ${password} ${privatekey} ${folder} + Open Connection ${host} - IF "${password}" != "${EMPTY}" - Login ${username} ${password} - ELSE - Login With Public Key ${username} ${privatekey} - END + Run Keyword If '${password}'!='${EMPTY}' Login ${username} ${password} + ... ELSE Login With Public Key ${username} ${privatekey} ${output}= Execute Command ls -d ${folder} Close All Connections Should Be Equal As Strings ${output} ${folder} Get Remote File Content - [Documentation] Get via SSH the content of a remote file and return it. [Arguments] ${host} ${username} ${password} ${privatekey} ${file} + Open Connection ${host} - IF "${password}" != "${EMPTY}" - Login ${username} ${password} - ELSE - Login With Public Key ${username} ${privatekey} - END + Run Keyword If '${password}'!='${EMPTY}' Login ${username} ${password} + ... ELSE Login With Public Key ${username} ${privatekey} ${output}= Execute Command cat ${file} Close All Connections - RETURN ${output} + [Return] ${output} Ping Many - [Documentation] Connect via SSH to a remote host and test ping to a list of IP addresses, passed as argument. [Arguments] ${host} ${username} ${password} ${privatekey} @{ip_list} + Open Connection ${host} - IF "${password}" != "${EMPTY}" - Login ${username} ${password} - ELSE - Login With Public Key ${username} ${privatekey} - END + Run Keyword If '${password}'!='${EMPTY}' Login ${username} ${password} + ... ELSE Login With Public Key ${username} ${privatekey} FOR ${ip} IN @{ip_list} ${result}= Execute Command ping -c 5 -W 1 ${ip} > /dev/null && echo OK shell=True Log ${result} @@ -85,18 +63,17 @@ Ping Many END Close All Connections + Execute Remote Command Check Rc Return Output - [Documentation] Execute via SSH a command in a remote host and, if the command succeeds, return the output. [Arguments] ${host} ${username} ${password} ${privatekey} ${command} + Open Connection ${host} - IF "${password}" != "${EMPTY}" - Login ${username} ${password} - ELSE - Login With Public Key ${username} ${privatekey} - END + Run Keyword If '${password}'!='${EMPTY}' Login ${username} ${password} + ... ELSE Login With Public Key ${username} ${privatekey} ${stdout} ${rc}= Execute Command ${command} return_rc=True return_stdout=True Log ${rc} Log ${stdout} Close All Connections Should Be Equal As Integers ${rc} 0 - RETURN ${stdout} + [Return] ${stdout} + diff --git a/robot-systest/lib/user_lib.resource b/robot-systest/lib/user_lib.robot similarity index 60% rename from robot-systest/lib/user_lib.resource rename to robot-systest/lib/user_lib.robot index 8dd7601b0ade1159eb2f9af038af3c10029cdf43..4e5893c114ca8b6ca487335ffff0e639ede932b8 100644 --- a/robot-systest/lib/user_lib.resource +++ b/robot-systest/lib/user_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,58 +10,56 @@ # See the License for the specific language governing permissions and # limitations under the License. - -*** Settings *** -Documentation Library providing keywords for CRUD operations over Network Slice Templates with OSM client. -Library OperatingSystem - - *** Variables *** -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Keywords *** Create User - [Documentation] Create a user in OSM with the name and password passed as arguments, and return the user id. [Arguments] ${user_name} ${user_password} + Should Not Be Empty ${user_name} Should Not Be Empty ${user_password} - ${rc} ${stdout}= Run And Return Rc And Output osm user-create ${user_name} --password ${user_password} + ${rc} ${stdout}= Run and Return RC and Output osm user-create ${user_name} --password ${user_password} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Update User Password - [Documentation] Update the password of a user in OSM. [Arguments] ${user_name} ${user_password} ${user_new_password} + Should Not Be Empty ${user_name} Should Not Be Empty ${user_password} Should Not Be Empty ${user_new_password} - ${rc} ${stdout}= Run And Return Rc And Output osm user-update ${user_name} --current-password ${user_password} --new-password ${user_new_password} + ${rc} ${stdout}= Run and Return RC and Output osm user-update ${user_name} --current-password ${user_password} --new-password ${user_new_password} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Update User Role - [Documentation] Update the role of a user in a project in OSM. [Arguments] ${user_name} ${project_name} ${role_name} + Should Not Be Empty ${user_name} Should Not Be Empty ${project_name} Should Not Be Empty ${role_name} - ${rc} ${stdout}= Run And Return Rc And Output osm user-update --add-project-role '${project_name},${role_name}' ${user_name} + ${rc} ${stdout}= Run and Return RC and Output osm user-update --add-project-role '${project_name},${role_name}' ${user_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Check If User Exists - [Documentation] Check if a user exists in OSM. [Arguments] ${user_name} + Should Not Be Empty ${user_name} ${rc} ${stdout}= Run And Return RC And Output osm user-list | awk 'NR>3 {print $2}' | grep "${user_name}" Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Delete User - [Documentation] Delete from OSM the user passed as argument. [Arguments] ${user_name} - ${rc} ${stdout}= Run And Return Rc And Output osm user-delete ${user_name} + + ${rc} ${stdout}= Run and Return RC and Output osm user-delete ${user_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} diff --git a/robot-systest/lib/vim_lib.resource b/robot-systest/lib/vim_lib.robot similarity index 58% rename from robot-systest/lib/vim_lib.resource rename to robot-systest/lib/vim_lib.robot index e46f6323ea003e516fa48db11756625e6e50d529..2c96802c286e1519b294192480aa82f29c959672 100644 --- a/robot-systest/lib/vim_lib.resource +++ b/robot-systest/lib/vim_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation Library to manage VIM Targets. @@ -19,98 +17,108 @@ Library String Library Collections Library OperatingSystem -Resource ../lib/prometheus_lib.resource +# Gerardo +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot *** Variables *** -${SUCCESS_RETURN_CODE} 0 -${VIM_DELETE_MAX_WAIT_TIME} 1min -${VIM_DELETE_POL_TIME} 15sec -${VIM_STATUS_MAX_WAIT_TIME} 3min -${VIM_STATUS_POL_TIME} 15sec -${VIM_OPSTATE_MAX_WAIT_TIME} 40sec -${VIM_OPSTATE_POL_TIME} 10sec +${success_return_code} 0 +${delete_max_wait_time} 1min +${delete_pol_time} 15sec +${vim_status_max_wait_time} 3min +${vim_status_pol_time} 15sec +${vim_opstate_max_wait_time} 40sec +${vim_opstate_pol_time} 10sec *** Keywords *** Create VIM Target - [Documentation] Register a VIM account in OSM and return the id. + [Documentation] Create a VIM Target in OSM. ... The optional parameters (such as 'config' or 'sdn_controller') are given to this function in name=value format. These parameters will be appended to the 'osm vim-create' command with the next syntax: --param_name=param_value ... Return the ID of the created VIM Target. ... Example of execution: ... \${vim_account_id}= Create VIM Target \${vim_name} \${vim_user} \${vim_password} \${vim_auth_url} \${vim_tenant} \${vim_account_type} config='{...}' + [Arguments] ${vim_name} ${vim_user} ${vim_password} ${vim_auth_url} ${vim_tenant} ${vim_account_type} @{optional_parameters} + ${osm_vim_create_command}= Set Variable osm vim-create --name ${vim_name} --user ${vim_user} --password ${vim_password} --auth_url ${vim_auth_url} --tenant ${vim_tenant} --account_type ${vim_account_type} FOR ${param} IN @{optional_parameters} - ${match} ${param_name} ${param_value}= Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in optional parameters - Log ${match},${param_name},${param_value} + ${match} ${param_name} ${param_value} = Should Match Regexp ${param} (.+)=(.+) msg=Syntax error in optional parameters ${osm_vim_create_command}= Catenate ${osm_vim_create_command} --${param_name}=${param_value} END - ${rc} ${stdout}= Run And Return Rc And Output ${osm_vim_create_command} + ${rc} ${stdout}= Run and Return RC and Output ${osm_vim_create_command} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Delete VIM Target - [Documentation] Unregister/delete a VIM account from OSM. [Arguments] ${vim_name} - ${rc} ${stdout}= Run Keyword And Continue On Failure Run And Return Rc And Output osm vim-delete ${vim_name} - Log ${rc},${stdout} - Wait Until Keyword Succeeds ${VIM_DELETE_MAX_WAIT_TIME} ${VIM_DELETE_POL_TIME} Check For VIM Target ${vim_name} + + ${rc} ${stdout}= Run Keyword And Continue On Failure Run and Return RC and Output osm vim-delete ${vim_name} + Log ${stdout} + Wait Until Keyword Succeeds ${delete_max_wait_time} ${delete_pol_time} Check for VIM Target ${vim_name} + Get VIM Targets - [Documentation] Get the list of VIM accounts in OSM. - ${rc} ${stdout}= Run And Return Rc And Output osm vim-list + ${rc} ${stdout}= Run and Return RC and Output osm vim-list Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + -Check For VIM Target - [Documentation] Check if a VIM account has been registered in OSM. +Check for VIM Target [Arguments] ${vim_name} - ${rc} ${stdout}= Run And Return Rc And Output osm vim-list | awk '{print $2}' | grep ${vim_name} - Log ${rc},${stdout} + + ${rc} ${stdout}= Run and Return RC and Output osm vim-list | awk '{print $2}' | grep ${vim_name} Should Not Be Equal As Strings ${stdout} ${vim_name} -Check For VIM Target Metric - [Documentation] Check in a loop if the metric of osm_vim_status is present in Prometheus for the VIM account in OSM. + +Check for VIM Target Metric [Arguments] ${vim_name} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + ${vim_account_id}= Get VIM Target ID ${vim_name} - Wait Until Keyword Succeeds ${VIM_STATUS_MAX_WAIT_TIME} ${VIM_STATUS_POL_TIME} Check If VIM Target Has Metric ${vim_account_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + Wait Until Keyword Succeeds ${vim_status_max_wait_time} ${vim_status_pol_time} Check If VIM Target Has Metric ${vim_account_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + -Check For VIM Target Status - [Documentation] Check in a loop if the value of the metric osm_vim_status in Prometheus for the VIM account is 1 (reachable). +Check for VIM Target Status [Arguments] ${vim_name} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + ${vim_account_id}= Get VIM Target ID ${vim_name} - Wait Until Keyword Succeeds ${VIM_STATUS_MAX_WAIT_TIME} ${VIM_STATUS_POL_TIME} Check If VIM Target Is Available ${vim_account_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + Wait Until Keyword Succeeds ${vim_status_max_wait_time} ${vim_status_pol_time} Check If VIM Target Is Available ${vim_account_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + Get VIM Target ID - [Documentation] Get from OSM the VIM account id associated to the VIM account name passed as parameter. [Arguments] ${vim_name} - ${rc} ${stdout}= Run And Return Rc And Output osm vim-list | grep " ${vim_name} " | awk '{print $4}' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + + ${rc} ${stdout}= Run and Return RC and Output osm vim-list | grep " ${vim_name} " | awk '{print $4}' + Should Be Equal As Integers ${rc} ${success_return_code} Should Not Be Equal As Strings ${stdout} ${EMPTY} msg=VIM Target '${vim_name}' not found values=false - RETURN ${stdout} + [Return] ${stdout} + Check VIM Target Operational State - [Documentation] Check if the VIM account in OSM is enabled. [Arguments] ${vim_name} - Wait Until Keyword Succeeds ${VIM_OPSTATE_MAX_WAIT_TIME} ${VIM_OPSTATE_POL_TIME} Check If VIM Target Is Enabled ${vim_name} + + Wait Until Keyword Succeeds ${vim_opstate_max_wait_time} ${vim_opstate_pol_time} Check If VIM Target Is Enabled ${vim_name} + Check If VIM Target Is Enabled - [Documentation] Check if the VIM account passed as argument is enabled in OSM (meaning that the RO could reach the VIM account). [Arguments] ${vim_name} - ${rc} ${stdout}= Run And Return Rc And Output osm vim-list | grep " ${vim_name} " | awk '{print $6}' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + + ${rc} ${stdout}= Run and Return RC and Output osm vim-list | grep " ${vim_name} " | awk '{print $6}' + Should Be Equal As Integers ${rc} ${success_return_code} Should Be Equal As Strings ${stdout} ENABLED msg=VIM Target '${vim_name}' is not enabled values=false + Check If VIM Target Is Available - [Documentation] Check if the value of the metric osm_vim_status in Prometheus for the VIM account is 1 (reachable). [Arguments] ${vim_account_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + ${metric}= Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} osm_vim_status vim_account_id=${vim_account_id} Should Be Equal As Integers ${metric} 1 msg=VIM Target '${vim_account_id}' is not active values=false + Check If VIM Target Has Metric - [Documentation] Check if the metric of osm_vim_status is present in Prometheus for the VIM account in OSM. [Arguments] ${vim_account_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + ${metric}= Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} osm_vim_status vim_account_id=${vim_account_id} Should Be True ${metric} <2 msg=VIM Target '${vim_account_id}' has no metric diff --git a/robot-systest/lib/vnf_lib.resource b/robot-systest/lib/vnf_lib.robot similarity index 57% rename from robot-systest/lib/vnf_lib.resource rename to robot-systest/lib/vnf_lib.robot index 2700135349d2ee5c4e4609008aa9babc3ea7029b..b7d6cc3e7a697a48761064d05590b06d78591084 100644 --- a/robot-systest/lib/vnf_lib.resource +++ b/robot-systest/lib/vnf_lib.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,67 +10,72 @@ # See the License for the specific language governing permissions and # limitations under the License. - -*** Settings *** -Documentation Library providing keywords for CRUD operations over VNF instances with OSM client. -Library OperatingSystem -Library String - - *** Variables *** -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Keywords *** Get Vnf List - [Documentation] Get the list of VNF instances and return it. - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-list 2>&1 + ${rc} ${stdout}= Run and Return RC and Output osm vnf-list 2>&1 Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + Get VNF VIM ID - [Documentation] Get the identifier of the first VDU of a VNF instance. Useful to get the id when a VNF has a single VDU. [Arguments] ${vnf_id} + Should Not Be Empty ${vnf_id} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-show ${vnf_id} --literal | yq -r '.vdur[]."vim-id"' + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq -r '.vdur[]."vim-id"' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - RETURN ${stdout} + Should Be Equal As Integers ${rc} ${success_return_code} + [Return] ${stdout} + + +Get VDU list from VNF + [Documentation] Return a list of the VDUr ids for a VNF -Get VDU List From VNF - [Documentation] Return a list of the VDU instance ids of a VNF instance [Arguments] ${vnf_id} + Should Not Be Empty ${vnf_id} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-show ${vnf_id} --literal | yq '.vdur[].id' + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[].id' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False @{vdur_ids}= Split String ${stdout} - RETURN @{vdur_ids} + [Return] @{vdur_ids} + Get VDU VIM Id [Documentation] Return the VIM VM ID for a VDU + [Arguments] ${vnf_id} ${vdur_id} + Should Not Be Empty ${vnf_id} - ${rc} ${vm_vim_id}= Run And Return Rc And Output osm vnf-show ${vnf_id} --literal | yq '.vdur[] | select(.id == "'${vdur_id}'")' | yq -r '."vim-id"' + ${rc} ${vm_vim_id}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[] | select(.id == "'${vdur_id}'")' | yq -r '."vim-id"' Log ${vm_vim_id} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${vm_vim_id} values=False - RETURN ${vm_vim_id} + Should Be Equal As Integers ${rc} ${success_return_code} msg=${vm_vim_id} values=False + [Return] ${vm_vim_id} + Get Vnf Vdur IPs [Documentation] Return a list with the IP addresses of the VDU records of a VNF instance. + [Arguments] ${vnf_id} + Should Not Be Empty ${vnf_id} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-show ${vnf_id} --literal | yq -r '.vdur[].interfaces[]."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - @{ip}= Split String ${stdout} - RETURN @{ip} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq -r '.vdur[].interfaces[]."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + @{ip} = Split String ${stdout} + [Return] @{ip} + Get Vdu Attribute [Documentation] Return an attribute from VDU records selected by count_index of a VNF instance. + [Arguments] ${vnf_id} ${attribute} ${count_index}=0 + Should Not Be Empty ${vnf_id} Should Not Be Empty ${attribute} - ${rc} ${stdout}= Run And Return Rc And Output osm vnf-show ${vnf_id} --literal | yq '.vdur[] | select(."count-index" == ${count_index})' | yq -r '."${attribute}"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - RETURN ${stdout} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[] | select(."count-index" == ${count_index})' | yq -r '."${attribute}"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + [Return] ${stdout} diff --git a/robot-systest/lib/vnfd_lib.resource b/robot-systest/lib/vnfd_lib.robot similarity index 72% rename from robot-systest/lib/vnfd_lib.resource rename to robot-systest/lib/vnfd_lib.robot index 2e4e2a667c965bf5ab0da1002330f561b85be16c..4433a4805fda3694b2587349b9c07401204e29e4 100644 --- a/robot-systest/lib/vnfd_lib.resource +++ b/robot-systest/lib/vnfd_lib.robot @@ -1,4 +1,6 @@ -*** Comments *** +# -*- coding: utf-8 -*- + +## # Copyright 2019 Tech Mahindra Limited # # All Rights Reserved. @@ -14,28 +16,30 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +## +## Change log: +# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-sep-2019 +## *** Settings *** -Documentation Library providing keywords for CRUD operations over VNFD / VNF packages with OSM client. -Library OperatingSystem Library String *** Variables *** -${SUCCESS_RETURN_CODE} 0 -${FAILURE_RETURN_CODE} 1 -${VNFD_DELETE_MAX_WAIT_TIME} 1min -${VNFD_DELETE_POL_TIME} 15sec +${success_return_code} 0 +${failure_return_code} 1 +${delete_max_wait_time} 1min +${delete_pol_time} 15sec *** Keywords *** Get VNFDs List - [Documentation] Get the list of VNF packages and log it. - ${rc} ${stdout}= Run And Return Rc And Output osm vnfpkg-list + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-list Log ${stdout} Log ${rc} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} + Create VNFD [Documentation] Onboards ("creates") a NF Package into OSM. @@ -51,32 +55,39 @@ Create VNFD ... - Relevant environment variables: ... - OVERRIDES: If the environment variable "OVERRIDES" exists, it prevails over the value in the argument. ... This is often more convenient to enforce the same behaviour for every test run in a given VIM. + [Arguments] ${vnfd_pkg} ${overrides}=${EMPTY} + # If env variable "OVERRIDES" exists, it prevails over the value in the argument ${overrides}= Get Environment Variable OVERRIDES default=${overrides} - # Proceeds with the onboarding with the appropriate arguments - ${rc} ${stdout}= Run And Return Rc And Output osm vnfpkg-create ${overrides} ${vnfd_pkg} + + # Proceedes with the onboarding with the appropriate arguments + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-create ${overrides} ${vnfd_pkg} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} ${lines}= Get Line Count ${stdout} ${last}= Evaluate ${lines} - 1 ${id}= Get Line ${stdout} ${last} - RETURN ${id} + [Return] ${id} + Update VNFD - [Documentation] Onboard ("Update") a NF Package into OSM. + [Documentation] Onboards ("Updates") a NF Package into OSM. ... - Parameters: ... - vnfd_pkg: Name (and location) of the NF Package ... - vnfd_name: Name of the existing NF Package + [Arguments] ${vnfd_pkg} ${vnfd_name} - # Proceeds with the onboarding with the appropriate arguments - ${rc} ${stdout}= Run And Return Rc And Output osm vnfpkg-update --content ${vnfd_pkg} ${vnfd_name} + + # Proceedes with the onboarding with the appropriate arguments + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-update --content ${vnfd_pkg} ${vnfd_name} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} ${lines}= Get Line Count ${stdout} ${last}= Evaluate ${lines} - 1 ${id}= Get Line ${stdout} ${last} - RETURN ${id} + [Return] ${id} + Create VNFD Overriding Fields [Documentation] Onboards ("creates") a NF Package into OSM. @@ -93,42 +104,46 @@ Create VNFD Overriding Fields ... - Relevant environment variables: ... - OVERRIDES: If the environment variable "OVERRIDES" exists, it prevails over the value in the argument. ... This is often more convenient to enforce the same behaviour for every test run in a given VIM. + [Arguments] ${vnfd_pkg} ${override_fields} ${overrides}=${EMPTY} + # If env variable "OVERRIDES" exists, it prevails over the value in the argument ${overrides}= Get Environment Variable OVERRIDES default=${overrides} - # Proceeds with the onboarding with the appropriate arguments - ${rc} ${stdout}= Run And Return Rc And Output osm vnfpkg-create ${overrides} ${vnfd_pkg} --override '${override_fields}' + + # Proceedes with the onboarding with the appropriate arguments + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-create ${overrides} ${vnfd_pkg} --override '${override_fields}' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Be Equal As Integers ${rc} ${success_return_code} ${lines}= Get Line Count ${stdout} ${last}= Evaluate ${lines} - 1 ${id}= Get Line ${stdout} ${last} - RETURN ${id} + [Return] ${id} + Delete VNFD - [Documentation] Delete a VNF package from OSM. [Arguments] ${vnfd_id} - ${rc} ${stdout}= Run And Return Rc And Output osm vnfpkg-delete ${vnfd_id} + + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-delete ${vnfd_id} Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Wait Until Keyword Succeeds ${VNFD_DELETE_MAX_WAIT_TIME} ${VNFD_DELETE_POL_TIME} Check For VNFD ${vnfd_id} + Should Be Equal As Integers ${rc} ${success_return_code} + WAIT UNTIL KEYWORD SUCCEEDS ${delete_max_wait_time} ${delete_pol_time} Check For VNFD ${vnfd_id} + Assert Failure Delete VNFD [Documentation] Deletes a NF Package that cannot be deleted and asserts the failure [Arguments] ${vnfd_id} - ${rc} ${stdout}= Run And Return Rc And Output osm vnfpkg-delete ${vnfd_id} + + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-delete ${vnfd_id} Log ${stdout} - Should Be Equal As Integers ${rc} ${FAILURE_RETURN_CODE} + Should Be Equal As Integers ${rc} ${failure_return_code} Should Contain ${stdout} 409 msg=Expected Conflict values=False - Wait Until Keyword Succeeds ${VNFD_DELETE_MAX_WAIT_TIME} ${VNFD_DELETE_POL_TIME} Check For VNFD ${vnfd_id} True + WAIT UNTIL KEYWORD SUCCEEDS ${delete_max_wait_time} ${delete_pol_time} Check For VNFD ${vnfd_id} True + Check For VNFD - [Documentation] Check that a VNF package exists in OSM. [Arguments] ${vnfd_id} ${exists}=False - ${rc} ${stdout}= Run And Return Rc And Output osm vnfpkg-list | awk '{print $2}' | grep ${vnfd_id} - Log ${rc},${stdout} - IF ${exists} - Should Be Equal As Strings ${stdout} ${vnfd_id} - ELSE - Should Not Be Equal As Strings ${stdout} ${vnfd_id} - END + + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-list | awk '{print $2}' | grep ${vnfd_id} + Run Keyword If ${exists} Should Be Equal As Strings ${stdout} ${vnfd_id} + ... ELSE Should Not Be Equal As Strings ${stdout} ${vnfd_id} + diff --git a/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py b/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py index 0a2e1e2557c8ae596bf9265a7d3e3407d5db5697..ea31ace18cdd728b426b4f675268ca7afa24bc3a 100644 --- a/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py +++ b/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py @@ -12,18 +12,9 @@ import os import yaml -from .get_clouds_yaml_info import get_values_from_cloud, get_vim_values +from get_clouds_yaml_info import get_values_from_cloud, get_vim_values -# Variables to be used by the testsuite -vim_account_type = "" -vim_name_prefix = "" -vim_user = "" -vim_password = "" -vim_auth_url = "" -vim_tenant = "" -vim_config = "" - # VIM configuration cloud_type = os.environ.get("CLOUD_TYPE", "openstack") if cloud_type == "openstack": diff --git a/robot-systest/resources/basic_08-disable_port_security_network_level_data.py b/robot-systest/resources/basic_08-disable_port_security_network_level_data.py index 97d3112876983410172c6a59fd2c720d6d81ae44..7fd16ba1de6966aeeced79f1399b3fe48def7fee 100644 --- a/robot-systest/resources/basic_08-disable_port_security_network_level_data.py +++ b/robot-systest/resources/basic_08-disable_port_security_network_level_data.py @@ -13,17 +13,12 @@ import os from pathlib import Path import yaml -from .get_clouds_yaml_info import get_values_from_cloud, get_vim_values +from get_clouds_yaml_info import get_values_from_cloud, get_vim_values -# Variables to be used by the testsuite +# VIM Configuration vim_account_type = "openstack" vim_name = "basic_08_vim_test" -vim_user = "" -vim_password = "" -vim_auth_url = "" -vim_tenant = "" -vim_config = "" # Get credentials from Openstack clouds file cloud, os_cloud = get_values_from_cloud() diff --git a/robot-systest/resources/basic_32-volume_with_different_az.py b/robot-systest/resources/basic_32-volume_with_different_az.py index ee2ba6a4a4b9dfff5d8e7838b696478044a7b65a..2a78e11c317604a086c10ec23432dd9dc2ebf8ee 100644 --- a/robot-systest/resources/basic_32-volume_with_different_az.py +++ b/robot-systest/resources/basic_32-volume_with_different_az.py @@ -12,7 +12,7 @@ import os import yaml -from .get_clouds_yaml_info import get_values_from_cloud, get_vim_values +from get_clouds_yaml_info import get_values_from_cloud, get_vim_values # VIM configuration diff --git a/robot-systest/run_test.sh b/robot-systest/run_test.sh index e96e17aa4a6e4d752b80cfd7161e2b7c9767d70c..1ebe21f3b3787388080e1fe04bcabc132a61a20f 100755 --- a/robot-systest/run_test.sh +++ b/robot-systest/run_test.sh @@ -228,7 +228,7 @@ if [ "$RUN_CONFORMANCE_TESTS" = true ] ; then fi if [[ -n "${TEST}" ]]; then - robot -d ${ROBOT_DEVOPS_FOLDER}/reports --tagstatinclude "cluster_*" -i ${TEST} ${ROBOT_DEVOPS_FOLDER}/testsuite/ + robot -d ${ROBOT_DEVOPS_FOLDER}/reports --tagstatinclude "cluster-*" -i ${TEST} ${ROBOT_DEVOPS_FOLDER}/testsuite/ else echo "No test was provided. Exiting..." fi diff --git a/robot-systest/testsuite/basic_01-crud_operations_on_vim_targets.robot b/robot-systest/testsuite/basic_01-crud_operations_on_vim_targets.robot index 542292a6a91d769af0b8ceca30b0d71ce4146dc3..cdfe0bdda2abc9ff82deaa99bc23e112b8b24d87 100644 --- a/robot-systest/testsuite/basic_01-crud_operations_on_vim_targets.robot +++ b/robot-systest/testsuite/basic_01-crud_operations_on_vim_targets.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,17 +10,16 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-01] CRUD operations on VIM targets. ... All tests will be performed over an Openstack VIM, and the credentials will be loaded from clouds.yaml file. -Resource ../lib/vim_lib.resource -Resource ../lib/prometheus_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot -Variables ../resources/basic_01-crud_operations_on_vim_targets_data.py +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_01-crud_operations_on_vim_targets_data.py -Test Tags basic_01 cluster_main daily regression +Force Tags basic_01 cluster_main daily regression Suite Setup Run Keyword And Ignore Error Suite Preparation @@ -30,46 +28,53 @@ Suite Setup Run Keyword And Ignore Error Suite Preparation Create VIM Target Basic [Documentation] Create a VIM Target only with the mandatory parameters. ... Checks the status of the VIM in Prometheus after it creation. - Pass Execution If ${VIM_ACCOUNT_TYPE} != 'openstack' Not applicable for ${VIM_ACCOUNT_TYPE} VIM + + Pass Execution If '${vim_account_type}' != 'openstack' Not applicable for ${vim_account_type} VIM ${rand}= Generate Random String 6 [NUMBERS] - ${VIM_NAME}= Catenate SEPARATOR=_ ${vim_name_prefix} ${rand} - Set Suite Variable ${VIM_NAME} - ${CREATED_VIM_ACCOUNT_ID}= Create VIM Target ${VIM_NAME} ${VIM_USER} ${VIM_PASSWORD} ${VIM_AUTH_URL} ${VIM_TENANT} ${VIM_ACCOUNT_TYPE} - Set Suite Variable ${CREATED_VIM_ACCOUNT_ID} - Check VIM Target Operational State ${VIM_NAME} - ${stdout}= Check For VIM Target Metric ${VIM_NAME} ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} - Log ${stdout} + ${vim_name}= Catenate SEPARATOR=_ ${vim_name_prefix} ${rand} + Set Suite Variable ${vim_name} + ${created_vim_account_id}= Create VIM Target ${vim_name} ${vim_user} ${vim_password} ${vim_auth_url} ${vim_tenant} ${vim_account_type} + Set Suite Variable ${created_vim_account_id} + Check VIM Target Operational State ${vim_name} + ${stdout}= Check for VIM Target Metric ${vim_name} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + Delete VIM Target By Name [Documentation] Delete the VIM Target created in previous test-case by its name. ... Checks whether the VIM Target was created or not before perform the deletion. [Tags] cleanup - Pass Execution If ${VIM_ACCOUNT_TYPE} != 'openstack' Not applicable for ${VIM_ACCOUNT_TYPE} VIM - ${vim_account_id}= Get VIM Target ID ${VIM_NAME} - Should Be Equal As Strings ${vim_account_id} ${CREATED_VIM_ACCOUNT_ID} - Delete VIM Target ${VIM_NAME} + + Pass Execution If '${vim_account_type}' != 'openstack' Not applicable for ${vim_account_type} VIM + ${vim_account_id}= Get VIM Target ID ${vim_name} + Should Be Equal As Strings ${vim_account_id} ${created_vim_account_id} + Delete VIM Target ${vim_name} + Create VIM Target With Extra Config [Documentation] Create a VIM Target using the extra parameter 'config'. ... Checks the status of the VIM in Prometheus after it creation. + ${rand}= Generate Random String 6 [NUMBERS] - ${VIM_NAME}= Catenate SEPARATOR=_ ${vim_name_prefix} ${rand} - Set Suite Variable ${VIM_NAME} - ${CREATED_VIM_ACCOUNT_ID}= Create VIM Target ${VIM_NAME} ${VIM_USER} ${VIM_PASSWORD} ${VIM_AUTH_URL} ${VIM_TENANT} ${VIM_ACCOUNT_TYPE} config=${vim_config} - Set Suite Variable ${CREATED_VIM_ACCOUNT_ID} - Check VIM Target Operational State ${VIM_NAME} - Check For VIM Target Status ${VIM_NAME} ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} + ${vim_name}= Catenate SEPARATOR=_ ${vim_name_prefix} ${rand} + Set Suite Variable ${vim_name} + ${created_vim_account_id}= Create VIM Target ${vim_name} ${vim_user} ${vim_password} ${vim_auth_url} ${vim_tenant} ${vim_account_type} config=${vim_config} + Set Suite Variable ${created_vim_account_id} + Check VIM Target Operational State ${vim_name} + Check for VIM Target Status ${vim_name} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + Delete VIM Target By ID [Documentation] Delete the VIM Target created in previous test-case by its ID. ... Checks whether the VIM Target was created or not before perform the deletion. [Tags] cleanup - ${vim_account_id}= Get VIM Target ID ${VIM_NAME} - Should Be Equal As Strings ${vim_account_id} ${CREATED_VIM_ACCOUNT_ID} + + ${vim_account_id}= Get VIM Target ID ${vim_name} + Should Be Equal As Strings ${vim_account_id} ${created_vim_account_id} Delete VIM Target ${vim_account_id} *** Keywords *** Suite Preparation [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables + Set Testsuite Prometheus Variables diff --git a/robot-systest/testsuite/basic_05-instantiation_parameters_in_cloud_init.robot b/robot-systest/testsuite/basic_05-instantiation_parameters_in_cloud_init.robot index da8bfb797e5bc8b36cd91e75fd97476010e9a58b..82b3ba03fdbba2692b986a279d06f0b01138be1c 100644 --- a/robot-systest/testsuite/basic_05-instantiation_parameters_in_cloud_init.robot +++ b/robot-systest/testsuite/basic_05-instantiation_parameters_in_cloud_init.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,85 +10,97 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-05] Instantiation parameters in cloud-init. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_05 cluster_main daily regression azure +Force Tags basic_05 cluster_main daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} ubuntu_cloudinit_vnf -${VNFD_NAME} ubuntu_cloudinit-vnf -${NSD_PKG} ubuntu_cloudinit_ns -${NSD_NAME} ubuntu_cloudinit-ns +${vnfd_pkg} ubuntu_cloudinit_vnf +${vnfd_name} ubuntu_cloudinit-vnf +${nsd_pkg} ubuntu_cloudinit_ns +${nsd_name} ubuntu_cloudinit-ns # NS instance name and configuration -${NS_NAME} basic_05_instantiation_params_cloud_init -${VNF_MEMBER_INDEX} vnf -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ], additionalParamsForVnf: [ { member-vnf-index: "${VNF_MEMBER_INDEX}", additionalParams: { password: "${NEW_PASSWORD}" } } ] } +${ns_name} basic_05_instantiation_params_cloud_init +${vnf_member_index} vnf +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ], additionalParamsForVnf: [ { member-vnf-index: "${vnf_member_index}", additionalParams: { password: "${new_password}" } } ] } # SSH user and password -${USERNAME} ubuntu -${NEW_PASSWORD} newpassword +${username} ubuntu +${new_password} newpassword *** Test Cases *** Create Cloudinit VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Cloudinit NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Cloudinit Network Service Using Instantiation Parameters [Documentation] Instantiates the NS using the instantiation parameter 'additionalParamsForVnf' to change the password of the default user. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${EMPTY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${EMPTY} + Set Suite Variable ${ns_id} ${id} + Get Management Ip Addresses - [Documentation] Retrieve VNF mgmt IP address from OSM. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + Test SSH Access With The New Password [Documentation] Test SSH access with the new password configured via cloud-init. - Variable Should Exist ${VNF_IP_ADDR} msg=IP address of the management VNF is not available + + Variable Should Exist ${vnf_ip_addr} msg=IP address of the management VNF is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_IP_ADDR} ${USERNAME} ${NEW_PASSWORD} ${EMPTY} + Test SSH Connection ${vnf_ip_addr} ${username} ${new_password} ${EMPTY} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_06-vnf_with_charm.robot b/robot-systest/testsuite/basic_06-vnf_with_charm.robot index 109046e4fa509a7e6d7090a34b5b035ce5f84a2a..024fb1b8bee73a727fc644af7fe8dd69ea0ba05d 100644 --- a/robot-systest/testsuite/basic_06-vnf_with_charm.robot +++ b/robot-systest/testsuite/basic_06-vnf_with_charm.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,131 +10,145 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-06] VNF with Charm. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/juju_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/juju_lib.robot -Test Tags basic_06 cluster_ee_config regression azure +Force Tags basic_06 cluster_ee_config regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/ha_proxy_charm_vnf -${VNFD_NAME} ha_proxy_charm-vnf -${NSD_PKG} charm-packages/ha_proxy_charm_ns -${NSD_NAME} ha_proxy_charm-ns +${vnfd_pkg} charm-packages/ha_proxy_charm_vnf +${vnfd_name} ha_proxy_charm-vnf +${nsd_pkg} charm-packages/ha_proxy_charm_ns +${nsd_name} ha_proxy_charm-ns # NS instance name and configuration -${NS_NAME} basic_06_charm_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_06_charm_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} - -${ACTION_NAME} touch -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME_1} /home/ubuntu/mytouch1 -${DAY_2_FILE_NAME_2} /home/ubuntu/mytouch2 -${NS_TIMEOUT} 15min +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} + +${action_name} touch +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name_1} /home/ubuntu/mytouch1 +${day_2_file_name_2} /home/ubuntu/mytouch2 +${ns_timeout} 15min # VNF profile id, execution environment name to check VNF level charm naming -${VNF_PROFILE_ID} vnf1 -${EE_NAME} simple-ee +${vnf_profile_id} vnf1 +${ee_name} simple-ee *** Test Cases *** Create Charm VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Charm Network Service - [Documentation] Instantiates the NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} - Set Suite Variable ${MODEL_NAME} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Set Suite Variable ${model_name} ${id} + Check VNF Charm Application Name - [Documentation] Checks that the charm application name meets the expected length - ${vnf_charm_app_name}= Get Application Name VNF Level Charm %{OSM_HOSTNAME} ${USERNAME} ${PASSWORD} %{OSM_RSA_FILE} ${MODEL_NAME} ${VNF_PROFILE_ID} ${EE_NAME} + + ${vnf_charm_app_name}= Get Application Name VNF Level Charm %{OSM_HOSTNAME} ${username} ${password} %{OSM_RSA_FILE} ${model_name} ${vnf_profile_id} ${ee_name} ${length}= Get Length ${vnf_charm_app_name} Should Be True ${length} <50 + Get Management Ip Addresses - [Documentation] Get the mgmt IP addresses of both VNF of the NS. - ${ip_addr_1}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} + + ${ip_addr_1} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} Log ${ip_addr_1} - Set Suite Variable ${VNF_1_IP_ADDR} ${ip_addr_1} - ${ip_addr_2}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} + Set Suite Variable ${vnf_1_ip_addr} ${ip_addr_1} + ${ip_addr_2} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} Log ${ip_addr_2} - Set Suite Variable ${VNF_2_IP_ADDR} ${ip_addr_2} + Set Suite Variable ${vnf_2_ip_addr} ${ip_addr_2} + Test SSH Access - [Documentation] Check that both VNF are accessible via SSH in their mgmt IP addresses. - Variable Should Exist ${VNF_1_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${VNF_2_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_2}' is not available + + Variable Should Exist ${vnf_1_ip_addr} msg=IP address of the management VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${vnf_2_ip_addr} msg=IP address of the management VNF '${vnf_member_index_2}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_1_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_2_ip_addr} ${username} ${password} ${privatekey} + Check Remote Files Created Via Day 1 Operations [Documentation] The Charm VNF has a Day 1 operation that creates a file named ${day_1_file_name}. ... This test checks whether that files have been created or not. - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Execute Day 2 Operations [Documentation] Performs one Day 2 operation per VNF that creates a new file. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id_1}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX_1} filename=${DAY_2_FILE_NAME_1} - Log ${ns_op_id_1} - ${ns_op_id_2}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX_2} filename=${DAY_2_FILE_NAME_2} - Log ${ns_op_id_2} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id_1}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index_1} filename=${day_2_file_name_1} + ${ns_op_id_2}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index_2} filename=${day_2_file_name_2} + Check Remote Files Created Via Day 2 Operations [Documentation] Check whether the files created in the previous test via Day 2 operations exist or not. - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME_1} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME_2} + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name_1} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name_2} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_07-secure_key_management.robot b/robot-systest/testsuite/basic_07-secure_key_management.robot index 506e2a3016f3e7adab42ff3986ad811c8055b410..de65d383724c00e08d731ea71c9f9232aeae75b4 100644 --- a/robot-systest/testsuite/basic_07-secure_key_management.robot +++ b/robot-systest/testsuite/basic_07-secure_key_management.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,120 +10,126 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-07] Secure key management. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_07 cluster_ee_config regression azure +Force Tags basic_07 cluster_ee_config regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/nopasswd_proxy_charm_vnf -${VNFD_NAME} nopasswd_proxy_charm-vnf -${NSD_PKG} charm-packages/nopasswd_proxy_charm_ns -${NSD_NAME} nopasswd_proxy_charm-ns +${vnfd_pkg} charm-packages/nopasswd_proxy_charm_vnf +${vnfd_name} nopasswd_proxy_charm-vnf +${nsd_pkg} charm-packages/nopasswd_proxy_charm_ns +${nsd_name} nopasswd_proxy_charm-ns # NS instance name and configuration -${NS_NAME} basic_07_secure_key_management -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} basic_07_secure_key_management +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min # SSH username and passwod -${USERNAME} ubuntu -${PASSWORD} osm4u +${username} ubuntu +${password} osm4u -${ACTION_NAME} touch -${VNF_MEMBER_INDEX} vnf1 -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME} /home/ubuntu/mytouch1 +${action_name} touch +${vnf_member_index} vnf1 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name} /home/ubuntu/mytouch1 *** Test Cases *** Create Nopasswd Charm VNF Descriptor - [Documentation] Upload VNF package for the testsuite. [Tags] prepare - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Nopasswd Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. [Tags] prepare - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Nopasswd Charm Network Service - [Documentation] Instantiate NS for the testsuite. [Tags] prepare - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${EMPTY} ${NS_TIMEOUT} - Log ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${EMPTY} ${ns_timeout} Get Ns Id - [Documentation] Get NS instance id. [Tags] verify - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} Get Management Ip Addresses - [Documentation] Get the mgmt IP address of the VNF of the NS. [Tags] verify - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + Test SSH Access - [Documentation] Check that the VNF is accessible via SSH in its mgmt IP address. [Tags] verify - Variable Should Exist ${VNF_IP_ADDR} msg=IP address of the management VNF is not available + Variable Should Exist ${vnf_ip_addr} msg=IP address of the management VNF is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${EMPTY} + Test SSH Connection ${vnf_ip_addr} ${username} ${password} ${EMPTY} + Check Remote Files Created Via Day 1 Operations + [Tags] verify [Documentation] The Nopasswd VNF has a Day 1 operation that creates a file named ${day_1_file_name} and performs it without password. ... This test checks whether that files have been created or not. - [Tags] verify - Check If Remote File Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${EMPTY} ${DAY_1_FILE_NAME} + + Check If remote File Exists ${vnf_ip_addr} ${username} ${password} ${EMPTY} ${day_1_file_name} + Execute Day 2 Operations - [Documentation] Performs one Day 2 operation that creates a new file, this action is executed without password too. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX} filename=${DAY_2_FILE_NAME} - Log ${ns_op_id} + [Documentation] Performs one Day 2 operation that creates a new file, this action is executed without password too. + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index} filename=${day_2_file_name} + Check Remote Files Created Via Day 2 Operations - [Documentation] Check whether the file created in the previous test via Day 2 operation exists or not. [Tags] verify - Check If Remote File Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${EMPTY} ${DAY_2_FILE_NAME} + [Documentation] Check whether the file created in the previous test via Day 2 operation exists or not. + + Check If remote File Exists ${vnf_ip_addr} ${username} ${password} ${EMPTY} ${day_2_file_name} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_08-disable_port_security_network_level.robot b/robot-systest/testsuite/basic_08-disable_port_security_network_level.robot index 371dddea6fb96530bdd2bfe90d8a6dda00c839bc..11effd9e0f3b20f1de3f3f881c139da8127fd301 100644 --- a/robot-systest/testsuite/basic_08-disable_port_security_network_level.robot +++ b/robot-systest/testsuite/basic_08-disable_port_security_network_level.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-08] Disable port security at network level. @@ -19,81 +17,87 @@ Library OperatingSystem Library String Library Collections -Resource ../lib/vim_lib.resource -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/prometheus_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot -Variables ../resources/basic_08-disable_port_security_network_level_data.py +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_08-disable_port_security_network_level_data.py -Test Tags basic_08 cluster_main daily regression +Force Tags basic_08 cluster_main daily regression Suite Setup Run Keyword And Ignore Error Suite Preparation Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${PORT_DISABLED_MSG} port_security_enabled: false - +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${port_disabled_msg} port_security_enabled: false *** Test Cases *** Create VIM With Port Security Disabled - [Documentation] Register an Opentack VIM with port security disabled, so that all ports created from OSM have port security disabled - ... (no firewall). + ${created_vim_account_id}= Create VIM Target ${vim_name} ${vim_user} ${vim_password} ${vim_auth_url} ${vim_tenant} ${vim_account_type} config=${vim_config} - Log ${created_vim_account_id} - Check For VIM Target Status ${VIM_NAME} ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} + Check for VIM Target Status ${vim_name} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} ${VIM_NAME} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} ${vim_name} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Check Port Security Is Disabled - [Documentation] Check that there are ports/interfaces in the VDU of the VNF of the NS whose port security was disabled. - ${rc} ${disabled_ports}= Run And Return RC And Output osm ns-show ${NS_NAME} --literal | grep -c '${PORT_DISABLED_MSG}' - Log ${rc},${disabled_ports} - IF ${disabled_ports} <= 0 Fail msg=Found '${disabled_ports}' matches for '${PORT_DISABLED_MSG}' + + ${rc} ${disabled_ports}= Run and Return RC and Output osm ns-show ${ns_name} --literal | grep -c '${port_disabled_msg}' + Run Keyword If ${disabled_ports} <= 0 Fail msg=Found '${disabled_ports}' matches for '${port_disabled_msg}' + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} + Delete VIM - [Documentation] Delete VIM from OSM. [Tags] cleanup - Delete VIM Target ${VIM_NAME} + + Delete VIM Target ${vim_name} *** Keywords *** Suite Preparation [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables + Set Testsuite Prometheus Variables + Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} - Run Keyword If Any Tests Failed Delete VIM Target ${VIM_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + Run Keyword If Any Tests Failed Delete VIM Target ${vim_name} diff --git a/robot-systest/testsuite/basic_09-manual_vdu_scaling.robot b/robot-systest/testsuite/basic_09-manual_vdu_scaling.robot index 1f76c71c8be97b02bd816b429f0fe9a2ff79a889..06b5924c2203e2223701b739b1cf2fd1b32aaa6b 100644 --- a/robot-systest/testsuite/basic_09-manual_vdu_scaling.robot +++ b/robot-systest/testsuite/basic_09-manual_vdu_scaling.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-09] Manual VNF/VDU Scaling. @@ -19,124 +17,130 @@ Library OperatingSystem Library String Library Collections -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_09 cluster_main daily regression azure +Force Tags basic_09 cluster_main daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_metrics_vnf -${VNFD_NAME} hackfest_basic_metrics-vnf -${NSD_PKG} hackfest_basic_metrics_ns -${NSD_NAME} hackfest_basic-ns-metrics +${vnfd_pkg} hackfest_basic_metrics_vnf +${vnfd_name} hackfest_basic_metrics-vnf +${nsd_pkg} hackfest_basic_metrics_ns +${nsd_name} hackfest_basic-ns-metrics # NS instance name and configuration -${NS_NAME} basic_09_manual_scaling_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${SCALING_GROUP} vdu_autoscale -${VNF_MEMBER_INDEX} vnf +${ns_name} basic_09_manual_scaling_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${scaling_group} vdu_autoscale +${vnf_member_index} vnf # SSH public key file -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub +${publickey} %{HOME}/.ssh/id_rsa.pub *** Test Cases *** Create Scaling VNF Descriptor - [Documentation] Upload VNF package for the testsuite. [Tags] prepare - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Scaling NS Descriptor - [Documentation] Upload NS package for the testsuite. [Tags] prepare - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Scaling Network Service - [Documentation] Instantiate NS for the testsuite. [Tags] prepare - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Log ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} Get Ns Id - [Documentation] Retrieve NS instance id to be used later on. [Tags] verify - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} Get Vnf Id - [Documentation] Retrieve VNF instance id to be used later on. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] + Set Suite Variable ${vnf_id} ${vnfr_list}[0] + Get Vdus Before Scale Out - [Documentation] Check the number of VDUs instances before the manual scaling. [Tags] verify - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + [Documentation] Get the number of VDU records before the manual scaling. + + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - Set Suite Variable ${INITIAL_VDUR_COUNT} ${vdurs} + Set Suite Variable ${initial_vdur_count} ${vdurs} + Perform Manual Vdu Scale Out - [Documentation] Perform a manual scale-out operation of the VNF. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_OUT - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_OUT + Check Vdus After Scale Out - [Documentation] Check whether there is one more VDU after scaling out. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + [Documentation] Check whether there is one more VDU after scaling or not. + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} != ${INITIAL_VDUR_COUNT} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + Run Keyword If ${vdurs} != ${initial_vdur_count} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + Perform Manual Vdu Scale In - [Documentation] Perform a manual scale-in operation of the VNF. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_IN - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_IN + Check Vdus After Scaling In - [Documentation] Check whether there is one less VDU after scaling in. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + [Documentation] Check whether there is one less VDU after scaling or not. + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} != ${INITIAL_VDUR_COUNT} Fail msg=There is the same number of VDU records in the VNF after Scale In + Run Keyword If ${vdurs} != ${initial_vdur_count} Fail msg=There is the same number of VDU records in the VNF after Scale In + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_11-native_charms.robot b/robot-systest/testsuite/basic_11-native_charms.robot index 07043239269de30eac768d862bed377f799f8376..fe8d3be44fe3a613f0ea33c7005be98141a2cf41 100644 --- a/robot-systest/testsuite/basic_11-native_charms.robot +++ b/robot-systest/testsuite/basic_11-native_charms.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,105 +10,117 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-11] Native Charms Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_11 cluster_ee_config cluster_relations regression azure +Force Tags basic_11 cluster_ee_config cluster_relations regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/native_charm_vnf -${VNFD_NAME} native_charm-vnf -${NSD_PKG} charm-packages/native_charm_ns -${NSD_NAME} native_charm-ns +${vnfd_pkg} charm-packages/native_charm_vnf +${vnfd_name} native_charm-vnf +${nsd_pkg} charm-packages/native_charm_ns +${nsd_name} native_charm-ns # NS instance name and configuration -${NS_NAME} basic_11_native_charms -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} basic_11_native_charms +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${ACTION_NAME} touch -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME_1} /home/ubuntu/mytouch1 -${DAY_2_FILE_NAME_2} /home/ubuntu/mytouch2 +${action_name} touch +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name_1} /home/ubuntu/mytouch1 +${day_2_file_name_2} /home/ubuntu/mytouch2 *** Test Cases *** Create Charm VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Charm Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Get Management Ip Addresses - [Documentation] Get the mgmt IP address of the two VNF of the NS. - ${ip_addr_1}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} + + ${ip_addr_1} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} Log ${ip_addr_1} - Set Suite Variable ${VNF_1_IP_ADDR} ${ip_addr_1} - ${ip_addr_2}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} + Set Suite Variable ${vnf_1_ip_addr} ${ip_addr_1} + ${ip_addr_2} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} Log ${ip_addr_2} - Set Suite Variable ${VNF_2_IP_ADDR} ${ip_addr_2} + Set Suite Variable ${vnf_2_ip_addr} ${ip_addr_2} + Test SSH Access - [Documentation] Check that both VNF are accessible via SSH in their respective mgmt IP address. - Variable Should Exist ${VNF_1_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${VNF_2_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_2}' is not available + + Variable Should Exist ${vnf_1_ip_addr} msg=IP address of the management VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${vnf_2_ip_addr} msg=IP address of the management VNF '${vnf_member_index_2}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_1_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_2_ip_addr} ${username} ${password} ${privatekey} + Check Remote Files Created Via Day 1 Operations [Documentation] The Charm VNF has a Day 1 operation that creates a file named ${day_1_file_name}. ... This test checks whether that files have been created or not. - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_12-ns_primitives.robot b/robot-systest/testsuite/basic_12-ns_primitives.robot index ee1cb31df3364088b6ed07e52874fadc69518358..c4b4a370e68e9701c6da72025c00ee125c08eae1 100644 --- a/robot-systest/testsuite/basic_12-ns_primitives.robot +++ b/robot-systest/testsuite/basic_12-ns_primitives.robot @@ -1,4 +1,3 @@ -*** Comments *** # Copyright 2020 Canonical Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,7 +11,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-12] NS Primitives @@ -22,119 +20,131 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/package_lib.resource -Resource ../lib/juju_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/package_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/juju_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_12 cluster_ee_config regression azure +Force Tags basic_12 cluster_ee_config regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG1} nscharm_policy_vnf -${VNFD_PKG2} nscharm_user_vnf -${VNFD_NAME1} nscharm-policy-vnf -${VNFD_NAME2} nscharm-user-vnf -${NSD_PKG} nscharm_ns -${NEW_NSD_PKG} new_nscharm_ns -${NSD_NAME} nscharm-ns -${NSD_FILE} nscharm_nsd.yaml +${vnfd_pkg1} nscharm_policy_vnf +${vnfd_pkg2} nscharm_user_vnf +${vnfd_name1} nscharm-policy-vnf +${vnfd_name2} nscharm-user-vnf +${nsd_pkg} nscharm_ns +${new_nsd_pkg} new_nscharm_ns +${nsd_name} nscharm-ns +${nsd_file} nscharm_nsd.yaml # NS instance name and configuration -${NS_NAME} test_nscharm -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} test_nscharm +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min -${OLD_JUJU_PASSWORD} a5611fc6452349cc6e45705d34c501d4 -${PUBLICKEY} ${EMPTY} -${SUCCESS_RETURN_CODE} 0 +${old_juju_password} a5611fc6452349cc6e45705d34c501d4 +${publickey} ${EMPTY} +${success_return_code} 0 # VDU profile id, execution environment name to check vdu level charm naming structure -${VDU_PROFILE_ID} PolicyVM -${EE_NAME} vnf-policy +${vdu_profile_id} PolicyVM +${ee_name} vnf-policy # # Username and SSH private key for accessing OSM host -${PRIVATEKEY} %{OSM_RSA_FILE} -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${privatekey} %{OSM_RSA_FILE} +${username} ubuntu +${password} ${EMPTY} # Charm name to check ns level charm naming structure -${CHARM_NAME} ns +${charm_name} ns *** Test Cases *** Change Juju Password [Documentation] NS package needs to be updated with the Juju credentials for your OSM installation - ${rc} ${stdout}= Run And Return RC And Output cp -r '%{PACKAGES_FOLDER}/${NSD_PKG}' '%{PACKAGES_FOLDER}/${NEW_NSD_PKG}' - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - ${nsd_yaml}= OperatingSystem.Get File %{PACKAGES_FOLDER}/${NEW_NSD_PKG}/${NSD_FILE} - ${changed_nsd_yaml}= Replace String ${nsd_yaml} ${OLD_JUJU_PASSWORD} %{JUJU_PASSWORD} - Create File %{PACKAGES_FOLDER}/${NEW_NSD_PKG}/${NSD_FILE} ${changed_nsd_yaml} + + ${rc} ${stdout}= Run and Return RC and Output cp -r '%{PACKAGES_FOLDER}/${nsd_pkg}' '%{PACKAGES_FOLDER}/${new_nsd_pkg}' + Should Be Equal As Integers ${rc} ${success_return_code} + ${nsd_yaml}= OperatingSystem.Get File %{PACKAGES_FOLDER}/${new_nsd_pkg}/${nsd_file} + ${changed_nsd_yaml}= Replace String ${nsd_yaml} ${old_juju_password} %{JUJU_PASSWORD} + Create File %{PACKAGES_FOLDER}/${new_nsd_pkg}/${nsd_file} ${changed_nsd_yaml} + Upload Vnfds - [Documentation] Upload VNF packages for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG1}' - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG2}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg1}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg2}' + Upload Nsd - [Documentation] Upload NS package for the testsuite. - Create NSD %{PACKAGES_FOLDER}/${NEW_NSD_PKG} + + Create NSD %{PACKAGES_FOLDER}/${new_nsd_pkg}/ + Instantiate NS - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ns_launch_max_wait_time=${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} - Set Suite Variable ${MODEL_NAME} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ns_launch_max_wait_time=${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Set Suite Variable ${model_name} ${id} + Check NS Charm Application Name - [Documentation] Check that the NS charm has the right length. - ${ns_charm_app_name}= Get Application Name NS Level Charm %{OSM_HOSTNAME} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${MODEL_NAME} ${CHARM_NAME} + + ${ns_charm_app_name}= Get Application Name NS Level Charm %{OSM_HOSTNAME} ${username} ${password} ${privatekey} ${model_name} ${charm_name} ${length}= Get Length ${ns_charm_app_name} Should Be True ${length} <50 + Check VDU Charm Application Name - [Documentation] Check that the VDU charm has the right length. - ${vdu_charm_app_name}= Get Application Name VDU Level Charm %{OSM_HOSTNAME} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${MODEL_NAME} ${VDU_PROFILE_ID} ${EE_NAME} + + ${vdu_charm_app_name}= Get Application Name VDU Level Charm %{OSM_HOSTNAME} ${username} ${password} ${privatekey} ${model_name} ${vdu_profile_id} ${ee_name} ${length}= Get Length ${vdu_charm_app_name} Should Be True ${length} <50 # TODO: Check Initial Config Primitives Status Delete NS - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} - Delete Temporary Descriptor Folder '%{PACKAGES_FOLDER}/${NEW_NSD_PKG}' + + Delete NSD ${nsd_name} + Delete Temporary Descriptor Folder '%{PACKAGES_FOLDER}/${new_nsd_pkg}' + Delete VNF Descriptors - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME1} - Delete VNFD ${VNFD_NAME2} + + Delete VNFD ${vnfd_name1} + Delete VNFD ${vnfd_name2} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor and instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME1} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME2} - Delete Temporary Descriptor Folder '%{PACKAGES_FOLDER}/${NEW_NSD_PKG}' + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name1} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name2} + Delete Temporary Descriptor Folder '%{PACKAGES_FOLDER}/${new_nsd_pkg}' + Delete Temporary Descriptor Folder [Documentation] Removes the temporary package folder created for the test [Arguments] ${folder_name} - ${rc} ${stdout}= Run And Return RC And Output rm -rf '${folder_name}' - Log ${rc},${stdout} + + ${rc} ${stdout}= Run and Return RC and Output rm -rf '${folder_name}' + Log ${stdout} + + diff --git a/robot-systest/testsuite/basic_13-ns_relations.robot b/robot-systest/testsuite/basic_13-ns_relations.robot index a405c6441726f5a40eba747747ac7bc5225c43b3..e339446a2006b03107788c5eaf23a405b6676b76 100644 --- a/robot-systest/testsuite/basic_13-ns_relations.robot +++ b/robot-systest/testsuite/basic_13-ns_relations.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,96 +10,106 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-13] NS Relations Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_13 cluster_ee_config cluster_relations regression azure +Force Tags basic_13 cluster_ee_config cluster_relations regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG1} charm-packages/ns_relations_provides_vnf -${VNFD_PKG2} charm-packages/ns_relations_requires_vnf -${VNFD_NAME1} ns_relations_provides-vnf -${VNFD_NAME2} ns_relations_requires-vnf -${NSD_PKG} charm-packages/ns_relations_ns -${NSD_NAME} ns_relations-ns +${vnfd_pkg1} charm-packages/ns_relations_provides_vnf +${vnfd_pkg2} charm-packages/ns_relations_requires_vnf +${vnfd_name1} ns_relations_provides-vnf +${vnfd_name2} ns_relations_requires-vnf +${nsd_pkg} charm-packages/ns_relations_ns +${nsd_name} ns_relations-ns # NS instance name and configuration -${NS_NAME} basic_13_ns_relations_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} basic_13_ns_relations_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${ACTION_NAME} touch -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME_1} /home/ubuntu/mytouch1 -${DAY_2_FILE_NAME_2} /home/ubuntu/mytouch2 +${action_name} touch +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name_1} /home/ubuntu/mytouch1 +${day_2_file_name_2} /home/ubuntu/mytouch2 *** Test Cases *** Create Charm VNF Descriptor Provides - [Documentation] Upload VNF package for the testsuite with a charm providing a relation. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG1}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg1}' + Create Charm VNF Descriptor Requires - [Documentation] Upload VNF package for the testsuite with a charm requiring a relation. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG2}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg2}' + Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Charm Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} -# TODO: Check juju status for relations + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + + +# TODO Check juju status for relations + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor Provides - [Documentation] Delete first VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME1} + + Delete VNFD ${vnfd_name1} + Delete VNF Descriptor Requires - [Documentation] Delete second VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME2} + + Delete VNFD ${vnfd_name2} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME1} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME2} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_14-vnf_relations.robot b/robot-systest/testsuite/basic_14-vnf_relations.robot index ed4b1678b6859c50fe747efc98e63d1b3ace9d20..dbe232dcfec27e42aecd4965ba6a484f652a67cc 100644 --- a/robot-systest/testsuite/basic_14-vnf_relations.robot +++ b/robot-systest/testsuite/basic_14-vnf_relations.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,74 +10,83 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-14] VNF Relations Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_14 cluster_ee_config cluster_relations regression azure +Force Tags basic_14 cluster_ee_config cluster_relations regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/vnf_relations_vnf -${VNFD_NAME} vnf_relations-vnf -${NSD_PKG} charm-packages/vnf_relations_ns -${NSD_NAME} vnf_relations-ns +${vnfd_pkg} charm-packages/vnf_relations_vnf +${vnfd_name} vnf_relations-vnf +${nsd_pkg} charm-packages/vnf_relations_ns +${nsd_name} vnf_relations-ns # NS instance name and configuration -${NS_NAME} basic_14_vnf_relations_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} basic_14_vnf_relations_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min # SSH public keys file -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub +${publickey} %{HOME}/.ssh/id_rsa.pub *** Test Cases *** Create Charm VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Charm Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} -# TODO: Check juju status for relations + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + + +# TODO Check juju status for relations + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} -Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. + Delete NSD ${nsd_name} + + +Delete VNF Descriptor Provides [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_15-rbac_configurations.robot b/robot-systest/testsuite/basic_15-rbac_configurations.robot index 4d45c776c76a29d48592787a9cb57b16a035255a..c57b11c40a7385180d7fd1acbde654dde9377f3b 100644 --- a/robot-systest/testsuite/basic_15-rbac_configurations.robot +++ b/robot-systest/testsuite/basic_15-rbac_configurations.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-15] RBAC Configurations. @@ -19,75 +17,78 @@ Library OperatingSystem Library String Library Collections -Resource ../lib/user_lib.resource -Resource ../lib/project_lib.resource -Resource ../lib/role_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/user_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/project_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/role_lib.robot -Test Tags basic_15 cluster_main daily regression azure +Force Tags basic_15 cluster_main daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # User, project and roles to use -${USERNAME} basic_15_test_user -${USER_PASSWORD} Basic_15_user_pass -${USER_NEW_PASSWORD} Basic_15_new_pass -${USER_ROLE} project_user -${USER_PROJECT} admin -${PROJECT_NAME} basic_15_test_project -${NEW_PROJECT_NAME} basic_15_project_test -${ROLE_NAME} test_role -${SUCCESS_RETURN_CODE} 0 +${user_name} basic_15_test_user +${user_password} Basic_15_user_pass +${user_new_password} Basic_15_new_pass +${user_role} project_user +${user_project} admin +${project_name} basic_15_test_project +${new_project_name} basic_15_project_test +${role_name} test_role +${success_return_code} 0 *** Test Cases *** Create And Validate User - [Documentation] Create a user in OSM. - Create User ${USERNAME} ${USER_PASSWORD} - Check If User Exists ${USERNAME} + + Create User ${user_name} ${user_password} + Check If User Exists ${user_name} + Assign Role To User - [Documentation] Assign a user to a project with a role - Update User Role ${USERNAME} ${USER_PROJECT} ${USER_ROLE} - Check If User Is Assigned To Project ${USERNAME} ${USER_PROJECT} - Check If User Has Role ${USERNAME} ${USER_ROLE} ${USER_PROJECT} + + Update User Role ${user_name} ${user_project} ${user_role} + Check If User Is Assigned To Project ${user_name} ${user_project} + Check If User Has Role ${user_name} ${user_role} ${user_project} + Run Action As User - [Documentation] Update the password of the user. - Update User Password ${USERNAME} ${USER_PASSWORD} ${USER_NEW_PASSWORD} - ${rc} ${stdout}= Run And Return RC And Output OSM_USER=${USERNAME} OSM_PROJECT=${USER_PROJECT} OSM_PASSWORD=${USER_NEW_PASSWORD} osm ns-list - Log ${rc} - Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + + Update User Password ${user_name} ${user_password} ${user_new_password} + ${rc} ${stdout}= Run And Return RC And Output OSM_USER=${user_name} OSM_PROJECT=${user_project} OSM_PASSWORD=${user_new_password} osm ns-list + Should Be Equal As Integers ${rc} ${success_return_code} + Create And Update Project - [Documentation] Create a project and update its name. - Create Project ${PROJECT_NAME} - Update Project Name ${PROJECT_NAME} ${NEW_PROJECT_NAME} + + Create Project ${project_name} + Update Project Name ${project_name} ${new_project_name} + Create And Validate Role - [Documentation] Create a role and check that exists in OSM. - Create Role ${ROLE_NAME} - Check If Role Exists ${ROLE_NAME} + + Create Role ${role_name} + Check If Role Exists ${role_name} + Update Role Information - [Documentation] Update a role with a capability. - Update Role ${ROLE_NAME} add='vims: true' - Check If Role Exists ${ROLE_NAME} + + Update Role ${role_name} add='vims: true' + Check If Role Exists ${role_name} + Delete Allocated Resources - [Documentation] Delete user, project and role. [Tags] cleanup - Delete User ${USERNAME} - Delete Project ${NEW_PROJECT_NAME} - Delete Role ${ROLE_NAME} + + Delete User ${user_name} + Delete Project ${new_project_name} + Delete Role ${role_name} *** Keywords *** Suite Cleanup - [Documentation] Test Suite Cleanup: Deleting users, roles and projects. - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete User ${USERNAME} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Role ${ROLE_NAME} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Project ${PROJECT_NAME} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Project ${NEW_PROJECT_NAME} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete User ${user_name} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Role ${role_name} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Project ${project_name} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Project ${new_project_name} diff --git a/robot-systest/testsuite/basic_16-advanced_onboarding_and_scaling.robot b/robot-systest/testsuite/basic_16-advanced_onboarding_and_scaling.robot index 7cd462eb99ca162efdf6d51b73c06b2ea27951a8..0263552b7f1835caf5792f7e3586a3da497b7886 100644 --- a/robot-systest/testsuite/basic_16-advanced_onboarding_and_scaling.robot +++ b/robot-systest/testsuite/basic_16-advanced_onboarding_and_scaling.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-16] Advanced onboarding with override and complex scaling (3 initial instances, scaled by two). @@ -19,116 +17,129 @@ Library OperatingSystem Library String Library Collections -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_16 cluster_main daily regression azure +Force Tags basic_16 cluster_main daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_metrics_vnf -${VNFD_NAME} hackfest_basic_metrics-vnf -${NSD_PKG} hackfest_basic_metrics_ns -${NSD_NAME} hackfest_basic-ns-metrics +${vnfd_pkg} hackfest_basic_metrics_vnf +${vnfd_name} hackfest_basic_metrics-vnf +${nsd_pkg} hackfest_basic_metrics_ns +${nsd_name} hackfest_basic-ns-metrics # NS instance name and configuration -${NS_NAME} basic_16 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_16 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH public keys file -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub +${publickey} %{HOME}/.ssh/id_rsa.pub # Initial, delta, min and max number of VDU instances -${INIT_INSTANCES} 3 -${MIN_INSTANCES} 3 -${MAX_INSTANCES} 5 -${DELTA_INSTANCES} 2 -${SCALING_GROUP} vdu_autoscale -${VNF_MEMBER_INDEX} vnf +${init_instances} 3 +${min_instances} 3 +${max_instances} 5 +${delta_instances} 2 +${scaling_group} vdu_autoscale +${vnf_member_index} vnf *** Test Cases *** Create Scaling VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD Overriding Fields '%{PACKAGES_FOLDER}/${VNFD_PKG}' df.0.instantiation-level.0.vdu-level.0.number-of-instances=${INIT_INSTANCES};df.0.vdu-profile.0.min-number-of-instances=${MIN_INSTANCES};df.0.vdu-profile.0.max-number-of-instances=${MAX_INSTANCES};df.0.scaling-aspect.0.aspect-delta-details.deltas.0.vdu-delta.0.number-of-instances=${DELTA_INSTANCES} + + Create VNFD Overriding Fields '%{PACKAGES_FOLDER}/${vnfd_pkg}' df.0.instantiation-level.0.vdu-level.0.number-of-instances=${init_instances};df.0.vdu-profile.0.min-number-of-instances=${min_instances};df.0.vdu-profile.0.max-number-of-instances=${max_instances};df.0.scaling-aspect.0.aspect-delta-details.deltas.0.vdu-delta.0.number-of-instances=${delta_instances} + Create Scaling NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Scaling Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get Vnf Id - [Documentation] Retrieve VNF instance id to be used later on. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] + Set Suite Variable ${vnf_id} ${vnfr_list}[0] + Check Vdus Before Scale Out [Documentation] Check the number of VDUs instances before the manual scaling. - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - Set Suite Variable ${INITIAL_VDUR_COUNT} ${vdurs} - IF ${INIT_INSTANCES} != ${INITIAL_VDUR_COUNT} Fail msg=Instantiated VDUs (${INITIAL_VDUR_COUNT}) don't match specified number in descriptor (${INIT_INSTANCES}) + Set Suite Variable ${initial_vdur_count} ${vdurs} + Run Keyword If ${init_instances} != ${initial_vdur_count} Fail msg=Instantiated VDUs (${initial_vdur_count}) don't match specified number in descriptor (${init_instances}) + Perform Manual Vdu Scale Out - [Documentation] Perform a manual scale-out operation of the VNF. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_OUT - Log ${ns_op_id} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_OUT + Check Vdus After Scale Out - [Documentation] Check whether there is one extra VDU after scaling out. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + [Documentation] Check whether there is one more VDU after scaling or not. + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} != ${INITIAL_VDUR_COUNT} + ${DELTA_INSTANCES} Fail msg=VDU instances in the VNF (${vdurs}) don't match after Scale Out (${INITIAL_VDUR_COUNT} + ${DELTA_INSTANCES}) + Run Keyword If ${vdurs} != ${initial_vdur_count} + ${delta_instances} Fail msg=VDU instances in the VNF (${vdurs}) don't match after Scale Out (${initial_vdur_count} + ${delta_instances}) + Perform Manual Vdu Scale In - [Documentation] Perform a manual scale-in operation of the VNF. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_IN - Log ${ns_op_id} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_IN + Check Vdus After Scaling In - [Documentation] Check whether there is one less VDU after scaling in. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + [Documentation] Check whether there is one less VDU after scaling or not. + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} != ${INITIAL_VDUR_COUNT} Fail msg=There is the same number of VDU records in the VNF after Scale In + Run Keyword If ${vdurs} != ${initial_vdur_count} Fail msg=There is the same number of VDU records in the VNF after Scale In + Delete NS Instance - [Documentation] Delete NS intance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_17-delete_vnf_package.robot b/robot-systest/testsuite/basic_17-delete_vnf_package.robot index 253665cddf3aaf3973fac4c7e964ed1e01044914..b162bcdfc637aba886b6865cfe9193ed4768b543 100644 --- a/robot-systest/testsuite/basic_17-delete_vnf_package.robot +++ b/robot-systest/testsuite/basic_17-delete_vnf_package.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-17] Delete VNF Package Before NS Package. @@ -21,48 +19,55 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot -Test Tags basic_17 cluster_main daily regression azure +Force Tags basic_17 cluster_main daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_vnf -${VNFD_NAME} hackfest_basic-vnf -${NSD_PKG} hackfest_basic_ns -${NSD_NAME} hackfest_basic-ns +${vnfd_pkg} hackfest_basic_vnf +${vnfd_name} hackfest_basic-vnf +${nsd_pkg} hackfest_basic_ns +${nsd_name} hackfest_basic-ns *** Test Cases *** Create VNF Package - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Package - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Cannot Delete VNF Package - [Documentation] Assert that the VNF package cannot be deleted without deleting the corresponding NS package using it. - Assert Failure Delete VNFD ${VNFD_NAME} + + Assert Failure Delete VNFD ${vnfd_name} + Delete NS Package - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Package - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting NS and VNF packages - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + + diff --git a/robot-systest/testsuite/basic_18-ns_ip_profile.robot b/robot-systest/testsuite/basic_18-ns_ip_profile.robot index 41be581ecc9f5f0ae2f9020352a47fd8642277ce..96d7a4dfe331c1992ed99b2f49842cf376c941b0 100644 --- a/robot-systest/testsuite/basic_18-ns_ip_profile.robot +++ b/robot-systest/testsuite/basic_18-ns_ip_profile.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-18] NS with a VLD with a virtual link profile. @@ -20,173 +18,187 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_18 cluster_main daily regression +Force Tags basic_18 cluster_main daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} ubuntu_4ifaces_vnf -${VNFD_NAME} ubuntu_4ifaces-vnf -${NSD_PKG} ubuntu_4ifaces_ns -${NSD_NAME} ubuntu_4ifaces-ns +${vnfd_pkg} ubuntu_4ifaces_vnf +${vnfd_name} ubuntu_4ifaces-vnf +${nsd_pkg} ubuntu_4ifaces_ns +${nsd_name} ubuntu_4ifaces-ns # NS instance name and configuration -${NS_NAME} basic_18 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_18 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu # VNFs data -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${IFACE1_NAME} eth1 -${IFACE2_NAME} eth2 -${IFACE3_NAME} eth3 -${DATANET1_PREFIX} ^192.168.10.* -${DATANET2_PREFIX} ^192.168.20.* -${DATANET3_PREFIX} ^192.168.30.* +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${iface1_name} eth1 +${iface2_name} eth2 +${iface3_name} eth3 +${datanet1_prefix} ^192.168.10.* +${datanet2_prefix} ^192.168.20.* +${datanet3_prefix} ^192.168.30.* -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get Vnfs Info - [Documentation] Get information from the two VNF of the Ns, specifically the VNF instance id and the mgmt IP address. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID1} ${vnfr_list}[0] - Set Suite Variable ${VNF_ID2} ${vnfr_list}[1] - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} - Set Suite Variable ${VNF1_IPMGMT} ${ip} - Log ${VNF1_IPMGMT} - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} - Set Suite Variable ${VNF2_IPMGMT} ${ip} - Log ${VNF2_IPMGMT} + Set Suite Variable ${vnf_id1} ${vnfr_list}[0] + Set Suite Variable ${vnf_id2} ${vnfr_list}[1] + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} + Set Suite Variable ${vnf1_ipmgmt} ${ip} + Log ${vnf1_ipmgmt} + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} + Set Suite Variable ${vnf2_ipmgmt} ${ip} + Log ${vnf2_ipmgmt} + Check Vnf1 IPs - [Documentation] Check whether IP addresses of the first VNF in the VNF record meet the expected CIDR. - Variable Should Exist ${VNF_ID1} msg=VNF1 is not available - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID1} --literal | yq '.vdur[0].interfaces[] | select(.name == "${IFACE1_NAME}")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${DATANET1_PREFIX} msg=${stdout} doesn't match subnet's regexp ${DATANET1_PREFIX} - Set Suite Variable ${VNF1_IP1} ${stdout} - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID1} --literal | yq '.vdur[0].interfaces[] | select(.name == "${IFACE2_NAME}")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${DATANET2_PREFIX} msg=${stdout} doesn't match subnet's regexp ${DATANET2_PREFIX} - Set Suite Variable ${VNF1_IP2} ${stdout} - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID1} --literal | yq '.vdur[0].interfaces[] | select(.name == "${IFACE3_NAME}")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${DATANET3_PREFIX} msg=${stdout} doesn't match subnet's regexp ${DATANET3_PREFIX} - Set Suite Variable ${VNF1_IP3} ${stdout} + + Variable Should Exist ${vnf_id1} msg=VNF1 is not available + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id1} --literal | yq '.vdur[0].interfaces[] | select(.name == "${iface1_name}")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${datanet1_prefix} msg=${stdout} doesn't match subnet's regexp ${datanet1_prefix} + Set Suite Variable ${vnf1_ip1} ${stdout} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id1} --literal | yq '.vdur[0].interfaces[] | select(.name == "${iface2_name}")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${datanet2_prefix} msg=${stdout} doesn't match subnet's regexp ${datanet2_prefix} + Set Suite Variable ${vnf1_ip2} ${stdout} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id1} --literal | yq '.vdur[0].interfaces[] | select(.name == "${iface3_name}")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${datanet3_prefix} msg=${stdout} doesn't match subnet's regexp ${datanet3_prefix} + Set Suite Variable ${vnf1_ip3} ${stdout} + + Check Vnf2 IPs - [Documentation] Check whether IP addresses of the second VNF in the VNF record meet the expected CIDR. - Variable Should Exist ${VNF_ID1} msg=VNF2 is not available - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID2} --literal | yq '.vdur[0].interfaces[] | select(.name == "${IFACE1_NAME}")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${DATANET1_PREFIX} msg=${stdout} doesn't match subnet's regexp ${DATANET1_PREFIX} - Set Suite Variable ${VNF2_IP1} ${stdout} - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID2} --literal | yq '.vdur[0].interfaces[] | select(.name == "${IFACE2_NAME}")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${DATANET2_PREFIX} msg=${stdout} doesn't match subnet's regexp ${DATANET2_PREFIX} - Set Suite Variable ${VNF2_IP2} ${stdout} - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID2} --literal | yq '.vdur[0].interfaces[] | select(.name == "${IFACE3_NAME}")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${DATANET3_PREFIX} msg=${stdout} doesn't match subnet's regexp ${DATANET3_PREFIX} - Set Suite Variable ${VNF2_IP3} ${stdout} + + Variable Should Exist ${vnf_id1} msg=VNF2 is not available + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id2} --literal | yq '.vdur[0].interfaces[] | select(.name == "${iface1_name}")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${datanet1_prefix} msg=${stdout} doesn't match subnet's regexp ${datanet1_prefix} + Set Suite Variable ${vnf2_ip1} ${stdout} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id2} --literal | yq '.vdur[0].interfaces[] | select(.name == "${iface2_name}")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${datanet2_prefix} msg=${stdout} doesn't match subnet's regexp ${datanet2_prefix} + Set Suite Variable ${vnf2_ip2} ${stdout} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id2} --literal | yq '.vdur[0].interfaces[] | select(.name == "${iface3_name}")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${datanet3_prefix} msg=${stdout} doesn't match subnet's regexp ${datanet3_prefix} + Set Suite Variable ${vnf2_ip3} ${stdout} + Verify Vnf1 Interfaces - [Documentation] Check whether IP addresses of the first VNF configured inside the VM meet the expected CIDR. - Variable Should Exist ${VNF1_IPMGMT} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${PRIVATEKEY} msg=SSH private key not available + + Variable Should Exist ${vnf1_ipmgmt} msg=IP address of the data VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${privatekey} msg=SSH private key not available Sleep 10 seconds Wait for SSH daemon to be up - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF1_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ip --brief addr show up | grep -v "^lo" | awk '{print $3}' + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf1_ipmgmt} ${username} ${EMPTY} ${privatekey} ip --brief addr show up | grep -v "^lo" | awk '{print $3}' Log ${stdout} - @{ip}= Split String ${stdout} - Should Match Regexp ${ip}[1] ${DATANET1_PREFIX} msg=${ip}[1] doesn't match subnet's regexp ${DATANET1_PREFIX} - Should Match Regexp ${ip}[2] ${DATANET2_PREFIX} msg=${ip}[2] doesn't match subnet's regexp ${DATANET2_PREFIX} - Should Match Regexp ${ip}[3] ${DATANET3_PREFIX} msg=${ip}[3] doesn't match subnet's regexp ${DATANET3_PREFIX} + @{ip} = Split String ${stdout} + Should Match Regexp ${ip}[1] ${datanet1_prefix} msg=${ip}[1] doesn't match subnet's regexp ${datanet1_prefix} + Should Match Regexp ${ip}[2] ${datanet2_prefix} msg=${ip}[2] doesn't match subnet's regexp ${datanet2_prefix} + Should Match Regexp ${ip}[3] ${datanet3_prefix} msg=${ip}[3] doesn't match subnet's regexp ${datanet3_prefix} + Verify Vnf2 Interfaces - [Documentation] Check whether IP addresses of the second VNF configured inside the VM meet the expected CIDR. - Variable Should Exist ${VNF2_IPMGMT} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_2}' is not available - Variable Should Exist ${PRIVATEKEY} msg=SSH private key not available - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF2_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ip --brief addr show up | grep -v "^lo" | awk '{print $3}' + + Variable Should Exist ${vnf2_ipmgmt} msg=IP address of the data VNF '${vnf_member_index_2}' is not available + Variable Should Exist ${privatekey} msg=SSH private key not available + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf2_ipmgmt} ${username} ${EMPTY} ${privatekey} ip --brief addr show up | grep -v "^lo" | awk '{print $3}' Log ${stdout} - @{ip}= Split String ${stdout} - Should Match Regexp ${ip}[1] ${DATANET1_PREFIX} msg=${ip}[1] doesn't match subnet's regexp ${DATANET1_PREFIX} - Should Match Regexp ${ip}[2] ${DATANET2_PREFIX} msg=${ip}[2] doesn't match subnet's regexp ${DATANET2_PREFIX} - Should Match Regexp ${ip}[3] ${DATANET3_PREFIX} msg=${ip}[3] doesn't match subnet's regexp ${DATANET3_PREFIX} + @{ip} = Split String ${stdout} + Should Match Regexp ${ip}[1] ${datanet1_prefix} msg=${ip}[1] doesn't match subnet's regexp ${datanet1_prefix} + Should Match Regexp ${ip}[2] ${datanet2_prefix} msg=${ip}[2] doesn't match subnet's regexp ${datanet2_prefix} + Should Match Regexp ${ip}[3] ${datanet3_prefix} msg=${ip}[3] doesn't match subnet's regexp ${datanet3_prefix} + Ping from Vnf1 to Vnf2 - [Documentation] Check connectivity from the first VNF to the second VNF using ping. - Variable Should Exist ${VNF1_IPMGMT} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${PRIVATEKEY} msg=SSH private key not available - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF1_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ip addr ; ping -c 5 ${VNF2_IPMGMT} + + Variable Should Exist ${vnf1_ipmgmt} msg=IP address of the data VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${privatekey} msg=SSH private key not available + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf1_ipmgmt} ${username} ${EMPTY} ${privatekey} ip addr ; ping -c 5 ${vnf2_ipmgmt} Log ${stdout} - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF1_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ping -c 5 ${VNF2_IP1} + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf1_ipmgmt} ${username} ${EMPTY} ${privatekey} ping -c 5 ${vnf2_ip1} Log ${stdout} - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF1_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ping -c 5 ${VNF2_IP2} + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf1_ipmgmt} ${username} ${EMPTY} ${privatekey} ping -c 5 ${vnf2_ip2} Log ${stdout} - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF1_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ping -c 5 ${VNF2_IP3} + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf1_ipmgmt} ${username} ${EMPTY} ${privatekey} ping -c 5 ${vnf2_ip3} Log ${stdout} + Ping from Vnf2 to Vnf1 - [Documentation] Check connectivity from the second VNF to the first VNF using ping. - Variable Should Exist ${VNF1_IPMGMT} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_2}' is not available - Variable Should Exist ${PRIVATEKEY} msg=SSH private key not available - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF2_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ip addr ; ping -c 5 ${VNF1_IPMGMT} + + Variable Should Exist ${vnf1_ipmgmt} msg=IP address of the data VNF '${vnf_member_index_2}' is not available + Variable Should Exist ${privatekey} msg=SSH private key not available + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf2_ipmgmt} ${username} ${EMPTY} ${privatekey} ip addr ; ping -c 5 ${vnf1_ipmgmt} Log ${stdout} - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF2_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ip addr ; ping -c 5 ${VNF1_IP1} + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf2_ipmgmt} ${username} ${EMPTY} ${privatekey} ip addr ; ping -c 5 ${vnf1_ip1} Log ${stdout} - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF2_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ip addr ; ping -c 5 ${VNF1_IP2} + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf2_ipmgmt} ${username} ${EMPTY} ${privatekey} ip addr ; ping -c 5 ${vnf1_ip2} Log ${stdout} - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF2_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} ip addr ; ping -c 5 ${VNF1_IP3} + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf2_ipmgmt} ${username} ${EMPTY} ${privatekey} ip addr ; ping -c 5 ${vnf1_ip3} Log ${stdout} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/basic_19-vnf_ip_profile.robot b/robot-systest/testsuite/basic_19-vnf_ip_profile.robot index 6d5a557b65940f2bf6ff2d2c588f14cf7ae78c20..6701096a8e65205d99598e815566f58a22f4832a 100644 --- a/robot-systest/testsuite/basic_19-vnf_ip_profile.robot +++ b/robot-systest/testsuite/basic_19-vnf_ip_profile.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-19] NS with a single VNF and two VDU linked by a VLD with ip-profile. @@ -20,91 +18,99 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_19 cluster_main daily regression +Force Tags basic_19 cluster_main daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} ipprofile_2vm_vnf -${VNFD_NAME} ipprofile_2vm-vnf -${NSD_PKG} ipprofile_2vm_ns -${NSD_NAME} ipprofile_2vm-ns +${vnfd_pkg} ipprofile_2vm_vnf +${vnfd_name} ipprofile_2vm-vnf +${nsd_pkg} ipprofile_2vm_ns +${nsd_name} ipprofile_2vm-ns # NS instance name and configuration -${NS_NAME} basic_19 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_19 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${USERNAME} ubuntu +${publickey} %{HOME}/.ssh/id_rsa.pub +${username} ubuntu # VNFs data -${VNF_MEMBER_INDEX_1} vnf -${INTERNAL_PREFIX} ^192.168.200.* +${vnf_member_index_1} vnf +${internal_prefix} ^192.168.200.* -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get Vnf Info - [Documentation] Get VNF information, specifically the VNF instance id and the mgmt IP address. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} - Set Suite Variable ${VNF_IPMGMT} ${ip} - Log ${VNF_IPMGMT} + Set Suite Variable ${vnf_id} ${vnfr_list}[0] + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} + Set Suite Variable ${vnf_ipmgmt} ${ip} + Log ${vnf_ipmgmt} + Check Vnf IPs - [Documentation] Check whether IP addresses are syntactically valid. - Variable Should Exist ${VNF_ID} msg=VNF is not available - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID} --literal | yq '.vdur[0].interfaces[] | select(."vnf-vld-id" == "internal")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${INTERNAL_PREFIX} msg=${stdout} doesn't match subnet's regexp ${INTERNAL_PREFIX} - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID} --literal | yq '.vdur[1].interfaces[] | select(."vnf-vld-id" == "internal")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${INTERNAL_PREFIX} msg=${stdout} doesn't match subnet's regexp ${INTERNAL_PREFIX} + + Variable Should Exist ${vnf_id} msg=VNF is not available + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[0].interfaces[] | select(."vnf-vld-id" == "internal")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${internal_prefix} msg=${stdout} doesn't match subnet's regexp ${internal_prefix} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[1].interfaces[] | select(."vnf-vld-id" == "internal")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${internal_prefix} msg=${stdout} doesn't match subnet's regexp ${internal_prefix} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/basic_20-manual_native_charm_vdu_scaling.robot b/robot-systest/testsuite/basic_20-manual_native_charm_vdu_scaling.robot index a901d1e7b94b95294bd498c8e7ce7b407362392c..48b862454aee695d166abd4fd6136ff624cc81bf 100644 --- a/robot-systest/testsuite/basic_20-manual_native_charm_vdu_scaling.robot +++ b/robot-systest/testsuite/basic_20-manual_native_charm_vdu_scaling.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-20] Manual VDU Scaling to test juju applications are scaling for native charms (testing Bug-1609). @@ -19,146 +17,171 @@ Library OperatingSystem Library String Library Collections -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_20 cluster_main daily regression azure +Force Tags basic_20 cluster_main daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/native_manual_scale_charm_vnf -${VNFD_NAME} native_manual_scale_charm-vnf -${NSD_PKG} charm-packages/native_manual_scale_charm_ns -${NSD_NAME} native_manual_scale_charm-ns +${vnfd_pkg} charm-packages/native_manual_scale_charm_vnf +${vnfd_name} native_manual_scale_charm-vnf +${nsd_pkg} charm-packages/native_manual_scale_charm_ns +${nsd_name} native_manual_scale_charm-ns # NS instance name and configuration -${NS_NAME} basic_20_manual_vdu_scaling_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${VNF_MEMBER_INDEX} vnf +${ns_name} basic_20_manual_vdu_scaling_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${vnf_member_index} vnf # SSH public key file -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub +${publickey} %{HOME}/.ssh/id_rsa.pub # Scaling group name of VDU instances -${SCALING_GROUP} manual-scaling_mgmtVM - -${SCALE_WAIT_TIME} 4min +${scaling_group} manual-scaling_mgmtVM +${scale_wait_time} 4min *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get Vnf Id - [Documentation] Retrieve VNF instance id to be used later on - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] + Set Suite Variable ${vnf_id} ${vnfr_list}[0] + Get Vdus Before Scale Out [Documentation] Get the number of VDU records before the manual scaling. - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - Set Suite Variable ${INITIAL_VDUR_COUNT} ${vdurs} + Set Suite Variable ${initial_vdur_count} ${vdurs} + Get Application Name Before Scale Out [Documentation] Get the application names. - @{name_list}= Get Application Names ${NS_NAME} + + @{name_list}= Get Application Names ${ns_name} Log List ${name_list} - Set Suite Variable ${APPLICATION_LIST} ${name_list} + Set Suite Variable ${application_list} ${name_list} + Check Number of Duplicated Application Name Before Scale Out [Documentation] Check the application names if there are 2 application name in the application list. - ${count_duplicated}= Get Length ${APPLICATION_LIST} - IF ${count_duplicated} != 2 Fail msg=There are not 2 application name in the application list before Scale Out + + ${count_duplicated}= Get Length ${application_list} + Run Keyword If ${count_duplicated} != 2 Fail msg=There are not 2 application name in the application list before Scale Out + Perform Manual Vdu Scale Out - [Documentation] Perform a manual scale-out operation of the VNF. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_OUT ${SCALE_WAIT_TIME} - Log ${ns_op_id} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_OUT ${scale_wait_time} + Check Vdus After Scale Out - [Documentation] Check whether there is one more VDU after scaling out. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + [Documentation] Check whether there is one more VDU after scaling or not. + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} != ${INITIAL_VDUR_COUNT} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + Run Keyword If ${vdurs} != ${initial_vdur_count} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + Get Application Name After Scale Out [Documentation] Get the application names. - @{name_list}= Get Application Names ${NS_NAME} + + @{name_list}= Get Application Names ${ns_name} Log List ${name_list} - Set Suite Variable ${APPLICATION_LIST} ${name_list} + Set Suite Variable ${application_list} ${name_list} + Check Number of Duplicated Application Name After Scale Out [Documentation] Check the application names if there are 3 application name in the application list. - ${count_duplicated}= Get Length ${APPLICATION_LIST} - IF ${count_duplicated} != 3 Fail msg=There are not 2 application name in the application list after Scale Out + + ${count_duplicated}= Get Length ${application_list} + Run Keyword If ${count_duplicated} != 3 Fail msg=There are not 2 application name in the application list after Scale Out + Perform Manual Vdu Scale In - [Documentation] Perform a manual scale-in operation of the VNF. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_IN - Log ${ns_op_id} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_IN + Check Vdus After Scaling In - [Documentation] Check whether there is one less VDU after scaling in. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + [Documentation] Check whether there is one less VDU after scaling or not. + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} != ${INITIAL_VDUR_COUNT} Fail msg=There is the same number of VDU records in the VNF after Scale In + Run Keyword If ${vdurs} != ${initial_vdur_count} Fail msg=There is the same number of VDU records in the VNF after Scale In + Get Application Name After Scale In [Documentation] Get the application names. - @{name_list}= Get Application Names ${NS_NAME} + + @{name_list}= Get Application Names ${ns_name} Log List ${name_list} - Set Suite Variable ${APPLICATION_LIST} ${name_list} + Set Suite Variable ${application_list} ${name_list} + Check Number of Duplicated Application Name After Scale In [Documentation] Check the application names if there are 2 application name in the application list. - ${count_duplicated}= Get Length ${APPLICATION_LIST} - IF ${count_duplicated} != 2 Fail msg=There are not 2 application name in the application list after Scale In + + ${count_duplicated}= Get Length ${application_list} + Run Keyword If ${count_duplicated} != 2 Fail msg=There are not 2 application name in the application list after Scale In + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_21-support_of_volumes.robot b/robot-systest/testsuite/basic_21-support_of_volumes.robot index c8918a69328a46ec7ccae2ba9207dd6e499ca7de..4dbea4a92c37799e7741002db022e27c3d229291 100644 --- a/robot-systest/testsuite/basic_21-support_of_volumes.robot +++ b/robot-systest/testsuite/basic_21-support_of_volumes.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-21] NS with only one VDU and several volumes @@ -21,138 +19,140 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot + +Force Tags basic_21 cluster_main daily regression -Test Tags basic_21 cluster_main daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} several_volumes_vnf -${VNFD_NAME} several_volumes-vnf -${NSD_PKG} several_volumes_ns -${NSD_NAME} several_volumes-ns +${vnfd_pkg} several_volumes_vnf +${vnfd_name} several_volumes-vnf +${nsd_pkg} several_volumes_ns +${nsd_name} several_volumes-ns # NS instance name and configuration -${NS_NAME} basic_21 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_21 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${VNF_MEMBER_INDEX} vnf-several-volumes -${SUCCESS_RETURN_CODE} 0 +${vnf_member_index} vnf-several-volumes +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. [Tags] prepare - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. [Tags] prepare - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. [Tags] prepare - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} Get NS Id - [Documentation] Get NS identifier and stores as suite variable to be used later on. [Tags] verify cleanup - ${variables}= Get Variables - IF not "\${ns_id}" in ${variables} - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${variables} Get Variables + IF not "\${ns_id}" in "${variables}" + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} END Get Volumes From VNFD - [Documentation] Get from VNF descriptor the expected number of volumes in the VNF. [Tags] verify - ${rc} ${stdout}= Run And Return RC And Output osm vnfpkg-show ${VNFD_NAME} --literal | yq '.vdu[0]."virtual-storage-desc" | length' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-show ${vnfd_name} --literal | yq '.vdu[0]."virtual-storage-desc" | length' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False ${num_virtual_storage}= Convert To Integer ${stdout} - Set Suite Variable ${VNF_NUM_VOLUMES} ${num_virtual_storage} - Log ${VNF_NUM_VOLUMES} + Set Suite Variable ${vnf_num_volumes} ${num_virtual_storage} + Log ${vnf_num_volumes} + Get VNF IP Address - [Documentation] Get the mgmt IP address of the VNF. [Tags] verify - Variable Should Exist ${NS_ID} msg=NS is not available - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + Variable Should Exist ${ns_id} msg=NS is not available + ${ip_addr}= Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} - -# Get Persistent Volume Id -# [Documentation] Get VIM volume identifier of the persistent volume of the VNF. -# [Tags] cleanup -# Variable Should Exist ${ns_id} msg=NS is not available -# ${vnfs_list}= Get Ns Vnf List ${ns_id} -# ${vim_id}= Get VNF VIM ID ${vnfs_list}[0] -# ${volumes_attached}= Get Server Property ${vim_id} volumes_attached -# ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 -# Set Suite Variable ${PERSISTENT_VOLUME_ID} ${match}[0] + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + + +#Get Persistent Volume Id +# [Tags] cleanup +# Variable Should Exist ${ns_id} msg=NS is not available +# ${vnfs_list}= Get Ns Vnf List ${ns_id} +# ${vim_id}= Get VNF VIM ID ${vnfs_list}[0] +# ${volumes_attached}= Get Server Property ${vim_id} volumes_attached +# ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 +# Set Suite Variable ${volume_id} ${match}[0] + Check VDU disks - [Documentation] Check that the number of volumes is the expected one. [Tags] verify - Variable Should Exist ${VNF_IP_ADDR} msg=VNF is not available + Variable Should Exist ${vnf_ip_addr} msg=VNF is not available Sleep 30 seconds Wait for SSH daemon to be up - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} sudo lsblk -l + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf_ip_addr} ${username} ${password} ${privatekey} sudo lsblk -l Log ${stdout} ${lines}= Get Lines Containing String ${stdout} disk ${num_lines}= Get Line Count ${lines} - IF ${num_lines} < ${VNF_NUM_VOLUMES} Fail msg=Number of disks (${num_lines}) is less than specified in VDU (${VNF_NUM_VOLUMES}) + Run Keyword If ${num_lines} < ${vnf_num_volumes} Fail msg=Number of disks (${num_lines}) is less than specified in VDU (${vnf_num_volumes}) + Delete NS Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} - -# Check Persistent Volume Was Deleted -# [Documentation] Check that the persistent volume was deleted. -# [Tags] cleanup -# Variable Should Exist ${PERSISTENT_VOLUME_ID} msg=Volume is not available -# ${exists}= Check If Volume Exists ${PERSISTENT_VOLUME_ID} -# Log ${exists} -# IF ${exists}==0 -# Fail msg=Persistent volume was deleted -# Set Suite Variable ${PERSISTENT_VOLUME_ID} ${EMPTY}} -# ELSE -# Log Persistent volume still exists, deleting... -# Delete Volume ${PERSISTENT_VOLUME_ID} -# Set Suite Variable ${PERSISTENT_VOLUME_ID} ${EMPTY}} -# END + Delete NS ${ns_name} + + +#Check Persistent Volume Was Deleted +# [Tags] cleanup +# Variable Should Exist ${volume_id} msg=Volume is not available +# ${exists}= Check If Volume Exists ${volume_id} +# Log ${exists} +# IF ${exists}==0 +# Fail msg=Persistent volume was deleted +# Set Suite Variable ${volume_id} ${EMPTY}} +# ELSE +# Log Persistent volume still exists, deleting... +# Delete Volume ${volume_id} +# Set Suite Variable ${volume_id} ${EMPTY}} +# END + Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} + Delete VNF Descriptor Test - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + # Run Keyword If Any Tests Failed Check Volume Was Deleted diff --git a/robot-systest/testsuite/basic_22-cross_model_relations.robot b/robot-systest/testsuite/basic_22-cross_model_relations.robot index c19f16df78ba1f3bd56a431264b87f36f74834b2..cd38e7d492e3d6490a71f8e5b41d988b018f52de 100644 --- a/robot-systest/testsuite/basic_22-cross_model_relations.robot +++ b/robot-systest/testsuite/basic_22-cross_model_relations.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,103 +10,108 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-22] Cross-model relations Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot -Test Tags basic_22 cluster_ee_config cluster_relations regression +Force Tags basic_22 cluster_ee_config cluster_relations regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # K8s cluster name and version -${K8SCLUSTER_NAME} k8sbasic_22 -${K8SCLUSTER_VERSION} v1 +${k8scluster_name} k8sbasic_22 +${k8scluster_version} v1 # NS and VNF descriptor package folder and ids -${VNFD_PKG1} charm-packages/cmr_relation_vnf -${VNFD_PKG2} charm-packages/cmr_no_relation_vnf -${NSD_PKG} charm-packages/cmr_relation_ns -${VNFD_NAME1} cross_model_relation-vnf -${VNFD_NAME2} cross_model_no_relation-vnf -${NSD_NAME} cross_model_relation-ns +${vnfd_pkg_1} charm-packages/cmr_relation_vnf +${vnfd_pkg_2} charm-packages/cmr_no_relation_vnf +${nsd_pkg} charm-packages/cmr_relation_ns +${vnfd_name_1} cross_model_relation-vnf +${vnfd_name_2} cross_model_no_relation-vnf +${nsd_name} cross_model_relation-ns # NS instance name and configuration -${NS_NAME} basic_22 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} basic_22 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} *** Test Cases *** Create Charm VNF Descriptor 1 - [Documentation] Upload first VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG1}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg_1}' Create Charm VNF Descriptor 2 - [Documentation] Upload second VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG2}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg_2}' Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Add K8s Cluster To OSM - [Documentation] Register K8s cluster in OSM. - Create K8s Cluster %{K8S_CREDENTIALS} ${K8SCLUSTER_VERSION} %{VIM_TARGET} %{VIM_MGMT_NET} ${K8SCLUSTER_NAME} + Create K8s Cluster %{K8S_CREDENTIALS} ${k8scluster_version} %{VIM_TARGET} %{VIM_MGMT_NET} ${k8scluster_name} Instantiate Charm Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} -# TODO: Check juju status for relations + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + + +# TODO Check juju status for relations + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} Remove K8s Cluster from OSM - [Documentation] Unregister K8s cluster from OSM. [Tags] cleanup - Delete K8s Cluster ${K8SCLUSTER_NAME} + Delete K8s Cluster ${k8scluster_name} Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor 1 - [Documentation] Delete first VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME1} + + Delete VNFD ${vnfd_name_1} Delete VNF Descriptor 2 - [Documentation] Delete second VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME2} + + Delete VNFD ${vnfd_name_2} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD 1 ${VNFD_NAME1} - Run Keyword If Any Tests Failed Delete VNFD 2 ${VNFD_NAME2} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD 1 ${vnfd_name_1} + + Run Keyword If Any Tests Failed Delete VNFD 2 ${vnfd_name_2} + diff --git a/robot-systest/testsuite/basic_23-sol004_sol007_packages.robot b/robot-systest/testsuite/basic_23-sol004_sol007_packages.robot index a45159a7f387c215d76e681f721fdb2dc74cf22e..cb7ad656a9dafb93bb0d0f3b53427d23a5a18f28 100644 --- a/robot-systest/testsuite/basic_23-sol004_sol007_packages.robot +++ b/robot-systest/testsuite/basic_23-sol004_sol007_packages.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-23] Creation and deletion of SOL004 and SOL007 packages. @@ -21,48 +19,55 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot -Test Tags basic_23 cluster_main daily regression azure +Force Tags basic_23 cluster_main daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} sol004_hackfest_basic_vnf -${VNFD_NAME} sol004_hackfest_basic-vnf -${NSD_PKG} sol007_hackfest_basic_ns -${NSD_NAME} sol007_hackfest_basic-ns +${vnfd_pkg} sol004_hackfest_basic_vnf +${vnfd_name} sol004_hackfest_basic-vnf +${nsd_pkg} sol007_hackfest_basic_ns +${nsd_name} sol007_hackfest_basic-ns *** Test Cases *** Create VNF Package - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Package - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Cannot Delete VNF Package - [Documentation] Assert that the VNF package cannot be deleted before the NS package is deleted. - Assert Failure Delete VNFD ${VNFD_NAME} + + Assert Failure Delete VNFD ${vnfd_name} + Delete NS Package - [Documentation] Delete NS package. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Package - [Documentation] Delete VNF package. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting NS and VNF packages - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + + diff --git a/robot-systest/testsuite/basic_24-affinity_groups.robot b/robot-systest/testsuite/basic_24-affinity_groups.robot index 46860fbb2c266a5e4f9c4b4c5350d3f56f1f1bbd..b3b51ebbfa7b36a1cfdf4461831209164c1df2e3 100644 --- a/robot-systest/testsuite/basic_24-affinity_groups.robot +++ b/robot-systest/testsuite/basic_24-affinity_groups.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-24] VNF with two VDUs belonging to an Openstack server group @@ -20,83 +18,93 @@ Library String Library Collections Library Process -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot + +Force Tags basic_24 cluster_main daily regression -Test Tags basic_24 cluster_main daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} affinity_basic_vnf -${VNFD_NAME} affinity_basic-vnf -${NSD_PKG} affinity_basic_ns -${NSD_NAME} affinity_basic-ns +${vnfd_pkg} affinity_basic_vnf +${vnfd_name} affinity_basic-vnf +${nsd_pkg} affinity_basic_ns +${nsd_name} affinity_basic-ns # NS instance name and configuration -${NS_NAME} basic_24 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_24 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} - -${NS_ID} ${EMPTY} -${VNF_MEMBER_INDEX} affinity-basic-1 -${SUCCESS_RETURN_CODE} 0 +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} +${ns_id} ${EMPTY} +${vnf_member_index} affinity-basic-1 +${success_return_code} 0 *** Test Cases *** Create VNF Package - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Package - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Check Vnf Affinity Groups - [Documentation] Check that all VDUs of the VNF belong to the expected affinity group. - Variable Should Exist ${NS_ID} msg=NS is not available - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_MEMBER_INDEX} - @{vdur_id_list}= Get VDU List From VNF ${vnf_id} + + Variable Should Exist ${ns_id} msg=NS is not available + ${vnf_id} Get Vnf Id ${ns_id} ${vnf_member_index} + @{vdur_id_list} Get VDU list from VNF ${vnf_id} FOR ${vdur_id} IN @{vdur_id_list} - ${server_group_name}= Get VDU Affinity Group Name ${NS_NAME} ${vnf_id} ${vdur_id} - ${vm_vim_id}= Get VDU VIM Id ${vnf_id} ${vdur_id} + ${server_group_name} Get VDU Affinity Group Name ${ns_name} ${vnf_id} ${vdur_id} + ${vm_vim_id} Get VDU VIM Id ${vnf_id} ${vdur_id} Check VM In Server Group ${vm_vim_id} ${server_group_name} END + Delete NS Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor Test - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_25-update_charm_in_running_vnf_instance.robot b/robot-systest/testsuite/basic_25-update_charm_in_running_vnf_instance.robot index 9ae13bee40885dea7fd857eec3e8e01adaf6fa48..a0b368c51943814d7be955475029ed8064e437ef 100644 --- a/robot-systest/testsuite/basic_25-update_charm_in_running_vnf_instance.robot +++ b/robot-systest/testsuite/basic_25-update_charm_in_running_vnf_instance.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,145 +10,167 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-25] Update Charms in Running VNF Instance. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_25 cluster_ee_config regression +Force Tags basic_25 cluster_ee_config regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/ha_proxy_charm_vnf -${UPDATED_VNFD_PKG} charm-packages/updated_vnfds/ha_proxy_charm_vnf -${VNFD_NAME} ha_proxy_charm-vnf -${NSD_PKG} charm-packages/ha_proxy_charm_ns -${NSD_NAME} ha_proxy_charm-ns +${vnfd_pkg} charm-packages/ha_proxy_charm_vnf +${updated_vnfd_pkg} charm-packages/updated_vnfds/ha_proxy_charm_vnf +${vnfd_name} ha_proxy_charm-vnf +${nsd_pkg} charm-packages/ha_proxy_charm_ns +${nsd_name} ha_proxy_charm-ns # NS instance name and configuration -${NS_NAME} basic_25_charm_update_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_25_charm_update_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} - -${ACTION_NAME} touch -${NEW_ACTION_NAME} mkdir -${VNF_MEMBER_INDEX} vnf1 -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME} /home/ubuntu/mytouch1 -${DAY_2_FOLDER_NAME} /home/ubuntu/myfolder1 -${NS_TIMEOUT} 15min +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} + +${action_name} touch +${new_action_name} mkdir +${vnf_member_index} vnf1 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name} /home/ubuntu/mytouch1 +${day_2_folder_name} /home/ubuntu/myfolder1 +${ns_timeout} 15min # NS update operation configuration -${UPDATE_TYPE} CHANGE_VNFPKG -${NS_UPDATE_TIMEOUT} 500 +${update_type} CHANGE_VNFPKG +${ns_update_timeout} 500 *** Test Cases *** Create Charm VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - ${id}= Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' - Set Suite Variable ${VNFD_ID} ${id} + + ${id}= Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Set Suite Variable ${vnfd_id} ${id} + Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Charm Network Service - [Documentation] Instantiates the NS for the test suite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Set NS Update Config - [Documentation] Prepare data for NS Update - Variable Should Exist ${NS_ID} msg=NS is not available - ${id}= Get Vnf Id ${NS_ID} ${VNF_MEMBER_INDEX} + + Variable Should Exist ${ns_id} msg=NS is not available + ${id} Get Vnf Id ${ns_id} ${vnf_member_index} Log ${id} - Set Suite Variable ${VNF_ID} ${id} - Set Suite Variable ${NS_UPDATE_CONFIG} '{changeVnfPackageData: [{vnfInstanceId: "${VNF_ID}", vnfdId: "${VNFD_ID}"}]}' + Set Suite Variable ${vnf_id} ${id} + Set Suite Variable ${ns_update_config} '{changeVnfPackageData: [{vnfInstanceId: "${vnf_id}", vnfdId: "${vnfd_id}"}]}' + Get Management Ip Address - [Documentation] Get the mgmt IP address of the VNF. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + Test SSH Access - [Documentation] Check that the VNF is accessible via SSH in its mgmt IP address. - Variable Should Exist ${VNF_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX}' is not available + + Variable Should Exist ${vnf_ip_addr} msg=IP address of the management VNF '${vnf_member_index}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_ip_addr} ${username} ${password} ${privatekey} + Check Remote Files Created Via Day 1 Operation [Documentation] The Charm VNF has a Day 1 operation that creates a file named ${day_1_file_name}. ... This test checks whether that files have been created or not. - Check If Remote File Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} + + Check If remote File Exists ${vnf_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Execute Day 2 Operation [Documentation] Performs one Day 2 operation on the VNF that creates a new file. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id_1}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX} filename=${DAY_2_FILE_NAME} - Log ${ns_op_id_1} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id_1}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index} filename=${day_2_file_name} + Check Remote File Created Via Day 2 Operation [Documentation] Check whether the file created in the previous test via Day 2 operations exist or not. - Check If Remote File Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME} + + Check If remote File Exists ${vnf_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name} + Update VNFD Package [Documentation] Updates the VNFD by using new VNFD package which includes the Charm ... which has new day2 operation. - Update VNFD '%{PACKAGES_FOLDER}/${UPDATED_VNFD_PKG}' ${VNFD_NAME} + + Update VNFD '%{PACKAGES_FOLDER}/${updated_vnfd_pkg}' ${vnfd_name} + Update Running VNF Instance [Documentation] Updates the running VNF instance by using new VNFD package. ... As the VNFD has an updated charm, this operation will trigger the upgrade of existing charm ... for the specific VNF. - Update Network Service ${NS_ID} ${UPDATE_TYPE} ${NS_UPDATE_CONFIG} ${NS_UPDATE_TIMEOUT} + + Update Network Service ${ns_id} ${update_type} ${ns_update_config} ${ns_update_timeout} + Execute Day 2 Operation on Upgraded Charm [Documentation] Performs one Day 2 operation on the updated VNF that creates a new folder. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id_2}= Execute NS Action ${NS_NAME} ${NEW_ACTION_NAME} ${VNF_MEMBER_INDEX} foldername=${DAY_2_FOLDER_NAME} - Log ${ns_op_id_2} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id_2}= Execute NS Action ${ns_name} ${new_action_name} ${vnf_member_index} foldername=${day_2_folder_name} + Check Remote Folder Created Via Day 2 Operation [Documentation] Check whether the folder created in the previous test via Day 2 operations exist or not. - Check If Remote Folder Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FOLDER_NAME} + + Check If remote Folder Exists ${vnf_ip_addr} ${username} ${password} ${privatekey} ${day_2_folder_name} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_26-secure_helm_execution_environment.robot b/robot-systest/testsuite/basic_26-secure_helm_execution_environment.robot index 1a6f94f0638778923558c5b16aec4e5c106d63c9..10b3f24682cbf740219e2af3b75084ad37a02239 100644 --- a/robot-systest/testsuite/basic_26-secure_helm_execution_environment.robot +++ b/robot-systest/testsuite/basic_26-secure_helm_execution_environment.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,119 +10,133 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-26] Secure connection to helm execution environments. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_26 cluster_ee_config regression +Force Tags basic_26 cluster_ee_config regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} simple_ee_vnf -${VNFD_NAME} simple_ee-vnf -${NSD_PKG} simple_ee_ns -${NSD_NAME} simple_ee-ns +${vnfd_pkg} simple_ee_vnf +${vnfd_name} simple_ee-vnf +${nsd_pkg} simple_ee_ns +${nsd_name} simple_ee-ns # NS instance name and configuration -${NS_NAME} basic_26_secure_helm_ee_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 5min +${ns_name} basic_26_secure_helm_ee_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 5min # SSH keys and username to be used to connect to the VNF -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa # SSH keys and username to be used to connect to OSM VM -${OSM_HOST} %{OSM_HOSTNAME} -${OSM_USERNAME} ubuntu -${OSM_PASSWORD} ${EMPTY} -${OSM_PRIVATEKEY} %{OSM_RSA_FILE} +${osm_host} %{OSM_HOSTNAME} +${osm_username} ubuntu +${osm_password} ${EMPTY} +${osm_privatekey} %{OSM_RSA_FILE} # Variables related to day1 and day2 -${ACTION_NAME} touch -${NEW_ACTION_NAME} mkdir -${VNF_MEMBER_INDEX} simple -${DAY_1_FILE_NAME} /home/ubuntu/first-touch +${action_name} touch +${new_action_name} mkdir +${vnf_member_index} simple +${day_1_file_name} /home/ubuntu/first-touch *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - ${id}= Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' - Set Suite Variable ${VNFD_ID} ${id} + + ${id}= Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Set Suite Variable ${vnfd_id} ${id} + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Get Management Ip Address - [Documentation] Get the mgmt IP address of the VNF of the NS. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + Test SSH Access - [Documentation] Check that the VNF is accessible via SSH in its mgmt IP address. - Variable Should Exist ${VNF_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX}' is not available + + Variable Should Exist ${vnf_ip_addr} msg=IP address of the management VNF '${vnf_member_index}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_ip_addr} ${username} ${password} ${privatekey} + Check Remote File Created Via Day 1 Operation [Documentation] Check whether the file created in the previous test via Day 1 operations exist or not. - Check If Remote File Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} + + Check If remote File Exists ${vnf_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Get data from EE pod - [Documentation] Retrieve pod name and service IP address of the helm-based EE running in OSM cluster and store as suite variables to be used later on. - Open Connection ${OSM_HOST} - Login With Public Key ${OSM_USERNAME} keyfile=${OSM_PRIVATEKEY} - ${pod}= Execute Remote Command Check Rc Return Output ${OSM_HOST} ${OSM_USERNAME} ${OSM_PASSWORD} ${OSM_PRIVATEKEY} kubectl get pod -n ${NS_ID} --no-headers -o custom-columns=":metadata.name" - ${svc}= Execute Remote Command Check Rc Return Output ${OSM_HOST} ${OSM_USERNAME} ${OSM_PASSWORD} ${OSM_PRIVATEKEY} kubectl get svc -n ${NS_ID} -l app.kubernetes.io/name=eechart -o jsonpath='{.items[0].spec.clusterIP}' - Set Suite Variable ${POD_NAME} ${pod} - Set Suite Variable ${SVC_IP} ${svc} + + Open Connection ${osm_host} + Login With Public Key ${osm_username} keyfile=${osm_privatekey} + ${pod}= Execute Remote Command Check Rc Return Output ${osm_host} ${osm_username} ${osm_password} ${osm_privatekey} kubectl get pod -n ${ns_id} --no-headers -o custom-columns=":metadata.name" + ${svc}= Execute Remote Command Check Rc Return Output ${osm_host} ${osm_username} ${osm_password} ${osm_privatekey} kubectl get svc -n ${ns_id} -l app.kubernetes.io/name=eechart -o jsonpath='{.items[0].spec.clusterIP}' + Set Suite Variable ${pod_name} ${pod} + Set Suite Variable ${svc_ip} ${svc} + Fail when trying to access gRPC server without TLS - [Documentation] Assert failure when accessing the EE without TLS. - ${command}= Catenate python3 osm_ee/frontend_client.py ${SVC_IP} 50050 sleep - ${result}= Execute Remote Command Check Rc Return Output ${OSM_HOST} ${OSM_USERNAME} ${OSM_PASSWORD} ${OSM_PRIVATEKEY} kubectl exec -it -n ${NS_ID} ${POD_NAME} -- ${command} + + ${command} = Catenate python3 osm_ee/frontend_client.py ${svc_ip} 50050 sleep + ${result}= Execute Remote Command Check Rc Return Output ${osm_host} ${osm_username} ${osm_password} ${osm_privatekey} kubectl exec -it -n ${ns_id} ${pod_name} -- ${command} Should Contain ${result} Connection lost + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_27-update_helm_ee_in_running_vnf_instance.robot b/robot-systest/testsuite/basic_27-update_helm_ee_in_running_vnf_instance.robot index 2acb2cbb14eb7cfca6798250952c0ac549126153..ba0b5e246680562c10ab76fde9f001dccf26ab39 100644 --- a/robot-systest/testsuite/basic_27-update_helm_ee_in_running_vnf_instance.robot +++ b/robot-systest/testsuite/basic_27-update_helm_ee_in_running_vnf_instance.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,145 +10,167 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-27] Update Helm EE in Running VNF Instance. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_27 cluster_ee_config daily regression +Force Tags basic_27 cluster_ee_config daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} simple_ee_vnf -${UPDATED_VNFD_PKG} updated_simple_ee_vnf -${VNFD_NAME} simple_ee-vnf -${NSD_PKG} simple_ee_ns -${NSD_NAME} simple_ee-ns +${vnfd_pkg} simple_ee_vnf +${updated_vnfd_pkg} updated_simple_ee_vnf +${vnfd_name} simple_ee-vnf +${nsd_pkg} simple_ee_ns +${nsd_name} simple_ee-ns # NS instance name and configuration -${NS_NAME} basic_27_helm_ee_update_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_27_helm_ee_update_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} - -${ACTION_NAME} touch -${NEW_ACTION_NAME} mkdir -${VNF_MEMBER_INDEX} simple -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME} /home/ubuntu/mytouch1 -${DAY_2_FOLDER_NAME} /home/ubuntu/myfolder1 -${NS_TIMEOUT} 15min +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} + +${action_name} touch +${new_action_name} mkdir +${vnf_member_index} simple +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name} /home/ubuntu/mytouch1 +${day_2_folder_name} /home/ubuntu/myfolder1 +${ns_timeout} 15min # NS update operation configuration -${UPDATE_TYPE} CHANGE_VNFPKG -${NS_UPDATE_TIMEOUT} 500 +${update_type} CHANGE_VNFPKG +${ns_update_timeout} 500 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - ${id}= Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' - Set Suite Variable ${VNFD_ID} ${id} + + ${id}= Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Set Suite Variable ${vnfd_id} ${id} + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Set NS Update Config - [Documentation] Prepare NS update config dictionary to update the NS. - Variable Should Exist ${NS_ID} msg=NS is not available - ${id}= Get Vnf Id ${NS_ID} ${VNF_MEMBER_INDEX} + + Variable Should Exist ${ns_id} msg=NS is not available + ${id} Get Vnf Id ${ns_id} ${vnf_member_index} Log ${id} - Set Suite Variable ${VNF_ID} ${id} - Set Suite Variable ${NS_UPDATE_CONFIG} '{changeVnfPackageData: [{vnfInstanceId: "${VNF_ID}", vnfdId: "${VNFD_ID}"}]}' + Set Suite Variable ${vnf_id} ${id} + Set Suite Variable ${ns_update_config} '{changeVnfPackageData: [{vnfInstanceId: "${vnf_id}", vnfdId: "${vnfd_id}"}]}' + Get Management Ip Address - [Documentation] Get VNF mgmt IP address from the NS. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + Test SSH Access - [Documentation] Test SSH access to the VNF mgmt IP address. - Variable Should Exist ${VNF_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX}' is not available + + Variable Should Exist ${vnf_ip_addr} msg=IP address of the management VNF '${vnf_member_index}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_ip_addr} ${username} ${password} ${privatekey} + Check Remote Files Created Via Day 1 Operation [Documentation] The VNF has a Day 1 operation that creates a file named ${day_1_file_name}. ... This test checks whether that files have been created or not. - Check If Remote File Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} + + Check If remote File Exists ${vnf_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Execute Day 2 Operation [Documentation] Performs one Day 2 operation on the VNF that creates a new file. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id_1}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX} file-path=${DAY_2_FILE_NAME} - Log ${ns_op_id_1} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id_1}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index} file-path=${day_2_file_name} + Check Remote File Created Via Day 2 Operation [Documentation] Check whether the file created in the previous test via Day 2 operations exist or not. - Check If Remote File Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME} + + Check If remote File Exists ${vnf_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name} + Update VNFD Package [Documentation] Updates the VNFD by using new VNFD package which includes the EE ... which has new day2 operation. - Update VNFD '%{PACKAGES_FOLDER}/${UPDATED_VNFD_PKG}' ${VNFD_NAME} + + Update VNFD '%{PACKAGES_FOLDER}/${updated_vnfd_pkg}' ${vnfd_name} + Update Running VNF Instance [Documentation] Updates the running VNF instance by using new VNFD package. ... As the VNFD has an updated Helm EE, this operation will trigger the upgrade of existing Helm EE ... for the specific VNF. - Update Network Service ${NS_ID} ${UPDATE_TYPE} ${NS_UPDATE_CONFIG} ${NS_UPDATE_TIMEOUT} + + Update Network Service ${ns_id} ${update_type} ${ns_update_config} ${ns_update_timeout} + Execute Day 2 Operation on Upgraded Helm EE [Documentation] Performs one Day 2 operation on the updated VNF that creates a new folder. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id_2}= Execute NS Action ${NS_NAME} ${NEW_ACTION_NAME} ${VNF_MEMBER_INDEX} foldername=${DAY_2_FOLDER_NAME} - Log ${ns_op_id_2} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id_2}= Execute NS Action ${ns_name} ${new_action_name} ${vnf_member_index} foldername=${day_2_folder_name} + Check Remote Folder Created Via Day 2 Operation [Documentation] Check whether the folder created in the previous test via Day 2 operations exist or not. - Check If Remote Folder Exists ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FOLDER_NAME} + + Check If remote Folder Exists ${vnf_ip_addr} ${username} ${password} ${privatekey} ${day_2_folder_name} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_28-keep_persistent_volumes.robot b/robot-systest/testsuite/basic_28-keep_persistent_volumes.robot index dd92a49fbd73c9d3a9dc6581e3cd281b3d7bcf5a..0391ac7e25d92d39c43a2c7a28ffaf78a7c1a17c 100644 --- a/robot-systest/testsuite/basic_28-keep_persistent_volumes.robot +++ b/robot-systest/testsuite/basic_28-keep_persistent_volumes.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-28] NS with one VDU which has 2 persistent volumes with keep flag @@ -21,160 +19,159 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot + +Force Tags basic_28 cluster_main daily -Test Tags basic_28 cluster_main daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} keep_persistent_volume_vnf -${VNFD_NAME} keep_persistent-volumes-vnf -${NSD_PKG} keep_persistent_volume_ns -${NSD_NAME} persistent_volumes-ns +${vnfd_pkg} keep_persistent_volume_vnf +${vnfd_name} keep_persistent-volumes-vnf +${nsd_pkg} keep_persistent_volume_ns +${nsd_name} persistent_volumes-ns # NS instance name and configuration -${NS_NAME} basic_28 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_28 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${VNF_MEMBER_INDEX} vnf-persistent-volumes -${VDU_ID} keep-persistent-vol-VM -${ROOT_DISK} root-volume -${ORDINARY_DISK} persistent-volume -${SUCCESS_RETURN_CODE} 0 +${vnf_member_index} vnf-persistent-volumes +${vdu_id} keep-persistent-vol-VM +${root_disk} root-volume +${ordinary_disk} persistent-volume +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Check Persistent Volume Counts - [Documentation] Check that the number of persistent volumes attached to VM in the NS meet the expected number (2). - Variable Should Exist ${NS_ID} msg=NS is not available - ${VOLUME_MATCH}= Get Persistent Volumes Attached To Vm ${NS_ID} - Set Suite Variable ${VOLUME_MATCH} - ${VOLUME_COUNTS}= Get Length ${VOLUME_MATCH} - Set Suite Variable ${VOLUME_COUNTS} - IF ${VOLUME_COUNTS} != 2 Fail msg=There were not 2 volumes attached to VM + Variable Should Exist ${ns_id} msg=NS is not available + ${volume_match}= Get Persistent Volumes Attached To Vm ${ns_id} + Set Suite Variable ${volume_match} + ${volume_counts}= Get Length ${volume_match} + Set Suite Variable ${volume_counts} + Run Keyword If ${volume_counts} != 2 Fail msg=There were not 2 volumes attached to VM + Set Persistent Volume Ids - [Documentation] Get the identifiers of the persistent volumes attached to VM in the NS and store in suite variables ROOT_VOL_ID and ORDINARY_VOL_ID. - Variable Should Exist ${VOLUME_MATCH} msg=NS is not available - Set Volume Id ${VOLUME_MATCH} 0 - Set Volume Id ${VOLUME_MATCH} 1 + Variable Should Exist ${volume_match} msg=NS is not available + Set Volume Id ${volume_match} 0 + Set Volume Id ${volume_match} 1 + Delete NS Instance Test - [Documentation] Delete NS instance. - Delete NS ${NS_NAME} + [Tags] cleanup + Delete NS ${ns_name} + Check Persistent Root Volume in VIM after NS Deleted - [Documentation] Check that the persistent root volume requested to be kept is present after deleting NS instance. - Variable Should Exist ${ROOT_VOL_ID} msg=Root volume is not available - ${root_vol_exists}= Check If Volume Exists ${ROOT_VOL_ID} - Log ${root_vol_exists} - IF ${root_vol_exists} - Log Persistent root volume still exists - ELSE + Variable Should Exist ${root_vol_id} msg=Root volume is not available + ${root_vol_exists}= Check If Volume Exists ${root_vol_id} + log ${root_vol_exists} + IF ${root_vol_exists}==0 Fail msg=Persistent root volume was deleted - Set Suite Variable ${ROOT_VOL_ID} ${EMPTY} + Set Suite Variable ${root_vol_id} ${EMPTY} + ELSE + log Persistent root volume still exists END + Check Persistent Ordinary Volume in VIM after NS Deleted - [Documentation] Check that the persistent ordinary volume requested to be kept is present after deleting NS instance. - Variable Should Exist ${ORDINARY_VOL_ID} msg=Ordinary persistent volume is not available - ${ordinary_vol_exists}= Check If Volume Exists ${ORDINARY_VOL_ID} - Log ${ordinary_vol_exists} - IF ${ordinary_vol_exists} - Log Persistent ordinary volume still exists - ELSE + Variable Should Exist ${ordinary_vol_id} msg=Ordinary persistent volume is not available + ${ordinary_vol_exists}= Check If Volume Exists ${ordinary_vol_id} + log ${ordinary_vol_exists} + IF ${ordinary_vol_exists}==0 Fail msg=Persistent ordinary volume was deleted - Set Suite Variable ${ORDINARY_VOL_ID} ${EMPTY} + Set Suite Variable ${ordinary_vol_id} ${EMPTY} + ELSE + log Persistent ordinary volume still exists END + Prepare Ns Config With Volume Id - [Documentation] Generate NS instantiation parameters to be used in next NS instance, - ... using the persistent volumes that were kept previously. - Set Suite Variable ${NS_CONFIG_WITH_VIM_ID} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ], vnf: [ {member-vnf-index: ${VNF_MEMBER_INDEX}, vdu: [ {id: ${VDU_ID}, volume: [{"name": ${ROOT_DISK}, vim-volume-id: ${ROOT_VOL_ID}}, {"name": ${ORDINARY_DISK}, vim-volume-id: ${ORDINARY_VOL_ID}}] } ] } ] } + Set Suite Variable ${ns_config_with_vim_id} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ], vnf: [ {member-vnf-index: ${vnf_member_index}, vdu: [ {id: ${vdu_id}, volume: [{"name": ${root_disk}, vim-volume-id: ${root_vol_id}}, {"name": ${ordinary_disk}, vim-volume-id: ${ordinary_vol_id}}] } ] } ] } + Network Service Instance With Existing Volumes Test - [Documentation] Instantiate NS for the testsuite again. The persistent volumes passed as instantiation parameters should be used. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG_WITH_VIM_ID} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config_with_vim_id} ${publickey} + Set Suite Variable ${ns_id} ${id} + Verify the Attachment Of Existing Persistent Volumes - [Documentation] Get the identifiers of the persistent volumes attached to VM in the second NS instance and verify that they are the same - ... of the first NS instance. - Set Suite Variable ${PREV_ROOT_VOL_ID} ${ROOT_VOL_ID} - Set Suite Variable ${PREV_ORDINARY_VOL_ID} ${ORDINARY_VOL_ID} - ${volume_match}= Get Persistent Volumes Attached To Vm ${NS_ID} - Set Suite Variable ${VOLUME_MATCH} - Set Volume Id ${VOLUME_MATCH} 0 - Set Volume Id ${VOLUME_MATCH} 1 - Should Be Equal As Strings ${ROOT_VOL_ID} ${PREV_ROOT_VOL_ID} msg=Existing root volume is not attached to server - Should Be Equal As Strings ${ORDINARY_VOL_ID} ${PREV_ORDINARY_VOL_ID} msg=Existing ordinary volume is not attached to server + Set Suite Variable ${prev_root_vol_id} ${root_vol_id} + Set Suite Variable ${prev_ordinary_vol_id} ${ordinary_vol_id} + ${volume_match}= Get Persistent Volumes Attached To Vm ${ns_id} + Set Suite Variable ${volume_match} + Set Volume Id ${volume_match} 0 + Set Volume Id ${volume_match} 1 + Should Be Equal As Strings ${root_vol_id} ${prev_root_vol_id} msg=Existing root volume is not attached to server + Should Be Equal As Strings ${ordinary_vol_id} ${prev_ordinary_vol_id} msg=Existing ordinary volume is not attached to server + Delete NS Instance With Existing Volumes Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} + Check Existence of Persistent Volumes - [Documentation] Check that the persistent volumes exist after deleting the NS. - Variable Should Exist ${ROOT_VOL_ID} msg=Volume is not available - Variable Should Exist ${ORDINARY_VOL_ID} msg=Volume is not available - ${root_vol_exists}= Check If Volume Exists ${ROOT_VOL_ID} - IF not ${root_vol_exists} Fail msg=Existing root volume is deleted - ${ordinary_vol_exists}= Check If Volume Exists ${ORDINARY_VOL_ID} - IF not ${ordinary_vol_exists} Fail msg=Existing ordinary volume is deleted + Variable Should Exist ${root_vol_id} msg=Volume is not available + Variable Should Exist ${ordinary_vol_id} msg=Volume is not available + ${root_vol_exists}= Check If Volume Exists ${root_vol_id} + Run Keyword If ${root_vol_exists} == 0 Fail msg=Existing root volume is deleted + ${ordinary_vol_exists}= Check If Volume Exists ${ordinary_vol_id} + Run Keyword If ${ordinary_vol_exists} == 0 Fail msg=Existing ordinary volume is deleted + Delete Persistent Volumes - [Documentation] Delete persistent volumes. - Clean Persistent Volumes + [Tags] cleanup + Delete Volume ${root_vol_id} + Delete Volume ${ordinary_vol_id} + Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} + Delete VNF Descriptor Test - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} - Run Keyword If Any Tests Failed Clean Persistent Volumes -Clean Persistent Volumes - [Documentation] Delete root and ordinary volumes. - [Tags] cleanup - Delete Volume ${ROOT_VOL_ID} - Delete Volume ${ORDINARY_VOL_ID} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + + Run Keyword If Any Tests Failed Delete Persistent Volumes diff --git a/robot-systest/testsuite/basic_29-vnf_ipv6_profile.robot b/robot-systest/testsuite/basic_29-vnf_ipv6_profile.robot index cf943ca7d85d4b05feed27ed615c85bb5bce8263..2d1ab31d441a8b405244ede1fbdade671750a2c5 100644 --- a/robot-systest/testsuite/basic_29-vnf_ipv6_profile.robot +++ b/robot-systest/testsuite/basic_29-vnf_ipv6_profile.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-29] NS with a single VNF and two VDU linked by a VLD with ipv6-profile. @@ -21,105 +19,112 @@ Library Collections Library SSHLibrary Library JSONLibrary -Resource ../lib/vnf_lib.resource -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot -Test Tags basic_29 cluster_main daily +Force Tags basic_29 cluster_main daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} ipv6profile_2vm_vnf -${VNFD_NAME} ipv6profile_2vm-vnf -${NSD_PKG} ipv6profile_2vm_ns -${NSD_NAME} ipv6profile_2vm-ns +${vnfd_pkg} ipv6profile_2vm_vnf +${vnfd_name} ipv6profile_2vm-vnf +${nsd_pkg} ipv6profile_2vm_ns +${nsd_name} ipv6profile_2vm-ns # NS instance name and configuration -${NS_NAME} basic_29 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_29 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${USERNAME} ubuntu +${publickey} %{HOME}/.ssh/id_rsa.pub +${username} ubuntu # VNFs data -${VNF_MEMBER_INDEX_1} vnf -${INTERNAL_PREFIX} ^2001:db8::* +${vnf_member_index_1} vnf +${internal_prefix} ^2001:db8::* -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get Vnf Info - [Documentation] Get VNF information, specifically VNF instance id and mgmt IP address. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} - Set Suite Variable ${VNF_IPMGMT} ${ip} - Log ${VNF_IPMGMT} + Set Suite Variable ${vnf_id} ${vnfr_list}[0] + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} + Set Suite Variable ${vnf_ipmgmt} ${ip} + Log ${vnf_ipmgmt} + Check Vnf IPs - [Documentation] Check whether IP addresses are syntactically valid. - Variable Should Exist ${VNF_ID} msg=VNF is not available - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID} --literal | yq '.vdur[0].interfaces[] | select(."vnf-vld-id" == "internal")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${INTERNAL_PREFIX} msg=${stdout} doesn't match subnet's regexp ${INTERNAL_PREFIX} - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID} --literal | yq '.vdur[1].interfaces[] | select(."vnf-vld-id" == "internal")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${INTERNAL_PREFIX} msg=${stdout} doesn't match subnet's regexp ${INTERNAL_PREFIX} - -Check That Ipv6 Address_mode And Ra_mode Are Set - [Documentation] Check that IPv6 address mode and RA mode are set and equal to dhcpv6-stateful. - ${rc} ${vim_info}= Run And Return RC And Output osm vnf-show ${VNF_ID} --literal | yq '.vdur[] | select(."count-index" == 0)' | yq -r '.vim_info[].interfaces[].vim_info' - Log ${rc},${vim_info} + + Variable Should Exist ${vnf_id} msg=VNF is not available + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[0].interfaces[] | select(."vnf-vld-id" == "internal")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${internal_prefix} msg=${stdout} doesn't match subnet's regexp ${internal_prefix} + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[1].interfaces[] | select(."vnf-vld-id" == "internal")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${internal_prefix} msg=${stdout} doesn't match subnet's regexp ${internal_prefix} + +Check that ipv6 address_mode and ra_mode are set + + ${rc} ${vim_info}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq '.vdur[] | select(."count-index" == 0)' | yq -r '.vim_info[].interfaces[].vim_info' ${subnet_id}= Get Regexp Matches ${vim_info} {ip_address: '2001:db8::.*', subnet_id: ([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})} 1 ${subnet_info}= Get Subnet ${subnet_id}[0] - ${json_object}= Convert String To JSON ${subnet_info} + ${json_object}= Convert String to JSON ${subnet_info} ${address_mode}= Get From Dictionary ${json_object} ipv6_address_mode ${ra_mode}= Get From Dictionary ${json_object} ipv6_ra_mode Should Be Equal ${address_mode} dhcpv6-stateful msg=ipv6_address_mode does not equals to dhcpv6-stateful Should Be Equal ${ra_mode} dhcpv6-stateful msg=ipv6_ra_mode does not equals to dhcpv6-stateful + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/basic_30-ns_ipv6_profile.robot b/robot-systest/testsuite/basic_30-ns_ipv6_profile.robot index ca1cbe7116c960d0e93519670574b859b461ebde..1246ed5684908323b3e29a2d1884dcff7072bcac 100644 --- a/robot-systest/testsuite/basic_30-ns_ipv6_profile.robot +++ b/robot-systest/testsuite/basic_30-ns_ipv6_profile.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-30] NS with a single VNF and two VDU linked by a VLD with ipv6-profile. @@ -21,138 +19,148 @@ Library Collections Library SSHLibrary Library JSONLibrary -Resource ../lib/vnf_lib.resource -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot -Test Tags basic_30 cluster_main daily +Force Tags basic_30 cluster_main daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} ubuntu_4ifaces_vnf -${VNFD_NAME} ubuntu_4ifaces-vnf -${NSD_PKG} ubuntu_4ifaces_ipv6_ns -${NSD_NAME} ubuntu_4ifaces-ipv6-ns +${vnfd_pkg} ubuntu_4ifaces_vnf +${vnfd_name} ubuntu_4ifaces-vnf +${nsd_pkg} ubuntu_4ifaces_ipv6_ns +${nsd_name} ubuntu_4ifaces-ipv6-ns # NS instance name and configuration -${NS_NAME} basic_30 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_30 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu # VNFs data -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${IFACE1_NAME} eth1 -${DATANET1_PREFIX} ^2001:db8::* +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${iface1_name} eth1 +${datanet1_prefix} ^2001:db8::* -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get Vnfs Info - [Documentation] Get information from the two VNF of the NS, specifically VNF instance id and mgmt IP address. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID1} ${vnfr_list}[0] - Set Suite Variable ${VNF_ID2} ${vnfr_list}[1] - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} - Set Suite Variable ${VNF1_IPMGMT} ${ip} - Log ${VNF1_IPMGMT} - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} - Set Suite Variable ${VNF2_IPMGMT} ${ip} - Log ${VNF2_IPMGMT} + Set Suite Variable ${vnf_id1} ${vnfr_list}[0] + Set Suite Variable ${vnf_id2} ${vnfr_list}[1] + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} + Set Suite Variable ${vnf1_ipmgmt} ${ip} + Log ${vnf1_ipmgmt} + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} + Set Suite Variable ${vnf2_ipmgmt} ${ip} + Log ${vnf2_ipmgmt} + Check Vnf1 IPs - [Documentation] Check whether IP addresses of the first VNF in the VNF record meet the expected CIDR. - Variable Should Exist ${VNF_ID1} msg=VNF1 is not available - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID1} --literal | yq '.vdur[0].interfaces[] | select(.name == "${IFACE1_NAME}")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${DATANET1_PREFIX} msg=${stdout} doesn't match subnet's regexp ${DATANET1_PREFIX} - Set Suite Variable ${VNF1_IP1} ${stdout} + + Variable Should Exist ${vnf_id1} msg=VNF1 is not available + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id1} --literal | yq '.vdur[0].interfaces[] | select(.name == "${iface1_name}")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${datanet1_prefix} msg=${stdout} doesn't match subnet's regexp ${datanet1_prefix} + Set Suite Variable ${vnf1_ip1} ${stdout} + Check Vnf2 IPs - [Documentation] Check whether IP addresses of the second VNF in the VNF record meet the expected CIDR. - Variable Should Exist ${VNF_ID2} msg=VNF2 is not available - ${rc} ${stdout}= Run And Return RC And Output osm vnf-show ${VNF_ID2} --literal | yq '.vdur[0].interfaces[] | select(.name == "${IFACE1_NAME}")' | yq -r '."ip-address"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False - Should Match Regexp ${stdout} ${DATANET1_PREFIX} msg=${stdout} doesn't match subnet's regexp ${DATANET1_PREFIX} - Set Suite Variable ${VNF2_IP1} ${stdout} + + Variable Should Exist ${vnf_id2} msg=VNF2 is not available + ${rc} ${stdout}= Run and Return RC and Output osm vnf-show ${vnf_id2} --literal | yq '.vdur[0].interfaces[] | select(.name == "${iface1_name}")' | yq -r '."ip-address"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False + Should Match Regexp ${stdout} ${datanet1_prefix} msg=${stdout} doesn't match subnet's regexp ${datanet1_prefix} + Set Suite Variable ${vnf2_ip1} ${stdout} + Verify Vnf1 Interfaces - [Documentation] Check whether IP addresses of the first VNF configured inside the VM meet the expected CIDR. - Variable Should Exist ${VNF1_IPMGMT} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${PRIVATEKEY} msg=SSH private key not available + + Variable Should Exist ${vnf1_ipmgmt} msg=IP address of the data VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${privatekey} msg=SSH private key not available Sleep 120 seconds Wait for SSH daemon to be up - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF1_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} sudo dhclient -6 ens4 ; ip --brief addr show up | grep -v "^lo" | awk '{print $3}' + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf1_ipmgmt} ${username} ${EMPTY} ${privatekey} sudo dhclient -6 ens4 ; ip --brief addr show up | grep -v "^lo" | awk '{print $3}' Log ${stdout} - @{ip}= Split String ${stdout} - Should Match Regexp ${ip}[1] ${DATANET1_PREFIX} msg=${ip}[1] doesn't match subnet's regexp ${DATANET1_PREFIX} + @{ip} = Split String ${stdout} + Should Match Regexp ${ip}[1] ${datanet1_prefix} msg=${ip}[1] doesn't match subnet's regexp ${datanet1_prefix} + Verify Vnf2 Interfaces - [Documentation] Check whether IP addresses of the second VNF configured inside the VM meet the expected CIDR. - Variable Should Exist ${VNF2_IPMGMT} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_2}' is not available - Variable Should Exist ${PRIVATEKEY} msg=SSH private key not available - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF2_IPMGMT} ${USERNAME} ${EMPTY} ${PRIVATEKEY} sudo dhclient -6 ens4 ; ip --brief addr show up | grep -v "^lo" | awk '{print $3}' + + Variable Should Exist ${vnf2_ipmgmt} msg=IP address of the data VNF '${vnf_member_index_2}' is not available + Variable Should Exist ${privatekey} msg=SSH private key not available + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf2_ipmgmt} ${username} ${EMPTY} ${privatekey} sudo dhclient -6 ens4 ; ip --brief addr show up | grep -v "^lo" | awk '{print $3}' Log ${stdout} - @{ip}= Split String ${stdout} - Should Match Regexp ${ip}[1] ${DATANET1_PREFIX} msg=${ip}[1] doesn't match subnet's regexp ${DATANET1_PREFIX} + @{ip} = Split String ${stdout} + Should Match Regexp ${ip}[1] ${datanet1_prefix} msg=${ip}[1] doesn't match subnet's regexp ${datanet1_prefix} + Check that ipv6 address_mode and ra_mode are set - [Documentation] Check that IPv6 address mode and RA mode are set and equal to dhcpv6-stateful. - ${rc} ${vim_info}= Run And Return RC And Output osm vnf-show ${VNF_ID1} --literal | yq '.vdur[] | select(."count-index" == 0)' | yq -r '.vim_info[].interfaces[].vim_info' - Log ${rc},${vim_info} + + ${rc} ${vim_info}= Run and Return RC and Output osm vnf-show ${vnf_id1} --literal | yq '.vdur[] | select(."count-index" == 0)' | yq -r '.vim_info[].interfaces[].vim_info' ${subnet_id}= Get Regexp Matches ${vim_info} {ip_address: '2001:db8::.*', subnet_id: ([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})} 1 ${subnet_info}= Get Subnet ${subnet_id}[0] - ${json_object}= Convert String To JSON ${subnet_info} + ${json_object}= Convert String to JSON ${subnet_info} ${address_mode}= Get From Dictionary ${json_object} ipv6_address_mode ${ra_mode}= Get From Dictionary ${json_object} ipv6_ra_mode Should Be Equal ${address_mode} dhcpv6-stateful msg=ipv6_address_mode does not equal dhcpv6-stateful Should Be Equal ${ra_mode} dhcpv6-stateful msg=ipv6_ra_mode does not equal dhcpv6-stateful + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/basic_31-multivdu_volume_multiattach.robot b/robot-systest/testsuite/basic_31-multivdu_volume_multiattach.robot index 6e2e1642ff863ee98a6f5d9f7f090df86f42c5fa..c610447bebf38affc7b4f674f44ff90dddcaee5f 100644 --- a/robot-systest/testsuite/basic_31-multivdu_volume_multiattach.robot +++ b/robot-systest/testsuite/basic_31-multivdu_volume_multiattach.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-31] Basic NS with two multi-VDU VNF @@ -21,106 +19,113 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags basic_31 cluster_main daily +Force Tags basic_31 cluster_main daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} multivdu_multiattach_vnf -${VNFD_NAME} multivdu_multiattach-vnf -${NSD_PKG} multivdu_multiattach_ns -${NSD_NAME} multivdu_multiattach-ns +${vnfd_pkg} multivdu_multiattach_vnf +${vnfd_name} multivdu_multiattach-vnf +${nsd_pkg} multivdu_multiattach_ns +${nsd_name} multivdu_multiattach-ns # NS instance name and configuration -${NS_NAME} multivdu_multiattach -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} multivdu_multiattach +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${VDU0_USERNAME} ubuntu -${VDU0_PASSWORD} ${EMPTY} -${VDU0_PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${VDU0_PRIVATEKEY} %{HOME}/.ssh/id_rsa -${VDU1_USERNAME} ubuntu -${VDU1_PASSWORD} osmpass -${VDU1_PUBLICKEY} ${EMPTY} -${VDU1_PRIVATEKEY} ${EMPTY} +${vdu0_username} ubuntu +${vdu0_password} ${EMPTY} +${vdu0_publickey} %{HOME}/.ssh/id_rsa.pub +${vdu0_privatekey} %{HOME}/.ssh/id_rsa +${vdu1_username} ubuntu +${vdu1_password} osmpass +${vdu1_publickey} ${EMPTY} +${vdu1_privatekey} ${EMPTY} -${NS_ID} ${EMPTY} -${VNF_MEMBER_INDEX} vnf -${VNF_IP_ADDR} ${EMPTY} -${WAIT_GUARD_FOR_VM_BOOT} 50s +${ns_id} ${EMPTY} +${vnf_member_index} vnf +${vnf_ip_addr} ${EMPTY} +${wait_guard_for_vm_boot} 50s *** Test Cases *** Create Multiattach VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Multiattach NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${status} ${message}= Run Keyword And Ignore Error Variable Should Exist ${VDU0_PUBLICKEY} - Log ${status} - Log ${message} - IF ${status} == "FAIL" Set Global Variable ${VDU0_PUBLICKEY} ${EMPTY} - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${VDU0_PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} - Sleep ${WAIT_GUARD_FOR_VM_BOOT} Waiting for VM's daemons to be up and running + + ${status} ${message}= Run Keyword And Ignore Error Variable Should Exist ${vdu0_publickey} + Run Keyword If "${status}" == "FAIL" Set Global Variable ${vdu0_publickey} ${EMPTY} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${vdu0_publickey} + Set Suite Variable ${ns_id} ${id} + Sleep ${wait_guard_for_vm_boot} Waiting for VM's daemons to be up and running + Get Vnf ID - [Documentation] Get the VNF instance id from OSM. - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_MEMBER_INDEX} - Set Suite Variable ${VNF_ID} ${vnf_id} + + ${_vnf_id}= Get Vnf Id ${ns_id} ${vnf_member_index} + Set Suite Variable ${vnf_id} ${_vnf_id} + Get Vnf Management Ip Addresses - [Documentation] Get the IP addresses of the two VDU of the VNF. - ${rc} ${vdu0_ip}= Run And Return RC And Output osm vnf-show ${VNF_ID} --literal | yq -r '.vdur[0].interfaces[]."ip-address"' - Log ${rc},${vdu0_ip} - ${rc} ${vdu1_ip}= Run And Return RC And Output osm vnf-show ${VNF_ID} --literal | yq -r '.vdur[1].interfaces[]."ip-address"' - Log ${rc},${vdu1_ip} - Set Suite Variable ${MGMT_IP_ADDR_0} ${vdu0_ip} - Set Suite Variable ${MGMT_IP_ADDR_1} ${vdu1_ip} + + ${rc} ${vdu0_ip}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq -r '.vdur[0].interfaces[]."ip-address"' + ${rc} ${vdu1_ip}= Run and Return RC and Output osm vnf-show ${vnf_id} --literal | yq -r '.vdur[1].interfaces[]."ip-address"' + Set Suite Variable ${mgmnt_ip_addr_0} ${vdu0_ip} + Set Suite Variable ${mgmnt_ip_addr_1} ${vdu1_ip} + Ensure that VDUs can share data - [Documentation] Connect via SSH to the two VDUs of the VNF and check that the volume is shared as expected. - Execute Remote Command Check Rc Return Output ${MGMT_IP_ADDR_0} ${VDU0_USERNAME} ${VDU0_PASSWORD} ${VDU0_PRIVATEKEY} sudo mkfs.ext3 -F /dev/vdb && sudo mkdir /shared && sudo mount /dev/vdb /shared && sudo chown ubuntu:ubuntu /shared && echo "osmtest" > /shared/test_file + + Execute Remote Command Check Rc Return Output ${mgmnt_ip_addr_0} ${vdu0_username} ${vdu0_password} ${vdu0_privatekey} sudo mkfs.ext3 -F /dev/vdb && sudo mkdir /shared && sudo mount /dev/vdb /shared && sudo chown ubuntu:ubuntu /shared && echo "osmtest" > /shared/test_file Sleep 10s - Execute Remote Command Check Rc Return Output ${MGMT_IP_ADDR_1} ${VDU1_USERNAME} ${VDU1_PASSWORD} ${VDU1_PRIVATEKEY} sudo mkdir /shared && sudo mount /dev/vdb /shared && ls /shared - Execute Remote Command Check Rc Return Output ${MGMT_IP_ADDR_1} ${VDU1_USERNAME} ${VDU1_PASSWORD} ${VDU1_PRIVATEKEY} cat /shared/test_file - ${stdout}= Execute Remote Command Check Rc Return Output ${MGMT_IP_ADDR_0} ${VDU0_USERNAME} ${VDU0_PASSWORD} ${VDU0_PRIVATEKEY} cat /shared/test_file + Execute Remote Command Check Rc Return Output ${mgmnt_ip_addr_1} ${vdu1_username} ${vdu1_password} ${vdu1_privatekey} sudo mkdir /shared && sudo mount /dev/vdb /shared && ls /shared + Execute Remote Command Check Rc Return Output ${mgmnt_ip_addr_1} ${vdu1_username} ${vdu1_password} ${vdu1_privatekey} cat /shared/test_file + ${stdout}= Execute Remote Command Check Rc Return Output ${mgmnt_ip_addr_0} ${vdu0_username} ${vdu0_password} ${vdu0_privatekey} cat /shared/test_file Log ${stdout} Should Be Equal ${stdout} osmtest Shared data can't be read + Delete NS Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor Test - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/basic_32-volume_with_different_az.robot b/robot-systest/testsuite/basic_32-volume_with_different_az.robot index 6ea3e92066031d4eee4117f326aa5c261e4cc2a0..2b41c788744f165011f90b9a4b713344881e1bcd 100644 --- a/robot-systest/testsuite/basic_32-volume_with_different_az.robot +++ b/robot-systest/testsuite/basic_32-volume_with_different_az.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [BASIC-32] Basic NS with a volume in different availability zone @@ -21,32 +19,32 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vim_lib.resource -Resource ../lib/prometheus_lib.resource -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot -Variables ../resources/basic_32-volume_with_different_az.py +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_32-volume_with_different_az.py -Test Tags basic_32 +Force Tags basic_32 Suite Setup Run Keyword And Ignore Error Suite Preparation - *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} several_volumes_vnf -${VNFD_NAME} several_volumes-vnf -${NSD_PKG} several_volumes_ns -${NSD_NAME} several_volumes-ns +${vnfd_pkg} several_volumes_vnf +${vnfd_name} several_volumes-vnf +${nsd_pkg} several_volumes_ns +${nsd_name} several_volumes-ns # NS instance name and configuration -${NS_NAME} basic_32 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} basic_32 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa *** Test Cases *** @@ -54,60 +52,64 @@ Create VIM Target Basic [Documentation] Create a VIM Target only with the az parameters. ... Checks the status of the VIM in Prometheus after it creation. - Pass Execution If '${VIM_ACCOUNT_TYPE}' != 'openstack' Not applicable for ${VIM_ACCOUNT_TYPE} VIM + Pass Execution If '${vim_account_type}' != 'openstack' Not applicable for ${vim_account_type} VIM ${rand}= Generate Random String 6 [NUMBERS] - ${VIM_NAME_AZ}= Catenate SEPARATOR=_ ${VIM_NAME_PREFIX} ${rand} - Set Suite Variable ${VIM_NAME_AZ} - ${CREATED_VIM_ACCOUNT_ID}= Create VIM Target ${VIM_NAME_AZ} ${VIM_USER} ${VIM_PASSWORD} ${VIM_AUTH_URL} ${VIM_TENANT} ${VIM_ACCOUNT_TYPE} config=${VIM_CONFIG} - Set Suite Variable ${CREATED_VIM_ACCOUNT_ID} + ${vim_name_az}= Catenate SEPARATOR=_ ${vim_name_prefix} ${rand} + Set Suite Variable ${vim_name_az} + ${created_vim_account_id}= Create VIM Target ${vim_name_az} ${vim_user} ${vim_password} ${vim_auth_url} ${vim_tenant} ${vim_account_type} config=${vim_config} + Set Suite Variable ${created_vim_account_id} + Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. [Tags] prepare - ${id}= Create Network Service ${NSD_NAME} ${VIM_NAME_AZ} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} ${vim_name_az} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Delete NS Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor Test - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} + Delete VIM Target By ID [Documentation] Delete the VIM Target created in previous test-case by its ID. ... Checks whether the VIM Target was created or not before perform the deletion. [Tags] cleanup - ${vim_account_id}= Get VIM Target ID ${VIM_NAME_AZ} - Should Be Equal As Strings ${vim_account_id} ${CREATED_VIM_ACCOUNT_ID} + ${vim_account_id}= Get VIM Target ID ${vim_name_az} + Should Be Equal As Strings ${vim_account_id} ${created_vim_account_id} Delete VIM Target ${vim_account_id} *** Keywords *** -Suite Preparation - [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables - Set Testsuite Prometheus Variables - Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} \ No newline at end of file diff --git a/robot-systest/testsuite/epa_01-epa_sriov.robot b/robot-systest/testsuite/epa_01-epa_sriov.robot index 7b838bce10e6d373182e919a3c05f6347ce3515c..981ed58af90a99d55ccb4951410b09af110b3f55 100644 --- a/robot-systest/testsuite/epa_01-epa_sriov.robot +++ b/robot-systest/testsuite/epa_01-epa_sriov.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [EPA-01] EPA+SRIOV without underlay. @@ -20,81 +18,92 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags epa_01 cluster_epa daily regression +Force Tags epa_01 cluster_epa daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_sriov_vnf -${VNFD_NAME} hackfest_basic_sriov-vnf -${NSD_PKG} hackfest_basic_sriov_ns -${NSD_NAME} hackfest_basic_sriov-ns +${vnfd_pkg} hackfest_basic_sriov_vnf +${vnfd_name} hackfest_basic_sriov-vnf +${nsd_pkg} hackfest_basic_sriov_ns +${nsd_name} hackfest_basic_sriov-ns # NS instance name and configuration -${NS_NAME} epa_01-epa_sriov_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_ID} ${EMPTY} +${ns_name} epa_01-epa_sriov_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_id} ${EMPTY} # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} osm4u -${VNF_MEMBER_INDEX} vnf -${VNF_IP_ADDR} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} osm4u +${vnf_member_index} vnf +${vnf_ip_addr} ${EMPTY} + *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get VNF IP Address - [Documentation] Get the mgmt IP address of the VNF of the NS. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr}= Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + Check SR-IOV Interface - [Documentation] Connect via SSH to the mgmt IP address of the VNF and check that the interface is not based in VirtIO. + Sleep 30 seconds Waiting for SSH daemon to be up - Execute Remote Command Check Rc Return Output ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} lspci | grep "Ethernet controller" | grep -v "Virtio" + Execute Remote Command Check Rc Return Output ${vnf_ip_addr} ${username} ${password} ${privatekey} lspci | grep "Ethernet controller" | grep -v "Virtio" Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/epa_02-additional_capabilities.robot b/robot-systest/testsuite/epa_02-additional_capabilities.robot index d278e6307e50c690f1ef58defebf5a26415616b0..86b0e978e8aba396f1b2b9e084be59b85b374798 100644 --- a/robot-systest/testsuite/epa_02-additional_capabilities.robot +++ b/robot-systest/testsuite/epa_02-additional_capabilities.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [EPA-02] Support for additional EPA capabilities. @@ -20,94 +18,106 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot -Test Tags epa_02 cluster_epa daily regression +Force Tags epa_02 cluster_epa daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} epa_quota_vnf -${VNFD_NAME} epa_quota-vnf -${NSD_PKG} epa_quota_ns -${NSD_NAME} epa_quota-ns +${vnfd_pkg} epa_quota_vnf +${vnfd_name} epa_quota-vnf +${nsd_pkg} epa_quota_ns +${nsd_name} epa_quota-ns # NS instance name and configuration -${NS_NAME} epa_02-epa_quota_test -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} epa_02-epa_quota_test +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH public keys file -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub +${publickey} %{HOME}/.ssh/id_rsa.pub -${NS_ID} ${EMPTY} -${VNF_SERVER_ID} ${EMPTY} -${FLAVOR_PROPERTIES} ${EMPTY} -${SUCCESS_RETURN_CODE} 0 +${ns_id} ${EMPTY} +${vnf_server_id} ${EMPTY} +${flavor_properties} ${EMPTY} +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. + Remove Environment Variable OVERRIDES - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate the NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get VNF Server ID - [Documentation] Get the id of the VM at the VIM and store in VNF_SERVER_ID suite variable to be used later on. - ${vnfs_list}= Get Ns Vnf List ${NS_ID} + + ${vnfs_list}= Get Ns Vnf List ${ns_id} ${vim_id}= Get VNF VIM ID ${vnfs_list}[0] Log ${vim_id} - Set Suite Variable ${VNF_SERVER_ID} ${vim_id} + Set Suite Variable ${vnf_server_id} ${vim_id} + Get Server Flavor Properties - [Documentation] Get from the VIM the flavor properties of the VM with id VNF_SERVER_ID. - ${flavor_id}= Get Server Flavor ID ${VNF_SERVER_ID} + + ${flavor_id}= Get Server Flavor ID ${vnf_server_id} ${properties}= Get Flavor Properties ${flavor_id} Log ${properties} - Set Suite Variable ${FLAVOR_PROPERTIES} ${properties} + Set Suite Variable ${flavor_properties} ${properties} + Check Flavor Quota Properties - [Documentation] Assert that the flavor properties include the expected EPA parameters included in the descriptor. - ${rc}= Run And Return Rc echo ${FLAVOR_PROPERTIES} | grep "cpu_shares_level=custom" - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - ${rc}= Run And Return Rc echo ${FLAVOR_PROPERTIES} | grep "disk_io_shares_level=custom" - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - ${rc}= Run And Return Rc echo ${FLAVOR_PROPERTIES} | grep "memory_shares_level=custom" - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + + ${rc}= Run and Return RC echo ${flavor_properties} | grep "cpu_shares_level=custom" + Should Be Equal As Integers ${rc} ${success_return_code} + ${rc}= Run and Return RC echo ${flavor_properties} | grep "disk_io_shares_level=custom" + Should Be Equal As Integers ${rc} ${success_return_code} + ${rc}= Run and Return RC echo ${flavor_properties} | grep "memory_shares_level=custom" + Should Be Equal As Integers ${rc} ${success_return_code} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/epa_03-crud_operations_on_sdnc.robot b/robot-systest/testsuite/epa_03-crud_operations_on_sdnc.robot index 131232825785d2a2caeba4214e9088c714140034..48c9e906eedd00d007ef46d4fbb86b168129eae7 100644 --- a/robot-systest/testsuite/epa_03-crud_operations_on_sdnc.robot +++ b/robot-systest/testsuite/epa_03-crud_operations_on_sdnc.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,44 +10,45 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [EPA-03] CRUD operations on SDNC accounts. -Resource ../lib/prometheus_lib.resource -Resource ../lib/sdnc_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/sdnc_lib.robot -Variables ../resources/epa_03-crud_operations_on_sdnc_data.py +Variables %{ROBOT_DEVOPS_FOLDER}/resources/epa_03-crud_operations_on_sdnc_data.py -Test Tags epa_03 cluster_epa daily regression +Force Tags epa_03 cluster_epa daily regression Suite Setup Run Keyword And Ignore Error Suite Preparation Suite Teardown Run Keyword And Ignore Error Delete Basic SDNC *** Variables *** -${SDNC_ENABLED_MAX_WAIT_TIME} 1min -${SDNC_ENABLED_POL_TIME} 10 +${sdnc_enabled_max_wait_time} 1min +${sdnc_enabled_pol_time} 10 *** Test Cases *** Create Basic SDNC - [Documentation] Register SDN controller in OSM. + ${created_sdnc_id}= Create SDNC ${sdnc_name} ${sdnc_user} ${sdnc_password} ${sdnc_url} ${sdnc_type} - Set Suite Variable ${SDNC_ID} ${created_sdnc_id} - Wait Until Keyword Succeeds ${SDNC_ENABLED_MAX_WAIT_TIME} ${SDNC_ENABLED_POL_TIME} Check For SDNC ${SDNC_ID} + Set Suite Variable ${sdnc_id} ${created_sdnc_id} + Wait Until Keyword Succeeds ${sdnc_enabled_max_wait_time} ${sdnc_enabled_pol_time} Check for SDNC ${sdnc_id} + Check SDNC Status Is Healthy - [Documentation] Check in Prometheus that the SDN controller is in healthy state. - Check For SDNC Status ${SDNC_ID} ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} + + Check for SDNC Status ${sdnc_id} ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} + Delete Basic SDNC - [Documentation] Delete SDN controller from OSM. [Tags] cleanup + Delete SDNC ${sdnc_name} *** Keywords *** Suite Preparation - [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables. + [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables + Set Testsuite Prometheus Variables diff --git a/robot-systest/testsuite/epa_04-epa_underlay_sriov.robot b/robot-systest/testsuite/epa_04-epa_underlay_sriov.robot index 437e1387134c4d9662cb9b1ddcd3f6c347d75100..38a7023cd72ee02287ee85560c87ae0408279991 100644 --- a/robot-systest/testsuite/epa_04-epa_underlay_sriov.robot +++ b/robot-systest/testsuite/epa_04-epa_underlay_sriov.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [EPA-04] EPA underlay SR-IOV. @@ -20,96 +18,110 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot -Test Tags epa_04 cluster_epa daily regression +Force Tags epa_04 cluster_epa daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} epa_1vm_sriov_vnf -${VNFD_NAME} epa_1vm_sriov-vnf -${NSD_PKG} epa_1vm_sriov_ns -${NSD_NAME} epa_1vm_sriov-ns -${NS_NAME} epa_04 +${vnfd_pkg} epa_1vm_sriov_vnf +${vnfd_name} epa_1vm_sriov-vnf +${nsd_pkg} epa_1vm_sriov_ns +${nsd_name} epa_1vm_sriov-ns +${ns_name} epa_04 # Fixed IPs and subnet for datanet VL -${DATANET_SUBNET} 192.168.100.0/24 -${DATANET_IP1} 192.168.100.11 -${DATANET_IP2} 192.168.100.22 +${datanet_subnet} 192.168.100.0/24 +${datanet_ip1} 192.168.100.11 +${datanet_ip2} 192.168.100.22 -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${USERNAME} ubuntu -${PASSWORD} osm4u -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} , {name: datanet, ip-profile: {ip-version: ipv4, subnet-address: "${DATANET_SUBNET}"}, vnfd-connection-point-ref: [ {member-vnf-index-ref: "${VNF_MEMBER_INDEX_1}", vnfd-connection-point-ref: vnf-data-ext, ip-address: "${DATANET_IP1}"}, {member-vnf-index-ref: "${VNF_MEMBER_INDEX_2}", vnfd-connection-point-ref: vnf-data-ext, ip-address: "${DATANET_IP2}"}]} ] } -${SUCCESS_RETURN_CODE} 0 +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${username} ubuntu +${password} osm4u +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} , {name: datanet, ip-profile: {ip-version: ipv4, subnet-address: "${datanet_subnet}"}, vnfd-connection-point-ref: [ {member-vnf-index-ref: "${vnf_member_index_1}", vnfd-connection-point-ref: vnf-data-ext, ip-address: "${datanet_ip1}"}, {member-vnf-index-ref: "${vnf_member_index_2}", vnfd-connection-point-ref: vnf-data-ext, ip-address: "${datanet_ip2}"}]} ] } +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. + Remove Environment Variable OVERRIDES - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${EMPTY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${EMPTY} + Set Suite Variable ${ns_id} ${id} + Get Management Ip Addresses - [Documentation] Get the mgmt IP addresses of both VNF of the NS. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} - Set Suite Variable ${IP_MGMT_1} ${ip} - Log ${IP_MGMT_1} - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} - Set Suite Variable ${IP_MGMT_2} ${ip} - Log ${IP_MGMT_2} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} + Set Suite Variable ${ip_mgmt_1} ${ip} + Log ${ip_mgmt_1} + + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} + Set Suite Variable ${ip_mgmt_2} ${ip} + Log ${ip_mgmt_2} + Ping from Vnf1 to Vnf2 - [Documentation] Check connectivity from the first VNF to the second VNF using ping. - Variable Should Exist ${IP_MGMT_1} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_1}' is not available + + Variable Should Exist ${ip_mgmt_1} msg=IP address of the data VNF '${vnf_member_index_1}' is not available Sleep 30 seconds Wait for SSH daemon to be up - ${stdout}= Execute Remote Command Check Rc Return Output ${IP_MGMT_1} ${USERNAME} ${PASSWORD} ${EMPTY} ip addr ; ping -c 5 ${DATANET_IP2} + ${stdout}= Execute Remote Command Check Rc Return Output ${ip_mgmt_1} ${username} ${password} ${EMPTY} ip addr ; ping -c 5 ${datanet_ip2} Log ${stdout} + Ping from Vnf2 to Vnf1 - [Documentation] Check connectivity from the second VNF to the first VNF using ping. - Variable Should Exist ${IP_MGMT_2} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_2}' is not available - ${stdout}= Execute Remote Command Check Rc Return Output ${IP_MGMT_2} ${USERNAME} ${PASSWORD} ${EMPTY} ip addr ; ping -c 5 ${DATANET_IP1} + + Variable Should Exist ${ip_mgmt_2} msg=IP address of the data VNF '${vnf_member_index_2}' is not available + ${stdout}= Execute Remote Command Check Rc Return Output ${ip_mgmt_2} ${username} ${password} ${EMPTY} ip addr ; ping -c 5 ${datanet_ip1} Log ${stdout} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} + *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/epa_05-epa_underlay_passthrough.robot b/robot-systest/testsuite/epa_05-epa_underlay_passthrough.robot index a81de087a2ffbccd31c1db43ae5ec065712fb8b7..0e6dd50fbaa9c84792cb94ba730ad472f3c5879e 100644 --- a/robot-systest/testsuite/epa_05-epa_underlay_passthrough.robot +++ b/robot-systest/testsuite/epa_05-epa_underlay_passthrough.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [EPA-05] EPA underlay PASSTHROUGH. @@ -20,96 +18,111 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot -Test Tags epa_05 cluster_epa +Force Tags epa_05 cluster_epa Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} epa_1vm_passthrough_vnf -${VNFD_NAME} epa_1vm_passthrough-vnf -${NSD_PKG} epa_1vm_passthrough_ns -${NSD_NAME} epa_1vm_passthrough-ns -${NS_NAME} epa_05 +${vnfd_pkg} epa_1vm_passthrough_vnf +${vnfd_name} epa_1vm_passthrough-vnf +${nsd_pkg} epa_1vm_passthrough_ns +${nsd_name} epa_1vm_passthrough-ns +${ns_name} epa_05 # Fixed IPs and subnet for datanet VL -${DATANET_SUBNET} 192.168.110.0/24 -${DATANET_IP1} 192.168.110.11 -${DATANET_IP2} 192.168.110.22 +${datanet_subnet} 192.168.110.0/24 +${datanet_ip1} 192.168.110.11 +${datanet_ip2} 192.168.110.22 -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${USERNAME} ubuntu -${PASSWORD} osm4u -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} , {name: datanet, ip-profile: {ip-version: ipv4, subnet-address: "${DATANET_SUBNET}"}, vnfd-connection-point-ref: [ {member-vnf-index-ref: "${VNF_MEMBER_INDEX_1}", vnfd-connection-point-ref: vnf-data-ext, ip-address: "${DATANET_IP1}"}, {member-vnf-index-ref: "${VNF_MEMBER_INDEX_2}", vnfd-connection-point-ref: vnf-data-ext, ip-address: "${DATANET_IP2}"}]} ] } -${SUCCESS_RETURN_CODE} 0 +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${username} ubuntu +${password} osm4u +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} , {name: datanet, ip-profile: {ip-version: ipv4, subnet-address: "${datanet_subnet}"}, vnfd-connection-point-ref: [ {member-vnf-index-ref: "${vnf_member_index_1}", vnfd-connection-point-ref: vnf-data-ext, ip-address: "${datanet_ip1}"}, {member-vnf-index-ref: "${vnf_member_index_2}", vnfd-connection-point-ref: vnf-data-ext, ip-address: "${datanet_ip2}"}]} ] } +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. + Remove Environment Variable OVERRIDES - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${EMPTY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${EMPTY} + Set Suite Variable ${ns_id} ${id} + Get Management Ip Addresses - [Documentation] Get the mgmt IP addresses of both VNF of the NS. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} - Set Suite Variable ${IP_MGMT_1} ${ip} - Log ${IP_MGMT_1} - ${ip}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} - Set Suite Variable ${IP_MGMT_2} ${ip} - Log ${IP_MGMT_2} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} + Set Suite Variable ${ip_mgmt_1} ${ip} + Log ${ip_mgmt_1} + + ${ip} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} + Set Suite Variable ${ip_mgmt_2} ${ip} + Log ${ip_mgmt_2} + Ping from Vnf1 to Vnf2 - [Documentation] Check connectivity from the first VNF to the second VNF using ping. - Variable Should Exist ${IP_MGMT_1} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_1}' is not available + + Variable Should Exist ${ip_mgmt_1} msg=IP address of the data VNF '${vnf_member_index_1}' is not available Sleep 30 seconds Wait for SSH daemon to be up - ${stdout}= Execute Remote Command Check Rc Return Output ${IP_MGMT_1} ${USERNAME} ${PASSWORD} ${EMPTY} ip addr ; ping -c 5 ${DATANET_IP2} + ${stdout}= Execute Remote Command Check Rc Return Output ${ip_mgmt_1} ${username} ${password} ${EMPTY} ip addr ; ping -c 5 ${datanet_ip2} Log ${stdout} + Ping from Vnf2 to Vnf1 - [Documentation] Check connectivity from the second VNF to the first VNF using ping. - Variable Should Exist ${IP_MGMT_2} msg=IP address of the data VNF '${VNF_MEMBER_INDEX_2}' is not available - ${stdout}= Execute Remote Command Check Rc Return Output ${IP_MGMT_2} ${USERNAME} ${PASSWORD} ${EMPTY} ip addr ; ping -c 5 ${DATANET_IP1} + + Variable Should Exist ${ip_mgmt_2} msg=IP address of the data VNF '${vnf_member_index_2}' is not available + ${stdout}= Execute Remote Command Check Rc Return Output ${ip_mgmt_2} ${username} ${password} ${EMPTY} ip addr ; ping -c 5 ${datanet_ip1} Log ${stdout} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} + *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + + diff --git a/robot-systest/testsuite/fail_01-insufficient_resources.robot b/robot-systest/testsuite/fail_01-insufficient_resources.robot index 6c14e57667bb3738fd828e70a00b2f5cc24a28ce..022ae5acb361b674314c720b21c58ac7f84a1450 100644 --- a/robot-systest/testsuite/fail_01-insufficient_resources.robot +++ b/robot-systest/testsuite/fail_01-insufficient_resources.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [FAIL-01] A single VNF with 2 VDUs, one of them unallocatable because of resources. @@ -20,96 +18,102 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot -Test Tags fail_01 cluster_main daily regression +Force Tags fail_01 cluster_main daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} simple_2vm_vnf -${VNFD_NAME} simple_2vm-vnf -${NSD_PKG} simple_2vm_ns -${NSD_NAME} simple_2vm-ns +${vnfd_pkg} simple_2vm_vnf +${vnfd_name} simple_2vm-vnf +${nsd_pkg} simple_2vm_ns +${nsd_name} simple_2vm-ns # NS instance name and configuration -${NS_NAME_PREFIX} fail_01 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name_prefix} fail_01 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub +${publickey} %{HOME}/.ssh/id_rsa.pub # Default memory in GB for dataVM VDU (can be overwritten by VM_MEMORY_OVERRIDE environment variable) # Only used if no quota is defined in Openstack's project (VDU tries to allocate the full memory of the quota) -${DEFAULT_MEMORY} 250 +${default_memory} 250 # NS launch timeout and polling time -${NS_LAUNCH_MAX_WAIT_TIME} 5min -${NS_LAUNCH_POL_TIME} 15 +${ns_launch_max_wait_time} 5min +${ns_launch_pol_time} 15 # Openstack delete operation timeout and polling time -${OS_DELETE_MAX_WAIT_TIME} 6min -${OS_DELETE_POL_TIME} 20 +${os_delete_max_wait_time} 6min +${os_delete_pol_time} 20 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. + ${ram_quota}= Get Project Quota ram IF ${ram_quota} == -1 - ${memory}= Get Environment Variable VM_MEMORY_OVERRIDE default=${DEFAULT_MEMORY} + ${memory}= Get Environment Variable VM_MEMORY_OVERRIDE default=${default_memory} ELSE ${memory}= Evaluate ${ram_quota} / 1000 END Log ${memory} - Create VNFD Overriding Fields '%{PACKAGES_FOLDER}/${VNFD_PKG}' virtual-compute-desc.1.virtual-memory.size=${memory} + Create VNFD Overriding Fields '%{PACKAGES_FOLDER}/${vnfd_pkg}' virtual-compute-desc.1.virtual-memory.size=${memory} + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Cannot Instantiate Network Service - [Documentation] Assert failure when trying to instantiate the NS instance and there are not enough resources in the VIM. + ${rand}= Generate Random String 4 [NUMBERS] - ${ns_name}= Catenate SEPARATOR=_ ${NS_NAME_PREFIX} ${rand} - Set Suite Variable ${NS_NAME} - Log ${NS_NAME} - ${id}= Instantiate Network Service ${NS_NAME} ${NSD_NAME} %{VIM_TARGET} --config '${NS_CONFIG}' --ssh_keys ${PUBLICKEY} + ${ns_name}= Catenate SEPARATOR=_ ${ns_name_prefix} ${rand} + Set Suite Variable ${ns_name} + Log ${ns_name} + ${id}= Instantiate Network Service ${ns_name} ${nsd_name} %{VIM_TARGET} --config '${ns_config}' --ssh_keys ${publickey} Log ${id} - Set Suite Variable ${NS_ID} ${id} - WAIT UNTIL KEYWORD SUCCEEDS ${NS_LAUNCH_MAX_WAIT_TIME} ${NS_LAUNCH_POL_TIME} Check For Ns Instance To Configured ${NS_NAME} - ${rc} ${stdout}= Run And Return Rc And Output osm ns-list --filter id="${NS_ID}" | grep ${NS_ID} | awk '{print $8}' - Log ${rc},${stdout} + Set Suite Variable ${ns_id} ${id} + WAIT UNTIL KEYWORD SUCCEEDS ${ns_launch_max_wait_time} ${ns_launch_pol_time} Check For Ns Instance To Configured ${ns_name} + ${rc} ${stdout}= run and return rc and output osm ns-list --filter id="${ns_id}" | grep ${ns_id} | awk '{print $8}' + Log ${stdout} Should Contain ${stdout} BROKEN - ${rc} ${stdout}= Run And Return Rc And Output osm ns-show ${NS_ID} --literal | yq .errorDetail - Log ${rc},${stdout} + ${rc} ${stdout}= run and return rc and output osm ns-show ${ns_id} --literal | yq .errorDetail + Log ${stdout} Should Contain ${stdout} Deploying at VIM: Error at create vdu + Delete NS Instance And Check VIM - [Documentation] Delete NS instance and check that the VMs have been deleted. [Tags] cleanup - Delete NS ${NS_NAME} - WAIT UNTIL KEYWORD SUCCEEDS ${OS_DELETE_MAX_WAIT_TIME} ${OS_DELETE_POL_TIME} Check NS Servers In VIM ${NS_NAME} 0 + + Delete NS ${ns_name} + WAIT UNTIL KEYWORD SUCCEEDS ${os_delete_max_wait_time} ${os_delete_pol_time} Check NS Servers In VIM ${ns_name} 0 + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/hackfest_basic.robot b/robot-systest/testsuite/hackfest_basic.robot index 09d8aa58438eb909ef62ca6f21a895e36598ff4d..1c9d7c95e2f1b7c8a7ac3c3e1abc3fbcf5469ee1 100644 --- a/robot-systest/testsuite/hackfest_basic.robot +++ b/robot-systest/testsuite/hackfest_basic.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [HACKFEST-BASIC] Basic NS with a single-VDU VNF @@ -21,87 +19,94 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags hackfest_basic cluster_main daily regression sanity azure +Force Tags hackfest_basic cluster_main daily regression sanity azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_vnf -${VNFD_NAME} hackfest_basic-vnf -${NSD_PKG} hackfest_basic_ns -${NSD_NAME} hackfest_basic-ns +${vnfd_pkg} hackfest_basic_vnf +${vnfd_name} hackfest_basic-vnf +${nsd_pkg} hackfest_basic_ns +${nsd_name} hackfest_basic-ns # NS instance name and configuration -${NS_NAME} hfbasic -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} hfbasic +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${NS_ID} ${EMPTY} -${VNF_MEMBER_INDEX} vnf -${VNF_IP_ADDR} ${EMPTY} +${ns_id} ${EMPTY} +${vnf_member_index} vnf +${vnf_ip_addr} ${EMPTY} *** Test Cases *** Create Hackfest Basic VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Hackfest Basic NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get Vnf Ip Address - [Documentation] Get the mgmt IP address of the VNF of the NS. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} Test Ping - [Documentation] Test that the mgmt IP address of the VNF is reachable with ping. - Test Connectivity ${VNF_IP_ADDR} + Test Connectivity ${vnf_ip_addr} Test SSH Access - [Documentation] Check that the VNF is accessible via SSH in its mgmt IP address. Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_ip_addr} ${username} ${password} ${privatekey} Delete NS Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor Test - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + + diff --git a/robot-systest/testsuite/hackfest_cloudinit.robot b/robot-systest/testsuite/hackfest_cloudinit.robot index 89aeb22ccd79f973e1d15c4c1ad57fd8bd45e137..cd695adcf7f2da6d97742a22a47d8e125c64be54 100644 --- a/robot-systest/testsuite/hackfest_cloudinit.robot +++ b/robot-systest/testsuite/hackfest_cloudinit.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [HACKFEST-CLOUDINIT] Basic NS with two multi-VDU VNF with cloudinit @@ -21,86 +19,99 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags hackfest_cloudinit cluster_main daily regression sanity azure +Force Tags hackfest_cloudinit cluster_main daily regression sanity azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_cloudinit_vnf -${VNFD_NAME} hackfest_cloudinit-vnf -${NSD_PKG} hackfest_cloudinit_ns -${NSD_NAME} hackfest_cloudinit-ns +${vnfd_pkg} hackfest_cloudinit_vnf +${vnfd_name} hackfest_cloudinit-vnf +${nsd_pkg} hackfest_cloudinit_ns +${nsd_name} hackfest_cloudinit-ns # NS instance name and configuration -${NS_NAME} hfcloudinit -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} hfcloudinit +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH user and password -${USERNAME} ubuntu -${PASSWORD} osm4u +${username} ubuntu +${password} osm4u -${NS_ID} ${EMPTY} -${VNF_MEMBER_INDEX} vnf1 -${VNF_IP_ADDR} ${EMPTY} +${ns_id} ${EMPTY} +${vnf_member_index} vnf1 +${vnf_ip_addr} ${EMPTY} *** Test Cases *** Create Hackfest Cloudinit VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Hackfest Cloudinit NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${EMPTY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${EMPTY} + Set Suite Variable ${ns_id} ${id} + Get Vnf Ip Address - [Documentation] Get the mgmt IP address of the VNF of the NS. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + Test SSH Access - [Documentation] Check that the VNF is accessible via SSH in its mgmt IP address. + Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${EMPTY} + Test SSH Connection ${vnf_ip_addr} ${username} ${password} ${EMPTY} + Check Remote File Injected Via Cloud-init - [Documentation] Check that the day-0 configuration via cloudinit worked as expected in the VNF. A file should exist in the VM. - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${EMPTY} sudo cat /root/helloworld.txt + + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf_ip_addr} ${username} ${password} ${EMPTY} sudo cat /root/helloworld.txt Log ${stdout} + Delete NS Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor Test - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + + diff --git a/robot-systest/testsuite/hackfest_multivdu.robot b/robot-systest/testsuite/hackfest_multivdu.robot index 325cd9de9eeff052957a484f249fe0e7ab4ca070..14fe175d58bfb72f1d7e8857ff5aa10f41d2856a 100644 --- a/robot-systest/testsuite/hackfest_multivdu.robot +++ b/robot-systest/testsuite/hackfest_multivdu.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [HACKFEST-MULTIVDU] Basic NS with two multi-VDU VNF @@ -21,94 +19,96 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags hackfest_multivdu cluster_main daily regression azure +Force Tags hackfest_multivdu cluster_main daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_multivdu_vnf -${VNFD_NAME} hackfest_multivdu-vnf -${NSD_PKG} hackfest_multivdu_ns -${NSD_NAME} hackfest_multivdu-ns +${vnfd_pkg} hackfest_multivdu_vnf +${vnfd_name} hackfest_multivdu-vnf +${nsd_pkg} hackfest_multivdu_ns +${nsd_name} hackfest_multivdu-ns # NS instance name and configuration -${NS_NAME} hfmultivdu -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} hfmultivdu +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${NS_ID} ${EMPTY} -${VNF_MEMBER_INDEX} vnf1 -${VNF_IP_ADDR} ${EMPTY} -${WAIT_GUARD_FOR_VM_BOOT} 50s +${ns_id} ${EMPTY} +${vnf_member_index} vnf1 +${vnf_ip_addr} ${EMPTY} +${wait_guard_for_vm_boot} 50s *** Test Cases *** Create Hackfest multivdu VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Hackfest Multivdu NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${status} ${message}= Run Keyword And Ignore Error Variable Should Exist ${PUBLICKEY} - Log ${status},${message} - IF ${status} == "FAIL" Set Global Variable ${PUBLICKEY} ${EMPTY} - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} - Sleep ${WAIT_GUARD_FOR_VM_BOOT} Waiting for VM's daemons to be up and running + + ${status} ${message}= Run Keyword And Ignore Error Variable Should Exist ${publickey} + Run Keyword If "${status}" == "FAIL" Set Global Variable ${publickey} ${EMPTY} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Sleep ${wait_guard_for_vm_boot} Waiting for VM's daemons to be up and running Get Vnf Ip Address - [Documentation] Get the mgmt IP address of the VNF of the NS. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} Test Ping - [Documentation] Test that the mgmt IP address of the VNF is reachable with ping. - Test Connectivity ${VNF_IP_ADDR} + Test Connectivity ${vnf_ip_addr} Test SSH Access - [Documentation] Check that the VNF is accessible via SSH in its mgmt IP address. - ${status} ${message}= Run Keyword And Ignore Error Variable Should Exist ${PRIVATEKEY} - Log ${status},${message} - IF ${status} == "FAIL" Set Global Variable ${PRIVATEKEY} ${EMPTY} - Test SSH Connection ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + ${status} ${message}= Run Keyword And Ignore Error Variable Should Exist ${privatekey} + Run Keyword If "${status}" == "FAIL" Set Global Variable ${privatekey} ${EMPTY} + Test SSH Connection ${vnf_ip_addr} ${username} ${password} ${privatekey} Delete NS Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor Test - [Documentation] Delete NS package. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor Test - [Documentation] Delete VNF package. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/heal_01-volume_vdu_healing.robot b/robot-systest/testsuite/heal_01-volume_vdu_healing.robot index de2467a2c203b0b4854612ffee1cd43f9232095c..dfade05f33e63cce66e0d64bb0c592142d067a74 100644 --- a/robot-systest/testsuite/heal_01-volume_vdu_healing.robot +++ b/robot-systest/testsuite/heal_01-volume_vdu_healing.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [HEAL-01] Healing of a multi-volume VDU @@ -21,174 +19,177 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot + +Force Tags heal_01 cluster_heal daily -Test Tags heal_01 cluster_heal daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_VOLUMES_PKG} several_volumes_vnf -${VNFD_VOLUMES_NAME} several_volumes-vnf -${VDU_VOLUMES_NAME} several_volumes-VM -${VNF_SEVERAL_INDEX} several_volumes_vnf -${VNFD_CHARM_PKG} charm-packages/native_manual_scale_charm_vnf -${VNFD_CHARM_NAME} native_manual_scale_charm-vnf -${NSD_PKG} volumes_nativecharm_ns -${NSD_NAME} volumes_nativecharm-ns +${vnfd_volumes_pkg} several_volumes_vnf +${vnfd_volumes_name} several_volumes-vnf +${vdu_volumes_name} several_volumes-VM +${vnf_several_index} several_volumes_vnf +${vnfd_charm_pkg} charm-packages/native_manual_scale_charm_vnf +${vnfd_charm_name} native_manual_scale_charm-vnf +${nsd_pkg} volumes_nativecharm_ns +${nsd_name} volumes_nativecharm-ns # NS instance name and configuration -${NS_NAME} heal_01 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 6min +${ns_name} heal_01 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 6min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 -@{VIM_VDUS} @{EMPTY} -@{VIM_VOLUMES} @{EMPTY} +@{vim_vdus} @{EMPTY} +@{vim_volumes} @{EMPTY} *** Test Cases *** Create VNF Descriptors - [Documentation] Upload VNF packages for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_CHARM_PKG}' - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_VOLUMES_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_charm_pkg}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_volumes_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Get NS Id - [Documentation] Get NS identifier. [Tags] cleanup - ${variables}= Get Variables - IF not "\${ns_id}" in ${variables} - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${variables} Get Variables + IF not "\${ns_id}" in "${variables}" + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} END + Get VIM Objects - [Documentation] Retrieve all VMs and volumes from the NS and stores them in VIM_VDUS and VIM_VOLUMES lists. - Variable Should Exist ${NS_ID} msg=NS is not available - @{vnf_id_list}= Get Ns Vnf List ${NS_ID} + Variable Should Exist ${ns_id} msg=NS is not available + @{vnf_id_list}= Get Ns Vnf List ${ns_id} Log ${vnf_id_list} FOR ${vnf_id} IN @{vnf_id_list} Log ${vnf_id} ${id}= Get VNF VIM ID ${vnf_id} @{vdu_ids}= Split String ${id} - Append To List ${VIM_VDUS} @{vdu_ids} + Append To List ${vim_vdus} @{vdu_ids} END - FOR ${vdu_id} IN @{VIM_VDUS} + FOR ${vdu_id} IN @{vim_vdus} ${volumes_attached}= Get Server Property ${vdu_id} volumes_attached ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 IF ${match} != @{EMPTY} - IF not ${match}[0] in @{VIM_VOLUMES} - Append To List ${VIM_VOLUMES} ${match}[0] + IF not "${match}[0]" in "@{vim_volumes}" + Append To List ${vim_volumes} ${match}[0] END END END - Log Many @{VIM_VDUS} - Log Many @{VIM_VOLUMES} + Log Many @{vim_vdus} + Log Many @{vim_volumes} + Get Volume VNF Info - [Documentation] Get VDU ID, IP addresses and volumes of the VNF and stores them in suite variables to be used later on. - Variable Should Exist ${NS_ID} msg=NS is not available - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_SEVERAL_INDEX} + Variable Should Exist ${ns_id} msg=NS is not available + ${ip_addr}= Get Vnf Management Ip Address ${ns_id} ${vnf_several_index} Log ${ip_addr} - Set Suite Variable ${VNF_VOLUMES_IP_ADDR} ${ip_addr} - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_SEVERAL_INDEX} - Set Suite Variable ${VNF_VOLUMES_ID} ${vnf_id} + Set Suite Variable ${vnf_volumes_ip_addr} ${ip_addr} + + ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_several_index} + Set Suite Variable ${vnf_volumes_id} ${vnf_id} ${id}= Get VNF VIM ID ${vnf_id} - Set Suite Variable ${VDU_VOLUMES_ID} ${id} - Log ${VDU_VOLUMES_ID} - @{VOLUMES_IP_LIST}= Get Vnf Vdur IPs ${VNF_VOLUMES_ID} - Set Suite Variable @{VOLUMES_IP_LIST} @{VOLUMES_IP_LIST} - Log @{VOLUMES_IP_LIST} + Set Suite Variable ${vdu_volumes_id} ${id} + Log ${vdu_volumes_id} + + @{volumes_ip_list}= Get Vnf Vdur IPs ${vnf_volumes_id} + Set Suite Variable @{volumes_ip_list} @{volumes_ip_list} + Log @{volumes_ip_list} + Get Volumes Info - [Documentation] Get number of volumes from the VNF descriptor and get the attached volumes from the VDU instance. - ${rc} ${stdout}= Run And Return RC And Output osm vnfpkg-show ${VNFD_VOLUMES_NAME} --literal | yq '.vdu[0]."virtual-storage-desc" | length' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-show ${vnfd_volumes_name} --literal | yq '.vdu[0]."virtual-storage-desc" | length' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False ${num_virtual_storage}= Convert To Integer ${stdout} - Set Suite Variable ${VNF_NUM_VOLUMES} ${num_virtual_storage} - Log ${VNF_NUM_VOLUMES} - ${volumes_attached}= Get Server Property ${VDU_VOLUMES_ID} volumes_attached + Set Suite Variable ${vnf_num_volumes} ${num_virtual_storage} + Log ${vnf_num_volumes} + ${volumes_attached}= Get Server Property ${vdu_volumes_id} volumes_attached ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 - Set Suite Variable ${VOLUME_ID} ${match}[0] + Set Suite Variable ${volume_id} ${match}[0] + Check VDU Disks - [Documentation] Check that the number of disks in the VDU meets the expected one. - Variable Should Exist ${VNF_VOLUMES_IP_ADDR} msg=VNF is not available + Variable Should Exist ${vnf_volumes_ip_addr} msg=VNF is not available Sleep 20 seconds Wait for SSH daemon to be up - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF_VOLUMES_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} sudo lsblk -l + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf_volumes_ip_addr} ${username} ${password} ${privatekey} sudo lsblk -l Log ${stdout} ${lines}= Get Lines Containing String ${stdout} disk ${num_lines}= Get Line Count ${lines} - IF ${num_lines} < ${VNF_NUM_VOLUMES} Fail msg=Number of disks (${num_lines}) is less than specified in VDU (${VNF_NUM_VOLUMES}) + Run Keyword If ${num_lines} < ${vnf_num_volumes} Fail msg=Number of disks (${num_lines}) is less than specified in VDU (${vnf_num_volumes}) + Delete Persistent Volume VDU - [Documentation] Manually delete the VM in Openstack. - Variable Should Exist ${VDU_VOLUMES_ID} msg=VDU is not available - Delete Server ${VDU_VOLUMES_ID} + Variable Should Exist ${vdu_volumes_id} msg=VDU is not available + Delete Server ${vdu_volumes_id} Sleep 20 + Heal Persistent Volume VDU - [Documentation] Manually heal the VNF in order to re-create the deleted VM. - Variable Should Exist ${VNF_VOLUMES_ID} msg=VNF is not available - Heal Network Service ${NS_ID} --vnf ${VNF_VOLUMES_ID} --cause "Heal VM of volumes_vnf" --vdu ${VDU_VOLUMES_NAME} + Variable Should Exist ${vnf_volumes_id} msg=VNF is not available + Heal Network Service ${ns_id} --vnf ${vnf_volumes_id} --cause "Heal VM of volumes_vnf" --vdu ${vdu_volumes_name} + Check VNF After Healing - [Documentation] Check that the IDs of the VM and volumes have not changed after healing. - Variable Should Exist ${VNF_VOLUMES_ID} msg=VNF is not available - @{ip_list}= Get Vnf Vdur IPs ${VNF_VOLUMES_ID} + Variable Should Exist ${vnf_volumes_id} msg=VNF is not available + + @{ip_list}= Get Vnf Vdur IPs ${vnf_volumes_id} Log @{ip_list} - Should Be Equal ${ip_list} ${VOLUMES_IP_LIST} IP addresses have changed after healing - ${id}= Get VNF VIM ID ${VNF_VOLUMES_ID} + Should Be Equal ${ip_list} ${volumes_ip_list} IP addresses have changed after healing + + ${id}= Get VNF VIM ID ${vnf_volumes_id} Log ${id} - Should Not Be Equal ${id} ${VDU_VOLUMES_ID} VDU id has not changed after healing + Should Not Be Equal ${id} ${vdu_volumes_id} VDU id has not changed after healing + ${volumes_attached}= Get Server Property ${id} volumes_attached ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 - Should Be Equal ${match}[0] ${VOLUME_ID} Volume id has changed after healing + Should Be Equal ${match}[0] ${volume_id} Volume id has changed after healing + Sleep 30 seconds Wait for SSH daemon to be up - ${stdout}= Execute Remote Command Check Rc Return Output ${VNF_VOLUMES_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} sudo lsblk -l + ${stdout}= Execute Remote Command Check Rc Return Output ${vnf_volumes_ip_addr} ${username} ${password} ${privatekey} sudo lsblk -l Log ${stdout} ${lines}= Get Lines Containing String ${stdout} disk ${num_lines}= Get Line Count ${lines} - IF ${num_lines} < ${VNF_NUM_VOLUMES} Fail msg=Number of disks (${num_lines}) is less than specified in VDU (${VNF_NUM_VOLUMES}) + Run Keyword If ${num_lines} < ${vnf_num_volumes} Fail msg=Number of disks (${num_lines}) is less than specified in VDU (${vnf_num_volumes}) + Update VIM Objects - [Documentation] Retrieve all VMs and volumes from the NS and stores them in VIM_VDUS and VIM_VOLUMES lists. - ... This is done again to guarantee that all objects are cleaned in the VIM in case the heal operation - ... added new objects. - Variable Should Exist ${NS_ID} msg=NS is not available + Variable Should Exist ${ns_id} msg=NS is not available @{vdu_updated}= Create List - @{vnf_id_list}= Get Ns Vnf List ${NS_ID} + @{vnf_id_list}= Get Ns Vnf List ${ns_id} FOR ${vnf_id} IN @{vnf_id_list} ${id}= Get VNF VIM ID ${vnf_id} @{vdu_ids}= Split String ${id} Append To List ${vdu_updated} @{vdu_ids} FOR ${id} IN @{vdu_ids} - IF not ${id} in @{VIM_VDUS} - Append To List ${VIM_VDUS} ${id} + IF not "${id}" in "@{vim_vdus}" + Append To List ${vim_vdus} ${id} END END END @@ -196,65 +197,64 @@ Update VIM Objects ${volumes_attached}= Get Server Property ${vdu_id} volumes_attached ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 IF ${match} != @{EMPTY} - IF not ${match}[0] in @{VIM_VOLUMES} - Append To List ${VIM_VOLUMES} ${match}[0] + IF not "${match}[0]" in "@{vim_volumes}" + Append To List ${vim_volumes} ${match}[0] END END END - Log Many @{VIM_VDUS} - Log Many @{VIM_VOLUMES} + Log Many @{vim_vdus} + Log Many @{vim_volumes} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} -Delete VNF Descriptors - [Documentation] Delete VNF packages from OSM. - [Tags] cleanup - Delete VNFD ${VNFD_VOLUMES_NAME} - Delete VNFD ${VNFD_CHARM_NAME} -Delete Remaining Objects in VIM - [Documentation] Delete any remaining objects (volumes, VMs, etc.) in the VIM. +Delete VNF Descriptors [Tags] cleanup - Delete Objects In VIM + Delete VNFD ${vnfd_volumes_name} + Delete VNFD ${vnfd_charm_name} -*** Keywords *** -Suite Cleanup - [Documentation] Test Suite Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_VOLUMES_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_CHARM_NAME} - Run Keyword If Any Tests Failed Delete Objects In VIM - -Delete Objects In VIM - [Documentation] Clean up remaining VMs and volumes directly from the VIM. +Delete Objects in VIM + [Tags] cleanup ${error}= Set Variable 0 - FOR ${vol_id} IN @{VIM_VOLUMES} + FOR ${vol_id} IN @{vim_volumes} Log Checking if volume ${vol_id} is still in VIM ${exists}= Check If Volume Exists ${vol_id} - IF ${exists} + IF ${exists}!=0 ${error}= Set Variable 1 Log Deleting volume ${vol_id} Run Keyword And Ignore Error Delete Volume ${vol_id} END END - FOR ${vdu_id} IN @{VIM_VDUS} + FOR ${vdu_id} IN @{vim_vdus} Log Checking if server ${vdu_id} is still in VIM ${status}= Run Keyword And Ignore Error Get Server Property ${vdu_id} id Log ${status}[0] - IF ${status}[0] == 'PASS' + IF '${status}[0]' == 'PASS' ${error}= Set Variable 1 Log Deleting server ${vdu_id} Run Keyword And Ignore Error Delete Server ${vdu_id} END END - IF ${error}==1 Fail Some objects created by test were not deleted in VIM + IF ${error}==1 + Fail Some objects created by test were not deleted in VIM + END + + +*** Keywords *** +Suite Cleanup + [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_volumes_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_charm_name} + Run Keyword If Any Tests Failed Delete Objects in VIM diff --git a/robot-systest/testsuite/heal_02-scale_vdu_healing.robot b/robot-systest/testsuite/heal_02-scale_vdu_healing.robot index dec75720a91de658946bf19866a3c138095f1b54..86886ef960df8827fa9b9a345998354da6300d97 100644 --- a/robot-systest/testsuite/heal_02-scale_vdu_healing.robot +++ b/robot-systest/testsuite/heal_02-scale_vdu_healing.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [HEAL-02] Healing of scaled charm VDUs @@ -21,177 +19,177 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot + +Force Tags heal_02 cluster_heal daily -Test Tags heal_02 cluster_heal daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_VOLUMES_PKG} several_volumes_vnf -${VNFD_VOLUMES_NAME} several_volumes-vnf -${VDU_VOLUMES_NAME} several_volumes-VM -${VNF_SEVERAL_INDEX} several_volumes_vnf -${VNFD_CHARM_PKG} charm-packages/native_manual_scale_charm_vnf -${VNFD_CHARM_NAME} native_manual_scale_charm-vnf -${VDU_CHARM_NAME} mgmtVM -${VNF_CHARM_INDEX} charm_vnf -${VNF_CHARM_SCALING_GROUP} manual-scaling_mgmtVM -${VNF_CHARM_CLOUDINIT_FILE} /root/helloworld.txt -${VNF_CHARM_DAY1_FILE} /home/ubuntu/first-touch -${NSD_PKG} volumes_nativecharm_ns -${NSD_NAME} volumes_nativecharm-ns +${vnfd_volumes_pkg} several_volumes_vnf +${vnfd_volumes_name} several_volumes-vnf +${vdu_volumes_name} several_volumes-VM +${vnf_several_index} several_volumes_vnf +${vnfd_charm_pkg} charm-packages/native_manual_scale_charm_vnf +${vnfd_charm_name} native_manual_scale_charm-vnf +${vdu_charm_name} mgmtVM +${vnf_charm_index} charm_vnf +${vnf_charm_scaling_group} manual-scaling_mgmtVM +${vnf_charm_cloudinit_file} /root/helloworld.txt +${vnf_charm_day1_file} /home/ubuntu/first-touch +${nsd_pkg} volumes_nativecharm_ns +${nsd_name} volumes_nativecharm-ns # NS instance name and configuration -${FLAVOR_NAME_PREFIX} osm.heal02 -${NS_NAME} heal_02 -${NS_TIMEOUT} 6min -${SCALE_WAIT_TIME} 5min +${flavor_name_prefix} osm.heal02 +${ns_name} heal_02 +${ns_timeout} 6min +${scale_wait_time} 5min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 -@{VIM_VDUS} @{EMPTY} -@{VIM_VOLUMES} @{EMPTY} +@{vim_vdus} @{EMPTY} +@{vim_volumes} @{EMPTY} *** Test Cases *** Create VNF Descriptors - [Documentation] Upload VNF packages for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_CHARM_PKG}' - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_VOLUMES_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_charm_pkg}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_volumes_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Create Test Flavor - [Documentation] Create a flavor that will be used at NS instantiation time and save it as FLAVOR_ID. ${rand}= Generate Random String 6 [NUMBERS] - ${flavor_name}= Catenate SEPARATOR=_ ${FLAVOR_NAME_PREFIX} ${rand} + ${flavor_name}= Catenate SEPARATOR=_ ${flavor_name_prefix} ${rand} ${id}= Create Flavor ${flavor_name} 1 1024 10 - Set Suite Variable ${FLAVOR_ID} ${id} + Set Suite Variable ${flavor_id} ${id} + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite using the previously created flavor. - ${ns_config}= Set Variable {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}],vnf: [ {member-vnf-index: charm_vnf, vdu: [{ id: mgmtVM, vim-flavor-id: ${FLAVOR_ID}}]}] } - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${ns_config} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + ${ns_config}= Set Variable {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}],vnf: [ {member-vnf-index: charm_vnf, vdu: [{ id: mgmtVM, vim-flavor-id: ${flavor_id}}]}] } + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Get NS Id - [Documentation] Get NS identifier. [Tags] cleanup - ${variables}= Get Variables - IF not "\${ns_id}" in ${variables} - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${variables} Get Variables + IF not "\${ns_id}" in "${variables}" + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} END + Scale Out Charm VNF - [Documentation] Perform a manual scale-out operation of the charm VNF. - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_CHARM_INDEX} - Set Suite Variable ${VNF_CHARM_ID} ${vnf_id} - @{vdur_list}= Get Vnf Vdur Names ${VNF_CHARM_ID} + ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_charm_index} + Set Suite Variable ${vnf_charm_id} ${vnf_id} + @{vdur_list}= Get Vnf Vdur Names ${vnf_charm_id} ${vdurs}= Get Length ${vdur_list} - Set Suite Variable ${INITIAL_VDUR_COUNT} ${vdurs} - Execute Manual VNF Scale ${NS_NAME} ${VNF_CHARM_INDEX} ${VNF_CHARM_SCALING_GROUP} SCALE_OUT ${SCALE_WAIT_TIME} - @{vdur_list}= Get Vnf Vdur Names ${VNF_CHARM_ID} + Set Suite Variable ${initial_vdur_count} ${vdurs} + Execute Manual VNF Scale ${ns_name} ${vnf_charm_index} ${vnf_charm_scaling_group} SCALE_OUT ${scale_wait_time} + @{vdur_list}= Get Vnf Vdur Names ${vnf_charm_id} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} != ${INITIAL_VDUR_COUNT} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + Run Keyword If ${vdurs} != ${initial_vdur_count} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + Get VIM Objects - [Documentation] Retrieve all VMs and volumes from the NS and stores them in VIM_VDUS and VIM_VOLUMES lists. - Variable Should Exist ${NS_ID} msg=NS is not available - @{vnf_id_list}= Get Ns Vnf List ${NS_ID} + Variable Should Exist ${ns_id} msg=NS is not available + @{vnf_id_list}= Get Ns Vnf List ${ns_id} Log ${vnf_id_list} FOR ${vnf_id} IN @{vnf_id_list} Log ${vnf_id} ${id}= Get VNF VIM ID ${vnf_id} @{vdu_ids}= Split String ${id} - Append To List ${VIM_VDUS} @{vdu_ids} + Append To List ${vim_vdus} @{vdu_ids} END - FOR ${vdu_id} IN @{VIM_VDUS} + FOR ${vdu_id} IN @{vim_vdus} ${volumes_attached}= Get Server Property ${vdu_id} volumes_attached ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 IF ${match} != @{EMPTY} - IF not ${match}[0] in @{VIM_VOLUMES} - Append To List ${VIM_VOLUMES} ${match}[0] + IF not "${match}[0]" in "@{vim_volumes}" + Append To List ${vim_volumes} ${match}[0] END END END - Log Many @{VIM_VDUS} - Log Many @{VIM_VOLUMES} + Log Many @{vim_vdus} + Log Many @{vim_volumes} + Get Charm VNF Info - [Documentation] Get VDU ID and IP addresses of the charm VNF and stores them in VDU_CHARM_IDS and CHARM_IP_LIST. - Variable Should Exist ${NS_ID} msg=NS is not available - ${variables}= Get Variables - IF not "\${vnf_charm_id}" in ${variables} - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_CHARM_INDEX} - Set Suite Variable ${VNF_CHARM_ID} ${vnf_id} + Variable Should Exist ${ns_id} msg=NS is not available + ${variables} Get Variables + IF not "\${vnf_charm_id}" in "${variables}" + ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_charm_index} + Set Suite Variable ${vnf_charm_id} ${vnf_id} END - ${id}= Get VNF VIM ID ${VNF_CHARM_ID} - @{VDU_CHARM_IDS}= Split String ${id} - Set Suite Variable @{VDU_CHARM_IDS} @{VDU_CHARM_IDS} - Log ${VDU_CHARM_IDS}[1] - @{CHARM_IP_LIST}= Get Vnf Vdur IPs ${VNF_CHARM_ID} - Set Suite Variable @{CHARM_IP_LIST} @{CHARM_IP_LIST} + ${id}= Get VNF VIM ID ${vnf_charm_id} + @{vdu_charm_ids}= Split String ${id} + Set Suite Variable @{vdu_charm_ids} @{vdu_charm_ids} + Log ${vdu_charm_ids}[1] + @{charm_ip_list}= Get Vnf Vdur IPs ${vnf_charm_id} + Set Suite Variable @{charm_ip_list} @{charm_ip_list} + Halt Charm VDU - [Documentation] Halt one of the VM of the charm VNF. - Variable Should Exist @{VDU_CHARM_IDS} msg=VDU is not available - Halt Server ${VDU_CHARM_IDS}[1] + Variable Should Exist @{vdu_charm_ids} msg=VDU is not available + Halt Server ${vdu_charm_ids}[1] Sleep 15 + Heal Charm VDU - [Documentation] Heal manually via OSM commands all stopped VMs . They should be started again. - Variable Should Exist ${VNF_CHARM_ID} msg=VNF is not available - Heal Network Service ${NS_ID} --vnf ${VNF_CHARM_ID} --cause "Heal VM of charm_vnf" --vdu ${VDU_CHARM_NAME} --count-index 1 --run-day1 + Variable Should Exist ${vnf_charm_id} msg=VNF is not available + Heal Network Service ${ns_id} --vnf ${vnf_charm_id} --cause "Heal VM of charm_vnf" --vdu ${vdu_charm_name} --count-index 1 --run-day1 + Check VNF After Healing - [Documentation] Check that the IDs of the VM and volumes have not changed after healing. - Variable Should Exist ${VNF_CHARM_ID} msg=VNF is not available - @{ip_list}= Get Vnf Vdur IPs ${VNF_CHARM_ID} - Should Be Equal ${ip_list} ${CHARM_IP_LIST} IP addresses have changed after healing - ${id}= Get VNF VIM ID ${VNF_CHARM_ID} + Variable Should Exist ${vnf_charm_id} msg=VNF is not available + + @{ip_list}= Get Vnf Vdur IPs ${vnf_charm_id} + Should Be Equal ${ip_list} ${charm_ip_list} IP addresses have changed after healing + + ${id}= Get VNF VIM ID ${vnf_charm_id} @{ids}= Split String ${id} - Should Be Equal ${VDU_CHARM_IDS}[0] ${ids}[0] VDU[0] id has changed after healing - Should Not Be Equal ${VDU_CHARM_IDS}[1] ${ids}[1] VDU[1] id has not changed after healing - Should Be Equal ${VDU_CHARM_IDS}[2] ${ids}[2] VDU[2] id has changed after healing - ${ip}= Get Vdu Attribute ${VNF_CHARM_ID} ip-address 1 - ${stdout}= Execute Remote Command Check Rc Return Output ${ip} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} sudo ls ${VNF_CHARM_CLOUDINIT_FILE} + Should Be Equal ${vdu_charm_ids}[0] ${ids}[0] VDU[0] id has changed after healing + Should Not Be Equal ${vdu_charm_ids}[1] ${ids}[1] VDU[1] id has not changed after healing + Should Be Equal ${vdu_charm_ids}[2] ${ids}[2] VDU[2] id has changed after healing + + ${ip}= Get Vdu Attribute ${vnf_charm_id} ip-address 1 + ${stdout}= Execute Remote Command Check Rc Return Output ${ip} ${username} ${password} ${privatekey} sudo ls ${vnf_charm_cloudinit_file} Log ${stdout} - Check If Remote File Exists ${ip} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${VNF_CHARM_DAY1_FILE} - ${vim_info}= Get Vdu Attribute ${VNF_CHARM_ID} vim_info 1 - Should Contain ${vim_info} id: ${FLAVOR_ID} msg=Flavor ID is incorrect + Check If remote File Exists ${ip} ${username} ${password} ${privatekey} ${vnf_charm_day1_file} + ${vim_info}= Get Vdu Attribute ${vnf_charm_id} vim_info 1 + Should Contain ${vim_info} id: ${flavor_id} msg=Flavor ID is incorrect + Update VIM Objects - [Documentation] Retrieve all VMs and volumes from the NS and stores them in VIM_VDUS and VIM_VOLUMES lists. - ... This is done again to guarantee that all objects are cleaned in the VIM in case the heal operation - ... added new objects. - Variable Should Exist ${NS_ID} msg=NS is not available + Variable Should Exist ${ns_id} msg=NS is not available @{vdu_updated}= Create List - @{vnf_id_list}= Get Ns Vnf List ${NS_ID} + @{vnf_id_list}= Get Ns Vnf List ${ns_id} FOR ${vnf_id} IN @{vnf_id_list} ${id}= Get VNF VIM ID ${vnf_id} @{vdu_ids}= Split String ${id} Append To List ${vdu_updated} @{vdu_ids} FOR ${id} IN @{vdu_ids} - IF not ${id} in @{VIM_VDUS} - Append To List ${VIM_VDUS} ${id} + IF not "${id}" in "@{vim_vdus}" + Append To List ${vim_vdus} ${id} END END END @@ -199,63 +197,49 @@ Update VIM Objects ${volumes_attached}= Get Server Property ${vdu_id} volumes_attached ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 IF ${match} != @{EMPTY} - IF not ${match}[0] in @{VIM_VOLUMES} - Append To List ${VIM_VOLUMES} ${match}[0] + IF not "${match}[0]" in "@{vim_volumes}" + Append To List ${vim_volumes} ${match}[0] END END END - Log Many @{VIM_VDUS} - Log Many @{VIM_VOLUMES} + Log Many @{vim_vdus} + Log Many @{vim_volumes} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} -Delete VNF Descriptors - [Documentation] Delete VNF packages from OSM. - [Tags] cleanup - Delete VNFD ${VNFD_VOLUMES_NAME} - Delete VNFD ${VNFD_CHARM_NAME} -Delete Remaining Objects In VIM - [Documentation] Delete any remaining objects (volumes, VMs, etc.) in the VIM. +Delete VNF Descriptors [Tags] cleanup - Delete Objects In VIM + Delete VNFD ${vnfd_volumes_name} + Delete VNFD ${vnfd_charm_name} -*** Keywords *** -Suite Cleanup - [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_VOLUMES_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_CHARM_NAME} - Run Keyword If Any Tests Failed Delete Objects In VIM - -Delete Objects In VIM - [Documentation] Clean up remaining VMs and volumes directly from the VIM. - Delete Flavor ${FLAVOR_ID} +Delete Objects in VIM + [Tags] cleanup + Delete Flavor ${flavor_id} ${error}= Set Variable 0 - FOR ${vol_id} IN @{VIM_VOLUMES} + FOR ${vol_id} IN @{vim_volumes} Log Checking if volume ${vol_id} is still in VIM ${exists}= Check If Volume Exists ${vol_id} - IF ${exists} + IF ${exists}!=0 ${error}= Set Variable 1 Log Deleting volume ${vol_id} Run Keyword And Ignore Error Delete Volume ${vol_id} END END - FOR ${vdu_id} IN @{VIM_VDUS} + FOR ${vdu_id} IN @{vim_vdus} Log Checking if server ${vdu_id} is still in VIM ${status}= Run Keyword And Ignore Error Get Server Property ${vdu_id} id Log ${status}[0] - IF ${status}[0] == 'PASS' + IF '${status}[0]' == 'PASS' ${error}= Set Variable 1 Log Deleting server ${vdu_id} Run Keyword And Ignore Error Delete Server ${vdu_id} @@ -264,3 +248,14 @@ Delete Objects In VIM IF ${error}==1 Fail Some objects created by test were not deleted in VIM END + + +*** Keywords *** +Suite Cleanup + [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_volumes_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_charm_name} + Run Keyword If Any Tests Failed Delete Objects in VIM diff --git a/robot-systest/testsuite/heal_03-multiple_healing.robot b/robot-systest/testsuite/heal_03-multiple_healing.robot index 93b3851e78dc42ac4ac02a54025f6c5aba83a865..f52bb95bef6cc675c85d9ee8f2e1010f4f87969c 100644 --- a/robot-systest/testsuite/heal_03-multiple_healing.robot +++ b/robot-systest/testsuite/heal_03-multiple_healing.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [HEAL-03] Healing of multiple VDUs @@ -21,187 +19,188 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot + +Force Tags heal_03 cluster_heal daily -Test Tags heal_03 cluster_heal daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_VOLUMES_PKG} several_volumes_vnf -${VNFD_VOLUMES_NAME} several_volumes-vnf -${VDU_VOLUMES_NAME} several_volumes-VM -${VNF_SEVERAL_INDEX} several_volumes_vnf -${VNFD_CHARM_PKG} charm-packages/native_manual_scale_charm_vnf -${VNFD_CHARM_NAME} native_manual_scale_charm-vnf -${VDU_CHARM_NAME} mgmtVM -${VNF_CHARM_INDEX} charm_vnf -${VNF_CHARM_SCALING_GROUP} manual-scaling_mgmtVM -${VNF_CHARM_CLOUDINIT_FILE} /root/helloworld.txt -${VNF_CHARM_DAY1_FILE} /home/ubuntu/first-touch -${NSD_PKG} volumes_nativecharm_ns -${NSD_NAME} volumes_nativecharm-ns +${vnfd_volumes_pkg} several_volumes_vnf +${vnfd_volumes_name} several_volumes-vnf +${vdu_volumes_name} several_volumes-VM +${vnf_several_index} several_volumes_vnf +${vnfd_charm_pkg} charm-packages/native_manual_scale_charm_vnf +${vnfd_charm_name} native_manual_scale_charm-vnf +${vdu_charm_name} mgmtVM +${vnf_charm_index} charm_vnf +${vnf_charm_scaling_group} manual-scaling_mgmtVM +${vnf_charm_cloudinit_file} /root/helloworld.txt +${vnf_charm_day1_file} /home/ubuntu/first-touch +${nsd_pkg} volumes_nativecharm_ns +${nsd_name} volumes_nativecharm-ns # NS instance name and configuration -${NS_NAME} heal_03 -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 6min -${SCALE_WAIT_TIME} 5min +${ns_name} heal_03 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 6min +${scale_wait_time} 5min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 -@{VIM_VDUS} @{EMPTY} -@{VIM_VOLUMES} @{EMPTY} +@{vim_vdus} @{EMPTY} +@{vim_volumes} @{EMPTY} *** Test Cases *** Create VNF Descriptors - [Documentation] Upload VNF packages for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_CHARM_PKG}' - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_VOLUMES_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_charm_pkg}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_volumes_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Get NS Id - [Documentation] Get NS identifier and stores as suite variable to be used later on. [Tags] cleanup - ${variables}= Get Variables - IF not "\${ns_id}" in ${variables} - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${variables} Get Variables + IF not "\${ns_id}" in "${variables}" + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} END + Scale Out Charm VNF - [Documentation] Perform a manual scale-out operation of the charm VNF. - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_CHARM_INDEX} - Set Suite Variable ${VNF_CHARM_ID} ${vnf_id} - @{vdur_list}= Get Vnf Vdur Names ${VNF_CHARM_ID} + ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_charm_index} + Set Suite Variable ${vnf_charm_id} ${vnf_id} + @{vdur_list}= Get Vnf Vdur Names ${vnf_charm_id} ${vdurs}= Get Length ${vdur_list} - Set Suite Variable ${INITIAL_VDUR_COUNT} ${vdurs} - Execute Manual VNF Scale ${NS_NAME} ${VNF_CHARM_INDEX} ${VNF_CHARM_SCALING_GROUP} SCALE_OUT ${SCALE_WAIT_TIME} - @{vdur_list}= Get Vnf Vdur Names ${VNF_CHARM_ID} + Set Suite Variable ${initial_vdur_count} ${vdurs} + Execute Manual VNF Scale ${ns_name} ${vnf_charm_index} ${vnf_charm_scaling_group} SCALE_OUT ${scale_wait_time} + @{vdur_list}= Get Vnf Vdur Names ${vnf_charm_id} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} != ${INITIAL_VDUR_COUNT} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + Run Keyword If ${vdurs} != ${initial_vdur_count} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + Get VIM Objects - [Documentation] Retrieve all VMs and volumes from the NS and stores them in VIM_VDUS and VIM_VOLUMES lists. - Variable Should Exist ${NS_ID} msg=NS is not available - @{vnf_id_list}= Get Ns Vnf List ${NS_ID} + Variable Should Exist ${ns_id} msg=NS is not available + @{vnf_id_list}= Get Ns Vnf List ${ns_id} Log ${vnf_id_list} FOR ${vnf_id} IN @{vnf_id_list} Log ${vnf_id} ${id}= Get VNF VIM ID ${vnf_id} @{vdu_ids}= Split String ${id} - Append To List ${VIM_VDUS} @{vdu_ids} + Append To List ${vim_vdus} @{vdu_ids} END - FOR ${vdu_id} IN @{VIM_VDUS} + FOR ${vdu_id} IN @{vim_vdus} ${volumes_attached}= Get Server Property ${vdu_id} volumes_attached ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 IF ${match} != @{EMPTY} - IF not ${match}[0] in @{VIM_VOLUMES} - Append To List ${VIM_VOLUMES} ${match}[0] + IF not "${match}[0]" in "@{vim_volumes}" + Append To List ${vim_volumes} ${match}[0] END END END - Log Many @{VIM_VDUS} - Log Many @{VIM_VOLUMES} + Log Many @{vim_vdus} + Log Many @{vim_volumes} + Get Charm VNF Info - [Documentation] Get VDU ID and IP addresses of the charm VNF and stores them in VDU_CHARM_IDS and CHARM_IP_LIST. - Variable Should Exist ${NS_ID} msg=NS is not available - ${variables}= Get Variables - IF not "\${vnf_charm_id}" in ${variables} - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_CHARM_INDEX} - Set Suite Variable ${VNF_CHARM_ID} ${vnf_id} + Variable Should Exist ${ns_id} msg=NS is not available + ${variables} Get Variables + IF not "\${vnf_charm_id}" in "${variables}" + ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_charm_index} + Set Suite Variable ${vnf_charm_id} ${vnf_id} END - ${id}= Get VNF VIM ID ${VNF_CHARM_ID} + ${id}= Get VNF VIM ID ${vnf_charm_id} @{vdu_charm_ids}= Split String ${id} - Set Suite Variable @{VDU_CHARM_IDS} @{vdu_charm_ids} - Log ${VDU_CHARM_IDS}[1] - @{charm_ip_list}= Get Vnf Vdur IPs ${VNF_CHARM_ID} - Set Suite Variable @{CHARM_IP_LIST} @{charm_ip_list} + Set Suite Variable @{vdu_charm_ids} @{vdu_charm_ids} + Log ${vdu_charm_ids}[1] + @{charm_ip_list}= Get Vnf Vdur IPs ${vnf_charm_id} + Set Suite Variable @{charm_ip_list} @{charm_ip_list} + Get Volume VNF Info - [Documentation] Get info about volumes and VM of the VNF with several volumes and stores them in suite variables. - Variable Should Exist ${NS_ID} msg=NS is not available - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_SEVERAL_INDEX} + Variable Should Exist ${ns_id} msg=NS is not available + ${ip_addr}= Get Vnf Management Ip Address ${ns_id} ${vnf_several_index} Log ${ip_addr} - Set Suite Variable ${VNF_VOLUMES_IP_ADDR} ${ip_addr} - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_SEVERAL_INDEX} - Set Suite Variable ${VNF_VOLUMES_ID} ${vnf_id} + Set Suite Variable ${vnf_volumes_ip_addr} ${ip_addr} + + ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_several_index} + Set Suite Variable ${vnf_volumes_id} ${vnf_id} ${id}= Get VNF VIM ID ${vnf_id} - Set Suite Variable ${VDU_VOLUMES_ID} ${id} - Log ${VDU_VOLUMES_ID} - @{volumes_ip_list}= Get Vnf Vdur IPs ${VNF_VOLUMES_ID} - Set Suite Variable @{VOLUMES_IP_LIST} @{volumes_ip_list} - Log @{VOLUMES_IP_LIST} + Set Suite Variable ${vdu_volumes_id} ${id} + Log ${vdu_volumes_id} + + @{volumes_ip_list}= Get Vnf Vdur IPs ${vnf_volumes_id} + Set Suite Variable @{volumes_ip_list} @{volumes_ip_list} + Log @{volumes_ip_list} + Stop VDUs - [Documentation] Stop all VMs. - Variable Should Exist @{VDU_CHARM_IDS} msg=Charm VDUs are not available - Variable Should Exist ${VDU_VOLUMES_ID} msg=Volume VDU is not available - Stop Server ${VDU_CHARM_IDS}[1] - Stop Server ${VDU_CHARM_IDS}[2] - Stop Server ${VDU_VOLUMES_ID} + Variable Should Exist @{vdu_charm_ids} msg=Charm VDUs are not available + Variable Should Exist ${vdu_volumes_id} msg=Volume VDU is not available + Stop Server ${vdu_charm_ids}[1] + Stop Server ${vdu_charm_ids}[2] + Stop Server ${vdu_volumes_id} Sleep 30 + Heal VDUs - [Documentation] Heal manually via OSM commands all stopped VMs . They should be started again. - Variable Should Exist ${VNF_CHARM_ID} msg=Charm VNF is not available - Variable Should Exist ${VNF_VOLUMES_ID} msg=Volume VNF is not available - Heal Network Service ${NS_ID} --vnf ${VNF_VOLUMES_ID} --cause "Heal myvdu1 of several_volumes_vnf" --vdu several_volumes-VM --vnf ${VNF_CHARM_ID} --cause "Heal two VMs of native_manual_scale_charm_vnf" --vdu mgmtVM --count-index 1 --run-day1 --vdu mgmtVM --count-index 2 + Variable Should Exist ${vnf_charm_id} msg=Charm VNF is not available + Variable Should Exist ${vnf_volumes_id} msg=Volume VNF is not available + Heal Network Service ${ns_id} --vnf ${vnf_volumes_id} --cause "Heal myvdu1 of several_volumes_vnf" --vdu several_volumes-VM --vnf ${vnf_charm_id} --cause "Heal two VMs of native_manual_scale_charm_vnf" --vdu mgmtVM --count-index 1 --run-day1 --vdu mgmtVM --count-index 2 + Check VNFs After Healing - [Documentation] Check that the IDs of the VM and volumes have not changed after healing. - Variable Should Exist ${VNF_CHARM_ID} msg=Charm VNF is not available - Variable Should Exist ${VNF_VOLUMES_ID} msg=Volume VNF is not available - ${id}= Get VNF VIM ID ${VNF_CHARM_ID} + Variable Should Exist ${vnf_charm_id} msg=Charm VNF is not available + Variable Should Exist ${vnf_volumes_id} msg=Volume VNF is not available + ${id}= Get VNF VIM ID ${vnf_charm_id} @{ids}= Split String ${id} - Should Be Equal ${VDU_CHARM_IDS}[0] ${ids}[0] VDU[0] id has changed after healing - Should Not Be Equal ${VDU_CHARM_IDS}[1] ${ids}[1] VDU[1] id has not changed after healing - Should Not Be Equal ${VDU_CHARM_IDS}[2] ${ids}[2] VDU[2] id has not changed after healing - ${id}= Get VNF VIM ID ${VNF_VOLUMES_ID} - Should Not Be Equal ${id} ${VDU_VOLUMES_ID} VDU id has not changed after healing - ${ip}= Get Vdu Attribute ${VNF_CHARM_ID} ip-address 1 - ${stdout}= Execute Remote Command Check Rc Return Output ${ip} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} sudo ls ${VNF_CHARM_CLOUDINIT_FILE} + Should Be Equal ${vdu_charm_ids}[0] ${ids}[0] VDU[0] id has changed after healing + Should Not Be Equal ${vdu_charm_ids}[1] ${ids}[1] VDU[1] id has not changed after healing + Should Not Be Equal ${vdu_charm_ids}[2] ${ids}[2] VDU[2] id has not changed after healing + + ${id}= Get VNF VIM ID ${vnf_volumes_id} + Should Not Be Equal ${id} ${vdu_volumes_id} VDU id has not changed after healing + + ${ip}= Get Vdu Attribute ${vnf_charm_id} ip-address 1 + ${stdout}= Execute Remote Command Check Rc Return Output ${ip} ${username} ${password} ${privatekey} sudo ls ${vnf_charm_cloudinit_file} Log ${stdout} - Check If Remote File Exists ${ip} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${VNF_CHARM_DAY1_FILE} + Check If remote File Exists ${ip} ${username} ${password} ${privatekey} ${vnf_charm_day1_file} + Update VIM Objects - [Documentation] Retrieve all VMs and volumes from the NS and stores them in VIM_VDUS and VIM_VOLUMES lists. - ... This is done again to guarantee that all objects are cleaned in the VIM in case the heal operation - ... added new objects. - Variable Should Exist ${NS_ID} msg=NS is not available + Variable Should Exist ${ns_id} msg=NS is not available @{vdu_updated}= Create List - @{vnf_id_list}= Get Ns Vnf List ${NS_ID} + @{vnf_id_list}= Get Ns Vnf List ${ns_id} FOR ${vnf_id} IN @{vnf_id_list} ${id}= Get VNF VIM ID ${vnf_id} @{vdu_ids}= Split String ${id} Append To List ${vdu_updated} @{vdu_ids} FOR ${id} IN @{vdu_ids} - IF not ${id} in @{VIM_VDUS} - Append To List ${VIM_VDUS} ${id} + IF not "${id}" in "@{vim_vdus}" + Append To List ${vim_vdus} ${id} END END END @@ -209,48 +208,48 @@ Update VIM Objects ${volumes_attached}= Get Server Property ${vdu_id} volumes_attached ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 IF ${match} != @{EMPTY} - IF not ${match}[0] in @{VIM_VOLUMES} - Append To List ${VIM_VOLUMES} ${match}[0] + IF not "${match}[0]" in "@{vim_volumes}" + Append To List ${vim_volumes} ${match}[0] END END END - Log Many @{VIM_VDUS} - Log Many @{VIM_VOLUMES} + Log Many @{vim_vdus} + Log Many @{vim_volumes} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} + Delete VNF Descriptors - [Documentation] Delete VNF packages from OSM. [Tags] cleanup - Delete VNFD ${VNFD_VOLUMES_NAME} - Delete VNFD ${VNFD_CHARM_NAME} + Delete VNFD ${vnfd_volumes_name} + Delete VNFD ${vnfd_charm_name} -Delete Objects In VIM - [Documentation] Delete any remaining objects (volumes, VMs, etc.) in the VIM. + +Delete Objects in VIM [Tags] cleanup ${error}= Set Variable 0 - FOR ${vol_id} IN @{VIM_VOLUMES} + FOR ${vol_id} IN @{vim_volumes} Log Checking if volume ${vol_id} is still in VIM ${exists}= Check If Volume Exists ${vol_id} - IF ${exists} + IF ${exists}!=0 ${error}= Set Variable 1 Log Deleting volume ${vol_id} Run Keyword And Ignore Error Delete Volume ${vol_id} END END - FOR ${vdu_id} IN @{VIM_VDUS} + FOR ${vdu_id} IN @{vim_vdus} Log Checking if server ${vdu_id} is still in VIM ${status}= Run Keyword And Ignore Error Get Server Property ${vdu_id} id Log ${status}[0] - IF ${status}[0] == 'PASS' + IF '${status}[0]' == 'PASS' ${error}= Set Variable 1 Log Deleting server ${vdu_id} Run Keyword And Ignore Error Delete Server ${vdu_id} @@ -264,7 +263,8 @@ Delete Objects In VIM *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_VOLUMES_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_CHARM_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_volumes_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_charm_name} diff --git a/robot-systest/testsuite/heal_04-autohealing.robot b/robot-systest/testsuite/heal_04-autohealing.robot index c560194deaab7c82ce1702dd20521f0e82d63978..ada204a31f0979788906da336e72bcddc7fef5f6 100644 --- a/robot-systest/testsuite/heal_04-autohealing.robot +++ b/robot-systest/testsuite/heal_04-autohealing.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [HEAL-04] Autohealing of NS @@ -21,163 +19,163 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/openstack_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot -Test Tags heal_04 cluster_heal daily +Force Tags heal_04 cluster_heal daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} autoheal_vnf -${VNFD_NAME} autoheal_vnfd -${VDU_NAME} autoheal_vnfd-VM -${VNF_INDEX} autoheal-basic-1 -${NSD_PKG} autoheal_ns -${NSD_NAME} autoheal_nsd +${vnfd_pkg} autoheal_vnf +${vnfd_name} autoheal_vnfd +${vdu_name} autoheal_vnfd-VM +${vnf_index} autoheal-basic-1 +${nsd_pkg} autoheal_ns +${nsd_name} autoheal_nsd # NS instance name and configuration -${NS_NAME} heal_04 -${NS_CONFIG} {vld: [ {name: mgmt, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} heal_04 +${ns_config} {vld: [ {name: mgmt, vim-network-name: %{VIM_MGMT_NET}} ] } # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 -# Healing wait time -${HEALING_POL_TIME} 15sec -${HEALING_MAX_WAIT_TIME} 10m +#Healing wait time +${healing_pol_time} 15sec +${healing_max_wait_time} 10m -@{VIM_VDUS} @{EMPTY} +@{vim_vdus} @{EMPTY} *** Test Cases *** Create VNF Descriptors - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Network Service Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get NS Id - [Documentation] Get NS identifier and stores as suite variable to be used later on. [Tags] cleanup - ${variables}= Get Variables - IF not "\${ns_id}" in ${variables} - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${variables} Get Variables + IF not "\${ns_id}" in "${variables}" + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} END + Get VIM Objects - [Documentation] Retrieve all VMs and volumes from the NS and stores them in VIM_VDUS and VIM_VOLUMES lists. - Variable Should Exist ${NS_ID} msg=NS is not available - @{vnf_id_list}= Get Ns Vnf List ${NS_ID} + Variable Should Exist ${ns_id} msg=NS is not available + @{vnf_id_list}= Get Ns Vnf List ${ns_id} Log ${vnf_id_list} FOR ${vnf_id} IN @{vnf_id_list} Log ${vnf_id} ${id}= Get VNF VIM ID ${vnf_id} @{vdu_ids}= Split String ${id} - Append To List ${VIM_VDUS} @{vdu_ids} + Append To List ${vim_vdus} @{vdu_ids} END - Log Many @{VIM_VDUS} + Log Many @{vim_vdus} + Get VNF Info - [Documentation] Get VDU ID and IP addresses of the VNF and stores them to be used later on. - Variable Should Exist ${NS_ID} msg=NS is not available - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_INDEX} + Variable Should Exist ${ns_id} msg=NS is not available + ${ip_addr}= Get Vnf Management Ip Address ${ns_id} ${vnf_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} - ${vnf_id}= Get Vnf Id ${NS_ID} ${VNF_INDEX} - Set Suite Variable ${VNF_AUTOHEAL_ID} ${vnf_id} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + + ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_index} + Set Suite Variable ${vnf_autoheal_id} ${vnf_id} ${id}= Get VNF VIM ID ${vnf_id} - Set Suite Variable ${VDU_AUTOHEAL_ID} ${id} - Log ${VDU_AUTOHEAL_ID} - @{AUTOHEAL_IP_LIST}= Get Vnf Vdur IPs ${VNF_AUTOHEAL_ID} - Set Suite Variable @{AUTOHEAL_IP_LIST} @{AUTOHEAL_IP_LIST} - Log @{AUTOHEAL_IP_LIST} + Set Suite Variable ${vdu_autoheal_id} ${id} + Log ${vdu_autoheal_id} + + @{autoheal_ip_list}= Get Vnf Vdur IPs ${vnf_autoheal_id} + Set Suite Variable @{autoheal_ip_list} @{autoheal_ip_list} + Log @{autoheal_ip_list} + Stop Autoheal VDU - [Documentation] Stop one VM of the VNF. - Variable Should Exist ${VDU_AUTOHEAL_ID} msg=VDU is not available - Halt Server ${VDU_AUTOHEAL_ID} + Variable Should Exist ${vdu_autoheal_id} msg=VDU is not available + Halt Server ${vdu_autoheal_id} Sleep 30 + Wait For Autohealing To Be Completed - [Documentation] Wait for auto-healing to be completed. OSM will detect that the VM is down and will re-create it. - ${healing_max_wait_time}= Convert Time ${HEALING_MAX_WAIT_TIME} result_format=number - ${healing_max_wait_time}= Evaluate ${healing_max_wait_time} * ${VIM_TIMEOUT_MULTIPLIER} - Wait Until Keyword Succeeds ${healing_max_wait_time} ${HEALING_POL_TIME} Get Operations By Type ${NS_ID} heal - ${stdout}= Get Operations By Type ${NS_ID} heal - Wait Until Keyword Succeeds ${healing_max_wait_time} ${HEALING_POL_TIME} Check For NS Operation Ended ${stdout} + ${healing_max_wait_time}= Convert Time ${healing_max_wait_time} result_format=number + ${healing_max_wait_time}= Evaluate ${healing_max_wait_time} * ${vim_timeout_multiplier} + Wait Until Keyword Succeeds ${healing_max_wait_time} ${healing_pol_time} Get Operations By Type ${ns_id} heal + ${stdout}= Get Operations By Type ${ns_id} heal + Wait Until Keyword Succeeds ${healing_max_wait_time} ${healing_pol_time} Check For NS Operation Ended ${stdout} Check For NS Operation Completed ${stdout} + Check VNF After Healing - [Documentation] Check that the ID of the VM and the IP addresses have not changed after healing. - Variable Should Exist ${VNF_AUTOHEAL_ID} msg=VNF is not available - @{ip_list}= Get Vnf Vdur IPs ${VNF_AUTOHEAL_ID} + Variable Should Exist ${vnf_autoheal_id} msg=VNF is not available + + @{ip_list}= Get Vnf Vdur IPs ${vnf_autoheal_id} Log @{ip_list} - Should Be Equal ${ip_list} ${AUTOHEAL_IP_LIST} IP addresses have changed after healing - ${id}= Get VNF VIM ID ${VNF_AUTOHEAL_ID} + Should Be Equal ${ip_list} ${autoheal_ip_list} IP addresses have changed after healing + + ${id}= Get VNF VIM ID ${vnf_autoheal_id} Log ${id} - Should Not Be Equal ${id} ${VDU_AUTOHEAL_ID} VDU id has not changed after healing + Should Not Be Equal ${id} ${vdu_autoheal_id} VDU id has not changed after healing + Update VIM Objects - [Documentation] Retrieve all VMs from the NS and stores them in VIM_VDUS. - ... This is done again to guarantee that all objects are cleaned in the VIM in case the heal operation - ... added new objects. - Variable Should Exist ${NS_ID} msg=NS is not available - @{vnf_id_list}= Get Ns Vnf List ${NS_ID} + Variable Should Exist ${ns_id} msg=NS is not available + @{vnf_id_list}= Get Ns Vnf List ${ns_id} FOR ${vnf_id} IN @{vnf_id_list} ${id}= Get VNF VIM ID ${vnf_id} @{vdu_ids}= Split String ${id} FOR ${id} IN @{vdu_ids} - IF not ${id} in @{VIM_VDUS} - Append To List ${VIM_VDUS} ${id} + IF not "${id}" in "@{vim_vdus}" + Append To List ${vim_vdus} ${id} END END END - Log Many @{VIM_VDUS} + Log Many @{vim_vdus} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} + Delete VNF Descriptors - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} -Delete Objects In VIM - [Documentation] Delete any remaining objects (volumes, VMs, etc.) in the VIM. + +Delete Objects in VIM [Tags] cleanup ${error}= Set Variable 0 - FOR ${vdu_id} IN @{VIM_VDUS} + FOR ${vdu_id} IN @{vim_vdus} Log Checking if server ${vdu_id} is still in VIM ${status}= Run Keyword And Ignore Error Get Server Property ${vdu_id} id Log ${status}[0] - IF ${status}[0] == 'PASS' + IF '${status}[0]' == 'PASS' ${error}= Set Variable 1 Log Deleting server ${vdu_id} Run Keyword And Ignore Error Delete Server ${vdu_id} @@ -191,6 +189,7 @@ Delete Objects In VIM *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/k8s_01-create_k8s_cluster.robot b/robot-systest/testsuite/k8s_01-create_k8s_cluster.robot index b87a174fa04ce3ca8017be3ff8ec44995444e6ab..899aed4faa21d2d417ab41c401803720f66b344b 100644 --- a/robot-systest/testsuite/k8s_01-create_k8s_cluster.robot +++ b/robot-systest/testsuite/k8s_01-create_k8s_cluster.robot @@ -1,4 +1,3 @@ -*** Comments *** # Copyright 2020 Canonical Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-01] Create K8s cluster. @@ -22,135 +20,148 @@ Library String Library Collections Library Process Library SSHLibrary -Library ../lib/renderTemplate.py +Library %{ROBOT_DEVOPS_FOLDER}/lib/renderTemplate.py -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags k8s_01 cluster_k8s +Force Tags k8s_01 cluster_k8s Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package files -${VNFD_PKG1} k8s_jujucontroller_vnf.tar.gz -${VNFD_PKG2} k8s_jujumachine_vnf.tar.gz -${NSD_PKG} k8s_juju_ns.tar.gz -${VNFD_NAME1} k8s_jujucontroller_vnf -${VNFD_NAME2} k8s_jujumachine_vnf -${NSD_NAME} k8s_juju +${vnfd_pkg1} k8s_jujucontroller_vnf.tar.gz +${vnfd_pkg2} k8s_jujumachine_vnf.tar.gz +${nsd_pkg} k8s_juju_ns.tar.gz +${vnfd_name1} k8s_jujucontroller_vnf +${vnfd_name2} k8s_jujumachine_vnf +${nsd_name} k8s_juju # VNF Member indexes -${VNF_MEMBER_INDEX_1} k8s_vnf1 -${VNF_MEMBER_INDEX_2} k8s_vnf2 -${VNF_MEMBER_INDEX_3} k8s_vnf3 -${VNF_MEMBER_INDEX_4} k8s_vnf4 -${VNF_MEMBER_INDEX_5} k8s_juju +${vnf_member_index_1} k8s_vnf1 +${vnf_member_index_2} k8s_vnf2 +${vnf_member_index_3} k8s_vnf3 +${vnf_member_index_4} k8s_vnf4 +${vnf_member_index_5} k8s_juju + +# Username +${username} ubuntu # Kubeconfig file -${KUBECONFIG_FILE} /home/ubuntu/.kube/config +${kubeconfig_file} /home/ubuntu/.kube/config # NS instance name -${NS_NAME} k8s-cluster +${ns_name} k8s-cluster # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} # Template and config file to use -${TEMPLATE} k8s_juju_template.yaml -${CONFIG_FILE} config.yaml +${template} k8s_juju_template.yaml +${config_file} config.yaml *** Test Cases *** Render a template - [Documentation] Generate from a template the instantiation parameters that will be used for the NS instance. - ${stdout}= Render Template ../resources/${TEMPLATE} ../resources/${CONFIG_FILE} IP_VM1=%{IP_VM1} IP_VM2=%{IP_VM2} IP_VM3=%{IP_VM3} IP_VM4=%{IP_VM4} IP_JUJU=%{IP_JUJU} NETWORK=%{VIM_MGMT_NET} + + ${stdout}= Render template %{ROBOT_DEVOPS_FOLDER}/resources/${template} %{ROBOT_DEVOPS_FOLDER}/resources/${config_file} IP_VM1=%{IP_VM1} IP_VM2=%{IP_VM2} IP_VM3=%{IP_VM3} IP_VM4=%{IP_VM4} IP_JUJU=%{IP_JUJU} NETWORK=%{VIM_MGMT_NET} Log To Console \n${stdout} + Create Controller VNF Descriptor - [Documentation] Upload first VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG1}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg1}' + Create Machines VNF Descriptor - [Documentation] Upload second VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG2}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg2}' + Create K8s Cluster NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate K8s Cluster Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ns_config=${EMPTY} publickey=${PUBLICKEY} ns_launch_max_wait_time=70min config_file=%{ROBOT_DEVOPS_FOLDER}/resources/${CONFIG_FILE} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ns_config=${EMPTY} publickey=${publickey} ns_launch_max_wait_time=70min config_file=%{ROBOT_DEVOPS_FOLDER}/resources/${config_file} + Set Suite Variable ${ns_id} ${id} + Get Management Ip Addresses - [Documentation] Get the mgmt IP addresses of the five VNF of the NS. - ${ip_addr_1}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} + + ${ip_addr_1} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} Log ${ip_addr_1} - Set Suite Variable ${VNF_1_IP_ADDR} ${ip_addr_1} - ${ip_addr_2}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} + Set Suite Variable ${vnf_1_ip_addr} ${ip_addr_1} + ${ip_addr_2} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} Log ${ip_addr_2} - Set Suite Variable ${VNF_2_IP_ADDR} ${ip_addr_2} - ${ip_addr_3}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_3} + Set Suite Variable ${vnf_2_ip_addr} ${ip_addr_2} + ${ip_addr_3} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_3} Log ${ip_addr_3} - Set Suite Variable ${VNF_3_IP_ADDR} ${ip_addr_3} - ${ip_addr_4}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_4} + Set Suite Variable ${vnf_3_ip_addr} ${ip_addr_3} + ${ip_addr_4} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_4} Log ${ip_addr_4} - Set Suite Variable ${VNF_4_IP_ADDR} ${ip_addr_4} - ${ip_addr_5}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_5} + Set Suite Variable ${vnf_4_ip_addr} ${ip_addr_4} + ${ip_addr_5} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_5} Log ${ip_addr_5} - Set Suite Variable ${VNF_5_IP_ADDR} ${ip_addr_5} + Set Suite Variable ${vnf_5_ip_addr} ${ip_addr_5} + Test SSH Access - [Documentation] Check that the five VNF are accessible via SSH in their respective mgmt IP address. - Variable Should Exist ${VNF_1_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${VNF_2_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_2}' is not available - Variable Should Exist ${VNF_3_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_3}' is not available - Variable Should Exist ${VNF_4_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_4}' is not available - Variable Should Exist ${VNF_5_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_5}' is not available + + Variable Should Exist ${vnf_1_ip_addr} msg=IP address of the management VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${vnf_2_ip_addr} msg=IP address of the management VNF '${vnf_member_index_2}' is not available + Variable Should Exist ${vnf_3_ip_addr} msg=IP address of the management VNF '${vnf_member_index_3}' is not available + Variable Should Exist ${vnf_4_ip_addr} msg=IP address of the management VNF '${vnf_member_index_4}' is not available + Variable Should Exist ${vnf_5_ip_addr} msg=IP address of the management VNF '${vnf_member_index_5}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_3_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_4_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_5_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_1_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_2_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_3_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_4_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_5_ip_addr} ${username} ${password} ${privatekey} + + +Check kubeconfig file + + Check If remote File Exists ${vnf_5_ip_addr} ${username} ${password} ${privatekey} ${kubeconfig_file} -Check Kubeconfig File - [Documentation] Check that the Kubeconfig file of the provisioned cluster is present in the VNF. - Check If Remote File Exists ${VNF_5_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${KUBECONFIG_FILE} Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete Controller VNF Descriptor - [Documentation] Delete first VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME1} + + Delete VNFD ${vnfd_name1} Delete Machines VNF Descriptor - [Documentation] Delete second VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME2} + + Delete VNFD ${vnfd_name2} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME1} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME2} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/k8s_02-k8scluster_creation.robot b/robot-systest/testsuite/k8s_02-k8scluster_creation.robot index cb86e3775ad9b8b429bf60af7402a6724fd85846..b3b9c86e212a05c722a9209fc037dea2e2e4ef59 100644 --- a/robot-systest/testsuite/k8s_02-k8scluster_creation.robot +++ b/robot-systest/testsuite/k8s_02-k8scluster_creation.robot @@ -1,4 +1,3 @@ -*** Comments *** # Copyright 2020 Canonical Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-02] K8s cluster addition. @@ -22,47 +20,47 @@ Library String Library Collections Library Process -Resource ../lib/k8scluster_lib.resource -Resource ../lib/vim_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot -Variables ../resources/basic_01-crud_operations_on_vim_targets_data.py +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_01-crud_operations_on_vim_targets_data.py -Test Tags k8s_02 cluster_k8s daily regression azure +Force Tags k8s_02 cluster_k8s daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # K8s cluster name and version -${K8SCLUSTER_NAME} k8s02 -${K8SCLUSTER_VERSION} v1 - +${k8scluster_name} k8s02 +${k8scluster_version} v1 *** Test Cases *** Create VIM Target Basic [Documentation] Creates a VIM for the K8s cluster to be anchored against + ${rand}= Generate Random String 6 [NUMBERS] - ${VIM_NAME}= Catenate SEPARATOR=_ ${vim_name_prefix} ${rand} - Set Suite Variable ${VIM_NAME} - ${CREATED_VIM_ACCOUNT_ID}= Create VIM Target ${VIM_NAME} ${VIM_USER} ${VIM_PASSWORD} ${VIM_AUTH_URL} ${VIM_TENANT} ${VIM_ACCOUNT_TYPE} - Set Suite Variable ${CREATED_VIM_ACCOUNT_ID} + ${vim_name}= Catenate SEPARATOR=_ ${vim_name_prefix} ${rand} + Set Suite Variable ${vim_name} + ${created_vim_account_id}= Create VIM Target ${vim_name} ${vim_user} ${vim_password} ${vim_auth_url} ${vim_tenant} ${vim_account_type} + Set Suite Variable ${created_vim_account_id} Add K8s Cluster To OSM - [Documentation] Creates a VIM for the K8s cluster to be anchored against - Create K8s Cluster %{K8S_CREDENTIALS} ${K8SCLUSTER_VERSION} ${VIM_NAME} %{VIM_MGMT_NET} ${K8SCLUSTER_NAME} + + Create K8s Cluster %{K8S_CREDENTIALS} ${k8scluster_version} ${vim_name} %{VIM_MGMT_NET} ${k8scluster_name} Remove K8s Cluster from OSM - [Documentation] Delete K8s cluster. [Tags] cleanup - Delete K8s Cluster ${K8SCLUSTER_NAME} + + Delete K8s Cluster ${k8scluster_name} Delete VIM Target By ID [Documentation] Delete the VIM Target created in previous test-case by its ID. ... Checks whether the VIM Target was created or not before perform the deletion. [Tags] cleanup - ${vim_account_id}= Get VIM Target ID ${VIM_NAME} - Should Be Equal As Strings ${vim_account_id} ${CREATED_VIM_ACCOUNT_ID} + ${vim_account_id}= Get VIM Target ID ${vim_name} + Should Be Equal As Strings ${vim_account_id} ${created_vim_account_id} Delete VIM Target ${vim_account_id} @@ -70,4 +68,4 @@ Delete VIM Target By ID Suite Cleanup [Documentation] Test Suit Cleanup: Deleting K8s Cluster - Run Keyword If Any Tests Failed Delete K8s Cluster ${K8SCLUSTER_NAME} + Run Keyword If Any Tests Failed Delete K8s Cluster ${k8scluster_name} diff --git a/robot-systest/testsuite/k8s_03-simple_k8s.robot b/robot-systest/testsuite/k8s_03-simple_k8s.robot index a6838eac490c0e5430a68cdbd77b038714e1cd40..99991f9f67cca917edc79b51871b7cf198531ea7 100644 --- a/robot-systest/testsuite/k8s_03-simple_k8s.robot +++ b/robot-systest/testsuite/k8s_03-simple_k8s.robot @@ -1,4 +1,3 @@ -*** Comments *** # Copyright 2020 Canonical Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-03] Simple K8s. @@ -22,85 +20,76 @@ Library String Library Collections Library Process -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/package_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/package_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot -Test Tags k8s_03 cluster_k8s regression azure +Force Tags k8s_03 cluster_k8s regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/native_k8s_charm_vnf -${VNFD_NAME} native_k8s_charm-vnf -${NSD_PKG} charm-packages/native_k8s_charm_ns -${NSD_NAME} native_k8s_charm-ns +${vnfd_pkg} charm-packages/native_k8s_charm_vnf +${vnfd_name} native_k8s_charm-vnf +${nsd_pkg} charm-packages/native_k8s_charm_ns +${nsd_name} native_k8s_charm-ns # NS instance name and configuration -${NS_NAME} native-k8s -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } - -${NS_ID} ${EMPTY} -${PUBLICKEY} ${EMPTY} -${VNF_MEMBER_INDEX} native_k8s_charm-vnf -${ACTION_NAME} changecontent -${KDU_NAME} native-kdu -${APPLICATION_NAME} nginx -${CUSTOMTITLE} Day 2 Action +${ns_name} native-k8s +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_id} ${EMPTY} +${publickey} ${EMPTY} +${vnf_member_index} native_k8s_charm-vnf +${action_name} changecontent +${kdu_name} native-kdu +${application_name} nginx +${customtitle} Day 2 Action *** Test Cases *** Create Simple K8s VNF Descriptor - [Documentation] Upload NF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create Simple K8s Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Network Service K8s Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} Execute Day 2 Operations [Documentation] Performs one Day 2 operation per VNF that creates a new file. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX} ${KDU_NAME} application-name=${APPLICATION_NAME} customtitle=${CUSTOMTITLE} - Log ${ns_op_id} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${action_name} ${vnf_member_index} ${kdu_name} application-name=${application_name} customtitle=${customtitle} Delete NS K8s Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} Delete VNF Descriptor Test - [Documentation] Delete NF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} Delete VNF NS Packages - [Documentation] Delete tar.gz NF and NS package files. [Tags] cleanup - Delete Package '%{PACKAGES_FOLDER}/${VNFD_PKG}' - Delete Package '%{PACKAGES_FOLDER}/${NSD_PKG}' + Delete Package '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Delete Package '%{PACKAGES_FOLDER}/${nsd_pkg}' *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/k8s_04-openldap_helm.robot b/robot-systest/testsuite/k8s_04-openldap_helm.robot index 74cd4d5fbac75c1535f74f3b6fe8a8e130113168..41baac887f20d30e7035e9faee2c7bb77565a9ea 100644 --- a/robot-systest/testsuite/k8s_04-openldap_helm.robot +++ b/robot-systest/testsuite/k8s_04-openldap_helm.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-04] Openldap Helm chart. @@ -20,119 +18,102 @@ Library String Library Collections Library Process -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot -Test Tags k8s_04 cluster_k8s daily regression sanity azure +Force Tags k8s_04 cluster_k8s daily regression sanity azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} openldap_knf -${VNFD_NAME} openldap_knf -${NSD_PKG} openldap_ns -${NSD_NAME} openldap_ns +${vnfd_pkg} openldap_knf +${vnfd_name} openldap_knf +${nsd_pkg} openldap_ns +${nsd_name} openldap_ns # NS instance name and configuration -${NS_NAME} ldap -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}], additionalParamsForVnf: [ {member-vnf-index: openldap, additionalParamsForKdu: [ {kdu_name: ldap, additionalParams: {service: {type: LoadBalancer }, adminPassword: admin}} ] } ] } - -${NS_ID} ${EMPTY} -${PUBLICKEY} ${EMPTY} -${VNF_MEMBER_INDEX} openldap -${KDU_NAME} ldap -${UPGRADE_ACTION} upgrade -${ROLLBACK_ACTION} rollback -${REPLICA_COUNT} 3 +${ns_name} ldap +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}], additionalParamsForVnf: [ {member-vnf-index: openldap, additionalParamsForKdu: [ {kdu_name: ldap, additionalParams: {service: {type: LoadBalancer }, adminPassword: admin}} ] } ] } +${ns_id} ${EMPTY} +${publickey} ${EMPTY} +${vnf_member_index} openldap +${kdu_name} ldap +${upgrade_action} upgrade +${rollback_action} rollback +${replica_count} 3 *** Test Cases *** Create Package For OpenLDAP CNF - [Documentation] Upload NF package for the testsuite. [Tags] prepare - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create Package For OpenLDAP NS - [Documentation] Upload NS package for the testsuite. [Tags] prepare - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Create Network Service Instance - [Documentation] Instantiate NS for the testsuite. [Tags] prepare - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Log ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} Get Ns Id - [Documentation] Retrieve NS instance id to be used later on. [Tags] verify - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} Get Vnf Id - [Documentation] Retrieve NF instance id to be used later on. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] + Set Suite Variable ${vnf_id} ${vnfr_list}[0] Execute Upgrade Operation - [Documentation] Perform OSM action to upgrade the number of replicas of a deployment in the CNF. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${UPGRADE_ACTION} ${VNF_MEMBER_INDEX} ${KDU_NAME} replicaCount=${REPLICA_COUNT} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${upgrade_action} ${vnf_member_index} ${kdu_name} replicaCount=${replica_count} Check Replicas After Upgrade Operation - [Documentation] Check that the number of replicas after the upgrade is the expected one. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU_NAME} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu_name} Log ${count} - Should Be Equal As Integers ${count} ${REPLICA_COUNT} + Should Be Equal As Integers ${count} ${replica_count} Execute Rollback Operation - [Documentation] Perform OSM action to rollback the previous upgrade of the CNF. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${ROLLBACK_ACTION} ${VNF_MEMBER_INDEX} ${KDU_NAME} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${rollback_action} ${vnf_member_index} ${kdu_name} Check Replicas After Rollback Operation - [Documentation] Check that the number of replcias after the rollback is the expected one. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU_NAME} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu_name} Log ${count} Should Be Empty ${count} Delete Network Service Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} Delete VNF Descriptor Test - [Documentation] Delete NF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/k8s_05-k8s_proxy_charms.robot b/robot-systest/testsuite/k8s_05-k8s_proxy_charms.robot index be3bb31c1c3e3c85a960ff46dea7f4265913dfd7..f2175fd1e90915e029cf081e308d0345dd230b36 100644 --- a/robot-systest/testsuite/k8s_05-k8s_proxy_charms.robot +++ b/robot-systest/testsuite/k8s_05-k8s_proxy_charms.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,119 +10,132 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-05] K8s Proxy Charm. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags k8s_05 cluster_ee_config cluster_k8s_charms regression azure +Force Tags k8s_05 cluster_ee_config cluster_k8s_charms regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/k8s_proxy_charm_vnf -${VNFD_NAME} k8s_proxy_charm-vnf -${NSD_PKG} charm-packages/k8s_proxy_charm_ns -${NSD_NAME} k8s_proxy_charm-ns +${vnfd_pkg} charm-packages/k8s_proxy_charm_vnf +${vnfd_name} k8s_proxy_charm-vnf +${nsd_pkg} charm-packages/k8s_proxy_charm_ns +${nsd_name} k8s_proxy_charm-ns # NS instance name and configuration -${NS_NAME} k8s_05-k8s_proxy_charm -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} k8s_05-k8s_proxy_charm +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${ACTION_NAME} touch -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME_1} /home/ubuntu/mytouch1 -${DAY_2_FILE_NAME_2} /home/ubuntu/mytouch2 +${action_name} touch +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name_1} /home/ubuntu/mytouch1 +${day_2_file_name_2} /home/ubuntu/mytouch2 *** Test Cases *** Create Charm VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Charm Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Get Management Ip Addresses - [Documentation] Get the mgmt IP address of the two VNF of the NS. - ${ip_addr_1}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} + + ${ip_addr_1} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} Log ${ip_addr_1} - Set Suite Variable ${VNF_1_IP_ADDR} ${ip_addr_1} - ${ip_addr_2}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} + Set Suite Variable ${vnf_1_ip_addr} ${ip_addr_1} + ${ip_addr_2} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} Log ${ip_addr_2} - Set Suite Variable ${VNF_2_IP_ADDR} ${ip_addr_2} + Set Suite Variable ${vnf_2_ip_addr} ${ip_addr_2} + Test SSH Access - [Documentation] Check that both VNF are accessible via SSH in their respective mgmt IP address. - Variable Should Exist ${VNF_1_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${VNF_2_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_2}' is not available + + Variable Should Exist ${vnf_1_ip_addr} msg=IP address of the management VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${vnf_2_ip_addr} msg=IP address of the management VNF '${vnf_member_index_2}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_1_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_2_ip_addr} ${username} ${password} ${privatekey} + Check Remote Files Created Via Day 1 Operations [Documentation] The Charm VNF has a Day 1 operation that creates a file named ${day_1_file_name}. ... This test checks whether that files have been created or not. - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Execute Day 2 Operations [Documentation] Performs one Day 2 operation per VNF that creates a new file. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id_1}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX_1} filename=${DAY_2_FILE_NAME_1} - Log ${ns_op_id_1} - ${ns_op_id_2}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX_2} filename=${DAY_2_FILE_NAME_2} - Log ${ns_op_id_2} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id_1}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index_1} filename=${day_2_file_name_1} + ${ns_op_id_2}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index_2} filename=${day_2_file_name_2} + Check Remote Files Created Via Day 2 Operations [Documentation] Check whether the files created in the previous test via Day 2 operations exist or not. - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME_1} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME_2} + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name_1} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name_2} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete NF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/k8s_06-k8s_secure_key_management.robot b/robot-systest/testsuite/k8s_06-k8s_secure_key_management.robot index d422d3213b9290db8bbddc3ad7706dc0affd8b81..efec24366a485f1d95672ec32244fbb2e0d83b47 100644 --- a/robot-systest/testsuite/k8s_06-k8s_secure_key_management.robot +++ b/robot-systest/testsuite/k8s_06-k8s_secure_key_management.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,133 +10,139 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-06] K8s Secure Key Management. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags k8s_06 cluster_ee_config cluster_k8s_charms regression azure +Force Tags k8s_06 cluster_ee_config cluster_k8s_charms regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/nopasswd_k8s_proxy_charm_vnf -${VNFD_NAME} nopasswd_k8s_proxy_charm-vnf -${NSD_PKG} charm-packages/nopasswd_k8s_proxy_charm_ns -${NSD_NAME} nopasswd_k8s_proxy_charm-ns +${vnfd_pkg} charm-packages/nopasswd_k8s_proxy_charm_vnf +${vnfd_name} nopasswd_k8s_proxy_charm-vnf +${nsd_pkg} charm-packages/nopasswd_k8s_proxy_charm_ns +${nsd_name} nopasswd_k8s_proxy_charm-ns # NS instance name and configuration -${NS_NAME} k8s_06-nopasswd_k8s_proxy_charm -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} k8s_06-nopasswd_k8s_proxy_charm +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${ACTION_NAME} touch -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME_1} /home/ubuntu/mytouch1 -${DAY_2_FILE_NAME_2} /home/ubuntu/mytouch2 +${action_name} touch +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name_1} /home/ubuntu/mytouch1 +${day_2_file_name_2} /home/ubuntu/mytouch2 +${ns_timeout} 15min *** Test Cases *** Create Charm VNF Descriptor - [Documentation] Upload VNF package for the testsuite. [Tags] prepare - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. [Tags] prepare - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Charm Network Service - [Documentation] Instantiate NS for the testsuite. [Tags] prepare - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Log ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} Get Ns Id - [Documentation] Get the NS id and save it NS_ID suite variable to use it later on. [Tags] verify - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} Get Management Ip Addresses - [Documentation] Get the mgmt IP address of the two VNF of the NS. [Tags] verify - ${ip_addr_1}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} + ${ip_addr_1} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} Log ${ip_addr_1} - Set Suite Variable ${VNF_1_IP_ADDR} ${ip_addr_1} - ${ip_addr_2}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} + Set Suite Variable ${vnf_1_ip_addr} ${ip_addr_1} + ${ip_addr_2} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} Log ${ip_addr_2} - Set Suite Variable ${VNF_2_IP_ADDR} ${ip_addr_2} + Set Suite Variable ${vnf_2_ip_addr} ${ip_addr_2} + Test SSH Access - [Documentation] Check that both VNF are accessible via SSH in their respective mgmt IP address. [Tags] verify - Variable Should Exist ${VNF_1_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${VNF_2_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_2}' is not available + Variable Should Exist ${vnf_1_ip_addr} msg=IP address of the management VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${vnf_2_ip_addr} msg=IP address of the management VNF '${vnf_member_index_2}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_1_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_2_ip_addr} ${username} ${password} ${privatekey} + Check Remote Files Created Via Day 1 Operations - [Documentation] The Charm VNF has a Day 1 operation that creates a file named ${DAY_1_FILE_NAME}. - ... This test checks whether that files have been created or not. [Tags] verify - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} + [Documentation] The Charm VNF has a Day 1 operation that creates a file named ${day_1_file_name}. + ... This test checks whether that files have been created or not. + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Execute Day 2 Operations - [Documentation] Performs one Day 2 operation per VNF that creates a new file. [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id_1}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX_1} filename=${DAY_2_FILE_NAME_1} - Log ${ns_op_id_1} - ${ns_op_id_2}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX_2} filename=${DAY_2_FILE_NAME_2} - Log ${ns_op_id_2} + [Documentation] Performs one Day 2 operation per VNF that creates a new file. + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id_1}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index_1} filename=${day_2_file_name_1} + ${ns_op_id_2}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index_2} filename=${day_2_file_name_2} + Check Remote Files Created Via Day 2 Operations - [Documentation] Check whether the files created in the previous test via Day 2 operations exist or not. [Tags] verify - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME_1} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME_2} + [Documentation] Check whether the files created in the previous test via Day 2 operations exist or not. + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name_1} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name_2} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete NF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/k8s_07-dummy_helm.robot b/robot-systest/testsuite/k8s_07-dummy_helm.robot index 59c73ba5095ad64b33c5132b8553831d1e27813a..c37fe4ed819094abca8bfe9c537ff83460192353 100644 --- a/robot-systest/testsuite/k8s_07-dummy_helm.robot +++ b/robot-systest/testsuite/k8s_07-dummy_helm.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-07] Openldap Helm in isolated cluster with dummy VIM. @@ -20,101 +18,90 @@ Library String Library Collections Library Process -Resource ../lib/vim_lib.resource -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot -Test Tags k8s_07 cluster_k8s daily regression azure +Force Tags k8s_07 cluster_k8s daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # VIM Configuration -${VIM_NAME} k8s07_dummy -${VIM_USER} user -${VIM_PASSWORD} pass -${VIM_AUTH_URL} http://localhost/dummy -${VIM_TENANT} tenant -${VIM_ACCOUNT_TYPE} dummy +${vim_name} k8s07_dummy +${vim_user} user +${vim_password} pass +${vim_auth_url} http://localhost/dummy +${vim_tenant} tenant +${vim_account_type} dummy # K8s cluster data -${K8SCLUSTER_NAME} k8s07 -${K8SCLUSTER_VERSION} v1 -${K8SCLUSTER_NET} null +${k8scluster_name} k8s07 +${k8scluster_version} v1 +${k8scluster_net} null # NS and VNF descriptor package files -${VNFD_PKG} openldap_knf -${NSD_PKG} openldap_ns -${VNFD_NAME} openldap_knf -${NSD_NAME} openldap_ns +${vnfd_pkg} openldap_knf +${nsd_pkg} openldap_ns +${vnfd_name} openldap_knf +${nsd_name} openldap_ns # NS instance name -${NS_NAME} ldap +${ns_name} ldap -${NS_ID} ${EMPTY} -${NS_CONFIG} ${EMPTY} -${PUBLICKEY} ${EMPTY} +${ns_id} ${EMPTY} +${ns_config} ${EMPTY} +${publickey} ${EMPTY} *** Test Cases *** Create Package For OpenLDAP CNF - [Documentation] Upload NF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create Package For OpenLDAP NS - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Create Dummy VIM - [Documentation] Register a VIM of type dummy in OSM. - ${created_vim_account_id}= Create VIM Target ${VIM_NAME} ${VIM_USER} ${VIM_PASSWORD} ${VIM_AUTH_URL} ${VIM_TENANT} ${VIM_ACCOUNT_TYPE} - Log ${created_vim_account_id} + ${created_vim_account_id}= Create VIM Target ${vim_name} ${vim_user} ${vim_password} ${vim_auth_url} ${vim_tenant} ${vim_account_type} Add K8s Cluster To OSM - [Documentation] Register a K8s cluster associated to the dummy VIM. - Create K8s Cluster %{K8S_CREDENTIALS} ${K8SCLUSTER_VERSION} ${VIM_NAME} ${K8SCLUSTER_NET} ${K8SCLUSTER_NAME} + Create K8s Cluster %{K8S_CREDENTIALS} ${k8scluster_version} ${vim_name} ${k8scluster_net} ${k8scluster_name} Create Network Service Instance - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} ${VIM_NAME} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} ${vim_name} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} Delete Network Service Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} Remove K8s Cluster from OSM - [Documentation] Remove K8s cluster from OSM. [Tags] cleanup - Delete K8s Cluster ${K8SCLUSTER_NAME} + Delete K8s Cluster ${k8scluster_name} Delete VIM - [Documentation] Remove VIM from OSM. [Tags] cleanup - Delete VIM Target ${VIM_NAME} + Delete VIM Target ${vim_name} Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} Delete VNF Descriptor Test - [Documentation] Delete NF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance, cluster and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} - Run Keyword If Any Tests Failed Delete K8s Cluster ${K8SCLUSTER_NAME} - Run Keyword If Any Tests Failed Delete VIM Target ${VIM_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + Run Keyword If Any Tests Failed Delete K8s Cluster ${k8scluster_name} + Run Keyword If Any Tests Failed Delete VIM Target ${vim_name} diff --git a/robot-systest/testsuite/k8s_08-simple_k8s_scaling.robot b/robot-systest/testsuite/k8s_08-simple_k8s_scaling.robot index 034a70240c36b0665f0cc5ce7be4a7fb12aed2da..f0d87b4853469540ac6ecf312407740bb639431e 100644 --- a/robot-systest/testsuite/k8s_08-simple_k8s_scaling.robot +++ b/robot-systest/testsuite/k8s_08-simple_k8s_scaling.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-08] Simple K8s Scale. @@ -21,115 +19,110 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource -Resource ../lib/juju_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/juju_lib.robot -Test Tags k8s_08 cluster_k8s regression azure +Force Tags k8s_08 cluster_k8s regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/native_k8s_scale_charm_vnf -${VNFD_NAME} native_k8s_scale_charm-vnf -${NSD_PKG} charm-packages/native_k8s_scale_charm_ns -${NSD_NAME} native_k8s_scale_charm-ns +${vnfd_pkg} charm-packages/native_k8s_scale_charm_vnf +${vnfd_name} native_k8s_scale_charm-vnf +${nsd_pkg} charm-packages/native_k8s_scale_charm_ns +${nsd_name} native_k8s_scale_charm-ns -${KDU_NAME} native-kdu -${APPLICATION_NAME} nginx -${VNF_MEMBER_INDEX} native_k8s_scale_charm-vnf -${INSTANTIATION_COUNT} 2 +${kdu_name} native-kdu +${application_name} nginx +${vnf_member_index} native_k8s_scale_charm-vnf +${instantiation_count} 2 # NS instance name and configuration -${NS_NAME} native-k8s-scale -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ], additionalParamsForVnf: [{member-vnf-index: ${VNF_MEMBER_INDEX}, additionalParamsForKdu: [{ kdu_name: ${KDU_NAME}, additionalParams: { overlay: { applications: { ${APPLICATION_NAME}: { scale: ${INSTANTIATION_COUNT} } }}}}]}]} -${NS_ID} ${EMPTY} -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub +${ns_name} native-k8s-scale +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ], additionalParamsForVnf: [{member-vnf-index: ${vnf_member_index}, additionalParamsForKdu: [{ kdu_name: ${kdu_name}, additionalParams: { overlay: { applications: { ${application_name}: { scale: ${instantiation_count} } }}}}]}]} +${ns_id} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub # Username and SSH private key for accessing OSM host -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} -${PRIVATEKEY} %{OSM_RSA_FILE} - -${MODEL_NAME} ${EMPTY} -${ACTION_NAME} changecontent -${SCALING_GROUP} scale-kdu +${username} ubuntu +${password} ${EMPTY} +${privatekey} %{OSM_RSA_FILE} +${model_name} ${EMPTY} +${action_name} changecontent +${scaling_group} scale-kdu *** Test Cases *** Create Simple K8s Scale VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create Simple K8s Scale NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Network Service K8s Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} Get KDU Model Name [Documentation] Get the model name of the network service k8s instance - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${name}= Get Model Name %{OSM_HOSTNAME} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${NS_ID} ${KDU_NAME} - Set Suite Variable ${MODEL_NAME} ${name} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${name}= Get Model Name %{OSM_HOSTNAME} ${username} ${password} ${privatekey} ${ns_id} ${kdu_name} + Set Suite Variable ${model_name} ${name} Get Scale Count Before Scale Out [Documentation] Get the scale count of the application of network service k8s instance - Variable Should Exist ${MODEL_NAME} msg=Model name is not available - ${kdu_count}= Get Scale Number %{OSM_HOSTNAME} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${APPLICATION_NAME} ${MODEL_NAME} - Set Suite Variable ${INITIAL_KDU_COUNT} ${kdu_count} - IF ${INITIAL_KDU_COUNT} != ${INSTANTIATION_COUNT} Fail msg=Instantiation parameters were not applied. + + Variable Should Exist ${model_name} msg=Model name is not available + ${kdu_count}= Get Scale Number %{OSM_HOSTNAME} ${username} ${password} ${privatekey} ${application_name} ${model_name} + Set Suite Variable ${initial_kdu_count} ${kdu_count} + Run Keyword If ${initial_kdu_count} != ${instantiation_count} Fail msg=Instantiation parameters were not applied. Perform Manual KDU Scale Out [Documentation] Scale out the application of network service k8s instance. - ${ns_op_id_2}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_OUT - Log ${ns_op_id_2} + + ${ns_op_id_2}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_OUT Check Scale Count After Scale Out [Documentation] Check whether the scale count is more than one. - Variable Should Exist ${INITIAL_KDU_COUNT} msg=Initial KDU count is not available - ${kdu_count}= Get Scale Number %{OSM_HOSTNAME} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${APPLICATION_NAME} ${MODEL_NAME} - IF ${kdu_count} != ${INITIAL_KDU_COUNT} + 1 Fail msg=There is no new KDU in the model after Scale Out + Variable Should Exist ${initial_kdu_count} msg=Initial KDU count is not available + ${kdu_count}= Get Scale Number %{OSM_HOSTNAME} ${username} ${password} ${privatekey} ${application_name} ${model_name} + Run Keyword If ${kdu_count} != ${initial_kdu_count} + 1 Fail msg=There is no new KDU in the model after Scale Out Perform Manual KDU Scale In [Documentation] Scale in the application of network service k8s instance. - ${ns_op_id_3}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_IN - Log ${ns_op_id_3} + + ${ns_op_id_3}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_IN Check Scale Count After Scale In [Documentation] Check whether the scale count is one less. - ${kdu_count}= Get Scale Number %{OSM_HOSTNAME} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${APPLICATION_NAME} ${MODEL_NAME} - IF ${kdu_count} != ${INITIAL_KDU_COUNT} Fail msg=There is the same number of KDU in the model after Scale In + + ${kdu_count}= Get Scale Number %{OSM_HOSTNAME} ${username} ${password} ${privatekey} ${application_name} ${model_name} + Run Keyword If ${kdu_count} != ${initial_kdu_count} Fail msg=There is the same number of KDU in the model after Scale In Delete NS K8s Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} Delete VNF Descriptor Test - [Documentation] Delete NF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/k8s_09-pebble_charm_k8s.robot b/robot-systest/testsuite/k8s_09-pebble_charm_k8s.robot index 40c4ddbb5efb1b0454fd74d0882f58486dff0d25..63dbff394db9a82d3881d024d332b9cb3bc53788 100644 --- a/robot-systest/testsuite/k8s_09-pebble_charm_k8s.robot +++ b/robot-systest/testsuite/k8s_09-pebble_charm_k8s.robot @@ -1,4 +1,3 @@ -*** Comments *** # Copyright 2020 Canonical Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-09] Pebble Charm. @@ -22,85 +20,76 @@ Library String Library Collections Library Process -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/package_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/package_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot -Test Tags k8s_09 cluster_k8s regression azure +Force Tags k8s_09 cluster_k8s regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/pebble_charm_vnf -${VNFD_NAME} pebble_charm-vnf -${NSD_PKG} charm-packages/pebble_charm_ns -${NSD_NAME} pebble_charm-ns +${vnfd_pkg} charm-packages/pebble_charm_vnf +${vnfd_name} pebble_charm-vnf +${nsd_pkg} charm-packages/pebble_charm_ns +${nsd_name} pebble_charm-ns # NS instance name and configuration -${NS_NAME} pebble-charm-k8s -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } - -${NS_ID} ${EMPTY} -${PUBLICKEY} ${EMPTY} -${VNF_MEMBER_INDEX} pebble_charm-vnf -${ACTION_NAME} list-available-apps -${KDU_NAME} onos-kdu -${APPLICATION_NAME} onos +${ns_name} pebble-charm-k8s +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_id} ${EMPTY} +${publickey} ${EMPTY} +${vnf_member_index} pebble_charm-vnf +${action_name} list-available-apps +${kdu_name} onos-kdu +${application_name} onos +${customtitle} Day 2 Action *** Test Cases *** Create Simple K8s VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create Simple K8s Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Network Service K8s Instance Test - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} Execute Day 2 Operations [Documentation] Performs one Day 2 operation per VNF that creates a new file. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX} ${KDU_NAME} application-name=${APPLICATION_NAME} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${action_name} ${vnf_member_index} ${kdu_name} application-name=${application_name} Delete NS K8s Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} Delete NS Descriptor Test - [Documentation] Delete the NS package. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} Delete VNF Descriptor Test - [Documentation] Delete the VNF package. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} Delete VNF NS Packages - [Documentation] Delete the tar.gz files associated to the VNF and NS packages. [Tags] cleanup - Delete Package '%{PACKAGES_FOLDER}/${VNFD_PKG}' - Delete Package '%{PACKAGES_FOLDER}/${NSD_PKG}' + Delete Package '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Delete Package '%{PACKAGES_FOLDER}/${nsd_pkg}' *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/k8s_10-sol004_sol007_with_k8s_proxy_charms.robot b/robot-systest/testsuite/k8s_10-sol004_sol007_with_k8s_proxy_charms.robot index b5d1ba2d8170530c2cc861e6eded8eaa930ba59b..1c7d3de138e35293763777c2e968a199b5350f59 100644 --- a/robot-systest/testsuite/k8s_10-sol004_sol007_with_k8s_proxy_charms.robot +++ b/robot-systest/testsuite/k8s_10-sol004_sol007_with_k8s_proxy_charms.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,119 +10,132 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-10] K8s Proxy Charm using SOL004 and SOL007 packages. Library OperatingSystem Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags k8s_10 cluster_ee_config cluster_k8s_charms daily regression azure +Force Tags k8s_10 cluster_ee_config cluster_k8s_charms daily regression azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} charm-packages/sol004_k8s_proxy_charm_vnf -${VNFD_NAME} sol004_k8s_proxy_charm-vnf -${NSD_PKG} charm-packages/sol007_k8s_proxy_charm_ns -${NSD_NAME} sol007_k8s_proxy_charm-ns +${vnfd_pkg} charm-packages/sol004_k8s_proxy_charm_vnf +${vnfd_name} sol004_k8s_proxy_charm-vnf +${nsd_pkg} charm-packages/sol007_k8s_proxy_charm_ns +${nsd_name} sol007_k8s_proxy_charm-ns # NS instance name and configuration -${NS_NAME} k8s_10-k8s_proxy_charm -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } -${NS_TIMEOUT} 15min +${ns_name} k8s_10-k8s_proxy_charm +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_timeout} 15min # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${ACTION_NAME} touch -${VNF_MEMBER_INDEX_1} vnf1 -${VNF_MEMBER_INDEX_2} vnf2 -${DAY_1_FILE_NAME} /home/ubuntu/first-touch -${DAY_2_FILE_NAME_1} /home/ubuntu/mytouch1 -${DAY_2_FILE_NAME_2} /home/ubuntu/mytouch2 +${action_name} touch +${vnf_member_index_1} vnf1 +${vnf_member_index_2} vnf2 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name_1} /home/ubuntu/mytouch1 +${day_2_file_name_2} /home/ubuntu/mytouch2 *** Test Cases *** Create Charm VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create Charm NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Charm Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} ${NS_TIMEOUT} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} + Set Suite Variable ${ns_id} ${id} + Get Management Ip Addresses - [Documentation] Get the mgmt IP addresses of both VNF of the NS. - ${ip_addr_1}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_1} + + ${ip_addr_1} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_1} Log ${ip_addr_1} - Set Suite Variable ${VNF_1_IP_ADDR} ${ip_addr_1} - ${ip_addr_2}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX_2} + Set Suite Variable ${vnf_1_ip_addr} ${ip_addr_1} + ${ip_addr_2} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index_2} Log ${ip_addr_2} - Set Suite Variable ${VNF_2_IP_ADDR} ${ip_addr_2} + Set Suite Variable ${vnf_2_ip_addr} ${ip_addr_2} + Test SSH Access - [Documentation] Check that both VNF are accessible via SSH in their mgmt IP addresses. - Variable Should Exist ${VNF_1_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_1}' is not available - Variable Should Exist ${VNF_2_IP_ADDR} msg=IP address of the management VNF '${VNF_MEMBER_INDEX_2}' is not available + + Variable Should Exist ${vnf_1_ip_addr} msg=IP address of the management VNF '${vnf_member_index_1}' is not available + Variable Should Exist ${vnf_2_ip_addr} msg=IP address of the management VNF '${vnf_member_index_2}' is not available Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} - Test SSH Connection ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${vnf_1_ip_addr} ${username} ${password} ${privatekey} + Test SSH Connection ${vnf_2_ip_addr} ${username} ${password} ${privatekey} + Check Remote Files Created Via Day 1 Operations [Documentation] The Charm VNF has a Day 1 operation that creates a file named ${day_1_file_name}. ... This test checks whether that files have been created or not. - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_1_FILE_NAME} + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_1_file_name} + Execute Day 2 Operations [Documentation] Performs one Day 2 operation per VNF that creates a new file. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id_1}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX_1} filename=${DAY_2_FILE_NAME_1} - Log ${ns_op_id_1} - ${ns_op_id_2}= Execute NS Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX_2} filename=${DAY_2_FILE_NAME_2} - Log ${ns_op_id_2} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id_1}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index_1} filename=${day_2_file_name_1} + ${ns_op_id_2}= Execute NS Action ${ns_name} ${action_name} ${vnf_member_index_2} filename=${day_2_file_name_2} + Check Remote Files Created Via Day 2 Operations [Documentation] Check whether the files created in the previous test via Day 2 operations exist or not. - Check If Remote File Exists ${VNF_1_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME_1} - Check If Remote File Exists ${VNF_2_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} ${DAY_2_FILE_NAME_2} + + Check If remote File Exists ${vnf_1_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name_1} + Check If remote File Exists ${vnf_2_ip_addr} ${username} ${password} ${privatekey} ${day_2_file_name_2} + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/k8s_11-simple_helm_k8s_scaling.robot b/robot-systest/testsuite/k8s_11-simple_helm_k8s_scaling.robot index 14cda797b4f8892c92fee8491a80bc1375d9b6f8..f5a73a7b22712cced4aa1c76ddb0fd226688b800 100644 --- a/robot-systest/testsuite/k8s_11-simple_helm_k8s_scaling.robot +++ b/robot-systest/testsuite/k8s_11-simple_helm_k8s_scaling.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-11] Simple Helm K8s Scale. @@ -21,126 +19,117 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot -Test Tags k8s_11 cluster_k8s +Force Tags k8s_11 cluster_k8s Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # K8s cluster name and version -${K8SCLUSTER_NAME} k8s11 -${K8SCLUSTER_VERSION} v1 +${k8scluster_name} k8s11 +${k8scluster_version} v1 # NS and VNF descriptor package folder and ids -${VNFD_PKG} openldap_scale_knf -${VNFD_NAME} openldap_scale_knf -${NSD_PKG} openldap_scale_ns -${NSD_NAME} openldap_scale_ns +${vnfd_pkg} openldap_scale_knf +${vnfd_name} openldap_scale_knf +${nsd_pkg} openldap_scale_ns +${nsd_name} openldap_scale_ns # NS instance name and configuration -${NS_NAME} openldap-scale -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} openldap-scale +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # Username and SSH private key for accessing OSM host -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} -${PRIVATEKEY} %{OSM_RSA_FILE} - -${NS_ID} ${EMPTY} -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${VNF_MEMBER_INDEX} openldap -${KDU_NAME} native-kdu -${SCALING_GROUP} scale-kdu +${username} ubuntu +${password} ${EMPTY} +${privatekey} %{OSM_RSA_FILE} +${ns_id} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${vnf_member_index} openldap +${kdu_name} native-kdu +${scaling_group} scale-kdu *** Test Cases *** Create Simple K8s Scale VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create Simple K8s Scale NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Add K8s Cluster To OSM - [Documentation] Register K8s cluster in OSM. - Create K8s Cluster %{K8S_CREDENTIALS} ${K8SCLUSTER_VERSION} %{VIM_TARGET} %{VIM_MGMT_NET} ${K8SCLUSTER_NAME} + Create K8s Cluster %{K8S_CREDENTIALS} ${k8scluster_version} %{VIM_TARGET} %{VIM_MGMT_NET} ${k8scluster_name} Create Network Service Instance - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} Get Vnf Id - [Documentation] Get VNF identifier from OSM. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] + Set Suite Variable ${vnf_id} ${vnfr_list}[0] Get Scale Count Before Scale Out [Documentation] Get the scale count of the application of network service k8s instance - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${kdu_count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU_NAME} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${kdu_count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu_name} Log ${kdu_count} - Set Suite Variable ${INITIAL_KDU_COUNT} ${kdu_count} + Set Suite Variable ${initial_kdu_count} ${kdu_count} Perform Manual KDU Scale Out [Documentation] Scale out the application of network service k8s instance. - ${ns_op_id_1}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_OUT - Log ${ns_op_id_1} + + ${ns_op_id_1}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_OUT Check Scale Count After Scale Out [Documentation] Check whether the scale count is more than one. - Variable Should Exist ${INITIAL_KDU_COUNT} msg=Initial KDU count is not available - ${kdu_count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU_NAME} + Variable Should Exist ${initial_kdu_count} msg=Initial KDU count is not available + ${kdu_count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu_name} Log ${kdu_count} - IF ${kdu_count} != ${INITIAL_KDU_COUNT} + 2 Fail msg=There is no new KDU in the model after Scale Out + Run Keyword If ${kdu_count} != ${initial_kdu_count} + 2 Fail msg=There is no new KDU in the model after Scale Out Perform Manual KDU Scale In [Documentation] Scale in the application of network service k8s instance. - ${ns_op_id_2}= Execute Manual VNF Scale ${NS_NAME} ${VNF_MEMBER_INDEX} ${SCALING_GROUP} SCALE_IN - Log ${ns_op_id_2} + + ${ns_op_id_2}= Execute Manual VNF Scale ${ns_name} ${vnf_member_index} ${scaling_group} SCALE_IN Check Scale Count After Scale In [Documentation] Check whether the scale count is one less. - ${kdu_count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU_NAME} - IF ${kdu_count} != ${INITIAL_KDU_COUNT} Fail msg=There is the same number of KDU in the model after Scale In + + ${kdu_count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu_name} + Run Keyword If ${kdu_count} != ${initial_kdu_count} Fail msg=There is the same number of KDU in the model after Scale In Delete NS K8s Instance Test - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} Remove K8s Cluster from OSM - [Documentation] Unregister K8s cluster from OSM. [Tags] cleanup - Delete K8s Cluster ${K8SCLUSTER_NAME} + Delete K8s Cluster ${k8scluster_name} Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} Delete VNF Descriptor Test - [Documentation] Delete NF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} - Run Keyword If Any Tests Failed Delete K8s Cluster ${K8SCLUSTER_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + Run Keyword If Any Tests Failed Delete K8s Cluster ${k8scluster_name} diff --git a/robot-systest/testsuite/k8s_12-openldap_helm_day-2.robot b/robot-systest/testsuite/k8s_12-openldap_helm_day-2.robot index 19e45c0d1fa9b0518846c2a534c4e796c7919cb1..0abc53511da4b098fb5642e6b66bf922a3878406 100644 --- a/robot-systest/testsuite/k8s_12-openldap_helm_day-2.robot +++ b/robot-systest/testsuite/k8s_12-openldap_helm_day-2.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-12] Openldap Helm chart. @@ -20,133 +18,114 @@ Library String Library Collections Library Process -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot -Test Tags k8s_12 cluster_k8s daily azure +Force Tags k8s_12 cluster_k8s daily azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # K8s cluster name and version -${K8SCLUSTER_NAME} k8s12 -${K8SCLUSTER_VERSION} v1 +${k8scluster_name} k8s12 +${k8scluster_version} v1 # NS and VNF descriptor package folder and ids -${VNFD_PKG} openldap_primitives_knf -${VNFD_NAME} openldap_knf -${NSD_PKG} openldap_primitives_ns -${NSD_NAME} openldap_ns +${vnfd_pkg} openldap_primitives_knf +${vnfd_name} openldap_knf +${nsd_pkg} openldap_primitives_ns +${nsd_name} openldap_ns # NS instance name and configuration -${NS_NAME} ldap -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}], additionalParamsForVnf: [ {member-vnf-index: openldap, additionalParamsForKdu: [ {kdu_name: ldap, additionalParams: {service: {type: LoadBalancer }, adminPassword: admin}} ] } ] } - -${NS_ID} ${EMPTY} -${PUBLICKEY} ${EMPTY} -${VNF_MEMBER_INDEX} openldap -${KDU_NAME} ldap -${UPGRADE_ACTION} upgrade -${ROLLBACK_ACTION} rollback -${REPLICA_COUNT} 3 -${ACTION_NAME} get-user-info -${ACTION_PARAM_CN} admin -${ACTION_PARAM_DC} example.org - +${ns_name} ldap +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}], additionalParamsForVnf: [ {member-vnf-index: openldap, additionalParamsForKdu: [ {kdu_name: ldap, additionalParams: {service: {type: LoadBalancer }, adminPassword: admin}} ] } ] } + +${ns_id} ${EMPTY} +${publickey} ${EMPTY} +${vnf_member_index} openldap +${kdu_name} ldap +${upgrade_action} upgrade +${rollback_action} rollback +${replica_count} 3 +${action_name} get-user-info +${action_param_cn} admin +${action_param_dc} example.org *** Test Cases *** Create Package For OpenLDAP CNF - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create Package For OpenLDAP NS - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Add K8s Cluster To OSM - [Documentation] Register K8s cluster in OSM. - Create K8s Cluster %{K8S_CREDENTIALS} ${K8SCLUSTER_VERSION} %{VIM_TARGET} %{VIM_MGMT_NET} ${K8SCLUSTER_NAME} + Create K8s Cluster %{K8S_CREDENTIALS} ${k8scluster_version} %{VIM_TARGET} %{VIM_MGMT_NET} ${k8scluster_name} Create Network Service Instance - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Log ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} Get Ns Id - [Documentation] Get NS instance id from OSM. - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} Get Vnf Id - [Documentation] Get VNF instance id from OSM. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] + Set Suite Variable ${vnf_id} ${vnfr_list}[0] Execute Day 2 Operations [Documentation] Performs one Day 2 operation. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${ACTION_NAME} ${VNF_MEMBER_INDEX} ${KDU_NAME} cn=${ACTION_PARAM_CN} dc=${ACTION_PARAM_DC} - Log ${ns_op_id} + + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${action_name} ${vnf_member_index} ${kdu_name} cn=${action_param_cn} dc=${action_param_dc} Execute Upgrade Operation - [Documentation] Perform OSM action to upgrade the number of replicas of a deployment in the CNF. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${UPGRADE_ACTION} ${VNF_MEMBER_INDEX} ${KDU_NAME} replicaCount=${REPLICA_COUNT} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${upgrade_action} ${vnf_member_index} ${kdu_name} replicaCount=${replica_count} Check Replicas After Upgrade Operation - [Documentation] Check that the number of replicas after the upgrade is the expected one. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU_NAME} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu_name} Log ${count} - Should Be Equal As Integers ${count} ${REPLICA_COUNT} + Should Be Equal As Integers ${count} ${replica_count} Execute Rollback Operation - [Documentation] Perform OSM action to rollback the previous upgrade of the CNF. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${ROLLBACK_ACTION} ${VNF_MEMBER_INDEX} ${KDU_NAME} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${rollback_action} ${vnf_member_index} ${kdu_name} Check Replicas After Rollback Operation - [Documentation] Check that the number of replcias after the rollback is the expected one. - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU_NAME} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu_name} Log ${count} Should Be Empty ${count} Delete Network Service Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} Remove K8s Cluster from OSM - [Documentation] Delete K8s cluster from OSM. [Tags] cleanup - Delete K8s Cluster ${K8SCLUSTER_NAME} + Delete K8s Cluster ${k8scluster_name} Delete NS Descriptor Test - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} Delete VNF Descriptor Test - [Documentation] Delete NF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} - Run Keyword If Any Tests Failed Delete K8s Cluster ${K8SCLUSTER_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + Run Keyword If Any Tests Failed Delete K8s Cluster ${k8scluster_name} diff --git a/robot-systest/testsuite/k8s_13-two_helm_kdu.robot b/robot-systest/testsuite/k8s_13-two_helm_kdu.robot index 763488b4db0e897923bc1a8f7a94a96fe6c9fcf3..b57e635826ffdf88ccd9473d278607ac50df8f2e 100644 --- a/robot-systest/testsuite/k8s_13-two_helm_kdu.robot +++ b/robot-systest/testsuite/k8s_13-two_helm_kdu.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [K8s-13] Two Helm-based KDU stored in public and private OCI repositories. @@ -20,167 +18,160 @@ Library String Library Collections Library Process -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/k8scluster_lib.resource -Resource ../lib/repo_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/k8scluster_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/repo_lib.robot -Test Tags k8s_13 cluster_k8s daily azure +Force Tags k8s_13 cluster_k8s daily azure Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} two_helm_oci_knf -${VNFD_NAME} two_helm_oci_knf -${NSD_PKG} two_helm_oci_ns -${NSD_NAME} two_helm_oci_ns +${vnfd_pkg} two_helm_oci_knf +${vnfd_name} two_helm_oci_knf +${nsd_pkg} two_helm_oci_ns +${nsd_name} two_helm_oci_ns # NS instance name and configuration -${NS_NAME} ldap -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}], additionalParamsForVnf: [ {member-vnf-index: two_helm_oci, additionalParamsForKdu: [ {kdu_name: haproxy, additionalParams: {service: {type: LoadBalancer }, adminPassword: admin}}, {kdu_name: ldap, additionalParams: {service: {type: LoadBalancer }, adminPassword: admin}} ] } ] } - -${NS_ID} ${EMPTY} -${PUBLICKEY} ${EMPTY} -${VNF_MEMBER_INDEX} two_helm_oci -${KDU1_NAME} haproxy -${KDU2_NAME} ldap -${UPGRADE_ACTION} upgrade -${ROLLBACK_ACTION} rollback -${REPLICA_COUNT} 3 +${ns_name} ldap +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}], additionalParamsForVnf: [ {member-vnf-index: two_helm_oci, additionalParamsForKdu: [ {kdu_name: haproxy, additionalParams: {service: {type: LoadBalancer }, adminPassword: admin}}, {kdu_name: ldap, additionalParams: {service: {type: LoadBalancer }, adminPassword: admin}} ] } ] } + +${ns_id} ${EMPTY} +${publickey} ${EMPTY} +${vnf_member_index} two_helm_oci +${kdu1_name} haproxy +${kdu2_name} ldap +${upgrade_action} upgrade +${rollback_action} rollback +${replica_count} 3 # OCI helm repo configuration -${REPO_NAME} osm-gitlab -${REPO_URI} %{OCI_REGISTRY_URL} -${REPO_USER} %{OCI_REGISTRY_USER} -${REPO_PASSWORD} %{OCI_REGISTRY_PASSWORD} - +${repo_name} osm-gitlab +${repo_uri} %{OCI_REGISTRY_URL} +${repo_user} %{OCI_REGISTRY_USER} +${repo_password} %{OCI_REGISTRY_PASSWORD} *** Test Cases *** Create Package For CNF [Documentation] Create Package For CNF [Tags] prepare - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' Create Package For NS [Documentation] Create Package For NS [Tags] prepare - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' Create Helm OCI Repo [Documentation] Create Helm OCI Repo for openldap kdu [Tags] prepare - Create Repo ${REPO_NAME} ${REPO_URI} helm-chart ${REPO_USER} ${REPO_PASSWORD} --oci + Create Repo ${repo_name} ${repo_uri} helm-chart ${repo_user} ${repo_password} --oci Create Network Service Instance [Documentation] Create Network Service Instance [Tags] prepare - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Log ${id} + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} Get Ns Id [Documentation] Get ID of NS instance [Tags] verify - ${id}= Get Ns Id ${NS_NAME} - Set Suite Variable ${NS_ID} ${id} + ${id}= Get Ns Id ${ns_name} + Set Suite Variable ${ns_id} ${id} Get Vnf Id [Documentation] Get ID of VNF [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + Variable Should Exist ${ns_id} msg=Network service instance is not available + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] + Set Suite Variable ${vnf_id} ${vnfr_list}[0] Execute Upgrade Operation over first KDU [Documentation] Execute Upgrade Operation over first KDU [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${UPGRADE_ACTION} ${VNF_MEMBER_INDEX} ${KDU1_NAME} replicaCount=${REPLICA_COUNT} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${upgrade_action} ${vnf_member_index} ${kdu1_name} replicaCount=${replica_count} Check Replicas After Upgrade Operation over first KDU [Documentation] Check Replicas After Upgrade Operation over first KDU [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU1_NAME} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu1_name} Log ${count} - Should Be Equal As Integers ${count} ${REPLICA_COUNT} + Should Be Equal As Integers ${count} ${replica_count} Execute Rollback Operation over first KDU [Documentation] Execute Rollback Operation over first KDU [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${ROLLBACK_ACTION} ${VNF_MEMBER_INDEX} ${KDU1_NAME} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${rollback_action} ${vnf_member_index} ${kdu1_name} Check Replicas After Rollback Operation over first KDU [Documentation] Check Replicas After Rollback Operation over first KDU [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU1_NAME} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu1_name} Log ${count} Should Be Empty ${count} Execute Upgrade Operation over second KDU [Documentation] Execute Upgrade Operation over second KDU [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${UPGRADE_ACTION} ${VNF_MEMBER_INDEX} ${KDU2_NAME} replicaCount=${REPLICA_COUNT} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${upgrade_action} ${vnf_member_index} ${kdu2_name} replicaCount=${replica_count} Check Replicas After Upgrade Operation over second KDU [Documentation] Check Replicas After Upgrade Operation over second KDU [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU2_NAME} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu2_name} Log ${count} - Should Be Equal As Integers ${count} ${REPLICA_COUNT} + Should Be Equal As Integers ${count} ${replica_count} Execute Rollback Operation over second KDU [Documentation] Execute Rollback Operation over second KDU [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${ns_op_id}= Execute NS K8s Action ${NS_NAME} ${ROLLBACK_ACTION} ${VNF_MEMBER_INDEX} ${KDU2_NAME} - Log ${ns_op_id} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${ns_op_id}= Execute NS K8s Action ${ns_name} ${rollback_action} ${vnf_member_index} ${kdu2_name} Check Replicas After Rollback Operation over second KDU [Documentation] Check Replicas After Rollback Operation over second KDU [Tags] verify - Variable Should Exist ${NS_ID} msg=Network service instance is not available - ${count}= Get Vnf Kdu Replica Count ${VNF_ID} ${KDU2_NAME} + Variable Should Exist ${ns_id} msg=Network service instance is not available + ${count}= Get Vnf Kdu Replica Count ${vnf_id} ${kdu2_name} Log ${count} Should Be Empty ${count} Delete Network Service Instance [Documentation] Delete Network Service Instance [Tags] cleanup - Delete NS ${NS_NAME} + Delete NS ${ns_name} Delete Helm OCI Repo [Documentation] Delete Helm OCI Repo [Tags] prepare - Delete Repo ${REPO_NAME} + Delete Repo ${repo_name} Delete NS Descriptor Test [Documentation] Delete NS Descriptor Test [Tags] cleanup - Delete NSD ${NSD_NAME} + Delete NSD ${nsd_name} Delete VNF Descriptor Test [Documentation] Delete VNF Descriptor Test [Tags] cleanup - Delete VNFD ${VNFD_NAME} + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/lcmop_01-cancel_operation_basic.robot b/robot-systest/testsuite/lcmop_01-cancel_operation_basic.robot index 01c0e7e797e8840f6c5c7cbc1380a9e39da4075c..3b9d215843e76cb6c0948e410d84fd86e6303b43 100644 --- a/robot-systest/testsuite/lcmop_01-cancel_operation_basic.robot +++ b/robot-systest/testsuite/lcmop_01-cancel_operation_basic.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [LCMOP_01] Cancel an ongoing NS operation @@ -21,77 +19,97 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ns_operation_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags lcmop_01 cluster_lcmop daily +Force Tags lcmop_01 cluster_lcmop daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package folder and ids -${VNFD_PKG} simple_ee_vnf -${VNFD_NAME} simple_ee-vnf -${NSD_PKG} simple_ee_ns -${NSD_NAME} simple_ee-ns +${vnfd_pkg} simple_ee_vnf +${vnfd_name} simple_ee-vnf +${nsd_pkg} simple_ee_ns +${nsd_name} simple_ee-ns # NS instance name and configuration -${NS_NAME} lcmop_01_cancel_operation_basic -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_name} lcmop_01_cancel_operation_basic +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } *** Test Cases *** Create VNF Descriptor [Documentation] Create the VNF descriptor - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + ${id}= Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Set Suite Variable ${vnfd_id} ${id} + Create NS Descriptor [Documentation] Create the NS descriptor - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service [Documentation] Instantiate the Network service - ${id}= Instantiate Network Service ${NS_NAME} ${NSD_NAME} %{VIM_TARGET} --config '${NS_CONFIG}' - Set Suite Variable ${NS_ID} ${id} + + ${id}= Instantiate Network Service ${ns_name} ${nsd_name} %{VIM_TARGET} --config '${ns_config}' + Set Suite Variable ${ns_id} ${id} + Get operation ID [Documentation] Obtain the operation ID of the NS instantiation - ${id}= Get Operations By Type ${NS_ID} instantiate - Set Suite Variable ${OP_ID} ${id} + + ${id}= Get Operations By Type ${ns_id} instantiate + Set Suite Variable ${op_id} ${id} + Cancel operation [Documentation] Cancel the ongoing NS instantiation + Sleep 5s Waiting before cancelling the operation - Cancel Operation By Id ${OP_ID} + Cancel operation By Id ${op_id} + Check that operation is cancelled [Documentation] Check that the operation is succesfully cancelled - Check For NS Operation Cancelled ${OP_ID} + + Check For NS Operation Cancelled ${op_id} + Delete NS Instance Test [Documentation] Delete the cancelled NS instance [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor Test [Documentation] Delete the NS descriptor [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor Test [Documentation] Delete the VNF descriptor [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/quotas_01-quota_enforcement.robot b/robot-systest/testsuite/quotas_01-quota_enforcement.robot index 6558c1718bd1f9d6b4a866f30bce34e8c3bf6835..f37412dacd1627e6c2dbc9d989720962f68aa5d2 100644 --- a/robot-systest/testsuite/quotas_01-quota_enforcement.robot +++ b/robot-systest/testsuite/quotas_01-quota_enforcement.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [QUOTAS-01] Quota enforcement. @@ -19,151 +17,160 @@ Library OperatingSystem Library String Library Collections -Resource ../lib/project_lib.resource -Resource ../lib/user_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/project_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/user_lib.robot -Test Tags quotas_01 cluster_main daily regression +Force Tags quotas_01 cluster_main daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # VNFD package to use during test -${VNFD_PKG} hackfest_basic_vnf +${vnfd_pkg} hackfest_basic_vnf # Project names and quotas to use -${PROJECT_1_NAME} quotas_01_proj_1 -${PROJECT_2_NAME} quotas_01_proj_2 -${PROJECT_3_NAME} quotas_01_proj_3 -${PROJECT_1_QUOTAS} vnfds=1,nsds=2,ns_instances=3 -${PROJECT_2_QUOTAS} vnfds=1,nsds=1,ns_instances=1 -${PROJECT_3_QUOTAS} vnfds=5,nsds=,ns_instances= +${project_1_name} quotas_01_proj_1 +${project_2_name} quotas_01_proj_2 +${project_3_name} quotas_01_proj_3 +${project_1_quotas} vnfds=1,nsds=2,ns_instances=3 +${project_2_quotas} vnfds=1,nsds=1,ns_instances=1 +${project_3_quotas} vnfds=5,nsds=,ns_instances= # User name and password for project -${USERNAME} quotas_01_user -${USER_PASSWORD} Quotas_01_pass -${USER_NEW_PASSWORD} Quotas_01_new_pass +${user_name} quotas_01_user +${user_password} Quotas_01_pass +${user_new_password} Quotas_01_new_pass -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Test Cases *** Create First Project With Quotas - [Documentation] Create a first project with quotas, then get the project quotas and check that they are correct. - Create Project With Quotas ${PROJECT_1_NAME} ${PROJECT_1_QUOTAS} - ${project_1_vnfds}= Get Project Quotas ${PROJECT_1_NAME} vnfds + + Create Project With Quotas ${project_1_name} ${project_1_quotas} + ${project_1_vnfds}= Get Project Quotas ${project_1_name} vnfds Should Be Equal As Integers 1 ${project_1_vnfds} - ${project_1_nsds}= Get Project Quotas ${PROJECT_1_NAME} nsds + ${project_1_nsds}= Get Project Quotas ${project_1_name} nsds Should Be Equal As Integers 2 ${project_1_nsds} - ${project_1_ns_instances}= Get Project Quotas ${PROJECT_1_NAME} ns_instances + ${project_1_ns_instances}= Get Project Quotas ${project_1_name} ns_instances Should Be Equal As Integers 3 ${project_1_ns_instances} + Create Second Project With Quotas - [Documentation] Create a second project with quotas, then get the project quotas and check that they are correct. - Create Project With Quotas ${PROJECT_2_NAME} ${PROJECT_2_QUOTAS} - ${project_2_vnfds}= Get Project Quotas ${PROJECT_2_NAME} vnfds + + Create Project With Quotas ${project_2_name} ${project_2_quotas} + ${project_2_vnfds}= Get Project Quotas ${project_2_name} vnfds Should Be Equal As Integers 1 ${project_2_vnfds} - ${project_2_nsds}= Get Project Quotas ${PROJECT_2_NAME} nsds + ${project_2_nsds}= Get Project Quotas ${project_2_name} nsds Should Be Equal As Integers 1 ${project_2_nsds} - ${project_2_ns_instances}= Get Project Quotas ${PROJECT_2_NAME} ns_instances + ${project_2_ns_instances}= Get Project Quotas ${project_2_name} ns_instances Should Be Equal As Integers 1 ${project_2_ns_instances} Create User In Projects - [Documentation] Create a user with role project_admin in both projects. - ${rc} ${stdout}= Run And Return RC And Output osm user-create ${USERNAME} --password ${USER_PASSWORD} --project-role-mappings ${PROJECT_1_NAME},project_admin --project-role-mappings ${PROJECT_2_NAME},project_admin - Log ${rc},${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Check If User Is Assigned To Project ${USERNAME} ${PROJECT_1_NAME} - Check If User Is Assigned To Project ${USERNAME} ${PROJECT_2_NAME} - Update User Password ${USERNAME} ${USER_PASSWORD} ${USER_NEW_PASSWORD} + + ${rc} ${stdout}= Run And Return RC And Output osm user-create ${user_name} --password ${user_password} --project-role-mappings ${project_1_name},project_admin --project-role-mappings ${project_2_name},project_admin + Should Be Equal As Integers ${rc} ${success_return_code} + Check If User Is Assigned To Project ${user_name} ${project_1_name} + Check If User Is Assigned To Project ${user_name} ${project_2_name} + Update User Password ${user_name} ${user_password} ${user_new_password} + Change First Project Name to Third Project Name - [Documentation] Rename first project. From now on, the project will be considered for the tests a third project. - Update Project Name ${PROJECT_1_NAME} ${PROJECT_3_NAME} - ${project_3_vnfds}= Get Project Quotas ${PROJECT_3_NAME} vnfds + + Update Project Name ${project_1_name} ${project_3_name} + ${project_3_vnfds}= Get Project Quotas ${project_3_name} vnfds Should Be Equal As Integers 1 ${project_3_vnfds} - ${project_3_nsds}= Get Project Quotas ${PROJECT_3_NAME} nsds + ${project_3_nsds}= Get Project Quotas ${project_3_name} nsds Should Be Equal As Integers 2 ${project_3_nsds} - ${project_3_ns_instances}= Get Project Quotas ${PROJECT_3_NAME} ns_instances + ${project_3_ns_instances}= Get Project Quotas ${project_3_name} ns_instances Should Be Equal As Integers 3 ${project_3_ns_instances} - Check If User Is Assigned To Project ${USERNAME} ${PROJECT_3_NAME} + Check If User Is Assigned To Project ${user_name} ${project_3_name} + Create VNFDs On Third Project Until Exceed Quota - [Documentation] Upload VNF packages in the third project. - Create VNFD In Project ${PROJECT_3_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=v1;product-name=v1' - Run Keyword And Expect Error * Create VNFD In Project ${PROJECT_3_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=v2;product-name=v2' + + Create VNFD In Project ${project_3_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=v1;product-name=v1' + Run Keyword And Expect Error * Create VNFD In Project ${project_3_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=v2;product-name=v2' + Increase Third Project Quotas - [Documentation] Update the quotas of the third project. - Update Project Quotas ${PROJECT_3_NAME} ${PROJECT_3_QUOTAS} - ${project_3_vnfds}= Get Project Quotas ${PROJECT_3_NAME} vnfds + + Update Project Quotas ${project_3_name} ${project_3_quotas} + ${project_3_vnfds}= Get Project Quotas ${project_3_name} vnfds Should Be Equal As Integers 5 ${project_3_vnfds} + Create More VNFDs On Third Project Until Exceed Quota - [Documentation] Upload VNF packages in the third project until the quota is reached, so that an error is obtained. - Create VNFD In Project ${PROJECT_3_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=v2;product-name=v2' - Create VNFD In Project ${PROJECT_3_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=v3;product-name=v3' - Create VNFD In Project ${PROJECT_3_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=v4;product-name=v4' - Create VNFD In Project ${PROJECT_3_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=v5;product-name=v5' - Run Keyword And Expect Error * Create VNFD In Project ${PROJECT_3_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=v6;product-name=v6' + + Create VNFD In Project ${project_3_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=v2;product-name=v2' + Create VNFD In Project ${project_3_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=v3;product-name=v3' + Create VNFD In Project ${project_3_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=v4;product-name=v4' + Create VNFD In Project ${project_3_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=v5;product-name=v5' + Run Keyword And Expect Error * Create VNFD In Project ${project_3_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=v6;product-name=v6' + Create VNFDs On Second Project Until Exceed Quota - [Documentation] Upload VNF packages in the second project until the quota is reached, so that an error is obtained. - Create VNFD In Project ${PROJECT_2_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=vp2_1;product-name=vp2_1' - Run Keyword And Expect Error * Create VNFD In Project ${PROJECT_2_NAME} '%{PACKAGES_FOLDER}/${VNFD_PKG}' ${USERNAME} ${USER_NEW_PASSWORD} override='id=vp2_2;product-name=vp2_2' + + Create VNFD In Project ${project_2_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=vp2_1;product-name=vp2_1' + Run Keyword And Expect Error * Create VNFD In Project ${project_2_name} '%{PACKAGES_FOLDER}/${vnfd_pkg}' ${user_name} ${user_new_password} override='id=vp2_2;product-name=vp2_2' + Check Project Scopes - [Documentation] Check that the user can see a VNF package in both projects. - ${rc} ${stdout}= Run And Return RC And Output osm --project ${PROJECT_3_NAME} --password ${USER_NEW_PASSWORD} --user ${USERNAME} vnfpkg-show vp2_1 + + ${rc} ${stdout}= Run And Return RC And Output osm --project ${project_3_name} --password ${user_new_password} --user ${user_name} vnfpkg-show vp2_1 Log ${stdout} - Should Not Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - ${rc} ${stdout}= Run And Return RC And Output osm --project ${PROJECT_2_NAME} --password ${USER_NEW_PASSWORD} --user ${USERNAME} vnfpkg-show v1 + Should Not Be Equal As Integers ${rc} ${success_return_code} + ${rc} ${stdout}= Run And Return RC And Output osm --project ${project_2_name} --password ${user_new_password} --user ${user_name} vnfpkg-show v1 Log ${stdout} - Should Not Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} + Should Not Be Equal As Integers ${rc} ${success_return_code} + Delete Second Project VNFD - [Documentation] Delete VNF packages from second project. [Tags] cleanup - Delete VNFD In Project ${PROJECT_2_NAME} vp2_1 ${USERNAME} ${USER_NEW_PASSWORD} + + Delete VNFD In Project ${project_2_name} vp2_1 ${user_name} ${user_new_password} + Delete Third Project VNFDs - [Documentation] Delete VNF packages from third project. [Tags] cleanup - Delete VNFD In Project ${PROJECT_3_NAME} v1 ${USERNAME} ${USER_NEW_PASSWORD} - Delete VNFD In Project ${PROJECT_3_NAME} v2 ${USERNAME} ${USER_NEW_PASSWORD} - Delete VNFD In Project ${PROJECT_3_NAME} v3 ${USERNAME} ${USER_NEW_PASSWORD} - Delete VNFD In Project ${PROJECT_3_NAME} v4 ${USERNAME} ${USER_NEW_PASSWORD} - Delete VNFD In Project ${PROJECT_3_NAME} v5 ${USERNAME} ${USER_NEW_PASSWORD} + + Delete VNFD In Project ${project_3_name} v1 ${user_name} ${user_new_password} + Delete VNFD In Project ${project_3_name} v2 ${user_name} ${user_new_password} + Delete VNFD In Project ${project_3_name} v3 ${user_name} ${user_new_password} + Delete VNFD In Project ${project_3_name} v4 ${user_name} ${user_new_password} + Delete VNFD In Project ${project_3_name} v5 ${user_name} ${user_new_password} + Delete Second Project After Removing User From It - [Documentation] Delete user from second project, then delete the second project. [Tags] cleanup - Run Keyword And Expect Error * Delete Project ${PROJECT_2_NAME} - Remove User From Project ${USERNAME} ${PROJECT_2_NAME} - Delete Project ${PROJECT_2_NAME} + + Run Keyword And Expect Error * Delete Project ${project_2_name} + Remove User From Project ${user_name} ${project_2_name} + Delete Project ${project_2_name} + Delete Projects User - [Documentation] Delete user. [Tags] cleanup - ${rc}= Run And Return RC osm user-delete ${USERNAME} - Log ${rc} + + ${rc}= Run And Return RC osm user-delete ${user_name} + Delete Third Project - [Documentation] Delete third project. [Tags] cleanup - Delete Project ${PROJECT_3_NAME} + + Delete Project ${project_3_name} *** Keywords *** Suite Cleanup - [Documentation] Test Suite Cleanup: Deleting VNF packages, projects and users. - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${PROJECT_2_NAME} vp2_1 ${USERNAME} ${USER_NEW_PASSWORD} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${PROJECT_3_NAME} v1 ${USERNAME} ${USER_NEW_PASSWORD} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${PROJECT_3_NAME} v2 ${USERNAME} ${USER_NEW_PASSWORD} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${PROJECT_3_NAME} v3 ${USERNAME} ${USER_NEW_PASSWORD} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${PROJECT_3_NAME} v4 ${USERNAME} ${USER_NEW_PASSWORD} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${PROJECT_3_NAME} v5 ${USERNAME} ${USER_NEW_PASSWORD} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Project ${PROJECT_1_NAME} - Run Keyword If Any Tests Failed Delete Project ${PROJECT_2_NAME} - Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Project ${PROJECT_3_NAME} - Run And Return RC osm user-delete ${USERNAME} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${project_2_name} vp2_1 ${user_name} ${user_new_password} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${project_3_name} v1 ${user_name} ${user_new_password} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${project_3_name} v2 ${user_name} ${user_new_password} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${project_3_name} v3 ${user_name} ${user_new_password} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${project_3_name} v4 ${user_name} ${user_new_password} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete VNFD In Project ${project_3_name} v5 ${user_name} ${user_new_password} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Project ${project_1_name} + Run Keyword If Any Tests Failed Delete Project ${project_2_name} + Run Keyword If Any Tests Failed Run Keyword And Ignore Error Delete Project ${project_3_name} + Run And Return RC osm user-delete ${user_name} diff --git a/robot-systest/testsuite/sa_01-vnf_with_vim_metrics.robot b/robot-systest/testsuite/sa_01-vnf_with_vim_metrics.robot index 871972e0bb32965bac4ea21bb3f6e3a02de2b724..2a98e1335caa017b5ee77ab05759326cf4815932 100644 --- a/robot-systest/testsuite/sa_01-vnf_with_vim_metrics.robot +++ b/robot-systest/testsuite/sa_01-vnf_with_vim_metrics.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [SA-01] VNF with VIM-based metrics. @@ -19,13 +17,13 @@ Library OperatingSystem Library String Library Collections -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/prometheus_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot -Test Tags sa_01 cluster_sa daily regression +Force Tags sa_01 cluster_sa daily regression Suite Setup Run Keyword And Ignore Error Suite Preparation Suite Teardown Run Keyword And Ignore Error Suite Cleanup @@ -33,81 +31,92 @@ Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS instantiation parameters -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_metrics_vnf -${VNFD_NAME} hackfest_basic_metrics-vnf -${NSD_PKG} hackfest_basic_metrics_ns -${NSD_NAME} hackfest_basic-ns-metrics +${vnfd_pkg} hackfest_basic_metrics_vnf +${vnfd_name} hackfest_basic_metrics-vnf +${nsd_pkg} hackfest_basic_metrics_ns +${nsd_name} hackfest_basic-ns-metrics # NS instance name -${NS_NAME} sa_01-vnf_with_vim_metrics_test +${ns_name} sa_01-vnf_with_vim_metrics_test # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa # Prometheus polling interval and retries -${PROMETHEUS_POLL_RETRIES} 15 times -${PROMETHEUS_POLL_TIMEOUT} 1 minute +${prometheus_poll_retries} 15 times +${prometheus_poll_timeout} 1 minute # Prometheus metrics to retrieve -${METRIC_1_NAME} osm_cpu_utilization -${METRIC_2_NAME} osm_average_memory_utilization +${metric_1_name} osm_cpu_utilization +${metric_2_name} osm_average_memory_utilization *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get VNF VIM-based Metrics - [Documentation] Check that the expected metrics are present in Prometheus (pushed from SA modules). - Variable Should Exist ${PROMETHEUS_POLL_RETRIES} msg=Metric polling retries is not available - Variable Should Exist ${PROMETHEUS_POLL_TIMEOUT} msg=Metric polling timeout is not available - Variable Should Exist ${PROMETHEUS_HOST} msg=Prometheus address is not available - Variable Should Exist ${PROMETHEUS_PORT} msg=Prometheus port is not available - Variable Should Exist ${METRIC_1_NAME} msg=Prometheus first metric name is not available - Variable Should Exist ${METRIC_2_NAME} msg=Prometheus second metric name is not available - ${metric_filter}= Set Variable ns_id=${NS_ID} - ${metric_1_value}= Wait Until Keyword Succeeds ${PROMETHEUS_POLL_RETRIES} ${PROMETHEUS_POLL_TIMEOUT} Get Metric ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} ${METRIC_1_NAME} ${metric_filter} - IF ${metric_1_value} <= 0 Fail msg=The metric '${METRIC_1_NAME}' value is '${metric_1_value}' - ${metric_2_value}= Wait Until Keyword Succeeds ${PROMETHEUS_POLL_RETRIES} ${PROMETHEUS_POLL_TIMEOUT} Get Metric ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} ${METRIC_2_NAME} ${metric_filter} - IF ${metric_2_value} <= 0 Fail msg=The metric '${METRIC_2_NAME}' value is '${metric_2_value}' + + Variable Should Exist ${prometheus_poll_retries} msg=Metric polling retries is not available + Variable Should Exist ${prometheus_poll_timeout} msg=Metric polling timeout is not available + Variable Should Exist ${prometheus_host} msg=Prometheus address is not available + Variable Should Exist ${prometheus_port} msg=Prometheus port is not available + Variable Should Exist ${metric_1_name} msg=Prometheus first metric name is not available + Variable Should Exist ${metric_2_name} msg=Prometheus second metric name is not available + ${metric_filter}= Set Variable ns_id=${ns_id} + ${metric_1_value}= Wait Until Keyword Succeeds ${prometheus_poll_retries} ${prometheus_poll_timeout} Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric_1_name} ${metric_filter} + Run Keyword If ${metric_1_value} <= 0 Fail msg=The metric '${metric_1_name}' value is '${metric_1_value}' + ${metric_2_value}= Wait Until Keyword Succeeds ${prometheus_poll_retries} ${prometheus_poll_timeout} Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric_2_name} ${metric_filter} + Run Keyword If ${metric_2_value} <= 0 Fail msg=The metric '${metric_2_name}' value is '${metric_2_value}' + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Preparation [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables + Set Testsuite Prometheus Variables + Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/sa_02-vnf_with_vim_metrics_and_autoscaling.robot b/robot-systest/testsuite/sa_02-vnf_with_vim_metrics_and_autoscaling.robot index f7608719e31a42cc579ce25a3926a4cb9f223d18..b5910f5fa4636e4f57da2f7f83423b1272aa47df 100644 --- a/robot-systest/testsuite/sa_02-vnf_with_vim_metrics_and_autoscaling.robot +++ b/robot-systest/testsuite/sa_02-vnf_with_vim_metrics_and_autoscaling.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [SA-02] VNF with VIM-based metrics and auto-scaling. @@ -20,13 +18,13 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/prometheus_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot -Test Tags sa_02 cluster_sa daily regression sanity azure +Force Tags sa_02 cluster_sa daily regression sanity azure Suite Setup Run Keyword And Ignore Error Suite Preparation Suite Teardown Run Keyword And Ignore Error Suite Cleanup @@ -34,156 +32,170 @@ Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS instantiation parameters -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_metrics_vnf -${VNFD_NAME} hackfest_basic_metrics-vnf -${NSD_PKG} hackfest_basic_metrics_ns -${NSD_NAME} hackfest_basic-ns-metrics +${vnfd_pkg} hackfest_basic_metrics_vnf +${vnfd_name} hackfest_basic_metrics-vnf +${nsd_pkg} hackfest_basic_metrics_ns +${nsd_name} hackfest_basic-ns-metrics # NS instance name and id -${NS_ID} ${EMPTY} -${NS_NAME} sa_02 +${ns_id} ${EMPTY} +${ns_name} sa_02 # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} osm4u +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} osm4u # Prometheus polling interval and retries -${PROMETHEUS_POLL_RETRIES} 15 times -${PROMETHEUS_POLL_TIMEOUT} 1 minute +${prometheus_poll_retries} 15 times +${prometheus_poll_timeout} 1 minute # Prometheus metrics to retrieve -${METRIC_NAME} osm_cpu_utilization +${metric_name} osm_cpu_utilization # VNF Variables -${VNF_MEMBER_INDEX} vnf -${VNF_IP_ADDR} ${EMPTY} -${VNF_ID} ${EMPTY} +${vnf_member_index} vnf +${vnf_ip_addr} ${EMPTY} +${vnf_id} ${EMPTY} -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Get Thresholds From VNF - [Documentation] Read metric threshold and threshold time from VNF descriptor. - ${rc} ${stdout}= Run And Return RC And Output osm vnfpkg-show ${VNFD_NAME} --literal | yq -r '.df[0]."scaling-aspect"[0]."scaling-policy"[0]."scaling-criteria"[0]."scale-out-threshold"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False + + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-show ${vnfd_name} --literal | yq -r '.df[0]."scaling-aspect"[0]."scaling-policy"[0]."scaling-criteria"[0]."scale-out-threshold"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False ${scaleout_threshold}= Convert To Number ${stdout} - Set Suite Variable ${METRIC_THRESHOLD} ${scaleout_threshold} - Log ${METRIC_THRESHOLD} - ${rc} ${stdout}= Run And Return RC And Output osm vnfpkg-show ${VNFD_NAME} --literal | yq -r '.df[0]."scaling-aspect"[0]."scaling-policy"[0]."threshold-time"' - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} msg=${stdout} values=False + Set Suite Variable ${metric_threshold} ${scaleout_threshold} + Log ${metric_threshold} + + ${rc} ${stdout}= Run and Return RC and Output osm vnfpkg-show ${vnfd_name} --literal | yq -r '.df[0]."scaling-aspect"[0]."scaling-policy"[0]."threshold-time"' + Should Be Equal As Integers ${rc} ${success_return_code} msg=${stdout} values=False ${threshold_time_value}= Convert To Number ${stdout} - Set Suite Variable ${THRESHOLD_TIME} ${threshold_time_value} - Log ${THRESHOLD_TIME} + Set Suite Variable ${threshold_time} ${threshold_time_value} + Log ${threshold_time} + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate the NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get VNF Id - [Documentation] Retrieve VNF instance id to be used later on. - @{vnfr_list}= Get Ns Vnfr Ids ${NS_ID} + + @{vnfr_list}= Get Ns Vnfr Ids ${ns_id} Log List ${vnfr_list} - Set Suite Variable ${VNF_ID} ${vnfr_list}[0] + Set Suite Variable ${vnf_id} ${vnfr_list}[0] + Get VNF IP Address - [Documentation] Get the mgmt IP address of the VNF to be used in later tests. - ${ip_addr}= Get Vnf Management Ip Address ${NS_ID} ${VNF_MEMBER_INDEX} + + ${ip_addr}= Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} Log ${ip_addr} - Set Suite Variable ${VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + Get VNF VIM-based Metric Before Auto-scaling - [Documentation] Get from Prometheus the VIM metric associated to the VNF auto-scaling group. - Variable Should Exist ${PROMETHEUS_POLL_RETRIES} msg=Metric polling retries is not available - Variable Should Exist ${PROMETHEUS_POLL_TIMEOUT} msg=Metric polling timeout is not available - Variable Should Exist ${PROMETHEUS_HOST} msg=Prometheus address is not available - Variable Should Exist ${PROMETHEUS_PORT} msg=Prometheus port is not available - Variable Should Exist ${METRIC_NAME} msg=Prometheus metric name is not available - ${metric_filter}= Set Variable ns_id=${NS_ID} - ${metric_value}= Wait Until Keyword Succeeds ${PROMETHEUS_POLL_RETRIES} ${PROMETHEUS_POLL_TIMEOUT} Get Metric ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} ${METRIC_NAME} ${metric_filter} - IF ${metric_value} <= 0 - Fail msg=The metric '${METRIC_NAME}' value is '${metric_value}' - END - IF ${metric_value} >= ${METRIC_THRESHOLD} - Fail msg=The metric '${METRIC_NAME}' value is higher than '${METRIC_THRESHOLD}' before scaling - END + + Variable Should Exist ${prometheus_poll_retries} msg=Metric polling retries is not available + Variable Should Exist ${prometheus_poll_timeout} msg=Metric polling timeout is not available + Variable Should Exist ${prometheus_host} msg=Prometheus address is not available + Variable Should Exist ${prometheus_port} msg=Prometheus port is not available + Variable Should Exist ${metric_name} msg=Prometheus metric name is not available + ${metric_filter}= Set Variable ns_id=${ns_id} + ${metric_value}= Wait Until Keyword Succeeds ${prometheus_poll_retries} ${prometheus_poll_timeout} Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric_name} ${metric_filter} + Run Keyword If ${metric_value} <= 0 Fail msg=The metric '${metric_name}' value is '${metric_value}' + Run Keyword If ${metric_value} >= ${metric_threshold} Fail msg=The metric '${metric_name}' value is higher than '${metric_threshold}' before scaling + Increase VIM-based Metric To Force Auto-scaling - [Documentation] Connect to the VNF via SSH and force VIM metric to increase. - Variable Should Exist ${PRIVATEKEY} msg=SSH private key not available - Execute Remote Command Check Rc Return Output ${VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} for i in {1..9}; do yes &> /dev/null & done + + Variable Should Exist ${privatekey} msg=SSH private key not available + Execute Remote Command Check Rc Return Output ${vnf_ip_addr} ${username} ${password} ${privatekey} for i in {1..9}; do yes &> /dev/null & done + Wait VIM-based Metric To Exceed Threshold - [Documentation] Wait until the VIM metric exceeds threshold, which should lead to a scale up. - Variable Should Exist ${PROMETHEUS_POLL_RETRIES} msg=Metric polling retries is not available - Variable Should Exist ${PROMETHEUS_POLL_TIMEOUT} msg=Metric polling timeout is not available - Wait Until Keyword Succeeds ${PROMETHEUS_POLL_RETRIES} ${PROMETHEUS_POLL_TIMEOUT} Check VIM-based Metric Exceeds Threshold + + Variable Should Exist ${prometheus_poll_retries} msg=Metric polling retries is not available + Variable Should Exist ${prometheus_poll_timeout} msg=Metric polling timeout is not available + Wait Until Keyword Succeeds ${prometheus_poll_retries} ${prometheus_poll_timeout} Check VIM-based Metric Exceeds Threshold + Wait Threshold Time - [Documentation] Wait until the VIM metric has exceeded threshold for the defined period in the descriptor. - ${threshold_time_sleep}= Evaluate ${THRESHOLD_TIME} + 1 + + ${threshold_time_sleep}= Evaluate ${threshold_time} + 1 Sleep ${threshold_time_sleep} minutes Wait scale-out threshold time plus 1 minute + Check VIM-based Metric Exceeds Threshold After Threshold-time - [Documentation] Check that the VIM metric has exceeded the threshold. + Check VIM-based Metric Exceeds Threshold + Get VDUs After Auto-scaling - [Documentation] Check that the VNF has scaled up and the humber of VDUs has increased. + Sleep 2 minutes Wait for auto-scale to take place - @{vdur_list}= Get Vnf Vdur Names ${VNF_ID} + @{vdur_list}= Get Vnf Vdur Names ${vnf_id} Log List ${vdur_list} ${vdurs}= Get Length ${vdur_list} - IF ${vdurs} <= 1 Fail msg=There is no new VDU after auto-scaling + Run Keyword If ${vdurs} <= 1 Fail msg=There is no new VDU after auto-scaling + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Preparation [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables + Set Testsuite Prometheus Variables + Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + Check VIM-based Metric Exceeds Threshold [Documentation] Auxiliar keyword to check if metric exceeds threshold - Variable Should Exist ${PROMETHEUS_HOST} msg=Prometheus address is not available - Variable Should Exist ${PROMETHEUS_PORT} msg=Prometheus port is not available - Variable Should Exist ${METRIC_NAME} msg=Prometheus metric name is not available - ${metric_filter}= Set Variable ns_id=${NS_ID} - ${metric_value}= Get Metric ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} ${METRIC_NAME} ${metric_filter} - IF ${metric_value} <= ${METRIC_THRESHOLD} - Fail msg=The metric '${METRIC_NAME}' value is '${metric_value}' which is lower than '${METRIC_THRESHOLD}' - END + + Variable Should Exist ${prometheus_host} msg=Prometheus address is not available + Variable Should Exist ${prometheus_port} msg=Prometheus port is not available + Variable Should Exist ${metric_name} msg=Prometheus metric name is not available + ${metric_filter}= Set Variable ns_id=${ns_id} + ${metric_value}= Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric_name} ${metric_filter} + Run Keyword If ${metric_value} <= ${metric_threshold} Fail msg=The metric '${metric_name}' value is '${metric_value}' which is lower than '${metric_threshold}' diff --git a/robot-systest/testsuite/sa_07-alarms_from_sa-related_vnfs.robot b/robot-systest/testsuite/sa_07-alarms_from_sa-related_vnfs.robot index a26ca11d58c522fc4f7758a8263e5f88b01011df..d79a76251a8f6c253e8c7cf50f6a5316a46b0ce0 100644 --- a/robot-systest/testsuite/sa_07-alarms_from_sa-related_vnfs.robot +++ b/robot-systest/testsuite/sa_07-alarms_from_sa-related_vnfs.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [SA-07] Events or alarms coming from SA-related VNFs in the NS. @@ -20,13 +18,13 @@ Library String Library Collections Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/prometheus_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot -Test Tags sa_07 cluster_sa daily regression +Force Tags sa_07 cluster_sa daily regression Suite Setup Run Keyword And Ignore Error Suite Preparation Suite Teardown Run Keyword And Ignore Error Suite Cleanup @@ -34,159 +32,179 @@ Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS instantiation parameters -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # NS and VNF descriptor package folder and ids -${VNFD_PKG} cirros_alarm_vnf -${VNFD_NAME} cirros_alarm-vnf -${VNFD_FILE} cirros_alarm_vnfd.yaml -${NEW_VNFD_PKG} new_cirros_alarm_vnf -${NSD_PKG} cirros_alarm_ns -${NSD_NAME} cirros_alarm-ns +${vnfd_pkg} cirros_alarm_vnf +${vnfd_name} cirros_alarm-vnf +${vnfd_file} cirros_alarm_vnfd.yaml +${new_vnfd_pkg} new_cirros_alarm_vnf +${nsd_pkg} cirros_alarm_ns +${nsd_name} cirros_alarm-ns # NS instance name and id -${NS_ID} ${EMPTY} -${NS_NAME} sa_07-alarm_test +${ns_id} ${EMPTY} +${ns_name} sa_07-alarm_test # Webhook NS and VNF descriptor package folder and ids -${WS_VNFD_PKG} hackfest_basic_vnf -${WS_NSD_PKG} hackfest_basic_ns -${WS_VNFD_NAME} hackfest_basic-vnf -${WS_NSD_NAME} hackfest_basic-ns +${ws_vnfd_pkg} hackfest_basic_vnf +${ws_nsd_pkg} hackfest_basic_ns +${ws_vnfd_name} hackfest_basic-vnf +${ws_nsd_name} hackfest_basic-ns # Webhook NS instance name and id -${WS_NS_ID} ${EMPTY} -${WS_NS_NAME} sa_07-webhook_service_test +${ws_ns_id} ${EMPTY} +${ws_ns_name} sa_07-webhook_service_test # Webhook NS Variables -${WS_VNF_MEMBER_INDEX} vnf -${WS_VNF_IP_ADDR} ${EMPTY} -${WS_LOG_FILE} webhook.log -${WS_PORT} 5212 -${WS_ALARM_MSG} notify_alarm +${ws_vnf_member_index} vnf +${ws_vnf_ip_addr} ${EMPTY} +${ws_log_file} webhook.log +${ws_port} 5212 +${ws_alarm_msg} notify_alarm # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} # Prometheus polling interval and retries -${PROMETHEUS_POLL_RETRIES} 15 times -${PROMETHEUS_POLL_TIMEOUT} 1 minute +${prometheus_poll_retries} 15 times +${prometheus_poll_timeout} 1 minute # Prometheus metrics to retrieve -${METRIC_NAME} osm_cpu_utilization +${metric_name} osm_cpu_utilization -${SUCCESS_RETURN_CODE} 0 +${success_return_code} 0 *** Test Cases *** Create Webhook Service VNF Descriptor - [Documentation] Upload VNF package with a webhook service for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${WS_VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${ws_vnfd_pkg}' + Create Webhook Service NS Descriptor - [Documentation] Upload NS package with a webhook service for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${WS_NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${ws_nsd_pkg}' + Instantiate Webhook Service Network Service - [Documentation] Instantiate NS with the webhook for the testsuite. - ${id}= Create Network Service ${WS_NSD_NAME} %{VIM_TARGET} ${WS_NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${WS_NS_ID} ${id} + + ${id}= Create Network Service ${ws_nsd_name} %{VIM_TARGET} ${ws_ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ws_ns_id} ${id} + Get Webhook Service VNF IP Address - [Documentation] Get the mgmt IP address of the VNF offering the webhook service. - ${ip_addr}= Get Vnf Management Ip Address ${WS_NS_ID} ${WS_VNF_MEMBER_INDEX} + + ${ip_addr}= Get Vnf Management Ip Address ${ws_ns_id} ${ws_vnf_member_index} Log ${ip_addr} - Set Suite Variable ${WS_VNF_IP_ADDR} ${ip_addr} + Set Suite Variable ${ws_vnf_ip_addr} ${ip_addr} + Start Webhook Service - [Documentation] Launch simple command in webhook VNF to listen to notifications. - Variable Should Exist ${PRIVATEKEY} msg=SSH private key not available + + Variable Should Exist ${privatekey} msg=SSH private key not available Sleep 40 seconds Wait for SSH daemon to be up - ${stdout}= Execute Remote Command Check Rc Return Output ${WS_VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} while true; do { echo -e 'HTTP/1.0 200 OK\r\nContent-Length: 0\r\n\r\n'; test; } | nc -l '${WS_PORT}'; done > '${WS_LOG_FILE}' 2>&1 & - Log ${stdout} + ${stdout}= Execute Remote Command Check Rc Return Output ${ws_vnf_ip_addr} ${username} ${password} ${privatekey} while true; do { echo -e 'HTTP/1.0 200 OK\r\nContent-Length: 0\r\n\r\n'; test; } | nc -l '${ws_port}'; done > '${ws_log_file}' 2>&1 & + Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - ${rc} ${stdout}= Run And Return RC And Output mkdir '%{PACKAGES_FOLDER}/${NEW_VNFD_PKG}' && WEBHOOK_URL="http://${WS_VNF_IP_ADDR}:${WS_PORT}" envsubst < '%{PACKAGES_FOLDER}/${VNFD_PKG}'/'${VNFD_FILE}' > '%{PACKAGES_FOLDER}/${NEW_VNFD_PKG}'/'${VNFD_FILE}' + + ${rc} ${stdout}= Run and Return RC and Output mkdir '%{PACKAGES_FOLDER}/${new_vnfd_pkg}' && WEBHOOK_URL="http://${ws_vnf_ip_addr}:${ws_port}" envsubst < '%{PACKAGES_FOLDER}/${vnfd_pkg}'/'${vnfd_file}' > '%{PACKAGES_FOLDER}/${new_vnfd_pkg}'/'${vnfd_file}' Log ${stdout} - Should Be Equal As Integers ${rc} ${SUCCESS_RETURN_CODE} - Create VNFD '%{PACKAGES_FOLDER}/${NEW_VNFD_PKG}' + Should Be Equal As Integers ${rc} ${success_return_code} + Create VNFD '%{PACKAGES_FOLDER}/${new_vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate the main NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + Get Alarm Metric - [Documentation] Check that the expected metric is present in Prometheus (pushed from SA modules). - Variable Should Exist ${PROMETHEUS_POLL_RETRIES} msg=Metric polling retries is not available - Variable Should Exist ${PROMETHEUS_POLL_TIMEOUT} msg=Metric polling timeout is not available - Variable Should Exist ${PROMETHEUS_HOST} msg=Prometheus address is not available - Variable Should Exist ${PROMETHEUS_PORT} msg=Prometheus port is not available - Variable Should Exist ${METRIC_NAME} msg=Prometheus metric name is not available - ${metric_filter}= Set Variable ns_id=${NS_ID} - ${metric_value}= Wait Until Keyword Succeeds ${PROMETHEUS_POLL_RETRIES} ${PROMETHEUS_POLL_TIMEOUT} Get Metric ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} ${METRIC_NAME} ${metric_filter} - IF ${metric_value} <= 0 Fail msg=The metric '${METRIC_NAME}' value is '${metric_value}' + + Variable Should Exist ${prometheus_poll_retries} msg=Metric polling retries is not available + Variable Should Exist ${prometheus_poll_timeout} msg=Metric polling timeout is not available + Variable Should Exist ${prometheus_host} msg=Prometheus address is not available + Variable Should Exist ${prometheus_port} msg=Prometheus port is not available + Variable Should Exist ${metric_name} msg=Prometheus metric name is not available + ${metric_filter}= Set Variable ns_id=${ns_id} + ${metric_value}= Wait Until Keyword Succeeds ${prometheus_poll_retries} ${prometheus_poll_timeout} Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric_name} ${metric_filter} + Run Keyword If ${metric_value} <= 0 Fail msg=The metric '${metric_name}' value is '${metric_value}' + Check Alarms Were Received - [Documentation] Check in the webhook VNF that the notification is received. - Wait Until Keyword Succeeds 6 times 40 seconds Execute Remote Command Check Rc Return Output ${WS_VNF_IP_ADDR} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} cat '${WS_LOG_FILE}' | grep '${WS_ALARM_MSG}' | grep '${NS_NAME}' + + Wait Until Keyword Succeeds 6 times 40 seconds Execute Remote Command Check Rc Return Output ${ws_vnf_ip_addr} ${username} ${password} ${privatekey} cat '${ws_log_file}' | grep '${ws_alarm_msg}' | grep '${ns_name}' + Delete NS Instance - [Documentation] Delete main NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete main NS package. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete main VNF package. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} + Delete Webhook Service NS Instance - [Documentation] Delete NS instance for the webhook. [Tags] cleanup - Delete NS ${WS_NS_NAME} + + Delete NS ${ws_ns_name} + Delete Webhook Service NS Descriptor - [Documentation] Delete NS package for the webhook. [Tags] cleanup - Delete NSD ${WS_NSD_NAME} + + Delete NSD ${ws_nsd_name} + Delete Webhook Service VNF Descriptor - [Documentation] Delete VNF package for the webhook. [Tags] cleanup - Delete VNFD ${WS_VNFD_NAME} + + Delete VNFD ${ws_vnfd_name} *** Keywords *** Suite Preparation [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables + Set Testsuite Prometheus Variables + Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} - Run Keyword If Any Tests Failed Delete NS ${WS_NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${WS_NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${WS_VNFD_NAME} - Delete Temporary Descriptor Folder '%{PACKAGES_FOLDER}/${NEW_VNFD_PKG}' + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + Run Keyword If Any Tests Failed Delete NS ${ws_ns_name} + Run Keyword If Any Tests Failed Delete NSD ${ws_nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${ws_vnfd_name} + Delete Temporary Descriptor Folder '%{PACKAGES_FOLDER}/${new_vnfd_pkg}' + Delete Temporary Descriptor Folder [Documentation] Removes the temporary package folder created for the test [Arguments] ${folder_name} - ${rc} ${stdout}= Run And Return RC And Output rm -rf '${folder_name}' - Log ${rc},${stdout} + ${rc} ${stdout}= Run and Return RC and Output rm -rf '${folder_name}' + Log ${stdout} + + diff --git a/robot-systest/testsuite/sa_08-vnf_with_vnf_indicators_snmp.robot b/robot-systest/testsuite/sa_08-vnf_with_vnf_indicators_snmp.robot index 7ba0818adff2bcd696ec0d4dbf1f3289f574cd85..ea8873c0d113864d1ad3647a4f0c3d9d1fcdeb9f 100644 --- a/robot-systest/testsuite/sa_08-vnf_with_vnf_indicators_snmp.robot +++ b/robot-systest/testsuite/sa_08-vnf_with_vnf_indicators_snmp.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [SA-08] VNF with VNF-based indicators through SNMP. @@ -19,13 +17,13 @@ Library OperatingSystem Library String Library Collections -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/ssh_lib.resource -Resource ../lib/prometheus_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot -Test Tags sa_08 cluster_k8s daily regression +Force Tags sa_08 cluster_k8s daily regression Suite Setup Run Keyword And Ignore Error Suite Preparation Suite Teardown Run Keyword And Ignore Error Suite Cleanup @@ -33,76 +31,85 @@ Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS instantiation parameters -${NS_CONFIG} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } # NS and VNF descriptor package folder and ids -${VNFD_PKG} snmp_ee_vnf -${VNFD_NAME} snmp_ee-vnf -${NSD_PKG} snmp_ee_ns -${NSD_NAME} snmp_ee-ns +${vnfd_pkg} snmp_ee_vnf +${vnfd_name} snmp_ee-vnf +${nsd_pkg} snmp_ee_ns +${nsd_name} snmp_ee-ns # NS instance name -${NS_NAME} sa_08-vnf_with_vnf_indicators_snmp_test +${ns_name} sa_08-vnf_with_vnf_indicators_snmp_test # Prometheus polling interval and retries -${PROMETHEUS_POLL_RETRIES} 10 times -${PROMETHEUS_POLL_TIMEOUT} 1 minute +${prometheus_poll_retries} 10 times +${prometheus_poll_timeout} 1 minute # Prometheus metrics to retrieve -${METRIC_1_NAME} ifInOctets -${METRIC_1_FILTER} ifIndex=1 -${METRIC_2_NAME} ifMtu -${METRIC_2_FILTER} ifIndex=2 +${metric_1_name} ifInOctets +${metric_1_filter} ifIndex=1 +${metric_2_name} ifMtu +${metric_2_filter} ifIndex=2 *** Test Cases *** Create VNF Descriptor - [Documentation] Upload VNF package for the testsuite. - Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Create NS Descriptor - [Documentation] Upload NS package for the testsuite. - Create NSD '%{PACKAGES_FOLDER}/${NSD_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + Instantiate Network Service - [Documentation] Instantiate the NS for the testsuite. - ${id}= Create Network Service ${NSD_NAME} %{VIM_TARGET} ${NS_NAME} ${NS_CONFIG} ${EMPTY} - Set Suite Variable ${NS_ID} ${id} + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${EMPTY} + Set Suite Variable ${ns_id} ${id} + Get VNF SNMP Metrics - [Documentation] Check that SNMP metrics from the VNF are stored in Prometheus. - Variable Should Exist ${PROMETHEUS_HOST} msg=Prometheus address is not available - Variable Should Exist ${PROMETHEUS_PORT} msg=Prometheus port is not available - Variable Should Exist ${METRIC_1_NAME} msg=Prometheus first metric name is not available - Variable Should Exist ${METRIC_2_NAME} msg=Prometheus second metric name is not available - ${metric_1_value}= Wait Until Keyword Succeeds ${PROMETHEUS_POLL_RETRIES} ${PROMETHEUS_POLL_TIMEOUT} Get Metric ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} ${METRIC_1_NAME} ${METRIC_1_FILTER} - IF ${metric_1_value} <= 0 Fail msg=The metric '${METRIC_1_NAME}' value is '${metric_1_value}' - ${metric_2_value}= Wait Until Keyword Succeeds ${PROMETHEUS_POLL_RETRIES} ${PROMETHEUS_POLL_TIMEOUT} Get Metric ${PROMETHEUS_HOST} ${PROMETHEUS_PORT} ${PROMETHEUS_USER} ${PROMETHEUS_PASSWORD} ${METRIC_2_NAME} ${METRIC_2_FILTER} - IF ${metric_2_value} <= 0 Fail msg=The metric '${METRIC_2_NAME}' value is '${metric_2_value}' + + Variable Should Exist ${prometheus_host} msg=Prometheus address is not available + Variable Should Exist ${prometheus_port} msg=Prometheus port is not available + Variable Should Exist ${metric_1_name} msg=Prometheus first metric name is not available + Variable Should Exist ${metric_2_name} msg=Prometheus second metric name is not available + ${metric_1_value}= Wait Until Keyword Succeeds ${prometheus_poll_retries} ${prometheus_poll_timeout} Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric_1_name} ${metric_1_filter} + Run Keyword If ${metric_1_value} <= 0 Fail msg=The metric '${metric_1_name}' value is '${metric_1_value}' + ${metric_2_value}= Wait Until Keyword Succeeds ${prometheus_poll_retries} ${prometheus_poll_timeout} Get Metric ${prometheus_host} ${prometheus_port} ${prometheus_user} ${prometheus_password} ${metric_2_name} ${metric_2_filter} + Run Keyword If ${metric_2_value} <= 0 Fail msg=The metric '${metric_2_name}' value is '${metric_2_value}' + Delete NS Instance - [Documentation] Delete NS instance. [Tags] cleanup - Delete NS ${NS_NAME} + + Delete NS ${ns_name} + Delete NS Descriptor - [Documentation] Delete NS package from OSM. [Tags] cleanup - Delete NSD ${NSD_NAME} + + Delete NSD ${nsd_name} + Delete VNF Descriptor - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Preparation [Documentation] Test Suite Preparation: Setting Prometheus Testsuite Variables + Set Testsuite Prometheus Variables + Suite Cleanup [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance - Run Keyword If Any Tests Failed Delete NS ${NS_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} diff --git a/robot-systest/testsuite/slice_01-network_slicing.robot b/robot-systest/testsuite/slice_01-network_slicing.robot index ee19f39a3d7e2b0d3c147c4da05e17531de08610..a9105244bc814761ca2b62819858d858672c8ce7 100644 --- a/robot-systest/testsuite/slice_01-network_slicing.robot +++ b/robot-systest/testsuite/slice_01-network_slicing.robot @@ -1,4 +1,3 @@ -*** Comments *** # Copyright 2020 Atos # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [SLICE-01] Network Slicing. @@ -24,140 +22,171 @@ Library Process Library SSHLibrary Library yaml -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/nst_lib.resource -Resource ../lib/nsi_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nst_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsi_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags slice_01 cluster_slices daily regression +Force Tags slice_01 cluster_slices daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # NS and VNF descriptor package files -${VNFD1_PKG} slice_basic_vnf -${VNFD2_PKG} slice_basic_middle_vnf -${NSD1_PKG} slice_basic_ns -${NSD2_PKG} slice_basic_middle_ns -${NST} slice_basic_nst/slice_basic_nst.yaml +${vnfd1_pkg} slice_basic_vnf +${vnfd2_pkg} slice_basic_middle_vnf +${nsd1_pkg} slice_basic_ns +${nsd2_pkg} slice_basic_middle_ns +${nst} slice_basic_nst/slice_basic_nst.yaml # Descriptor names -${NST_NAME} slice_basic_nst -${VNFD1_NAME} slice_basic_vnf -${VNFD2_NAME} slice_basic_middle_vnf -${NSD1_NAME} slice_basic_ns -${NSD2_NAME} slice_basic_middle_ns +${nst_name} slice_basic_nst +${vnfd1_name} slice_basic_vnf +${vnfd2_name} slice_basic_middle_vnf +${nsd1_name} slice_basic_ns +${nsd2_name} slice_basic_middle_ns # Instance names -${SLICE_NAME} slicebasic -${MIDDLE_NS_NAME} slicebasic.slice_basic_nsd_2 +${slice_name} slicebasic +${middle_ns_name} slicebasic.slice_basic_nsd_2 # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${VNF_MEMBER_INDEX} middle -${VNF_IP_ADDR} ${EMPTY} -${MGMT_VNF_IP} ${EMPTY} -${NST_CONFIG} {netslice-vld: [ {name: slice_vld_mgmt, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_id} ${EMPTY} +${vnf_member_index} middle +${vnf_ip_addr} ${EMPTY} +${mgmt_vnf_ip} ${EMPTY} +${nst_config} {netslice-vld: [ {name: slice_vld_mgmt, vim-network-name: %{VIM_MGMT_NET}} ] } *** Test Cases *** Create Slice VNF Descriptors [Documentation] Onboards all the VNFDs required for the test: vnfd1_pkg and vnfd2_pkg (in the variables file) - Create VNFD '%{PACKAGES_FOLDER}/${VNFD1_PKG}' - Create VNFD '%{PACKAGES_FOLDER}/${VNFD2_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd1_pkg}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd2_pkg}' + Create Slice NS Descriptors [Documentation] Onboards all the NSDs required for the test: nsd1_pkg and nsd2_pkg (in the variables file) - Create NSD '%{PACKAGES_FOLDER}/${NSD1_PKG}' - Create NSD '%{PACKAGES_FOLDER}/${NSD2_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd1_pkg}' + Create NSD '%{PACKAGES_FOLDER}/${nsd2_pkg}' Create Slice Template [Documentation] Onboards the Network Slice Template: nst (in the variables file) - Create NST '%{PACKAGES_FOLDER}/${NST}' + + Create NST '%{PACKAGES_FOLDER}/${nst}' Network Slice Instance Test [Documentation] Instantiates the NST recently onboarded and sets the instantiation id as a suite variable (nsi_id) - ${id}= Create Network Slice ${NST_NAME} %{VIM_TARGET} ${SLICE_NAME} ${NST_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NSI_ID} ${id} + + ${id}= Create Network Slice ${nst_name} %{VIM_TARGET} ${slice_name} ${nst_config} ${publickey} + Set Suite Variable ${nsi_id} ${id} + Get Middle Vnf Management Ip [Documentation] Obtains the management IP of the slice middle VNF (name in the reources file) and sets the ip as a suite variable (mgmt_vnf_ip) - ${middle_ns_id}= Run And Return RC And Output osm ns-list | grep ${MIDDLE_NS_NAME} | awk '{print $4}' 2>&1 - ${vnf_ip}= Get Vnf Management Ip Address ${middle_ns_id}[1] ${VNF_MEMBER_INDEX} - IF ${vnf_ip} == ${EMPTY} Fatal Error Variable \$\{ vnf_ip\} Empty - Set Suite Variable ${MGMT_VNF_IP} ${vnf_ip} + + ${middle_ns_id}= Run and Return RC and Output osm ns-list | grep ${middle_ns_name} | awk '{print $4}' 2>&1 + ${vnf_ip} Get Vnf Management Ip Address ${middle_ns_id}[1] ${vnf_member_index} + Run Keyword If '${vnf_ip}' == '${EMPTY}' Fatal Error Variable \$\{ vnf_ip\} Empty + Set Suite Variable ${mgmt_vnf_ip} ${vnf_ip} + Get Slice Vnf Ip Addresses [Documentation] Obtains the list of IPs addresses in the slice and sets the list as a suite variable (slice_vnfs_ips) + # Get all the ns_id in the slice except the middle one to avoid self ping - @{slice_ns_list}= Get Slice Ns List Except One ${SLICE_NAME} ${MIDDLE_NS_NAME} - Log Many @{slice_ns_list} + @{slice_ns_list} Get Slice Ns List Except One ${slice_name} ${middle_ns_name} + Log many @{slice_ns_list} @{temp_list}= Create List # For each ns_id in the list, get all the vnf_id and their IP addresses FOR ${ns_id} IN @{slice_ns_list} Log ${ns_id} - @{vnf_id_list}= Get Ns Vnf List ${ns_id} + @{vnf_id_list} Get Ns Vnf List ${ns_id} # For each vnf_id in the list, get all its IP addresses - @{ns_ip_list}= Get Ns Ip List @{vnf_id_list} + @{ns_ip_list} Get Ns Ip List @{vnf_id_list} @{temp_list}= Combine Lists ${temp_list} ${ns_ip_list} END Log List ${temp_list} - Set Suite Variable ${SLICE_VNFS_IPS} ${temp_list} + Set Suite Variable ${slice_vnfs_ips} ${temp_list} + Test Middle Ns Ping [Documentation] Pings the slice middle vnf (mgmt_vnf_ip) + Sleep 60s Waiting for the network to be up # Ping to the middle VNF - Log ${MGMT_VNF_IP} - Test Connectivity ${MGMT_VNF_IP} + Log ${mgmt_vnf_ip} + Test Connectivity ${mgmt_vnf_ip} + Test Middle Vnf SSH Access [Documentation] SSH access to the slice middle vnf (mgmt_vnf_ip) with the credentials provided in the variables file + Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${MGMT_VNF_IP} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${mgmt_vnf_ip} ${username} ${password} ${privatekey} + Test Slice Connectivity [Documentation] SSH access to the slice middle vnf (mgmt_vnf_ip) with the credentials provided in the variables file ... and pings all the IP addresses in the list (slice_vnfs_ips) - Ping Many ${MGMT_VNF_IP} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} @{SLICE_VNFS_IPS} + + Ping Many ${mgmt_vnf_ip} ${username} ${password} ${privatekey} @{slice_vnfs_ips} + Delete Slice Instance [Documentation] Stops the slice instance (slice_name) [Tags] cleanup - Delete NSI ${SLICE_NAME} + + Delete NSI ${slice_name} + Delete Slice Template [Documentation] Deletes the NST (nst_name) from OSM [Tags] cleanup - Delete NST ${NST_NAME} + + Delete NST ${nst_name} + Delete NS Descriptors [Documentation] Deletes all the NSDs created for the test: nsd1_name, nsd2_name [Tags] cleanup - Delete NSD ${NSD1_NAME} - Delete NSD ${NSD2_NAME} + + Delete NSD ${nsd1_name} + Delete NSD ${nsd2_name} + Delete VNF Descriptors [Documentation] Deletes all the VNFDs created for the test: vnfd1_name, vnfd2_name [Tags] cleanup - Delete VNFD ${VNFD1_NAME} - Delete VNFD ${VNFD2_NAME} + + Delete VNFD ${vnfd1_name} + Delete VNFD ${vnfd2_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptors, instance and template - Run Keyword If Any Tests Failed Delete NSI ${SLICE_NAME} - Run Keyword If Any Tests Failed Delete NST ${NST_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD1_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD2_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD1_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD2_NAME} + + Run Keyword If Any Tests Failed Delete NSI ${slice_name} + + Run Keyword If Any Tests Failed Delete NST ${nst_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd1_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd2_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd1_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd2_name} + + + diff --git a/robot-systest/testsuite/slice_02-shared_network_slicing.robot b/robot-systest/testsuite/slice_02-shared_network_slicing.robot index d5a376af41dba75346e1c6cae90f47aeb69425b0..869eb454a147d4fd9fa75ff345537efc3ed45c5e 100644 --- a/robot-systest/testsuite/slice_02-shared_network_slicing.robot +++ b/robot-systest/testsuite/slice_02-shared_network_slicing.robot @@ -1,4 +1,3 @@ -*** Comments *** # Copyright 2020 Atos # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - *** Settings *** Documentation [SLICE-02] Shared Network Slicing. @@ -23,180 +21,227 @@ Library Collections Library Process Library SSHLibrary -Resource ../lib/vnfd_lib.resource -Resource ../lib/nsd_lib.resource -Resource ../lib/nst_lib.resource -Resource ../lib/nsi_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/connectivity_lib.resource -Resource ../lib/ssh_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nst_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsi_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/connectivity_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot -Test Tags slice_02 cluster_slices daily regression +Force Tags slice_02 cluster_slices daily regression Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** + # NS and VNF descriptor package files -${VNFD1_PKG} slice_basic_vnf -${VNFD2_PKG} slice_basic_middle_vnf -${NSD1_PKG} slice_basic_ns -${NSD2_PKG} slice_basic_middle_ns -${NST} slice_basic_nst/slice_basic_nst.yaml -${NST2} slice_basic_nst/slice_basic_2nd_nst.yaml +${vnfd1_pkg} slice_basic_vnf +${vnfd2_pkg} slice_basic_middle_vnf +${nsd1_pkg} slice_basic_ns +${nsd2_pkg} slice_basic_middle_ns +${nst} slice_basic_nst/slice_basic_nst.yaml +${nst2} slice_basic_nst/slice_basic_2nd_nst.yaml # Instance names -${SLICE_NAME} slicebasic -${SLICE2_NAME} sliceshared -${MIDDLE_NS_NAME} slicebasic.slice_basic_nsd_2 +${slice_name} slicebasic +${slice2_name} sliceshared +${middle_ns_name} slicebasic.slice_basic_nsd_2 # Descriptor names -${NST_NAME} slice_basic_nst -${NST2_NAME} slice_basic_nst2 -${VNFD1_NAME} slice_basic_vnf -${VNFD2_NAME} slice_basic_middle_vnf -${NSD1_NAME} slice_basic_ns -${NSD2_NAME} slice_basic_middle_ns +${nst_name} slice_basic_nst +${nst2_name} slice_basic_nst2 +${vnfd1_name} slice_basic_vnf +${vnfd2_name} slice_basic_middle_vnf +${nsd1_name} slice_basic_ns +${nsd2_name} slice_basic_middle_ns # SSH keys and username to be used -${PUBLICKEY} %{HOME}/.ssh/id_rsa.pub -${PRIVATEKEY} %{HOME}/.ssh/id_rsa -${USERNAME} ubuntu -${PASSWORD} ${EMPTY} +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa +${username} ubuntu +${password} ${EMPTY} -${VNF_MEMBER_INDEX} middle -${VNF_IP_ADDR} ${EMPTY} -${NST_CONFIG} {netslice-vld: [ {name: slice_vld_mgmt, vim-network-name: %{VIM_MGMT_NET}} ] } +${ns_id} ${EMPTY} +${vnf_member_index} middle +${vnf_ip_addr} ${EMPTY} +${nst_config} {netslice-vld: [ {name: slice_vld_mgmt, vim-network-name: %{VIM_MGMT_NET}} ] } *** Test Cases *** Create Slice VNF Descriptors [Documentation] Onboards all the VNFDs required for the test: vnfd1_pkg and vnfd2_pkg (in the variables file) - Create VNFD '%{PACKAGES_FOLDER}/${VNFD1_PKG}' - Create VNFD '%{PACKAGES_FOLDER}/${VNFD2_PKG}' + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd1_pkg}' + Create VNFD '%{PACKAGES_FOLDER}/${vnfd2_pkg}' + Create Slice NS Descriptors [Documentation] Onboards all the NSDs required for the test: nsd1_pkg and nsd2_pkg (in the variables file) - Create NSD '%{PACKAGES_FOLDER}/${NSD1_PKG}' - Create NSD '%{PACKAGES_FOLDER}/${NSD2_PKG}' + + Create NSD '%{PACKAGES_FOLDER}/${nsd1_pkg}' + Create NSD '%{PACKAGES_FOLDER}/${nsd2_pkg}' Create Slice Templates [Documentation] Onboards the Network Slice Templates: nst, nst2 (in the variables file) - Create NST '%{PACKAGES_FOLDER}/${NST}' - Create NST '%{PACKAGES_FOLDER}/${NST2}' + + Create NST '%{PACKAGES_FOLDER}/${nst}' + Create NST '%{PACKAGES_FOLDER}/${nst2}' Network Slice First Instance [Documentation] Instantiates the First NST recently onboarded (nst_name) and sets the instantiation id as a suite variable (nsi_id) ... The slice contains 3 NS (1 shared) - ${id}= Create Network Slice ${NST_NAME} %{VIM_TARGET} ${SLICE_NAME} ${NST_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NSI_ID} ${id} + + ${id}= Create Network Slice ${nst_name} %{VIM_TARGET} ${slice_name} ${nst_config} ${publickey} + Set Suite Variable ${nsi_id} ${id} + Network Slice Second Instance [Documentation] Instantiates the Second NST recently onboarded (nst2_name) and sets the instantiation id as a suite variable (nsi2_id) ... The slice contains 2 NS (1 shared) - ${id}= Create Network Slice ${NST2_NAME} %{VIM_TARGET} ${SLICE2_NAME} ${NST_CONFIG} ${PUBLICKEY} - Set Suite Variable ${NSI2_ID} ${id} + + ${id}= Create Network Slice ${nst2_name} %{VIM_TARGET} ${slice2_name} ${nst_config} ${publickey} + Set Suite Variable ${nsi2_id} ${id} + First Network Slice Ns Count [Documentation] Counts the NS in both slice instances and shoul be equal to 4 - ${slice1_count}= Get Slice Ns Count ${SLICE_NAME} - ${slice2_count}= Get Slice Ns Count ${SLICE2_NAME} + + ${slice1_count}= Get Slice Ns Count ${slice_name} + ${slice2_count}= Get Slice Ns Count ${slice2_name} ${together}= Evaluate ${slice1_count} + ${slice2_count} Should Be Equal As Integers ${together} 4 + Get Middle Vnf Management Ip [Documentation] Obtains the management IP of the shared NS main (only) VNF and sets it as a suite variable (mgmt_vnf_ip) - ${middle_ns_id}= Run And Return RC And Output osm ns-list | grep ${MIDDLE_NS_NAME} | awk '{print $4}' 2>&1 - ${vnf_ip}= Get Vnf Management Ip Address ${middle_ns_id}[1] ${VNF_MEMBER_INDEX} - IF ${vnf_ip} == ${EMPTY} Fatal Error Variable \$\{ vnf_ip\} Empty - Set Suite Variable ${MGMT_VNF_IP} ${vnf_ip} + + ${middle_ns_id}= Run and Return RC and Output osm ns-list | grep ${middle_ns_name} | awk '{print $4}' 2>&1 + ${vnf_ip} Get Vnf Management Ip Address ${middle_ns_id}[1] ${vnf_member_index} + Run Keyword If '${vnf_ip}' == '${EMPTY}' Fatal Error Variable \$\{ vnf_ip\} Empty + Set Suite Variable ${mgmt_vnf_ip} ${vnf_ip} + Get First Slice Vnf IPs [Documentation] Obtains the list of IPs addresses in the first slice and sets the list as a suite variable (slice1_vnfs_ips) + # Get all the ns_id in the slice except the middle one - @{ip_list}= Get Slice Vnf Ip Addresses ${SLICE_NAME} + @{ip_list} Get Slice Vnf Ip Addresses ${slice_name} Should Be True ${ip_list} is not None - Set Suite Variable ${SLICE1_VNFS_IPS} ${ip_list} + Set Suite Variable ${slice1_vnfs_ips} ${ip_list} + Test Middle Ns Ping [Documentation] Pings the slice middle vnf (mgmt_vnf_ip) + Sleep 60s Waiting for the network to be up # Ping to the middle VNF - Test Connectivity ${MGMT_VNF_IP} + Test Connectivity ${mgmt_vnf_ip} + Test Middle Vnf SSH Access [Documentation] SSH access to the slice middle vnf (mgmt_vnf_ip) with the credentials provided in the variables file + Sleep 30s Waiting ssh daemon to be up - Test SSH Connection ${MGMT_VNF_IP} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} + Test SSH Connection ${mgmt_vnf_ip} ${username} ${password} ${privatekey} + Test First Slice Connectivity [Documentation] SSH access to the slice middle vnf (mgmt_vnf_ip) with the credentials provided in the variables file ... and pings all the IP addresses in the list (slice1_vnfs_ips) - Ping Many ${MGMT_VNF_IP} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} @{SLICE1_VNFS_IPS} + + Ping Many ${mgmt_vnf_ip} ${username} ${password} ${privatekey} @{slice1_vnfs_ips} + Delete Slice One Instance [Documentation] Stops the slice instance (slice_name) + [Tags] cleanup - Delete NSI ${SLICE_NAME} + + Delete NSI ${slice_name} + Second Network Slice Ns Count [Documentation] Counts the NS in both slice instances and should be equal to 2 - ${slice1_count}= Get Slice Ns Count ${SLICE_NAME} - ${slice2_count}= Get Slice Ns Count ${SLICE2_NAME} + + ${slice1_count}= Get Slice Ns Count ${slice_name} + ${slice2_count}= Get Slice Ns Count ${slice2_name} ${together}= Evaluate ${slice1_count} + ${slice2_count} Should Be Equal As Integers ${together} 2 Get Second Slice Vnf IPs [Documentation] Obtains the list of IPs addresses in the second slice and sets the list as a suite variable (slice2_vnfs_ips) + # Get all the ns_id in the slice - @{ip_list}= Get Slice Vnf Ip Addresses ${SLICE2_NAME} + @{ip_list} Get Slice Vnf Ip Addresses ${slice2_name} Should Be True ${ip_list} is not None - Set Suite Variable ${SLICE2_VNFS_IPS} ${ip_list} + Set Suite Variable ${slice2_vnfs_ips} ${ip_list} + Test Second Slice Connectivity [Documentation] SSH access to the slice middle vnf (mgmt_vnf_ip) with the credentials provided in the variables file ... and pings all the IP addresses in the list (slice2_vnfs_ips) - Ping Many ${MGMT_VNF_IP} ${USERNAME} ${PASSWORD} ${PRIVATEKEY} @{SLICE2_VNFS_IPS} + + Ping Many ${mgmt_vnf_ip} ${username} ${password} ${privatekey} @{slice2_vnfs_ips} + Delete Slice Two Instance [Documentation] Stops the slice instance (slice2_name) + [Tags] cleanup - Delete NSI ${SLICE2_NAME} + + Delete NSI ${slice2_name} + Delete Slice One Template [Documentation] Deletes the NST (nst_name) from OSM + [Tags] cleanup - Delete NST ${NST_NAME} + + Delete NST ${nst_name} + Delete Slice Two Template [Documentation] Deletes the NST (nst2_name) from OSM + [Tags] cleanup - Delete NST ${NST2_NAME} + + Delete NST ${nst2_name} + Delete NS Descriptors [Documentation] Deletes all the NSDs created for the test: nsd1_name, nsd2_name + [Tags] cleanup - Delete NSD ${NSD1_NAME} - Delete NSD ${NSD2_NAME} + + Delete NSD ${nsd1_name} + Delete NSD ${nsd2_name} + Delete VNF Descriptors [Documentation] Deletes all the VNFDs created for the test: vnfd1_name, vnfd2_name + [Tags] cleanup - Delete VNFD ${VNFD1_NAME} - Delete VNFD ${VNFD2_NAME} + + Delete VNFD ${vnfd1_name} + Delete VNFD ${vnfd2_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptors, instance and templates - Run Keyword If Any Tests Failed Delete NSI ${SLICE_NAME} - Run Keyword If Any Tests Failed Delete NSI ${SLICE2_NAME} - Run Keyword If Any Tests Failed Delete NST ${NST_NAME} - Run Keyword If Any Tests Failed Delete NST ${NST2_NAME} + Run Keyword If Any Tests Failed Delete NSI ${slice_name} + Run Keyword If Any Tests Failed Delete NSI ${slice2_name} + + Run Keyword If Any Tests Failed Delete NST ${nst_name} + Run Keyword If Any Tests Failed Delete NST ${nst2_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd1_name} + Run Keyword If Any Tests Failed Delete NSD ${nsd2_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd1_name} + Run Keyword If Any Tests Failed Delete VNFD ${vnfd2_name} - Run Keyword If Any Tests Failed Delete NSD ${NSD1_NAME} - Run Keyword If Any Tests Failed Delete NSD ${NSD2_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD1_NAME} - Run Keyword If Any Tests Failed Delete VNFD ${VNFD2_NAME} diff --git a/robot-systest/testsuite/sol003_01-vnf-lifecycle-management.robot b/robot-systest/testsuite/sol003_01-vnf-lifecycle-management.robot index 3d4bf90e7d611766a518965d9e2e7b5590540161..a238fb170a4ed95dc889d796e2cf21128ff5cdf5 100644 --- a/robot-systest/testsuite/sol003_01-vnf-lifecycle-management.robot +++ b/robot-systest/testsuite/sol003_01-vnf-lifecycle-management.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,7 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License - *** Settings *** Documentation [SOL003-01] Sol003 Api testing @@ -23,50 +21,51 @@ Library yaml Library JsonValidator Library JSONLibrary -Resource ../lib/rest_lib.resource -Resource ../lib/vnfd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/vim_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/rest_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot -Test Tags sol003_01 cluster_osm_rest daily +Force Tags sol003_01 cluster_osm_rest daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # SOL003 API URI paths -${VNF_INSTANCE_URI} /osm/vnflcm/v1/vnf_instances -${VNF_INSTANCE_LCM_OPS} /osm/vnflcm/v1/vnf_lcm_op_occs +${vnf_instance_uri} /osm/vnflcm/v1/vnf_instances +${vnf_instantiate_uri} /osm/vnflcm/v1/vnf_instances +${vnf_instance_lcm_ops} /osm/vnflcm/v1/vnf_lcm_op_occs # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_metrics_vnf -${VNFD_NAME} hackfest_basic_metrics-vnf +${vnfd_pkg} hackfest_basic_metrics_vnf +${vnfd_name} hackfest_basic_metrics-vnf *** Test Cases *** -Create VNF Package From JSON File - [Documentation] Create a VNF package and update it via SOL003 interface using a JSON file +Create VNF package from JSON file descriptor + [Documentation] Test case to create a VNF Identifier Get VNFDs List - ${id}= Create VNFD '%{PACKAGES_FOLDER}/${VNFD_PKG}' - Log ${id} - ${CREATED_VIM_ACCOUNT_ID}= Get VIM Target ID %{VIM_TARGET} - Set Suite Variable ${CREATED_VIM_ACCOUNT_ID} + ${id}= Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Set Suite Variable ${vnfid} ${id} + ${created_vim_account_id}= Get VIM Target ID %{VIM_TARGET} + Set Suite Variable ${created_vim_account_id} Get Auth Token ${json_path}= Read Directory ${json_obj}= Load JSON From File ${json_path}/sol003_01-vnf-lifecycle-management.json ${json_obj}= Get Variable Value ${json_obj['data'][0]} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${json_obj} $..vimAccountId ${CREATED_VIM_ACCOUNT_ID} - Log ${UPDATED_JSON_OBJ} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${UPDATED_JSON_OBJ} $..additionalParams.virtual-link-desc[0][id] %{VIM_MGMT_NET} - Log ${UPDATED_JSON_OBJ} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${UPDATED_JSON_OBJ} $..additionalParams.virtual-link-profile-id %{VIM_MGMT_NET} - Log ${UPDATED_JSON_OBJ} - Set Test Variable ${UPDATED_JSON_OBJ} - Post Api Request ${VNF_INSTANCE_URI} ${UPDATED_JSON_OBJ} - Pass Execution If ${request_response.status_code} in ${SUCCESS_STATUS_CODE_LIST} Query VNF Instance completed + ${updated_json_obj}= JSONLibrary.Update Value To Json ${json_obj} $..vimAccountId ${created_vim_account_id} + Log ${updated_json_obj} + ${updated_json_obj}= JSONLibrary.Update Value To Json ${updated_json_obj} $..additionalParams.virtual-link-desc[0][id] %{VIM_MGMT_NET} + Log ${updated_json_obj} + ${updated_json_obj}= JSONLibrary.Update Value To Json ${updated_json_obj} $..additionalParams.virtual-link-profile-id %{VIM_MGMT_NET} + Log ${updated_json_obj} + Set Test Variable ${updated_json_obj} + Post API Request ${vnf_instance_uri} + Pass Execution If ${request_response.status_code} in ${success_status_code_list} Query VNF Instance completed ${id}= Get Value From Json ${request_response.json()} $..id - Set Suite Variable ${CREATEID} ${id[0]} + Set Suite Variable ${createid} ${id[0]} Get VNFDs List Instantiate VNF @@ -77,13 +76,13 @@ Instantiate VNF ${json_path}= Read Directory ${json_obj}= Load JSON From File ${json_path}/sol003_01-vnf-lifecycle-management.json ${json_obj}= Get Variable Value ${json_obj['data'][1]} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${json_obj} $..vimAccountId ${CREATED_VIM_ACCOUNT_ID} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${UPDATED_JSON_OBJ} $..vnfId ${CREATEID} - Set Test Variable ${UPDATED_JSON_OBJ} - Post Api Request ${VNF_INSTANCE_URI}/${CREATEID}/instantiate ${UPDATED_JSON_OBJ} - Pass Execution If ${request_response.status_code} in ${SUCCESS_STATUS_CODE_LIST} Instantiate VNF Instance completed + ${updated_json_obj}= JSONLibrary.Update Value To Json ${json_obj} $..vimAccountId ${created_vim_account_id} + ${updated_json_obj}= JSONLibrary.Update Value To Json ${updated_json_obj} $..vnfId ${createid} + Set Test Variable ${updated_json_obj} + Post API Request ${vnf_instantiate_uri}/${createid}/instantiate + Pass Execution If ${request_response.status_code} in ${success_status_code_list} Instantiate VNF Instance completed ${id}= Get Value From Json ${request_response.json()} $..id - Set Suite Variable ${INSTANTIATEID} ${id[0]} + Set Suite Variable ${instantiateid} ${id[0]} Sleep 12s Get Ns List Get Vnf List @@ -91,127 +90,112 @@ Instantiate VNF Query VNF Instances [Documentation] Test case to query VNF Instance Get Auth Token - Get Api Request ${VNF_INSTANCE_URI} + Get Api Request ${vnf_instance_uri} ${value}= Get ID nsState Should Be Equal ${value} INSTANTIATED - Pass Execution If ${request_response.status_code} in ${SUCCESS_STATUS_CODE_LIST} Query VNF Instance completed + Pass Execution If ${request_response.status_code} in ${success_status_code_list} Query VNF Instance completed ${id}= Get Value From Json ${request_response.json()} $.._id - Set Suite Variable ${QUERYID} ${id[0]} + Set Suite Variable ${Queryid} ${id[0]} Query VNF Instance ID [Documentation] Test case to query Vnf instance ID Get Auth Token - Get Api Request ${VNF_INSTANCE_URI}/${QUERYID} + Get Api Request ${vnf_instance_uri}/${Queryid} ${value}= Get ID nsState Should Be Equal ${value} INSTANTIATED Should Be Equal As Strings ${RequestResponse.status_code} 200 ${id}= Get Value From Json ${request_response.json()} $.._id - Set Suite Variable ${INSTANCEID} ${id[0]} + Set Suite Variable ${Instanceid} ${id[0]} Query VNF LCM Ops [Documentation] Test case to Query VNF LCM operation Get Auth Token - Get Api Request ${VNF_INSTANCE_LCM_OPS} - ${id1}= Get Value From Json ${request_response.json()} $.._id - Set Suite Variable ${LCMOPS} ${id1[0]} - FOR ${index} IN RANGE 0 15 - Log ${index} - Get Api Request ${VNF_INSTANCE_LCM_OPS} + Get Api Request ${vnf_instance_lcm_ops} + ${ID1}= Get Value From Json ${request_response.json()} $.._id + Set Suite Variable ${lcmops} ${ID1[0]} + FOR ${Index} IN RANGE 0 15 + Get Api Request ${vnf_instance_lcm_ops} ${value}= Get ID operationState ${status}= Run Keyword And Return Status Should Be Equal ${value} COMPLETED - IF ${status} - BREAK - ELSE - Sleep 10s - END + Run Keyword If ${status} Exit For Loop + ... ELSE Sleep 10s END Query VNF LCM Ops ID - [Documentation] Check if the operation has completed. Get Auth Token - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${LCMOPS} - ${id1}= Get Value From Json ${request_response.json()} $.._id - Set Suite Variable ${LCMOPSID} ${id1[0]} - FOR ${index} IN RANGE 0 15 - Log ${index} - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${LCMOPS} + Get Api Request ${vnf_instance_lcm_ops}/${lcmops} + ${ID1}= Get Value From Json ${request_response.json()} $.._id + Set Suite Variable ${lcmopsid} ${ID1[0]} + FOR ${Index} IN RANGE 0 15 + Get Api Request ${vnf_instance_lcm_ops}/${lcmops} ${value}= Get ID operationState ${status}= Run Keyword And Return Status Should Be Equal ${value} COMPLETED - IF ${status} - BREAK - ELSE - Sleep 10s - END + Run Keyword If ${status} Exit For Loop + ... ELSE Sleep 10s END Scale VNF - [Documentation] Scale out VNF + [Documentation] Test case to Scale out VNF Get Auth Token ${json_path}= Read Directory ${updated_json_obj}= Load JSON From File ${json_path}/sol003_01-vnf-lifecycle-management.json - ${updated_json_obj}= Get Variable Value ${UPDATED_JSON_OBJ['data'][2]} - Set Test Variable ${UPDATED_JSON_OBJ} - Post Api Request ${VNF_INSTANCE_URI}/${CREATEID}/scale ${UPDATED_JSON_OBJ} + ${updated_json_obj}= Get Variable Value ${updated_json_obj['data'][2]} + Set Test Variable ${updated_json_obj} + Post API Request ${vnf_instance_uri}/${createid}/scale ${value}= Get ID id - ${id1}= Get Value From Json ${request_response.json()} $..id - Set Suite Variable ${SCALEOUTID} ${id1[0]} - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${SCALEOUTID} + ${ID1}= Get Value From Json ${request_response.json()} $..id + Set Suite Variable ${scaleoutid} ${ID1[0]} + Get Api Request ${vnf_instance_lcm_ops}/${scaleoutid} ${LcmopsScale}= Get Value From Json ${request_response.json()} $.._id - Set Suite Variable ${LCMOPSSCALEID} ${LcmopsScale[0]} - FOR ${index} IN RANGE 0 15 - Log ${index} - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${SCALEOUTID} + Set Suite Variable ${lcmopsscaleid} ${LcmopsScale[0]} + FOR ${Index} IN RANGE 0 15 + Get Api Request ${vnf_instance_lcm_ops}/${scaleoutid} ${value}= Get ID operationState ${status}= Run Keyword And Return Status Should Be Equal ${value} COMPLETED - IF ${status} - BREAK - ELSE - Sleep 10s - END + Run Keyword If ${status} Exit For Loop + ... ELSE Sleep 10s END - Pass Execution If ${request_response.status_code} in ${SUCCESS_STATUS_CODE_LIST} Scale VNF instance completed + Pass Execution If ${request_response.status_code} in ${success_status_code_list} Scale VNF instance completed Terminate VNF [Documentation] Test case to terminate the VNF Get Auth Token ${json_path}= Read Directory ${updated_json_obj}= Load JSON From File ${json_path}/sol003_01-vnf-lifecycle-management.json - ${updated_json_obj}= Get Variable Value ${UPDATED_JSON_OBJ['data'][3]} - Set Suite Variable ${UPDATED_JSON_OBJ} - Post Api Request ${VNF_INSTANCE_URI}/${CREATEID}/terminate ${UPDATED_JSON_OBJ} + ${updated_json_obj}= Get Variable Value ${updated_json_obj['data'][3]} + Set Suite Variable ${updated_json_obj} + Post API Request ${vnf_instance_uri}/${createid}/terminate ${id}= Get Value From Json ${request_response.json()} $..id - Set Suite Variable ${TERMINATEID} ${id[0]} - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${TERMINATEID} + Set Suite Variable ${terminateid} ${id[0]} + Get Api Request ${vnf_instance_lcm_ops}/${terminateid} ${LcmopsTerminate}= Get Value From Json ${request_response.json()} $.._id - Set Suite Variable ${LCMOPSSCALEID} ${LcmopsTerminate[0]} - FOR ${index} IN RANGE 0 15 - Log ${index} - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${TERMINATEID} + Set Suite Variable ${lcmopsscaleid} ${LcmopsTerminate[0]} + FOR ${Index} IN RANGE 0 15 + Get Api Request ${vnf_instance_lcm_ops}/${terminateid} ${value}= Get ID operationState ${status}= Run Keyword And Return Status Should Be Equal ${value} COMPLETED - IF ${status} - BREAK - ELSE - Sleep 10s - END + Run Keyword If ${status} Exit For Loop + ... ELSE Sleep 10s END - Pass Execution If ${request_response.status_code} in ${SUCCESS_STATUS_CODE_LIST} Terminate VNF instance completed + Pass Execution If ${request_response.status_code} in ${success_status_code_list} Terminate VNF instance completed Delete VNF - [Documentation] Delete VNF instance. + [Documentation] Test case to delete VNF Get Auth Token - Create Session APISession ${REST_API_HOST} - &{Headers}= Create Dictionary Content-Type=application/json Accept=application/json Authorization=Bearer ${ACCESS_TOKEN} - ${resp}= DELETE On Session APISession ${VNF_INSTANCE_URI}/${CREATEID} headers=${Headers} - Pass Execution If ${resp.status_code} in ${SUCCESS_STATUS_CODE_LIST} Delete VNF Instance completed + Create Session APISession ${HOST} + &{Headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Bearer ${AccessToken} + ${resp}= DELETE On Session APISession ${vnf_instance_uri}/${createid} headers=${Headers} + Pass Execution If ${resp.status_code} in ${success_status_code_list} Delete VNF Instance completed Delete VNF Descriptor Test - [Documentation] Delete VNF package from OSM. [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/sol003_02-dualstack_ip_vnfm.robot b/robot-systest/testsuite/sol003_02-dualstack_ip_vnfm.robot index 6a2ae7ae0d09284b22576ec7595fa7127fbfe1a5..4c16dd850fd68ae251d9ebedce2e53d18aae2b09 100644 --- a/robot-systest/testsuite/sol003_02-dualstack_ip_vnfm.robot +++ b/robot-systest/testsuite/sol003_02-dualstack_ip_vnfm.robot @@ -1,4 +1,3 @@ -*** Comments *** # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,9 +10,8 @@ # See the License for the specific language governing permissions and # limitations under the License - *** Settings *** -Documentation [Sol003-02] Sol003 Dual Stack IP in VNFM NB interface +Documentation Sol003-02 Sol003 This script launches dual-stack IP addresses NS in VIM and verify the dualstack ip Library OperatingSystem Library String @@ -23,53 +21,55 @@ Library yaml Library JsonValidator Library JSONLibrary -Resource ../lib/rest_lib.resource -Resource ../lib/vnfd_lib.resource -Resource ../lib/ns_lib.resource -Resource ../lib/vnf_lib.resource -Resource ../lib/vim_lib.resource +Resource %{ROBOT_DEVOPS_FOLDER}/lib/rest_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot -Test Tags sol003_02 cluster_osm_rest daily +Force Tags sol003_02 cluster_osm_rest daily Suite Teardown Run Keyword And Ignore Error Suite Cleanup *** Variables *** # SOL003 API URI paths -${VNF_INSTANCE_URI} /osm/vnflcm/v1/vnf_instances -${VNF_INSTANCE_LCM_OPS} /osm/vnflcm/v1/vnf_lcm_op_occs +${vnf_instance_uri} /osm/vnflcm/v1/vnf_instances +${vnf_instantiate_uri} /osm/vnflcm/v1/vnf_instances +${vnf_instance_lcm_ops} /osm/vnflcm/v1/vnf_lcm_op_occs # NS and VNF descriptor package folder and ids -${VNFD_PKG} hackfest_basic_vnf -${VNFD_NAME} hackfest_basic-vnf +${vnfd_pkg} hackfest_basic_vnf +${vnfd_name} hackfest_basic-vnf *** Test Cases *** + Create VNFD Descriptor [Documentation] Test case to create a VNF Identifier - ${VNFD_ID}= Create VNFD %{PACKAGES_FOLDER}/${VNFD_PKG} - Set Suite Variable ${VNFD_ID} - ${CREATED_VIM_ACCOUNT_ID}= Get VIM Target ID %{VIM_TARGET} - Set Suite Variable ${CREATED_VIM_ACCOUNT_ID} + ${vnfd_id}= Create VNFD %{PACKAGES_FOLDER}/${vnfd_pkg} + Set Suite Variable ${vnfd_id} + ${created_vim_account_id}= Get VIM Target ID %{VIM_TARGET} + Set Suite Variable ${created_vim_account_id} Get Auth Token ${json_path}= Read Directory ${json_obj}= Load JSON From File ${json_path}/sol003_DualStackip.json ${json_obj}= Get Variable Value ${json_obj['data'][0]} - ${NS_NAME}= Get Variable Value ${json_obj['vnfInstanceName']} - Set Suite Variable ${NS_NAME} - ${VALUE1}= Get Variable Value ${json_obj['additionalParams']['ip-address']} - Set Suite Variable ${VALUE1} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${json_obj} $..vimAccountId ${CREATED_VIM_ACCOUNT_ID} - Log ${UPDATED_JSON_OBJ} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${UPDATED_JSON_OBJ} $..additionalParams.virtual-link-desc[0][id] %{VIM_MGMT_NET} - Log ${UPDATED_JSON_OBJ} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${UPDATED_JSON_OBJ} $..additionalParams.virtual-link-profile-id %{VIM_MGMT_NET} - Log ${UPDATED_JSON_OBJ} - Set Test Variable ${UPDATED_JSON_OBJ} - Post Api Request ${VNF_INSTANCE_URI} ${UPDATED_JSON_OBJ} + ${ns_name}= Get Variable Value ${json_obj['vnfInstanceName']} + Set Suite Variable ${ns_name} + ${Value1}= Get Variable Value ${json_obj['additionalParams']['ip-address']} + Set Suite Variable ${Value1} + ${updated_json_obj}= JSONLibrary.Update Value To Json ${json_obj} $..vimAccountId ${created_vim_account_id} + Log ${updated_json_obj} + ${updated_json_obj}= JSONLibrary.Update Value To Json ${updated_json_obj} $..additionalParams.virtual-link-desc[0][id] %{VIM_MGMT_NET} + Log ${updated_json_obj} + ${updated_json_obj}= JSONLibrary.Update Value To Json ${updated_json_obj} $..additionalParams.virtual-link-profile-id %{VIM_MGMT_NET} + Log ${updated_json_obj} + Set Test Variable ${updated_json_obj} + Post API Request ${vnf_instance_uri} Pass Execution If ${request_response.status_code} in ${success_status_code_list} Query VNF Instance completed ${id}= Get Value From Json ${request_response.json()} $..id - Set Suite Variable ${CREATEID} ${id[0]} + Set Suite Variable ${createid} ${id[0]} Get VNFDs List Instantiate VNF @@ -80,128 +80,122 @@ Instantiate VNF ${json_path}= Read Directory ${json_obj}= Load JSON From File ${json_path}/sol003_DualStackip.json ${json_obj}= Get Variable Value ${json_obj['data'][1]} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${json_obj} $..vimAccountId ${CREATED_VIM_ACCOUNT_ID} - ${UPDATED_JSON_OBJ}= JSONLibrary.Update Value To Json ${UPDATED_JSON_OBJ} $..vnfId ${CREATEID} - Set Test Variable ${UPDATED_JSON_OBJ} - Post Api Request ${VNF_INSTANCE_URI}/${CREATEID}/instantiate ${UPDATED_JSON_OBJ} + ${updated_json_obj}= JSONLibrary.Update Value To Json ${json_obj} $..vimAccountId ${created_vim_account_id} + ${updated_json_obj}= JSONLibrary.Update Value To Json ${updated_json_obj} $..vnfId ${createid} + Set Test Variable ${updated_json_obj} + Post API Request ${vnf_instantiate_uri}/${createid}/instantiate Pass Execution If ${request_response.status_code} in ${success_status_code_list} Instantiate VNF Instance completed ${id}= Get Value From Json ${request_response.json()} $..id - Set Suite Variable ${VNF_INSTANCE_ID} ${id[0]} + Set Suite Variable ${instantiateid} ${id[0]} Sleep 12s Get Ns List Get Vnf List Get Ns Id - [Documentation] Get the NS identifier + [Documentation] Get the ns id from the ns list ${id}= Get Ns Id ${ns_name} - Set Suite Variable ${NS_ID} ${id} + Set Suite Variable ${ns_id} ${id} Get Dual Ip - [Documentation] Get the IP address from the NS - ${id}= Get Dual Ip ${NS_ID} - Set Suite Variable ${DUAL_IP} ${id} + [Documentation] Get the ip from the ns list + ${id}= Get Dual Ip ${ns_id} + Set Suite Variable ${ip} ${id} Query VNF Instances [Documentation] Test case to query VNF Instance Get Auth Token - Get Api Request ${VNF_INSTANCE_URI} + Get Api Request ${vnf_instance_uri} ${value}= Get ID nsState Should Be Equal ${value} INSTANTIATED Pass Execution If ${request_response.status_code} in ${success_status_code_list} Query VNF Instance completed ${id}= Get Value From Json ${request_response.json()} $.._id - Set Suite Variable ${QUERY_ID} ${id[0]} + Set Suite Variable ${Queryid} ${id[0]} Query VNF Instance ID [Documentation] Test case to query Vnf instance ID Get Auth Token - Get Api Request ${VNF_INSTANCE_URI}/${QUERY_ID} + Get Api Request ${vnf_instance_uri}/${Queryid} ${value}= Get ID nsState Should Be Equal ${value} INSTANTIATED Should Be Equal As Strings ${RequestResponse.status_code} 200 ${id}= Get Value From Json ${request_response.json()} $.._id - Log ${id[0]} + Set Suite Variable ${Instanceid} ${id[0]} Query VNF LCM Ops [Documentation] Test case to Query VNF LCM operation Get Auth Token - Get Api Request ${VNF_INSTANCE_LCM_OPS} - ${id1}= Get Value From Json ${request_response.json()} $.._id - Set Suite Variable ${LCM_OP_ID} ${id1[0]} - FOR ${index} IN RANGE 0 15 - Log ${index} - Get Api Request ${VNF_INSTANCE_LCM_OPS} - ${value}= Get ID operationState - ${status}= Run Keyword And Return Status Should Be Equal ${value} COMPLETED - IF ${status} - BREAK - ELSE - Sleep 10s - END + Get Api Request ${vnf_instance_lcm_ops} + ${ID1}= Get Value From Json ${request_response.json()} $.._id + Set Suite Variable ${lcmops} ${ID1[0]} + FOR ${Index} IN RANGE 0 15 + Get Api Request ${vnf_instance_lcm_ops} + ${value}= Get ID operationState + ${status}= Run Keyword And Return Status Should Be Equal ${value} COMPLETED + Run Keyword If ${status} Exit For Loop + ... ELSE Sleep 10s END Query VNF LCM Ops ID [Documentation] Test case to Query VNF LCM operation id Get Auth Token - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${LCM_OP_ID} - ${id1}= Get Value From Json ${request_response.json()} $.._id - Log ${id1[0]} - FOR ${index} IN RANGE 0 15 - Log ${index} - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${LCM_OP_ID} + Get Api Request ${vnf_instance_lcm_ops}/${lcmops} + ${ID1}= Get Value From Json ${request_response.json()} $.._id + Set Suite Variable ${lcmopsid} ${ID1[0]} + FOR ${Index} IN RANGE 0 15 + Get Api Request ${vnf_instance_lcm_ops}/${lcmops} ${value}= Get ID operationState ${status}= Run Keyword And Return Status Should Be Equal ${value} COMPLETED - IF ${status} - BREAK - ELSE - Sleep 10s - END + Run Keyword If ${status} Exit For Loop + ... ELSE Sleep 10s END Verify Dual Ip - [Documentation] Test case to terminate the VNF - Should Be Equal ${DUAL_IP} ${VALUE1} + Should Be Equal ${ip} ${Value1} + Terminate VNF [Documentation] Test case to terminate the VNF Get Auth Token ${json_path}= Read Directory - ${UPDATED_JSON_OBJ}= Load JSON From File ${json_path}/sol003_DualStackip.json - ${UPDATED_JSON_OBJ}= Get Variable Value ${UPDATED_JSON_OBJ['data'][3]} - Set Suite Variable ${UPDATED_JSON_OBJ} - Post Api Request ${VNF_INSTANCE_URI}/${CREATEID}/terminate ${UPDATED_JSON_OBJ} + ${updated_json_obj}= Load JSON From File ${json_path}/sol003_DualStackip.json + ${updated_json_obj}= Get Variable Value ${updated_json_obj['data'][3]} + Set Suite Variable ${updated_json_obj} + Post API Request ${vnf_instance_uri}/${createid}/terminate ${id}= Get Value From Json ${request_response.json()} $..id - ${terminateid}= Set Variable ${id[0]} - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${terminateid} + Set Suite Variable ${terminateid} ${id[0]} + Get Api Request ${vnf_instance_lcm_ops}/${terminateid} ${LcmopsTerminate}= Get Value From Json ${request_response.json()} $.._id - Log ${LcmopsTerminate[0]} - FOR ${index} IN RANGE 0 15 - Log ${index} - Get Api Request ${VNF_INSTANCE_LCM_OPS}/${terminateid} + Set Suite Variable ${lcmopsscaleid} ${LcmopsTerminate[0]} + FOR ${Index} IN RANGE 0 15 + Get Api Request ${vnf_instance_lcm_ops}/${terminateid} ${value}= Get ID operationState ${status}= Run Keyword And Return Status Should Be Equal ${value} COMPLETED - IF ${status} - BREAK - ELSE - Sleep 10s - END + Run Keyword If ${status} Exit For Loop + ... ELSE Sleep 10s END Pass Execution If ${request_response.status_code} in ${success_status_code_list} Terminate VNF instance completed Delete VNF [Documentation] Test case to delete VNF Get Auth Token - Create Session APISession ${REST_API_HOST} - &{Headers}= Create Dictionary Content-Type=application/json Accept=application/json Authorization=Bearer ${AccessToken} - ${resp}= DELETE On Session APISession ${VNF_INSTANCE_URI}/${CREATEID} headers=${Headers} + Create Session APISession ${HOST} + &{Headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Bearer ${AccessToken} + ${resp}= DELETE On Session APISession ${vnf_instance_uri}/${createid} headers=${Headers} Pass Execution If ${resp.status_code} in ${success_status_code_list} Delete VNF Instance completed Delete VNF Descriptor Test [Documentation] Test case to delete the VNF descriptor test [Tags] cleanup - Delete VNFD ${VNFD_NAME} + + Delete VNFD ${vnfd_name} *** Keywords *** Suite Cleanup [Documentation] Test Suit Cleanup: Deleting Descriptor - Run Keyword If Any Tests Failed Delete VNFD ${VNFD_NAME} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} + + + + diff --git a/tox.ini b/tox.ini index 58889d1542eff508e313c52660244ceec28e172e..729a3e042eef28fcacbb983791169569cfd1db44 100644 --- a/tox.ini +++ b/tox.ini @@ -16,7 +16,7 @@ ####################################################################################### [tox] -envlist = black, cover, flake8, pylint, rflint, safety +envlist = black, cover, flake8, pylint, safety [tox:jenkins] toxworkdir = /tmp/.tox @@ -53,26 +53,11 @@ commands = ####################################################################################### [testenv:pylint] -changedir = {toxinidir}/robot-systest deps = {[testenv]deps} -r{toxinidir}/requirements-dev.txt pylint commands = - pylint -E . - - -####################################################################################### -[testenv:rflint] -changedir = {toxinidir}/robot-systest -deps = {[testenv]deps} - -r{toxinidir}/requirements-dev.txt - robotframework-lint - robotframework-robocop -commands = - rflint --ignore LineTooLong --ignore TooFewTestSteps --ignore TooManyTestCases \ - --ignore TooManyTestSteps --ignore TooFewKeywordSteps \ - testsuite lib resources - robocop --configure return_status:quality_gate:E=0:W=0:I=0 --exclude 050*,0701,0923 . + - pylint -E robot-systest/resources #######################################################################################