Merge "Improve the dockerized auto test"
[nonrtric.git] / near-rt-ric-simulator / common / testcase_common.sh
1 #!/usr/bin/env bash
2
3 . ../common/test_env.sh
4
5 echo "Test case started as: ${BASH_SOURCE[$i+1]} "$1 $2
6 echo "Numbers of ric simulator started" $2
7
8 # This is a script that contains all the functions needed for auto test
9 # Arg: local | remote (1, 2, 3, 4....)
10
11 STARTED_POLICY_AGENT="" #Policy agent app names added to this var to keep track of started container in the script
12 START_ARG=$1
13 IMAGE_TAG="1.0.0-SNAPSHOT"
14 IMAGE_TAG_REMOTE="latest"
15 RIC_NUMBER=$2
16
17 if [ $# -lt 1 ] || [ $# -gt 2 ]; then
18         echo "Expected arg: local  | remote  and numbers of the rics "
19         exit 1
20 elif [ $1 == "local" ]; then
21         if [ -z $POLICY_AGENT_LOCAL_IMAGE ]; then
22                 echo "POLICY_AGENT_LOCAL_IMAGE not set in test_env"
23                 exit 1
24         fi
25         POLICY_AGENT_IMAGE=$POLICY_AGENT_LOCAL_IMAGE":"$IMAGE_TAG
26 elif [ $1 == "remote" ]; then
27     if [ -z $POLICY_AGENT_REMOTE_IMAGE ]; then
28         echo "POLICY_AGENT_REMOTE_IMAGE not set in test_env"
29         exit 1
30     fi
31     POLICY_AGENT_IMAGE=$POLICY_AGENT_REMOTE_IMAGE":"$IMAGE_TAG_REMOTE
32 fi
33
34 # Set a description string for the test case
35 if [ -z "$TC_ONELINE_DESCR" ]; then
36         TC_ONELINE_DESCR="<no-description>"
37         echo "No test case description found, TC_ONELINE_DESCR should be set on in the test script , using "$TC_ONELINE_DESCR
38 fi
39
40 ATC=$(basename "${BASH_SOURCE[$i+1]}" .sh)
41
42
43 # Create the logs dir if not already created in the current dir
44 if [ ! -d "logs" ]; then
45     mkdir logs
46 fi
47
48 TESTLOGS=$PWD/logs
49
50 mkdir -p $TESTLOGS/$ATC
51
52 TCLOG=$TESTLOGS/$ATC/TC.log
53 exec &>  >(tee ${TCLOG})
54
55 #Variables for counting tests as well as passed and failed tests
56 RES_TEST=0
57 RES_PASS=0
58 RES_FAIL=0
59 TCTEST_START=$SECONDS
60
61 echo "-------------------------------------------------------------------------------------------------"
62 echo "-----------------------------------      Test case: "$ATC
63 echo "-----------------------------------      Started:   "$(date)
64 echo "-------------------------------------------------------------------------------------------------"
65 echo "-- Description: "$TC_ONELINE_DESCR
66 echo "-------------------------------------------------------------------------------------------------"
67 echo "-----------------------------------      Test case setup      -----------------------------------"
68
69
70 if [ -z "$SIM_GROUP" ]; then
71                 SIM_GROUP=$PWD/../simulator-group
72                 if [ ! -d  $SIM_GROUP ]; then
73                         echo "Trying to set env var SIM_GROUP to dir 'simulator-group' in the integration repo, but failed."
74                         echo "Please set the SIM_GROUP manually in the test_env.sh"
75                         exit 1
76                 else
77                         echo "SIM_GROUP auto set to: " $SIM_GROUP
78                 fi
79 elif [ $SIM_GROUP = *simulator_group ]; then
80                         echo "Env var SIM_GROUP does not seem to point to dir 'simulator-group' in the integration repo, check test_env.sh"
81                         exit 1
82 fi
83
84 echo ""
85
86 if [ $1 !=  "manual-container" ] && [ $1 !=  "manual-app" ]; then
87         #echo -e "Policy agent image tag set to: \033[1m" $IMAGE_TAG"\033[0m"
88         echo "Configured image for policy agent app(s) (${1}): "$POLICY_AGENT_IMAGE
89         tmp_im=$(docker images ${POLICY_AGENT_IMAGE} | grep -v REPOSITORY)
90
91         if [ $1 == "local" ]; then
92                 if [ -z "$tmp_im" ]; then
93                         echo "Local image (non nexus) "$POLICY_AGENT_IMAGE" does not exist in local registry, need to be built"
94                         exit 1
95                 else
96                         echo -e "Policy agent local image: \033[1m"$tmp_im"\033[0m"
97                         echo "If the policy agent image seem outdated, rebuild the image and run the test again."
98                 fi
99         elif [ $1 == "remote" ]; then
100             if [ -z "$tmp_im" ]; then
101                         echo "Pulling policy agent image from nexus: "$POLICY_AGENT_IMAGE
102                         docker pull $POLICY_AGENT_IMAGE  > /dev/null
103                         tmp_im=$(docker images ${POLICY_AGENT_IMAGE} | grep -v REPOSITORY)
104                         if [ -z "$tmp_im" ]; then
105                                 echo "Image could not be pulled"
106                                 exit 1
107                         fi
108                         echo -e "Policy Agent image: \033[1m"$tmp_im"\033[0m"
109                 else
110                         echo -e "Policy Agent image: \033[1m"$tmp_im"\033[0m"
111                         echo "!! If the Policy agent image seem outdated, consider removing it from your docker registry and run the test again."
112                 fi
113         fi
114 fi
115
116 echo ""
117
118 echo "Building images for the simulators"
119 curdir=$PWD
120 cd $SIM_GROUP
121 cd ../ric-plt/a1
122 docker build -t ric-simulator:latest . &> /dev/null
123 cd $curdir
124
125 echo ""
126
127 echo "Local registry images for simulators:"
128 echo "Consul:             " $(docker images | grep consul)
129 echo "CBS:                " $(docker images | grep platform.configbinding.app)
130 echo "RIC:                " $(docker images | grep ric-simulator)
131 echo ""
132
133
134 __consul_config() {
135
136         appname=$PA_APP_BASE
137
138         echo "Configuring consul for " $appname " from " $1
139         curl -s http://127.0.0.1:${CONSUL_PORT}/v1/kv/${appname}?dc=dc1 -X PUT -H 'Accept: application/json' -H 'Content-Type: application/json' -H 'X-Requested-With: XMLHttpRequest' --data-binary "@"$1 >/dev/null
140 }
141
142
143 consul_config_app() {
144
145     __consul_config $1
146
147 }
148
149
150
151 start_ric_simulator() {
152
153   DOCKER_SIM_NWNAME="nonrtric-docker-net"
154   echo "Creating docker network $DOCKER_SIM_NWNAME, if needed"
155   docker network ls| grep $DOCKER_SIM_NWNAME > /dev/null || docker network create $DOCKER_SIM_NWNAME
156
157   echo "start ric simulator"
158   curdir=$PWD
159   cd $SIM_GROUP
160   cd ric/
161
162   docker-compose up --scale ric-simulator=$RIC_NUMBER -d
163
164   cd $curdir
165         echo ""
166 }
167
168 prepare_consul_config() {
169   echo "prepare consul config"
170   curdir=$PWD
171   cd $SIM_GROUP
172   cd ric/
173
174   python3 cleanConsul.py
175   python3 prepareConsul.py
176
177   cd $curdir
178         echo ""
179
180
181 }
182
183
184 # Start all simulators in the simulator group
185 start_simulators() {
186
187         echo "Starting all simulators"
188         curdir=$PWD
189         cd $SIM_GROUP
190
191         $SIM_GROUP/simulators-start.sh
192         cd $curdir
193         echo ""
194 }
195
196 clean_containers() {
197         echo "Stopping all containers, policy agent app(s) and simulators with name prefix 'policy_agent'"
198         docker stop $(docker ps -q --filter name=/policy-agent) &> /dev/null
199         echo "Removing all containers, policy agent app and simulators with name prefix 'policy_agent'"
200         docker rm $(docker ps -a -q --filter name=/policy-agent) &> /dev/null
201         echo "Stopping all containers, policy agent app(s) and simulators with name prefix 'ric-simulator'"
202         docker stop $(docker ps -q --filter name=ric-simulator) &> /dev/null
203         echo "Removing all containers, policy agent app and simulators with name prefix 'ric-simulator'"
204         docker rm $(docker ps -a -q --filter name=ric-simulator) &> /dev/null
205         echo "Removing unused docker networks with substring 'policy agent' in network name"
206         docker network rm $(docker network ls -q --filter name=nonrtric)
207         echo ""
208 }
209
210 start_policy_agent() {
211
212         appname=$PA_APP_BASE
213
214         if [ $START_ARG == "local" ] || [ $START_ARG == "remote" ]; then
215                 __start_policy_agent_image $appname
216         fi
217 }
218
219 __start_policy_agent_image() {
220
221         appname=$1
222         localport=$POLICY_AGENT_PORT
223
224         echo "Creating docker network $DOCKER_SIM_NWNAME, if needed"
225
226         docker network ls| grep $DOCKER_SIM_NWNAME > /dev/null || docker network create $DOCKER_SIM_NWNAME
227
228         echo "Starting policy agent: " $appname " with ports mapped to " $localport " in docker network "$DOCKER_SIM_NWNAME
229         docker run -d -p $localport":8081" --network=$DOCKER_SIM_NWNAME -e CONSUL_HOST=$CONSUL_HOST -e CONSUL_PORT=$CONSUL_PORT -e CONFIG_BINDING_SERVICE=$CONFIG_BINDING_SERVICE -e HOSTNAME=$appname --name $appname $POLICY_AGENT_IMAGE
230         #docker run -d -p 8081:8081 --network=nonrtric-docker-net -e CONSUL_HOST=CONSUL_HOST=$CONSUL_HOST -e CONSUL_PORT=$CONSUL_PORT -e CONFIG_BINDING_SERVICE=$CONFIG_BINDING_SERVICE -e HOSTNAME=policy-agent
231         sleep 3
232         set +x
233         pa_started=false
234         for i in {1..10}; do
235                 if [ $(docker inspect --format '{{ .State.Running }}' $appname) ]
236                         then
237                                 echo " Image: $(docker inspect --format '{{ .Config.Image }}' ${appname})"
238                                 echo "Policy Agent container ${appname} running"
239                                 pa_started=true
240                                 break
241                         else
242                                 sleep $i
243                 fi
244         done
245         if ! [ $pa_started  ]; then
246                 echo "Policy Agent container ${appname} could not be started"
247                 exit 1
248         fi
249
250         pa_st=false
251         echo "Waiting for Policy Agent ${appname} service status..."
252         for i in {1..10}; do
253                 result="$(__do_curl http://127.0.0.1:${localport}/status)"
254                 if [ $? -eq 0 ]; then
255                         echo "Policy Agent ${appname} responds to service status: " $result
256                         echo "Policy Agent is alive."
257                         pa_st=true
258                         break
259                 else
260                         sleep $i
261                 fi
262         done
263
264         if [ "$pa_st" = "false"  ]; then
265                 echo "Policy Agent ${appname} did not respond to service status"
266                 exit 1
267         fi
268 }
269
270 check_policy_agent_logs() {
271
272                 appname=$PA_APP_BASE
273                 tmp=$(docker ps | grep $appname)
274                 if ! [ -z "$tmp" ]; then  #Only check logs for running policy agent apps
275                         __check_policy_agent_log $appname
276                 fi
277
278 }
279
280 __check_policy_agent_log() {
281         echo "Checking $1 log $POLICY_AGENT_LOGPATH for WARNINGs and ERRORs"
282         foundentries=$(docker exec -it $1 grep WARN /var/log/policy-agent/application.log | wc -l)
283         if [ $? -ne  0 ];then
284                 echo "  Problem to search $1 log $POLICY_AGENT_LOGPATH"
285         else
286                 if [ $foundentries -eq 0 ]; then
287                         echo "  No WARN entries found in $1 log $POLICY_AGENT_LOGPATH"
288                 else
289                         echo -e "  Found \033[1m"$foundentries"\033[0m WARN entries in $1 log $POLICY_AGENT_LOGPATH"
290                 fi
291         fi
292         foundentries=$(docker exec -it $1 grep ERR $POLICY_AGENT_LOGPATH | wc -l)
293         if [ $? -ne  0 ];then
294                 echo "  Problem to search $1 log $POLICY_AGENT_LOGPATH"
295         else
296                 if [ $foundentries -eq 0 ]; then
297                         echo "  No ERR entries found in $1 log $POLICY_AGENT_LOGPATH"
298                 else
299                         echo -e "  Found \033[1m"$foundentries"\033[0m ERR entries in $1 log $POLICY_AGENT_LOGPATH"
300                 fi
301         fi
302 }
303
304 store_logs() {
305         if [ $# != 1 ]; then
306         __print_err "need one arg, <file-prefix>"
307                 exit 1
308         fi
309         echo "Storing all container logs and policy agent app log using prefix: "$1
310
311         docker logs polman_consul > $TESTLOGS/$ATC/$1_consul.log 2>&1
312         docker logs polman_cbs > $TESTLOGS/$ATC/$1_cbs.log 2>&1
313 }
314
315 __do_curl() {
316         res=$(curl -skw "%{http_code}" $1)
317         http_code="${res:${#res}-3}"
318         if [ ${#res} -eq 3 ]; then
319                 echo "<no-response-from-server>"
320                 return 1
321         else
322                 if [ $http_code -lt 200 ] && [ $http_code -gt 299]; then
323                         echo "<not found, resp:${http_code}>"
324                         return 1
325                 fi
326                 if [ $# -eq 2 ]; then
327                         echo "${res:0:${#res}-3}" | xargs
328                 else
329                         echo "${res:0:${#res}-3}"
330                 fi
331
332                 return 0
333         fi
334 }
335