diff options
Diffstat (limited to 'kud/tests/negative_tests/_test_functions.sh')
-rwxr-xr-x | kud/tests/negative_tests/_test_functions.sh | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/kud/tests/negative_tests/_test_functions.sh b/kud/tests/negative_tests/_test_functions.sh new file mode 100755 index 00000000..f4e9472d --- /dev/null +++ b/kud/tests/negative_tests/_test_functions.sh @@ -0,0 +1,346 @@ +# /* +# * Copyright 2020 Intel Corporation, Inc +# * +# * 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. +# */ + +# Additional functions to run negative tests + +set -o errexit +set -o nounset +set -o pipefail + +FUNCTIONS_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")" +my_directory=$(dirname $PWD) + +source /etc/environment +source ${my_directory}/negative_tests/_test_variables_setup.sh +source ${my_directory}/_common_test.sh +source ${my_directory}/_functions.sh +source ${my_directory}/_common.sh + +function call_api_negative { + #Runs curl with passed flags and provides + #additional error handling and debug information + + #Function outputs server response body + #and performs validation of http_code + + local status + local curl_response_file="$(mktemp -p /tmp)" + local curl_common_flags=(-s -w "%{http_code}" -o "${curl_response_file}") + local command=(curl "${curl_common_flags[@]}" "$@") + + echo "[INFO] Running '${command[@]}'" >&2 + if ! status="$("${command[@]}")"; then + echo "[ERROR] Internal curl error! '$status'" >&2 + cat "${curl_response_file}" + rm "${curl_response_file}" + return 2 + else + echo "[INFO] Server replied with status: ${status}" >&2 + cat "${curl_response_file}" + rm "${curl_response_file}" + return_status=$status + fi +} + + +function delete_resource_negative { + #Issues DELETE http call to provided endpoint + #and further validates by following GET request + + call_api_negative -X DELETE "$1" + #! call_api -X GET "$1" >/dev/null +} + +function get_resource_negative { + #! call_api_negative -X GET "$1" >/dev/null + ! call_api_negative -X GET "$1" + echo $return_status +} + + +# Create a test rpoject +# EOF must start as first chracter in a line for cat to identify the end +function create_project { + project_name="test_project" + project_description="test_project_description" + userData1="user1" + userData2="user2" + print_msg "Registering project" + payload="$(cat <<EOF + { + "metadata": { + "name": "${project_name}", + "description": "${project_description}", + "userData1": "${userData1}", + "userData2": "${userData2}" + } + } +EOF + )" + call_api -d "${payload}" "${base_url}/projects" +} + +function create_composite_app { + + project_name="test_project" + composite_app_name="test_composite_app_collection" + composite_app_description="test_project_description" + composite_app_version="test_composite_app_version" + userData1="user1" + userData2="user2" + + print_msg "Registering composite-app" + payload="$(cat <<EOF + { + "metadata": { + "name": "${composite_app_name}", + "description": "${composite_app_description}", + "userData1": "${userData1}", + "userData2": "${userData2}" + }, + "spec":{ + "version":"${composite_app_version}" + } + } +EOF + )" + call_api -d "${payload}" "${base_url}/projects/${project_name}/composite-apps" +} + +function delete_all { + + delete_resource_negative "${base_url}/controllers/${genericPlacementIntent}" + delete_resource_negative "${base_url}/controllers/${hpaIntent}" + delete_resource_negative "${base_url}/controllers/${trafficIntent}" + delete_resource_negative "${base_url}/controllers/${CostBasedIntent}" + delete_resource_negative "${base_url}/controllers/${OVNintent}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/deployment-intent-groups/${deploymentIntentGroupName}/intents/${intentToBeAddedinDeploymentIntentGroup}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/deployment-intent-groups/${deploymentIntentGroupName}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/generic-placement-intents/${genericPlacementIntentName}/app-intents/${appIntentNameForApp2}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/generic-placement-intents/${genericPlacementIntentName}/app-intents/${appIntentNameForApp1}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/generic-placement-intents/${genericPlacementIntentName}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/composite-profiles/${main_composite_profile_name}/profiles/${sub_composite_profile_name2}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/composite-profiles/${main_composite_profile_name}/profiles/${sub_composite_profile_name1}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/composite-profiles/${main_composite_profile_name}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/apps/${app2_name}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/apps/${app1_name}" + delete_resource_negative "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}" + delete_resource_negative "${base_url}/projects/${project_name}" +} + +function create_app { + app_helm_path="$CSAR_DIR/$csar_id/$1" + app_name=$2 + app_desc=$3 + userData1="user1" + userData2="user2" + project_name="test_project" + composite_app_name="test_composite_app_collection" + composite_app_version="test_composite_app_version" + + print_msg "Making app entry in the database" + payload="$(cat <<EOF + { + "metadata": { + "name": "${app_name}", + "description": "${app_desc}", + "userData1": "${userData1}", + "userData2": "${userData2}" + } + } +EOF + )" + + call_api -F "metadata=$payload" \ + -F "file=@$app_helm_path" \ + "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/apps" +} + +# BEGIN: Register the main composite-profile +function create_main_composite_profile { + print_msg "Registering the main composite-profile" + payload="$(cat <<EOF + { + "metadata":{ + "name":"${main_composite_profile_name}", + "description":"${main_composite_profile_description}", + "userData1":"${userData1}", + "userData2":"${userData2}" + } + } +EOF + )" + call_api -d "${payload}" "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/composite-profiles" +} + +function create_profile_app { + + sub_composite_profile_name=$1 + app_name=$2 + app_profile_path="$CSAR_DIR/$csar_id/$3" + + print_msg "Registering profile with app1(collectd)" + payload="$(cat <<EOF + { + "metadata":{ + "name":"${sub_composite_profile_name}", + "description":"${sub_composite_profile_description}", + "userData1":"${userData1}", + "userData2":"${userData2}" + }, + "spec":{ + "app-name": "${app_name}" + } + } +EOF + )" + + call_api -F "metadata=$payload" \ + -F "file=@$app_profile_path" \ + "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/composite-profiles/${main_composite_profile_name}/profiles" +} + +# BEGIN: Register GenericPlacementIntents with the database +function create_generic_placement_intent_app1 { + print_msg "Registering GenericPlacementIntent for app1" + payload="$(cat <<EOF + { + "metadata":{ + "name":"${genericPlacementIntentName}", + "description":"${genericPlacementIntentDesc}", + "userData1":"${userData1}", + "userData2":"${userData2}" + }, + "spec":{ + "logical-cloud":"${logicalCloud}" + } + } +EOF + )" + call_api -d "${payload}" "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/generic-placement-intents" +} + +# BEGIN: Adding placement intent for each app in the composite app. +function create_placement_intent_app { + appIntentNameForApp=$1 + appIntentForAppDesc=$2 + app_name=$3 + + print_msg "Adding placement intent for app" + payload="$(cat <<EOF + { + "metadata":{ + "name":"${appIntentNameForApp}", + "description":"${appIntentForAppDesc}", + "userData1":"${userData1}", + "userData2":"${userData2}" + }, + "spec":{ + "app-name":"${app_name}", + "intent":{ + "allOf":[ + { "provider-name":"${providerName1}", + "cluster-name":"${clusterName1}" + }, + { + "provider-name":"${providerName2}", + "cluster-name":"${clusterName2}" + }, + { + "anyOf":[ + { + "provider-name":"${providerName1}", + "cluster-label-name":"${clusterLabelName1}" + }, + { + "provider-name":"${providerName2}", + "cluster-label-name":"${clusterLabelName2}" + } + ] + } + ] + } + } +} +EOF + )" + call_api -d "${payload}" "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/generic-placement-intents/${genericPlacementIntentName}/app-intents" +} + +# BEGIN: Registering DeploymentIntentGroup in the database +function create_deployment_intent_group { +print_msg "Registering DeploymentIntentGroup" +payload="$(cat <<EOF +{ + "metadata":{ + "name":"${deploymentIntentGroupName}", + "description":"${deploymentIntentGroupNameDesc}", + "userData1":"${userData1}", + "userData2":"${userData2}" + }, + "spec":{ + "profile":"${main_composite_profile_name}", + "version":"${releaseName}", + "override-values":[ + { + "app-name":"${app1_name}", + "values": + { + "collectd_prometheus.service.targetPort":"9104" + } + }, + { + "app-name":"${app2_name}", + "values": + { + "prometheus.service.nameOfPort":"WebPort9090" + } + } + ] + } +} +EOF +)" +call_api -d "${payload}" "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/deployment-intent-groups" +} + +function create_adding_all_intents_to_deployment_intent_group { +# BEGIN: Adding intents to an intent group +print_msg "Adding all the intents to the deploymentIntent group" +payload="$(cat <<EOF +{ + "metadata":{ + "name":"${intentToBeAddedinDeploymentIntentGroup}", + "description":"${intentToBeAddedinDeploymentIntentGroupDesc}", + "userData1":"${userData1}", + "userData2":"${userData2}" + }, + "spec":{ + "intent":{ + "${genericPlacementIntent}":"${genericPlacementIntentName}", + "${hpaIntent}" : "${hpaControllerIntentName}", + "${trafficIntent}" : "${trafficControllerIntentName}", + "${CostBasedIntent}" : "${CostBasedIntentName}", + "${OVNintent}" : "${OVNintentName}" + } + } +} +EOF +)" +call_api -d "${payload}" "${base_url}/projects/${project_name}/composite-apps/${composite_app_name}/${composite_app_version}/deployment-intent-groups/${deploymentIntentGroupName}/intents" +# END: Adding intents to an intent group +} + |