Adding kind cluster registration test
[integration/csit.git] / plans / so / integration-cnfm-testing / setup.sh
1 #!/bin/bash
2 #
3 # ============LICENSE_START=======================================================
4 #   Copyright (C) 2023 Nordix Foundation.
5 # ================================================================================
6 #  Licensed under the Apache License, Version 2.0 (the "License");
7 #  you may not use this file except in compliance with the License.
8 #  You may obtain a copy of the License at
9 #
10 #       http://www.apache.org/licenses/LICENSE-2.0
11 #
12 #  Unless required by applicable law or agreed to in writing, software
13 #  distributed under the License is distributed on an "AS IS" BASIS,
14 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 #  See the License for the specific language governing permissions and
16 #  limitations under the License.
17 #
18 #  SPDX-License-Identifier: Apache-2.0
19 # ============LICENSE_END=========================================================
20
21 # @author Waqas Ikram (waqas.ikram@est.tech)
22
23 #SO-CNFM
24 SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
25 SCRIPT_NAME=$(basename $0)
26 CONFIG_DIR_CNFM=$SCRIPT_HOME/config
27 ENV_FILE=$CONFIG_DIR_CNFM/env
28 TEMP_DIR_PATH=$SCRIPT_HOME/temp
29 TEST_LAB_DIR_PATH=$TEMP_DIR_PATH/test_lab
30 DOCKER_COMPOSE_FILE_PATH=$SCRIPT_HOME/docker-compose.yml
31 DOCKER_COMPOSE_LOCAL_OVERRIDE_FILE=$SCRIPT_HOME/docker-compose.local.yml
32 TEAR_DOWN_SCRIPT=$SCRIPT_HOME/teardown.sh
33 WAIT_FOR_KIND_CLUSTER_CONTAINER_SCRIPT=$CONFIG_DIR_CNFM/"wait-for-kind-cluster-container.sh"
34 KIND_CLUSTER_KUBE_CONFIG_FILE="$TEMP_DIR_PATH/kind-cluster-kube-config.yaml"
35
36 # INTEGRATION_ETSI
37 INTEGRATION_ETSI_TESTING_DIR="$(realpath "$SCRIPT_HOME"/../integration-etsi-testing)"
38 INTEGRATION_ETSI_TESTING_CONFIG_DIR=$INTEGRATION_ETSI_TESTING_DIR/config
39 SIMULATOR_MAVEN_PROJECT_POM="$INTEGRATION_ETSI_TESTING_DIR/so-simulators/pom.xml"
40 WAIT_FOR_POPULATE_AAI_SCRIPT=$INTEGRATION_ETSI_TESTING_CONFIG_DIR/"wait-for-aai-config-job.sh"
41 WAIT_FOR_CONTAINER_SCRIPT=$INTEGRATION_ETSI_TESTING_CONFIG_DIR/"wait-for-container.sh"
42
43 #CAMUNDA SQL SCRIPTS
44 CAMUNDA_SQL_SCRIPT_NAME=mariadb_engine_7.10.0.sql
45 CAMUNDA_SQL_SCRIPT_DIR=$INTEGRATION_ETSI_TESTING_CONFIG_DIR/camunda-sql
46 TEST_LAB_SQL_SCRIPTS_DIR=$TEST_LAB_DIR_PATH/volumes/mariadb/docker-entrypoint-initdb.d/db-sql-scripts
47
48 #MAVEN
49 MAVEN_VERSION_DIR="apache-maven-3.3.9"
50 MAVEN_TAR_FILE="$MAVEN_VERSION_DIR-bin.tar.gz"
51 MAVEN_TAR_LOCATION="https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/$MAVEN_TAR_FILE"
52 MAVEN_DIR=$TEMP_DIR_PATH/maven
53 INSTALLED_MAVEN_DIR=$MAVEN_DIR/$MAVEN_VERSION_DIR
54 MVN=$INSTALLED_MAVEN_DIR/bin/mvn
55 MVN_VERSION="$MVN -v"
56 MVN_SETTINGS_XML="$INTEGRATION_ETSI_TESTING_DIR/settings.xml"
57 MVN_CLEAN_INSTALL="$MVN clean install"
58 SKIP_KIND_CLUSTER_FLAG="-Dskip-kind-cluster=false"
59
60 echo "Running $SCRIPT_HOME/$SCRIPT_NAME ..."
61
62 export $(egrep -v '^#' $ENV_FILE | xargs)
63
64 MANDATORY_VARIABLES_NAMES=( "NEXUS_DOCKER_REPO_MSO" "DOCKER_ENVIRONMENT" "TIME_OUT_DEFAULT_VALUE_SEC" "PROJECT_NAME" "DEFAULT_NETWORK_NAME" "SO_IMAGE_VERSION" "SO_ADMIN_COCKPIT_IMAGE_VERSION" "MARIADB_VERSION" "SO_CNFM_AS_LCM")
65
66 for var in "${MANDATORY_VARIABLES_NAMES[@]}"
67  do
68    if [ -z "${!var}" ]; then
69      echo "Missing mandatory attribute $var in $ENV_FILE"
70      exit 1
71   fi
72 done
73
74 if [[ ! "$TEMP_DIR_PATH" || ! -d "$TEMP_DIR_PATH" ]]; then
75         echo "Creating temporary directory $TEMP_DIR_PATH"
76         mkdir $TEMP_DIR_PATH
77
78         if [ $? -ne 0 ]; then
79                 echo "Could not create $TEMP_DIR_PATH"
80                 exit 1
81         fi
82 fi
83 echo "Will use ${TEMP_DIR_PATH} directory"
84
85 if [[ ! "$MAVEN_DIR" || ! -d "$MAVEN_DIR" ]]; then
86         echo "Creating temporary maven directory $MAVEN_DIR"
87         mkdir $MAVEN_DIR
88
89         if [ $? -ne 0 ]; then
90                 echo "Could not create $MAVEN_DIR"
91                 exit 1
92         fi
93 fi
94 echo "Will use ${MAVEN_DIR} directory for maven install"
95
96 if [[ ! "$INSTALLED_MAVEN_DIR" || ! -d "$INSTALLED_MAVEN_DIR" ]]; then
97         echo "Installing maven ..."
98         cd $MAVEN_DIR
99
100         CURL=`which curl`
101         if [[ ! "$CURL" ]]; then
102                 echo "curl command is not installed"
103                 echo "Unable to execute test plan"
104                 exit 1
105         fi
106
107         curl -O $MAVEN_TAR_LOCATION
108         TAR=`which tar`
109         if [[ ! "$TAR" ]]; then
110                 echo "tar command is not installed"
111                 echo "Unable to execute test plan"
112                 exit 1
113         fi
114
115         tar -xzvf $MAVEN_TAR_FILE
116         echo "Finished installing maven ..."
117 fi
118 echo "Maven installed under directory $INSTALLED_MAVEN_DIR"
119
120 $MVN_VERSION
121 if [ $? -ne 0 ]; then
122         echo "Unable to run mvn -v command"
123         exit 1
124 fi
125
126 echo "Will build simulator project using $MVN_CLEAN_INSTALL -f $SIMULATOR_MAVEN_PROJECT_POM --settings $MVN_SETTINGS_XML"
127 $MVN_CLEAN_INSTALL -f $SIMULATOR_MAVEN_PROJECT_POM --settings $MVN_SETTINGS_XML $SKIP_KIND_CLUSTER_FLAG
128 if [ $? -ne 0 ]; then
129         echo "Maven build failed"
130         exit 1
131 fi
132
133 echo "Will clone docker-config project ... "
134 if [[ -d "$TEST_LAB_DIR_PATH" ]]; then
135        echo "$TEST_LAB_DIR_PATH already exists"
136        echo "Removing $TEST_LAB_DIR_PATH directory ..."
137        rm -rf $TEST_LAB_DIR_PATH
138 fi
139
140 git clone http://gerrit.onap.org/r/so/docker-config.git $TEST_LAB_DIR_PATH
141
142 echo "Replacing $CAMUNDA_SQL_SCRIPT_NAME ..."
143 rm -rf $TEST_LAB_SQL_SCRIPTS_DIR/$CAMUNDA_SQL_SCRIPT_NAME
144 cp $CAMUNDA_SQL_SCRIPT_DIR/$CAMUNDA_SQL_SCRIPT_NAME $TEST_LAB_SQL_SCRIPTS_DIR
145
146 export TEST_LAB_DIR=$TEST_LAB_DIR_PATH
147 export CONFIG_DIR_PATH=$INTEGRATION_ETSI_TESTING_CONFIG_DIR
148 export CONFIG_DIR_PATH_CNFM=$CONFIG_DIR_CNFM
149
150 if [ "$DOCKER_ENVIRONMENT" == "remote" ]; then
151   echo "Starting docker containers with remote images ..."
152   docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME up -d
153 elif [ "$DOCKER_ENVIRONMENT" == "local" ]; then
154   echo "Starting docker containers with local images ..."
155   docker-compose -f $DOCKER_COMPOSE_FILE_PATH -f $DOCKER_COMPOSE_LOCAL_OVERRIDE_FILE -p $PROJECT_NAME up -d
156 else
157   echo "DOCKER_ENVIRONMENT not set correctly in $ENV_FILE.  Allowed values: local | remote"
158   exit 1
159 fi
160
161 echo "Sleeping for 3m"
162 sleep 3m
163
164 docker ps -a
165
166 echo "Will execute $WAIT_FOR_POPULATE_AAI_SCRIPT script"
167 $WAIT_FOR_POPULATE_AAI_SCRIPT
168 if [ $? -ne 0 ]; then
169    echo "ERROR: $WAIT_FOR_POPULATE_AAI_SCRIPT failed"
170    echo "Will stop running docker containers . . ."
171    $TEAR_DOWN_SCRIPT
172    exit 1
173 fi
174
175 PODS_NAMES=( "api-handler-infra" "so-cnfm-lcm" "kind-cluster")
176 for pod in "${PODS_NAMES[@]}"
177  do
178      echo "Will execute $WAIT_FOR_CONTAINER_SCRIPT to wait for $pod container to start up"
179      $WAIT_FOR_CONTAINER_SCRIPT -c "$pod" -t "300" -n "$DEFAULT_NETWORK_NAME"
180
181      if [ $? -ne 0 ]; then
182         echo "ERROR: $WAIT_FOR_CONTAINER_SCRIPT for pod: $pod failed"
183         echo "Will stop running docker containers . . ."
184         $TEAR_DOWN_SCRIPT
185         exit 1
186      fi
187 done
188
189 echo "Will execute $WAIT_FOR_KIND_CLUSTER_CONTAINER_SCRIPT script"
190 $WAIT_FOR_KIND_CLUSTER_CONTAINER_SCRIPT
191 if [ $? -ne 0 ]; then
192    echo "ERROR: $WAIT_FOR_KIND_CLUSTER_CONTAINER_SCRIPT failed"
193    echo "Will stop running docker containers . . ."
194    $TEAR_DOWN_SCRIPT
195    exit 1
196 fi
197
198 if [ -f "$KIND_CLUSTER_KUBE_CONFIG_FILE" ]; then
199   echo "Old Kube-config file exits $KIND_CLUSTER_KUBE_CONFIG_FILE will remove it"
200   rm "$KIND_CLUSTER_KUBE_CONFIG_FILE"
201 fi
202
203 CONTAINER_NAME=$(docker ps -aqf "name=kind-cluster" --format "{{.Names}}")
204 if [ -z "$CONTAINER_NAME" ]; then
205    echo "Unable to find kind-cluster docker container id CONTAINER_NAME=$CONTAINER_NAME"
206    exit 1
207 fi
208
209 echo "Copying kube-config from $CONTAINER_NAME container"
210 docker cp "$CONTAINER_NAME":/root/.kube/config "$KIND_CLUSTER_KUBE_CONFIG_FILE"
211
212 if [ $? -ne 0 ] || [ ! -f "$KIND_CLUSTER_KUBE_CONFIG_FILE" ]; then
213    echo "ERROR: Failed to copy kube-config file from $CONTAINER_NAME"
214    echo "Will stop running docker containers . . ."
215    $TEAR_DOWN_SCRIPT
216    exit 1
217 fi
218
219 # Pass variables required in robot test suites in ROBOT_VARIABLES
220 REPO_IP='127.0.0.1'
221 ROBOT_VARIABLES="-v REPO_IP:${REPO_IP} -v KIND_CLUSTER_KUBE_CONFIG_FILE:${KIND_CLUSTER_KUBE_CONFIG_FILE}"
222
223 echo "Finished executing $SCRIPT_HOME/$SCRIPT_NAME"