From 7aff12430db9c19b931880ab8e14660b3ea8694c Mon Sep 17 00:00:00 2001 From: "waqas.ikram" Date: Tue, 7 Mar 2023 13:38:22 +0000 Subject: Adding kind cluster registration test Change-Id: I82d69a575853d8453802d9b54db290024313bc48 Issue-ID: SO-4067 Signed-off-by: waqas.ikram --- .../config/wait-for-kind-cluster-container.sh | 75 ++++++++++++++++++++++ plans/so/integration-cnfm-testing/setup.sh | 35 +++++++++- plans/so/integration-cnfm-testing/testplan.txt | 3 +- .../kind-cluster/Dockerfile.kind-cluster | 3 +- .../cnf_kind_cluster_registration_tests.robot | 23 +++++++ 5 files changed, 135 insertions(+), 4 deletions(-) create mode 100755 plans/so/integration-cnfm-testing/config/wait-for-kind-cluster-container.sh create mode 100644 tests/so/integration-cnfm-testing/cnf_kind_cluster_registration_tests.robot diff --git a/plans/so/integration-cnfm-testing/config/wait-for-kind-cluster-container.sh b/plans/so/integration-cnfm-testing/config/wait-for-kind-cluster-container.sh new file mode 100755 index 00000000..9579f2bd --- /dev/null +++ b/plans/so/integration-cnfm-testing/config/wait-for-kind-cluster-container.sh @@ -0,0 +1,75 @@ +#!/bin/bash +# +# ============LICENSE_START======================================================= +# Copyright (C) 2023 Nordix Foundation. +# ================================================================================ +# 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +# + +# @author Waqas Ikram (waqas.ikram@est.tech) + +SLEEP_TIME=5 +SUCCESSFUL_TEXT="Successfully created kind cluster" +FAILURE_TEXT="Failed creating kind cluster" +SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +SCRIPT_NAME=$(basename $0) + +current_timestamp() +{ + date +"%Y-%m-%d %H:%M:%S" +} + +# main body +if [ -z "$TIME_OUT_DEFAULT_VALUE_SEC" ]; then + echo "$SCRIPT_NAME $(current_timestamp): ERROR: Undefined value for TIME_OUT_DEFAULT_VALUE_SEC attribute" + exit 1 +fi + +CONTAINER_NAME=$(docker ps -aqf "name=kind-cluster" --format "{{.Names}}") +if [ -z "$CONTAINER_NAME" ]; then + echo "$SCRIPT_NAME $(current_timestamp): Unable to find kind-cluster docker container id " + exit 1 +fi + +START_TIME_IN_SECONDS=`date +%s` +TIME_OUT_END_TIME_IN_SECONDS=$(($START_TIME_IN_SECONDS+$TIME_OUT_DEFAULT_VALUE_SEC)); + + +echo echo "$SCRIPT_NAME $(current_timestamp): $SCRIPT_NAME script Start Time `date -d @$START_TIME_IN_SECONDS`" +echo echo "$SCRIPT_NAME $(current_timestamp): $SCRIPT_NAME will time out at `date -d @$TIME_OUT_END_TIME_IN_SECONDS`" + +while [ `date +%s` -lt "$TIME_OUT_END_TIME_IN_SECONDS" ]; do + echo "$(current_timestamp): Waiting for $CONTAINER_NAME to finish ..." + + result=$(docker logs "$CONTAINER_NAME" 2>&1 | grep -E "$SUCCESSFUL_TEXT|$FAILURE_TEXT") + if [ ! -z "$result" ]; then + echo "$SCRIPT_NAME $(current_timestamp): Found result: $result" + break; + fi + echo "$(current_timestamp): Sleeping for ${SLEEP_TIME} seconds" + sleep ${SLEEP_TIME} +done + +if [ -z "$result" ] || echo "$result" | grep -E "$FAILURE_TEXT"; then + echo "$SCRIPT_NAME $(current_timestamp): ERROR: failed to create kind-cluster... " + echo "-------------- $CONTAINER_NAME logs -------------" + docker logs "$CONTAINER_NAME" + echo "------------------------------------------------------------" + exit 1 +fi + +echo "$SCRIPT_NAME $(current_timestamp): Finished successfully '$result'..." +exit 0 diff --git a/plans/so/integration-cnfm-testing/setup.sh b/plans/so/integration-cnfm-testing/setup.sh index 8f651831..66a7cde9 100755 --- a/plans/so/integration-cnfm-testing/setup.sh +++ b/plans/so/integration-cnfm-testing/setup.sh @@ -30,6 +30,8 @@ TEST_LAB_DIR_PATH=$TEMP_DIR_PATH/test_lab DOCKER_COMPOSE_FILE_PATH=$SCRIPT_HOME/docker-compose.yml DOCKER_COMPOSE_LOCAL_OVERRIDE_FILE=$SCRIPT_HOME/docker-compose.local.yml TEAR_DOWN_SCRIPT=$SCRIPT_HOME/teardown.sh +WAIT_FOR_KIND_CLUSTER_CONTAINER_SCRIPT=$CONFIG_DIR_CNFM/"wait-for-kind-cluster-container.sh" +KIND_CLUSTER_KUBE_CONFIG_FILE="$TEMP_DIR_PATH/kind-cluster-kube-config.yaml" # INTEGRATION_ETSI INTEGRATION_ETSI_TESTING_DIR="$(realpath "$SCRIPT_HOME"/../integration-etsi-testing)" @@ -184,7 +186,38 @@ for pod in "${PODS_NAMES[@]}" fi done +echo "Will execute $WAIT_FOR_KIND_CLUSTER_CONTAINER_SCRIPT script" +$WAIT_FOR_KIND_CLUSTER_CONTAINER_SCRIPT +if [ $? -ne 0 ]; then + echo "ERROR: $WAIT_FOR_KIND_CLUSTER_CONTAINER_SCRIPT failed" + echo "Will stop running docker containers . . ." + $TEAR_DOWN_SCRIPT + exit 1 +fi + +if [ -f "$KIND_CLUSTER_KUBE_CONFIG_FILE" ]; then + echo "Old Kube-config file exits $KIND_CLUSTER_KUBE_CONFIG_FILE will remove it" + rm "$KIND_CLUSTER_KUBE_CONFIG_FILE" +fi + +CONTAINER_NAME=$(docker ps -aqf "name=kind-cluster" --format "{{.Names}}") +if [ -z "$CONTAINER_NAME" ]; then + echo "Unable to find kind-cluster docker container id CONTAINER_NAME=$CONTAINER_NAME" + exit 1 +fi + +echo "Copying kube-config from $CONTAINER_NAME container" +docker cp "$CONTAINER_NAME":/root/.kube/config "$KIND_CLUSTER_KUBE_CONFIG_FILE" + +if [ $? -ne 0 ] || [ ! -f "$KIND_CLUSTER_KUBE_CONFIG_FILE" ]; then + echo "ERROR: Failed to copy kube-config file from $CONTAINER_NAME" + echo "Will stop running docker containers . . ." + $TEAR_DOWN_SCRIPT + exit 1 +fi + +# Pass variables required in robot test suites in ROBOT_VARIABLES REPO_IP='127.0.0.1' -ROBOT_VARIABLES="-v REPO_IP:${REPO_IP}" +ROBOT_VARIABLES="-v REPO_IP:${REPO_IP} -v KIND_CLUSTER_KUBE_CONFIG_FILE:${KIND_CLUSTER_KUBE_CONFIG_FILE}" echo "Finished executing $SCRIPT_HOME/$SCRIPT_NAME" \ No newline at end of file diff --git a/plans/so/integration-cnfm-testing/testplan.txt b/plans/so/integration-cnfm-testing/testplan.txt index d9c00b0e..8b06666d 100644 --- a/plans/so/integration-cnfm-testing/testplan.txt +++ b/plans/so/integration-cnfm-testing/testplan.txt @@ -1,2 +1,3 @@ # Test suites are relative paths under [integration/csit.git]/tests/. -# Place the suites in run order. \ No newline at end of file +# Place the suites in run order. +so/integration-cnfm-testing/cnf_kind_cluster_registration_tests.robot \ No newline at end of file diff --git a/plans/so/integration-etsi-testing/so-simulators/package/docker/src/main/docker/docker-files/kind-cluster/Dockerfile.kind-cluster b/plans/so/integration-etsi-testing/so-simulators/package/docker/src/main/docker/docker-files/kind-cluster/Dockerfile.kind-cluster index 8d9f8c87..b2db333b 100644 --- a/plans/so/integration-etsi-testing/so-simulators/package/docker/src/main/docker/docker-files/kind-cluster/Dockerfile.kind-cluster +++ b/plans/so/integration-etsi-testing/so-simulators/package/docker/src/main/docker/docker-files/kind-cluster/Dockerfile.kind-cluster @@ -24,5 +24,4 @@ EXPOSE 30001 COPY entrypoint-original.sh /entrypoint-original.sh RUN chmod 777 /entrypoint-original.sh -ENTRYPOINT ["/bin/bash", "-c", "/entrypoint.sh; if [ $? -eq 0 ]; then echo 'Successfully created kind cluster'; else echo 'Failed creating kind cluster'; fi"] -CMD ["tail", "-f", "/dev/null"] \ No newline at end of file +ENTRYPOINT ["/bin/bash", "-c", "/entrypoint.sh; if [ $? -eq 0 ]; then echo 'Successfully created kind cluster'; tail -f /dev/null; else echo 'Failed creating kind cluster'; exit 1; fi"] \ No newline at end of file diff --git a/tests/so/integration-cnfm-testing/cnf_kind_cluster_registration_tests.robot b/tests/so/integration-cnfm-testing/cnf_kind_cluster_registration_tests.robot new file mode 100644 index 00000000..ba44e689 --- /dev/null +++ b/tests/so/integration-cnfm-testing/cnf_kind_cluster_registration_tests.robot @@ -0,0 +1,23 @@ +*** Settings *** +Library Collections +Library RequestsLibrary +Library OperatingSystem + +*** Variables *** +${CNFM_LCM_BASE_URL}= /so/so-cnfm/v1/api/kube-config +${CLOUD_OWNER_VALUE}= CloudOwner +${CLOUD_REGION_VALUE}= EtsiCloudRegion +${TENANT_ID_VALUE}= 693c7729b2364a26a3ca602e6f66187d +${UPLOAD_KUBE_CONFIG_URL}= ${CNFM_LCM_BASE_URL}/cloudOwner/${CLOUD_OWNER_VALUE}/cloudRegion/${CLOUD_REGION_VALUE}/tenantId/${TENANT_ID_VALUE}/upload + +*** Test Cases *** + +Register kind Cluster with CNFM + Create Session cnfm_lcm_session http://${REPO_IP}:9888 + Run Keyword If "${KIND_CLUSTER_KUBE_CONFIG_FILE}"!="${EMPTY}" Log to Console \nKIND_CLUSTER_KUBE_CONFIG_FILE :${KIND_CLUSTER_KUBE_CONFIG_FILE} + ... ELSE Fail \nInvalid Kube-config path :${KIND_CLUSTER_KUBE_CONFIG_FILE} received + + ${file}= Get File For Streaming Upload ${KIND_CLUSTER_KUBE_CONFIG_FILE} + ${files}= Create Dictionary file ${file} + ${resp}= Put On Session cnfm_lcm_session ${UPLOAD_KUBE_CONFIG_URL} files=${files} + Should Be Equal As Strings '${resp.status_code}' '202' \ No newline at end of file -- cgit 1.2.3-korg