Feature 11001: Robot framework linting for E2E tests
[osm/tests.git] / robot-systest / testsuite / sa_02-vnf_with_vim_metrics_and_autoscaling.robot
index b5910f5..f760871 100644 (file)
@@ -1,3 +1,4 @@
+*** 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
 #   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
@@ -10,6 +11,7 @@
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
 
 #   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.
 
 *** Settings ***
 Documentation   [SA-02] VNF with VIM-based metrics and auto-scaling.
 
@@ -18,13 +20,13 @@ Library   String
 Library   Collections
 Library   SSHLibrary
 
 Library   Collections
 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
-Resource   %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot
+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
 
 
-Force Tags   sa_02   cluster_sa   daily   regression   sanity   azure
+Test 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
 
 Suite Setup   Run Keyword And Ignore Error   Suite Preparation
 Suite Teardown   Run Keyword And Ignore Error   Suite Cleanup
@@ -32,170 +34,156 @@ Suite Teardown   Run Keyword And Ignore Error   Suite Cleanup
 
 *** Variables ***
 # NS instantiation parameters
 
 *** 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
 
 # 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 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
 
 # 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 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
 
 # Prometheus metrics to retrieve
-${metric_name}   osm_cpu_utilization
+${METRIC_NAME}   osm_cpu_utilization
 
 # VNF Variables
 
 # 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
 
 
 *** Test Cases ***
 Create VNF Descriptor
-
-    Create VNFD   '%{PACKAGES_FOLDER}/${vnfd_pkg}'
-
+    [Documentation]   Upload VNF package for the testsuite.
+    Create VNFD   '%{PACKAGES_FOLDER}/${VNFD_PKG}'
 
 Get Thresholds From VNF
 
 Get Thresholds From VNF
-
-    ${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
+    [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
     ${scaleout_threshold}=   Convert To Number   ${stdout}
     ${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}
     ${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
 
 Create NS Descriptor
-
-    Create NSD   '%{PACKAGES_FOLDER}/${nsd_pkg}'
-
+    [Documentation]   Upload NS package for the testsuite.
+    Create NSD   '%{PACKAGES_FOLDER}/${NSD_PKG}'
 
 Instantiate Network Service
 
 Instantiate Network Service
-
-    ${id}=   Create Network Service   ${nsd_name}   %{VIM_TARGET}   ${ns_name}   ${ns_config}   ${publickey}
-    Set Suite Variable   ${ns_id}   ${id}
-
+    [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}
 
 Get VNF Id
 
 Get VNF Id
-
-    @{vnfr_list}=   Get Ns Vnfr Ids   ${ns_id}
+    [Documentation]   Retrieve VNF instance id to be used later on.
+    @{vnfr_list}=   Get Ns Vnfr Ids   ${NS_ID}
     Log List   ${vnfr_list}
     Log List   ${vnfr_list}
-    Set Suite Variable   ${vnf_id}   ${vnfr_list}[0]
-
+    Set Suite Variable   ${VNF_ID}   ${vnfr_list}[0]
 
 Get VNF IP Address
 
 Get VNF IP Address
-
-    ${ip_addr}=   Get Vnf Management Ip Address   ${ns_id}   ${vnf_member_index}
+    [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}
     Log   ${ip_addr}
     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
 
 Get VNF VIM-based Metric Before Auto-scaling
-
-    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
-
+    [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
 
 Increase VIM-based Metric To Force Auto-scaling
 
 Increase VIM-based Metric To Force Auto-scaling
-
-    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
-
+    [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
 
 Wait VIM-based Metric To Exceed Threshold
 
 Wait VIM-based Metric To Exceed 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
-
+    [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
 
 Wait Threshold Time
 
 Wait Threshold Time
-
-    ${threshold_time_sleep}=   Evaluate   ${threshold_time} + 1
+    [Documentation]   Wait until the VIM metric has exceeded threshold for the defined period in the descriptor.
+    ${threshold_time_sleep}=   Evaluate   ${THRESHOLD_TIME} + 1
     Sleep   ${threshold_time_sleep} minutes   Wait scale-out threshold time plus 1 minute
 
     Sleep   ${threshold_time_sleep} minutes   Wait scale-out threshold time plus 1 minute
 
-
 Check VIM-based Metric Exceeds Threshold After Threshold-time
 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
 
     Check VIM-based Metric Exceeds Threshold
 
-
 Get VDUs After Auto-scaling
 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
     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}
     Log List   ${vdur_list}
     ${vdurs}=   Get Length   ${vdur_list}
-    Run Keyword If   ${vdurs} <= 1   Fail   msg=There is no new VDU after auto-scaling
-
+    IF   ${vdurs} <= 1   Fail   msg=There is no new VDU after auto-scaling
 
 Delete NS Instance
 
 Delete NS Instance
+    [Documentation]   Delete NS instance.
     [Tags]   cleanup
     [Tags]   cleanup
-
-    Delete NS   ${ns_name}
-
+    Delete NS   ${NS_NAME}
 
 Delete NS Descriptor
 
 Delete NS Descriptor
+    [Documentation]   Delete NS package from OSM.
     [Tags]   cleanup
     [Tags]   cleanup
-
-    Delete NSD   ${nsd_name}
-
+    Delete NSD   ${NSD_NAME}
 
 Delete VNF Descriptor
 
 Delete VNF Descriptor
+    [Documentation]   Delete VNF package from OSM.
     [Tags]   cleanup
     [Tags]   cleanup
-
-    Delete VNFD   ${vnfd_name}
+    Delete VNFD   ${VNFD_NAME}
 
 
 *** Keywords ***
 Suite Preparation
     [Documentation]   Test Suite Preparation: Setting Prometheus Testsuite Variables
 
 
 *** Keywords ***
 Suite Preparation
     [Documentation]   Test Suite Preparation: Setting Prometheus Testsuite Variables
-
     Set Testsuite Prometheus Variables
 
     Set Testsuite Prometheus Variables
 
-
 Suite Cleanup
     [Documentation]   Test Suite Cleanup: Deleting descriptors and NS instance
 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
 
 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}
-    Run Keyword If   ${metric_value} <= ${metric_threshold}   Fail   msg=The metric '${metric_name}' value is '${metric_value}' which is lower than '${metric_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