Adds Robot QUOTAS-01 test 63/9463/2
authorgarciaale <agarcia@whitestack.com>
Fri, 17 Jul 2020 21:24:54 +0000 (17:24 -0400)
committergarciaale <agarcia@whitestack.com>
Wed, 22 Jul 2020 16:39:35 +0000 (18:39 +0200)
Change-Id: I38d51d0beea871808046d762f8fffb9c65e5f200
Signed-off-by: garciaale <agarcia@whitestack.com>
robot-systest/lib/project_lib.robot [new file with mode: 0644]
robot-systest/resources/quotas_01-quota_enforcement_data.py [new file with mode: 0644]
robot-systest/testsuite/quotas_01-quota_enforcement.robot [new file with mode: 0644]

diff --git a/robot-systest/lib/project_lib.robot b/robot-systest/lib/project_lib.robot
new file mode 100644 (file)
index 0000000..916730d
--- /dev/null
@@ -0,0 +1,120 @@
+#   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
+
+
+*** Keywords ***
+Create Project With Quotas
+    [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}
+    Log   ${stdout}
+    Should Be Equal As Integers   ${rc}   ${success_return_code}
+    [Return]  ${stdout}
+
+
+Get Project Quotas
+    [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}'
+    Log   ${stdout}
+    Should Be Equal As Integers   ${rc}   ${success_return_code}
+    [Return]  ${stdout}
+
+
+Update Project Quotas
+    [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}
+    Log   ${stdout}
+    Should Be Equal As Integers   ${rc}   ${success_return_code}
+
+
+Update Project Name
+    [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}
+    log   ${stdout}
+    Should Be Equal As Integers   ${rc}   ${success_return_code}
+
+
+Check If User Is Assigned To Project
+    [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}
+
+
+Create VNFD In 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
+        ${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}
+    Log   ${stdout}
+    Should Be Equal As Integers   ${rc}   ${success_return_code}
+    [Return]  ${stdout}
+
+
+Delete VNFD In 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}
+    Log   ${stdout}
+    Should Be Equal As Integers   ${rc}   ${success_return_code}
+
+
+Remove User From Project
+    [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}
+
+
+Delete Project
+    [Arguments]  ${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}
diff --git a/robot-systest/resources/quotas_01-quota_enforcement_data.py b/robot-systest/resources/quotas_01-quota_enforcement_data.py
new file mode 100644 (file)
index 0000000..90bf709
--- /dev/null
@@ -0,0 +1,25 @@
+#   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())
+# VNFD package to use during test
+vnfd_name = 'hackfest_basic_vnf'
+# Project names to use
+project_1_name = 'quotas_01_proj_1'
+project_2_name = 'quotas_01_proj_2'
+project_3_name = 'quotas_01_proj_3'
+# User name and password for project
+user_name = 'quotas_01_user'
+user_password = 'quotas_01_pass'
diff --git a/robot-systest/testsuite/quotas_01-quota_enforcement.robot b/robot-systest/testsuite/quotas_01-quota_enforcement.robot
new file mode 100644 (file)
index 0000000..a3ad7f5
--- /dev/null
@@ -0,0 +1,170 @@
+#   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     [QUOTAS-01] Quota enforcement.
+
+Library   OperatingSystem
+Library   String
+Library   Collections
+
+Resource   %{ROBOT_DEVOPS_FOLDER}/lib/project_lib.robot
+
+Variables   %{ROBOT_DEVOPS_FOLDER}/resources/quotas_01-quota_enforcement_data.py
+
+Suite Teardown   Run Keyword And Ignore Error   Test Cleanup
+
+
+*** Variables ***
+${success_return_code}   0
+${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=
+${vnfd_pkg}   %{PACKAGES_FOLDER}/${vnfd_name}
+
+*** Test Cases ***
+Create First Project With Quotas
+    [Tags]   quota_enforcement   sanity   regression
+
+    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
+    Should Be Equal As Integers   2   ${project_1_nsds}
+    ${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
+    [Tags]   quota_enforcement   sanity   regression
+
+    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
+    Should Be Equal As Integers   1   ${project_2_nsds}
+    ${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
+    [Tags]   quota_enforcement   sanity   regression
+
+    ${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}
+
+
+Change First Project Name to Third Project Name
+    [Tags]   quota_enforcement   sanity   regression
+
+    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
+    Should Be Equal As Integers   2   ${project_3_nsds}
+    ${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   ${user_name}   ${project_3_name}
+
+
+Create VNFDs On Third Project Until Exceed Quota
+    [Tags]   quota_enforcement   sanity   regression
+
+    Create VNFD In Project   ${project_3_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=v1;name=v1'
+    Run Keyword And Expect Error  *  Create VNFD In Project   ${project_3_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=v2;name=v2'
+
+
+Increase Third Project Quotas
+    [Tags]   quota_enforcement   sanity   regression
+
+    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
+    [Tags]   quota_enforcement   sanity   regression
+
+    Create VNFD In Project   ${project_3_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=v2;name=v2'
+    Create VNFD In Project   ${project_3_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=v3;name=v3'
+    Create VNFD In Project   ${project_3_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=v4;name=v4'
+    Create VNFD In Project   ${project_3_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=v5;name=v5'
+    Run Keyword And Expect Error  *  Create VNFD In Project   ${project_3_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=v6;name=v6'
+
+
+Create VNFDs On Second Project Until Exceed Quota
+    [Tags]   quota_enforcement   sanity   regression
+
+    Create VNFD In Project   ${project_2_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=vp2_1;name=vp2_1'
+    Run Keyword And Expect Error  *  Create VNFD In Project   ${project_2_name}   ${vnfd_pkg}   ${user_name}   ${user_password}  override='id=vp2_2;name=vp2_2'
+
+
+Check Project Scopes
+    [Tags]   quota_enforcement   sanity   regression
+
+    ${rc}   ${stdout}=   Run And Return RC And Output   osm --project ${project_3_name} --password ${user_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_password} --user ${user_name} vnfpkg-show v1
+    Log   ${stdout}
+    Should Not Be Equal As Integers   ${rc}   ${success_return_code}
+
+
+Delete Second Project VNFD
+    [Tags]   quota_enforcement   sanity   regression  cleanup
+
+    Delete VNFD In Project  ${project_2_name}   vp2_1   ${user_name}   ${user_password}
+
+
+Delete Third Project VNFDs
+    [Tags]   quota_enforcement   sanity   regression  cleanup
+
+    Delete VNFD In Project  ${project_3_name}   v1   ${user_name}   ${user_password}
+    Delete VNFD In Project  ${project_3_name}   v2   ${user_name}   ${user_password}
+    Delete VNFD In Project  ${project_3_name}   v3   ${user_name}   ${user_password}
+    Delete VNFD In Project  ${project_3_name}   v4   ${user_name}   ${user_password}
+    Delete VNFD In Project  ${project_3_name}   v5   ${user_name}   ${user_password}
+
+
+Delete Second Project After Removing User From It
+    [Tags]   quota_enforcement   sanity   regression  cleanup
+
+    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
+    [Tags]   quota_enforcement   sanity   regression  cleanup
+
+    ${rc}=   Run And Return RC   osm user-delete ${user_name}
+
+
+Delete Third Project
+    [Tags]   quota_enforcement   sanity   regression  cleanup
+
+    Delete Project  ${project_3_name}
+
+
+*** Keywords ***
+Test Cleanup
+    Run Keyword If Test Failed  Run Keyword And Ignore Error  Delete VNFD In Project  ${project_2_name}   vp2_1   ${user_name}   ${user_password}
+    Run Keyword If Test Failed  Run Keyword And Ignore Error  Delete VNFD In Project  ${project_3_name}   v1   ${user_name}   ${user_password}
+    Run Keyword If Test Failed  Run Keyword And Ignore Error  Delete VNFD In Project  ${project_3_name}   v2   ${user_name}   ${user_password}
+    Run Keyword If Test Failed  Run Keyword And Ignore Error  Delete VNFD In Project  ${project_3_name}   v3   ${user_name}   ${user_password}
+    Run Keyword If Test Failed  Run Keyword And Ignore Error  Delete VNFD In Project  ${project_3_name}   v4   ${user_name}   ${user_password}
+    Run Keyword If Test Failed  Run Keyword And Ignore Error  Delete VNFD In Project  ${project_3_name}   v5   ${user_name}   ${user_password}
+    Run Keyword If Test Failed  Run Keyword And Ignore Error  Delete Project  ${project_1_name}
+    Run Keyword If Test Failed  Delete Project  ${project_2_name}
+    Run Keyword If Test Failed  Run Keyword And Ignore Error  Delete Project  ${project_3_name}
+    Run And Return RC   osm user-delete ${user_name}