From 9e9f30d9ed385b81f56132cdcac1df15cff9d08a Mon Sep 17 00:00:00 2001 From: limon Date: Thu, 21 May 2020 15:20:41 +0200 Subject: [PATCH] BASIC-01, 05, 06, 07 and 09 Robot Test-Cases. Change-Id: Icd69bd3155a4de76186d485d1cf2de9860fa77e7 Signed-off-by: limon --- ..._01-crud_operations_on_vim_targets_data.py | 46 ++++++ ...antiation_parameters_in_cloud_init_data.py | 24 +++ .../resources/basic_06-vnf_with_charm_data.py | 27 ++++ .../basic_07-secure_key_management_data.py | 24 +++ .../basic_09-manual_vdu_scaling_data.py | 27 ++++ ...ic_01-crud_operations_on_vim_targets.robot | 67 +++++++++ ...stantiation_parameters_in_cloud_init.robot | 101 +++++++++++++ .../testsuite/basic_06-vnf_with_charm.robot | 135 +++++++++++++++++ .../basic_07-secure_key_management.robot | 125 ++++++++++++++++ .../basic_09-manual_vdu_scaling.robot | 138 ++++++++++++++++++ 10 files changed, 714 insertions(+) create mode 100644 robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py create mode 100644 robot-systest/resources/basic_05-instantiation_parameters_in_cloud_init_data.py create mode 100644 robot-systest/resources/basic_06-vnf_with_charm_data.py create mode 100644 robot-systest/resources/basic_07-secure_key_management_data.py create mode 100644 robot-systest/resources/basic_09-manual_vdu_scaling_data.py create mode 100644 robot-systest/testsuite/basic_01-crud_operations_on_vim_targets.robot create mode 100644 robot-systest/testsuite/basic_05-instantiation_parameters_in_cloud_init.robot create mode 100644 robot-systest/testsuite/basic_06-vnf_with_charm.robot create mode 100644 robot-systest/testsuite/basic_07-secure_key_management.robot create mode 100644 robot-systest/testsuite/basic_09-manual_vdu_scaling.robot 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 new file mode 100644 index 00000000..c30314e5 --- /dev/null +++ b/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py @@ -0,0 +1,46 @@ +# 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. + +import os +import yaml +from pathlib import Path + +# Prometheus host and port +prometheus_host = os.environ.get("OSM_HOSTNAME") +prometheus_port = "9091" + +# VIM Configuration +vim_account_type = "openstack" +vim_name_prefix = "basic_01_vim_test" +# Get credentias from Openstack Clouds file +os_cloud = os.environ.get("OS_CLOUD") +clouds_file_paths = ["./clouds.yaml", str(Path.home()) + "/.config/openstack/clouds.yaml", "/etc/openstack/clouds.yaml"] +for path in clouds_file_paths: + clouds_file_path = Path(path) + if clouds_file_path.exists(): break +if not clouds_file_path.exists(): raise Exception("Openstack clouds file not found") +with clouds_file_path.open() as clouds_file: + clouds = yaml.safe_load(clouds_file) + if not os_cloud in clouds["clouds"]: raise Exception("Openstack cloud '" + os_cloud + "' not found") + cloud = clouds["clouds"][os_cloud] + if not "username" in cloud["auth"]: raise Exception("Username not found in Openstack cloud '" + os_cloud + "'") + vim_user = cloud["auth"]["username"] + if not "password" in cloud["auth"]: raise Exception("Password not found in Openstack cloud '" + os_cloud + "'") + vim_password = cloud["auth"]["password"] + if not "auth_url" in cloud["auth"]: raise Exception("Auth url not found in Openstack cloud '" + os_cloud + "'") + vim_auth_url = cloud["auth"]["auth_url"] + if not "project_name" in cloud["auth"]: raise Exception("Project name not found in Openstack cloud '" + os_cloud + "'") + vim_tenant = cloud["auth"]["project_name"] + vim_user_domain_name = cloud["auth"]["user_domain_name"] if "user_domain_name" in cloud["auth"] else "Default" + vim_project_domain_name = cloud["auth"]["project_domain_name"] if "project_domain_name" in cloud["auth"] else "Default" +# Extra config +vim_config = "'{project_domain_name: " + vim_project_domain_name + ", user_domain_name: " + vim_user_domain_name + ", vim_network_name: " + os.environ.get("VIM_MGMT_NET") + "}'" diff --git a/robot-systest/resources/basic_05-instantiation_parameters_in_cloud_init_data.py b/robot-systest/resources/basic_05-instantiation_parameters_in_cloud_init_data.py new file mode 100644 index 00000000..1c3a6d70 --- /dev/null +++ b/robot-systest/resources/basic_05-instantiation_parameters_in_cloud_init_data.py @@ -0,0 +1,24 @@ +# 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. + +from pathlib import Path + +# Get ${HOME} from local machine +home = str(Path.home()) +# NS and VNF descriptor package files +vnfd_pkg = 'ubuntu-cloudinit_vnfd.tar.gz' +nsd_pkg = 'ubuntu-cloudinit_nsd.tar.gz' +# NS and VNF descriptor names +vnfd_name = 'ubuntu-cloudinit_vnfd' +nsd_name = 'ubuntu-cloudinit_nsd' +# NS instance name +ns_name = 'basic_05_instantiation_params_cloud_init' diff --git a/robot-systest/resources/basic_06-vnf_with_charm_data.py b/robot-systest/resources/basic_06-vnf_with_charm_data.py new file mode 100644 index 00000000..b044815c --- /dev/null +++ b/robot-systest/resources/basic_06-vnf_with_charm_data.py @@ -0,0 +1,27 @@ +# 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. + +from pathlib import Path + +# Get ${HOME} from local machine +home = str(Path.home()) +# NS and VNF descriptor package files +vnfd_pkg = 'hackfest_proxycharm_vnf.tar.gz' +nsd_pkg = 'hackfest_proxycharm_ns.tar.gz' +# NS and VNF descriptor names +vnfd_name = 'hackfest_proxycharm-vnf' +nsd_name = 'hackfest_proxycharm-ns' +# NS instance name +ns_name = 'basic_06_charm_test' +# SSH keys to be used +publickey = home + '/.ssh/id_rsa.pub' +privatekey = home + '/.ssh/id_rsa' diff --git a/robot-systest/resources/basic_07-secure_key_management_data.py b/robot-systest/resources/basic_07-secure_key_management_data.py new file mode 100644 index 00000000..c94be1de --- /dev/null +++ b/robot-systest/resources/basic_07-secure_key_management_data.py @@ -0,0 +1,24 @@ +# 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. + +from pathlib import Path + +# Get ${HOME} from local machine +home = str(Path.home()) +# NS and VNF descriptor package files +vnfd_pkg = 'simple_nopasswd_vnf.tar.gz' +nsd_pkg = 'simple_nopasswd_ns.tar.gz' +# NS and VNF descriptor names +vnfd_name = 'simple-nopasswd-vnf' +nsd_name = 'simple-nopasswd-ns' +# NS instance name +ns_name = 'basic_07_secure_key_management' diff --git a/robot-systest/resources/basic_09-manual_vdu_scaling_data.py b/robot-systest/resources/basic_09-manual_vdu_scaling_data.py new file mode 100644 index 00000000..2c64916f --- /dev/null +++ b/robot-systest/resources/basic_09-manual_vdu_scaling_data.py @@ -0,0 +1,27 @@ +# 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. + +from pathlib import Path + +# Get ${HOME} from local machine +home = str(Path.home()) +# NS and VNF descriptor package files +vnfd_pkg = 'hackfest_basic_metrics_vnf.tar.gz' +nsd_pkg = 'hackfest_basic_metrics_ns.tar.gz' +# NS and VNF descriptor names +vnfd_name = 'hackfest_basic_metrics-vnf' +nsd_name = 'hackfest_basic-ns-metrics' +# NS instance name +ns_name = 'basic_09_manual_scaling_test' +# SSH keys to be used +publickey = home + '/.ssh/id_rsa.pub' +privatekey = home + '/.ssh/id_rsa' 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 new file mode 100644 index 00000000..1e4b1210 --- /dev/null +++ b/robot-systest/testsuite/basic_01-crud_operations_on_vim_targets.robot @@ -0,0 +1,67 @@ +# 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-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 %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot + +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_01-crud_operations_on_vim_targets_data.py + + +*** Test Cases *** +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. + [Tags] vim + + ${rand}= Generate Random String 8 [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 for VIM Target Status ${vim_name} ${prometheus_host} ${prometheus_port} + + +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] vim cleanup + + ${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. + [Tags] vim + + ${rand}= Generate Random String 8 [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 for VIM Target Status ${vim_name} ${prometheus_host} ${prometheus_port} + + +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] vim cleanup + + ${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} + 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 new file mode 100644 index 00000000..5a1f834b --- /dev/null +++ b/robot-systest/testsuite/basic_05-instantiation_parameters_in_cloud_init.robot @@ -0,0 +1,101 @@ +# 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-05] Instantiation parameters in cloud-init. + +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 + +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_05-instantiation_parameters_in_cloud_init_data.py + +Suite Teardown Run Keyword And Ignore Error Test Cleanup + + +*** Variables *** +${username} ubuntu +${new_password} newpassword +${vnf_member_index} 1 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ], additionalParamsForVnf: [ { member-vnf-index: "${vnf_member_index}", additionalParams: { password: "${new_password}" } } ] } + + +*** Test Cases *** +Create Cloudinit VNF Descriptor + [Tags] instantiation_params + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + + +Create Cloudinit NS Descriptor + [Tags] instantiation_params + + 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. + [Tags] instantiation_params + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${EMPTY} + Set Suite Variable ${ns_id} ${id} + + +Get Management Ip Addresses + [Tags] instantiation_params + + ${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 With The New Password + [Documentation] Test SSH access with the new password configured via cloud-init. + [Tags] instantiation_params + + 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} + + +Delete NS Instance + [Tags] instantiation_params cleanup + + Delete NS ${ns_name} + + +Delete NS Descriptor + [Tags] instantiation_params cleanup + + Delete NSD ${nsd_name} + + +Delete VNF Descriptor + [Tags] instantiation_params cleanup + + Delete VNFD ${vnfd_name} + + +*** Keywords *** +Test Cleanup + [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance + + Run Keyword If Test Failed Delete NS ${ns_name} + + Run Keyword If Test Failed Delete NSD ${nsd_name} + + Run Keyword If Test 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 new file mode 100644 index 00000000..b42ba277 --- /dev/null +++ b/robot-systest/testsuite/basic_06-vnf_with_charm.robot @@ -0,0 +1,135 @@ +# 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-06] VNF with Charm. + +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 + +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_06-vnf_with_charm_data.py + +Suite Teardown Run Keyword And Ignore Error Test Cleanup + + +*** Variables *** +${username} ubuntu +${password} ${EMPTY} +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${action_name} touch +${vnf_member_index_1} 1 +${vnf_member_index_2} 2 +${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 + [Tags] charm + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + + +Create Charm NS Descriptor + [Tags] charm + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + + +Instantiate Charm Network Service + [Tags] charm + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + + +Get Management Ip Addresses + [Tags] charm + + ${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} + log ${ip_addr_2} + Set Suite Variable ${vnf_2_ip_addr} ${ip_addr_2} + + +Test SSH Access + [Tags] charm + + 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} + + +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] charm + + 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] charm + + 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] charm + + 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 + [Tags] charm cleanup + + Delete NS ${ns_name} + + +Delete NS Descriptor + [Tags] charm cleanup + + Delete NSD ${nsd_name} + + +Delete VNF Descriptor + [Tags] charm cleanup + + Delete VNFD ${vnfd_name} + + +*** Keywords *** +Test Cleanup + [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance + + Run Keyword If Test Failed Delete NS ${ns_name} + + Run Keyword If Test Failed Delete NSD ${nsd_name} + + Run Keyword If Test 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 new file mode 100644 index 00000000..98e6edfa --- /dev/null +++ b/robot-systest/testsuite/basic_07-secure_key_management.robot @@ -0,0 +1,125 @@ +# 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-07] Secure key management. + +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 + +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_07-secure_key_management_data.py + +Suite Teardown Run Keyword And Ignore Error Test Cleanup + + +*** Variables *** +${username} ubuntu +${password} osm4u +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${action_name} touch +${vnf_member_index} 1 +${day_1_file_name} /home/ubuntu/first-touch +${day_2_file_name} /home/ubuntu/mytouch1 + + +*** Test Cases *** +Create Nopasswd Charm VNF Descriptor + [Tags] nopasswd + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + + +Create Nopasswd Charm NS Descriptor + [Tags] nopasswd + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + + +Instantiate Nopasswd Charm Network Service + [Tags] nopasswd + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${EMPTY} + Set Suite Variable ${ns_id} ${id} + + +Get Management Ip Addresses + [Tags] nopasswd + + ${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 + [Tags] nopasswd + + 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} + + +Check Remote Files Created Via Day 1 Operations + [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] nopasswd + + 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] nopasswd + + 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] nopasswd + + Check If remote File Exists ${vnf_ip_addr} ${username} ${password} ${EMPTY} ${day_2_file_name} + + +Delete NS Instance + [Tags] nopasswd cleanup + + Delete NS ${ns_name} + + +Delete NS Descriptor + [Tags] nopasswd cleanup + + Delete NSD ${nsd_name} + + +Delete VNF Descriptor + [Tags] nopasswd cleanup + + Delete VNFD ${vnfd_name} + + +*** Keywords *** +Test Cleanup + [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance + + Run Keyword If Test Failed Delete NS ${ns_name} + + Run Keyword If Test Failed Delete NSD ${nsd_name} + + Run Keyword If Test Failed Delete VNFD ${vnfd_name} + diff --git a/robot-systest/testsuite/basic_09-manual_vdu_scaling.robot b/robot-systest/testsuite/basic_09-manual_vdu_scaling.robot new file mode 100644 index 00000000..a2e9d110 --- /dev/null +++ b/robot-systest/testsuite/basic_09-manual_vdu_scaling.robot @@ -0,0 +1,138 @@ +# 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-09] Manual VNF/VDU Scaling. + +Library OperatingSystem +Library String +Library Collections + +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 + +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_09-manual_vdu_scaling_data.py + +Suite Teardown Run Keyword And Ignore Error Test Cleanup + + +*** Variables *** +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } +${scaling_group} vdu_autoscale +${vnf_member_index} 1 + + +*** Test Cases *** +Create Scaling VNF Descriptor + [Tags] manual_scaling + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + + +Create Scaling NS Descriptor + [Tags] manual_scaling + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + + +Instantiate Scaling Network Service + [Tags] manual_scaling + + ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + + +Get Vnf Id + [Tags] manual_scaling + + 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] + + +Get Vdus Before Scale Out + [Documentation] Get the number of VDU records before the manual scaling. + [Tags] 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} + + +Perform Manual Vdu Scale Out + [Tags] manual_scaling + + 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 or not. + [Tags] manual_scaling + + 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} + Run Keyword Unless ${vdurs} == ${initial_vdur_count} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out + + +Perform Manual Vdu Scale In + [Tags] manual_scaling + + 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 or not. + [Tags] manual_scaling + + 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} + Run Keyword Unless ${vdurs} == ${initial_vdur_count} Fail msg=There is the same number of VDU records in the VNF after Scale In + + +Delete NS Instance + [Tags] manual_scaling cleanup + + Delete NS ${ns_name} + + +Delete NS Descriptor + [Tags] manual_scaling cleanup + + Delete NSD ${nsd_name} + + +Delete VNF Descriptor + [Tags] manual_scaling cleanup + + Delete VNFD ${vnfd_name} + + +*** Keywords *** +Test Cleanup + [Documentation] Test Suite Cleanup: Deleting descriptors and NS instance + + Run Keyword If Test Failed Delete NS ${ns_name} + + Run Keyword If Test Failed Delete NSD ${nsd_name} + + Run Keyword If Test Failed Delete VNFD ${vnfd_name} + -- 2.17.1