summaryrefslogtreecommitdiffstats
path: root/kud/tests
diff options
context:
space:
mode:
Diffstat (limited to 'kud/tests')
-rwxr-xr-xkud/tests/_common.sh14
-rwxr-xr-xkud/tests/_functions.sh54
-rwxr-xr-xkud/tests/plugin_fw.sh116
3 files changed, 179 insertions, 5 deletions
diff --git a/kud/tests/_common.sh b/kud/tests/_common.sh
index 7d271caf..044891dd 100755
--- a/kud/tests/_common.sh
+++ b/kud/tests/_common.sh
@@ -1138,3 +1138,17 @@ function populate_CSAR_edgex_rbdefinition {
tar -czf rb_definition.tar.gz -C $test_folder/vnfs/edgex/helm edgex
popd
}
+
+# populate_CSAR_fw_rbdefinition() - Function that populates CSAR folder
+# for testing resource bundle definition of firewall scenario
+function populate_CSAR_fw_rbdefinition {
+ _checks_args "$1"
+ pushd "${CSAR_DIR}/$1"
+ print_msg "Create Helm Chart Archives for vFirewall"
+ rm -f *.tar.gz
+ # Reuse profile from the edgeX case as it is an empty profile
+ tar -czf rb_profile.tar.gz -C $test_folder/vnfs/edgex/profile .
+ tar -czf rb_definition.tar.gz -C $test_folder/../demo firewall
+ popd
+}
+
diff --git a/kud/tests/_functions.sh b/kud/tests/_functions.sh
index 483aed5c..d585086b 100755
--- a/kud/tests/_functions.sh
+++ b/kud/tests/_functions.sh
@@ -25,12 +25,36 @@ function print_msg {
}
function get_ovn_central_address {
- ansible_ifconfig=$(ansible ovn-central[0] -i ${FUNCTIONS_DIR}/../hosting_providers/vagrant/inventory/hosts.ini -m shell -a "ifconfig ${OVN_CENTRAL_INTERFACE} |grep \"inet addr\" |awk '{print \$2}' |awk -F: '{print \$2}'")
- if [[ $ansible_ifconfig != *CHANGED* ]]; then
- echo "Fail to get the OVN central IP address from ${OVN_CENTRAL_INTERFACE} nic"
- exit
+ #Reuse OVN_CENTRAL_ADDRESS if available (bypassable by --force flag)
+ if [[ "${1:-}" != "--force" ]] && [[ -n "${OVN_CENTRAL_ADDRESS:-}" ]]; then
+ echo "${OVN_CENTRAL_ADDRESS}"
+ return 0
+ fi
+
+ local remote_command="ip address show dev $OVN_CENTRAL_INTERFACE primary"
+ declare -a ansible_command=(ansible ovn-central[0] -i \
+ "${FUNCTIONS_DIR}/../hosting_providers/vagrant/inventory/hosts.ini")
+ declare -a filter=(awk -F '[ \t/]+' \
+ 'BEGIN {r=1} {for (i=1; i<=NF; i++) if ($i == "inet") {print $(i+1); r=0}} END {exit r}')
+ local result
+
+ #Determine OVN_CENTRAL_INTERFACE address
+ if ! result="$("${ansible_command[@]}" -a "${remote_command}")"; then
+ echo "Ansible error for remote host ovn-central[0]" >&2
+ return 1
+ else
+ if [[ "${result}" != *CHANGED* ]]; then
+ echo "Failed to execute command on remote host ovn-central[0]" >&2
+ return 2
+ else
+ if ! result="$("${filter[@]}" <<< "${result}")"; then
+ echo "Failed to retrieve interface address from command output" >&2
+ return 3
+ else
+ echo "${result}:6641"
+ fi
+ fi
fi
- echo "$(echo ${ansible_ifconfig#*>>} | tr '\n' ':')6641"
}
function call_api {
@@ -149,6 +173,26 @@ function wait_deployment {
done
}
+# wait_for_pod() - Wait until first pod matched by kubectl filters is in running status
+function wait_for_pod {
+ #Example usage:
+ # wait_for_pods example_pod
+ # wait_for_pods --namespace test different_pod
+ # wait_for_pods -n test -l app=plugin_test
+
+ status_phase=""
+ while [[ "$status_phase" != "Running" ]]; do
+ new_phase="$(kubectl get pods -o 'go-template={{ index .items 0 "status" "phase" }}' "$@" )"
+ if [[ "$new_phase" != "$status_phase" ]]; then
+ echo "$(date +%H:%M:%S) - Filter=[$*] : $new_phase"
+ status_phase="$new_phase"
+ fi
+ if [[ "$new_phase" == "Err"* ]]; then
+ exit 1
+ fi
+ done
+}
+
# setup() - Base testing setup shared among functional tests
function setup {
if ! $(kubectl version &>/dev/null); then
diff --git a/kud/tests/plugin_fw.sh b/kud/tests/plugin_fw.sh
new file mode 100755
index 00000000..d7bed4fd
--- /dev/null
+++ b/kud/tests/plugin_fw.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2018
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+set -o errexit
+set -o nounset
+set -o pipefail
+#set -o xtrace
+
+source _common_test.sh
+source _functions.sh
+source _common.sh
+
+base_url="http://localhost:9015/v1"
+kubeconfig_path="$HOME/.kube/config"
+csar_id=cc009bfe-bbee-11e8-9766-525400435678
+rb_name="vfw"
+rb_version="plugin_test"
+chart_name="firewall"
+profile_name="test_profile"
+release_name="test-release"
+namespace="plugin-tests-namespace"
+cloud_region_id="kud"
+cloud_region_owner="localhost"
+
+# Setup
+install_deps
+populate_CSAR_fw_rbdefinition "$csar_id"
+
+print_msg "Registering resource bundle"
+payload="$(cat <<EOF
+{
+ "rb-name": "${rb_name}",
+ "rb-version": "${rb_version}",
+ "chart-name": "${chart_name}"
+}
+EOF
+)"
+call_api -d "${payload}" "${base_url}/rb/definition"
+
+print_msg "Uploading resource bundle content"
+call_api --data-binary "@${CSAR_DIR}/${csar_id}/rb_definition.tar.gz" \
+ "${base_url}/rb/definition/${rb_name}/${rb_version}/content"
+
+print_msg "Registering rb's profile"
+payload="$(cat <<EOF
+{
+ "rb-name": "${rb_name}",
+ "rb-version": "${rb_version}",
+ "profile-name": "${profile_name}",
+ "release-name": "${release_name}",
+ "namespace": "${namespace}"
+}
+EOF
+)"
+call_api -d "${payload}" "${base_url}/rb/definition/${rb_name}/${rb_version}/profile"
+
+print_msg "Uploading profile data"
+call_api --data-binary "@${CSAR_DIR}/${csar_id}/rb_profile.tar.gz" \
+ "${base_url}/rb/definition/${rb_name}/${rb_version}/profile/${profile_name}/content"
+
+print_msg "Setup cloud data"
+payload="$(cat <<EOF
+{
+ "cloud-region": "$cloud_region_id",
+ "cloud-owner": "$cloud_region_owner"
+}
+EOF
+)"
+call_api -F "metadata=$payload" \
+ -F "file=@$kubeconfig_path" \
+ "${base_url}/connectivity-info" >/dev/null #massive output
+
+print_msg "Creating vFW VNF Instance"
+payload="$(cat <<EOF
+{
+ "rb-name": "${rb_name}",
+ "rb-version": "${rb_version}",
+ "profile-name": "${profile_name}",
+ "cloud-region": "${cloud_region_id}"
+}
+EOF
+)"
+response="$(call_api -d "${payload}" "${base_url}/instance")"
+echo "$response"
+vnf_id="$(jq -r '.id' <<< "${response}")"
+
+print_msg "Validating VNF instance"
+# Check if all pods are up
+wait_for_pod -n "${namespace}" -l app=sink
+wait_for_pod -n "${namespace}" -l app=firewall
+wait_for_pod -n "${namespace}" -l app=packetgen
+# TODO: Provide some health check to verify vFW work
+
+print_msg "Retrieving VNF details"
+call_api "${base_url}/instance/${vnf_id}"
+
+
+#Teardown
+print_msg "Deleting VNF Instance"
+delete_resource "${base_url}/instance/${vnf_id}"
+
+print_msg "Deleting Profile"
+delete_resource "${base_url}/rb/definition/${rb_name}/${rb_version}/profile/${profile_name}"
+
+print_msg "Deleting Resource Bundle"
+delete_resource "${base_url}/rb/definition/${rb_name}/${rb_version}"
+
+print_msg "Deleting ${cloud_region_id} cloud region connection"
+delete_resource "${base_url}/connectivity-info/${cloud_region_id}"