From 6cd74807debed3f4414da8b4d3fc4c17b1b56c14 Mon Sep 17 00:00:00 2001 From: aticig Date: Wed, 11 May 2022 19:31:46 +0300 Subject: [PATCH] Feature 10908: Update charm in running VNF instance Adding robot test Basic 25 This test instantiates NS, updates the VNFD, update the VNF instance by upgrading charm. Then it executes the new added action on this VNF. Change-Id: I68140f01fadf791a512870ff0f6b0babfcb67e0c Signed-off-by: aticig --- robot-systest/lib/ns_lib.robot | 9 + robot-systest/lib/ssh_lib.robot | 10 + robot-systest/lib/vnfd_lib.robot | 18 ++ ...update_charm_in_running_vnf_instance.robot | 176 ++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 robot-systest/testsuite/basic_25-update_charm_in_running_vnf_instance.robot diff --git a/robot-systest/lib/ns_lib.robot b/robot-systest/lib/ns_lib.robot index 623d43e..a7c6cb9 100644 --- a/robot-systest/lib/ns_lib.robot +++ b/robot-systest/lib/ns_lib.robot @@ -54,6 +54,15 @@ Instantiate Network Service [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} diff --git a/robot-systest/lib/ssh_lib.robot b/robot-systest/lib/ssh_lib.robot index 23e5ae4..216cd59 100644 --- a/robot-systest/lib/ssh_lib.robot +++ b/robot-systest/lib/ssh_lib.robot @@ -30,6 +30,16 @@ Check If remote File Exists Close All Connections Should Be Equal As Integers ${rc} 0 +Check If Remote Folder Exists + [Arguments] ${host} ${username} ${password} ${privatekey} ${folder} + + Open Connection ${host} + 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 [Arguments] ${host} ${username} ${password} ${privatekey} ${file} diff --git a/robot-systest/lib/vnfd_lib.robot b/robot-systest/lib/vnfd_lib.robot index f1cc95e..2d50170 100644 --- a/robot-systest/lib/vnfd_lib.robot +++ b/robot-systest/lib/vnfd_lib.robot @@ -71,6 +71,24 @@ Create VNFD [Return] ${id} +Update VNFD + [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} + + # 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} + ${lines}= Get Line Count ${stdout} + ${last}= Evaluate ${lines} - 1 + ${id}= Get Line ${stdout} ${last} + [Return] ${id} + + Create VNFD Overriding Fields [Documentation] Onboards ("creates") a NF Package into OSM. ... - Parameters: 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 new file mode 100644 index 0000000..9a744ee --- /dev/null +++ b/robot-systest/testsuite/basic_25-update_charm_in_running_vnf_instance.robot @@ -0,0 +1,176 @@ +# 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 [BASIC-25] Update Charms in Running VNF Instance. + +Library OperatingSystem +Library SSHLibrary + +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 + +Force Tags basic_25 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} 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}} ] } + +# 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 + +# NS update operation configuration +${update_type} CHANGE_VNFPKG +${ns_update_timeout} 500 + + +*** Test Cases *** +Create Charm VNF Descriptor + + ${id}= Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + Set Suite Variable ${vnfd_id} ${id} + + +Create Charm NS Descriptor + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + + +Instantiate Charm Network Service + + ${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 + + 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}"}]}' + + +Get Management Ip Address + + ${ip_addr} Get Vnf Management Ip Address ${ns_id} ${vnf_member_index} + log ${ip_addr} + Set Suite Variable ${vnf_ip_addr} ${ip_addr} + + +Test SSH Access + + 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} + + +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} + + +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} + + +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} + + +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 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} + + +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} + + +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} + + +Delete NS Instance + [Tags] cleanup + + Delete NS ${ns_name} + + +Delete NS Descriptor + [Tags] cleanup + + Delete NSD ${nsd_name} + + +Delete VNF Descriptor + [Tags] cleanup + + 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} + -- 2.17.1