Gary Wu | 9abb61c | 2018-09-27 10:38:50 -0700 | [diff] [blame^] | 1 | #!/bin/bash |
| 2 | |
| 3 | # Copyright 2016-2017 Huawei Technologies Co., Ltd. |
| 4 | # |
| 5 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | # you may not use this file except in compliance with the License. |
| 7 | # You may obtain a copy of the License at |
| 8 | # |
| 9 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | # |
| 11 | # Unless required by applicable law or agreed to in writing, software |
| 12 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | # See the License for the specific language governing permissions and |
| 15 | # limitations under the License. |
| 16 | |
| 17 | function memory_details(){ |
| 18 | #General memory details |
| 19 | echo "> top -bn1 | head -3" |
| 20 | top -bn1 | head -3 |
| 21 | echo |
| 22 | |
| 23 | echo "> free -h" |
| 24 | free -h |
| 25 | echo |
| 26 | |
| 27 | #Memory details per Docker |
| 28 | echo "> docker ps" |
| 29 | docker ps |
| 30 | echo |
| 31 | |
| 32 | echo "> docker stats --no-stream" |
| 33 | docker stats --no-stream |
| 34 | echo |
| 35 | } |
| 36 | function fibonacci_number(){ |
| 37 | set +x |
| 38 | if [ $1 -le 1 ] |
| 39 | then |
| 40 | echo "1" |
| 41 | elif [ $1 -le 10 ] |
| 42 | then |
| 43 | Num=$1 |
| 44 | f1=0 |
| 45 | f2=1 |
| 46 | fn=-1 |
| 47 | for i in `eval echo {1..$Num}`;do |
| 48 | fn=$((f1+f2)) |
| 49 | f1=$f2 |
| 50 | f2=$fn |
| 51 | done |
| 52 | echo $fn |
| 53 | else |
| 54 | echo "30" |
| 55 | fi |
| 56 | } |
| 57 | function wait_curl_driver(){ |
| 58 | #Parameters: |
| 59 | #CURL_COMMAND - the URL on which the curl command will be executed |
| 60 | #GREP_STRING - Desired string to be found inside the body response of the |
| 61 | # previous curl command |
| 62 | #EXCLUDE_STRING - If the filtered string (GREP_STRING) must not exist in |
| 63 | # the body response of the curl |
| 64 | #WAIT_MESSAGE - the message to be displayed for logging purpose. (optional) |
| 65 | #REPEAT_NUMBER - the maximum number of tries before abandoning the curl |
| 66 | # command (optional, by default = 15) |
| 67 | #MAX_TIME - Maximum time allowed for the transfer (in seconds) |
| 68 | #STATUS_CODE - A HTTP status code desired to be found by getting the link |
| 69 | # /!\ IMPORTANT NOTICE: the usage of STATUS_CODE option turn GREP_STRING/ |
| 70 | # /!\ EXCLUDE_STRING/and the MAX_TIME options becomes obsolete with no |
| 71 | # /!\ execution impact |
| 72 | #MEMORY_USAGE - If Parameters exists shows the memory usage after curl |
| 73 | # execution(s) |
| 74 | |
| 75 | repeat_max=15 |
| 76 | parameters="$@" |
| 77 | |
| 78 | #WAIT_MESSAGE |
| 79 | if [[ $parameters == *"WAIT_MESSAGE"* ]] |
| 80 | then |
| 81 | wait_message=`echo $parameters | sed -e "s/.*WAIT_MESSAGE=//g"` |
| 82 | wait_message=`echo $wait_message | sed -e "s/ .*//g"` |
| 83 | else |
| 84 | wait_message="wait ..." |
| 85 | fi |
| 86 | |
| 87 | #REPEAT_NUMBER |
| 88 | if [[ $parameters == *"REPEAT_NUMBER"* ]] |
| 89 | then |
| 90 | repeat_max=`echo $parameters | sed -e "s/.*REPEAT_NUMBER=//g"` |
| 91 | repeat_max=`echo $repeat_max | sed -e "s/ .*//g"` |
| 92 | fi |
| 93 | |
| 94 | #CURL_COMMAND |
| 95 | if [[ $parameters == *"CURL_COMMAND"* ]] |
| 96 | then |
| 97 | curl_command=`echo $parameters | sed -e 's/.*CURL_COMMAND=//g'` |
| 98 | curl_command=`echo $curl_command | sed -e 's/ .*//g'` |
| 99 | else |
| 100 | echo "-Curl is empty-" # Or no parameterseter passed. |
| 101 | return 0 |
| 102 | fi |
| 103 | |
| 104 | #MAX_TIME |
| 105 | if [[ $parameters == *"MAX_TIME"* ]] |
| 106 | then |
| 107 | max_time=`echo $parameters | sed -e 's/.*MAX_TIME=//g'` |
| 108 | max_time=`echo $max_time | sed -e 's/ .*//g'` |
| 109 | else |
| 110 | max_time="5" |
| 111 | fi |
| 112 | |
| 113 | exclude_string="" |
| 114 | #EXCLUDE_STRING |
| 115 | if [[ $parameters == *"EXCLUDE_STRING"* ]] |
| 116 | then |
| 117 | exclude_string="-v" |
| 118 | fi |
| 119 | |
| 120 | status_code="" |
| 121 | #STATUS_CODE |
| 122 | if [[ $parameters == *"STATUS_CODE"* ]] |
| 123 | then |
| 124 | status_code=`echo $parameters | sed -e 's/.*STATUS_CODE=//g'` |
| 125 | status_code=`echo $status_code | sed -e 's/ .*//g'` |
| 126 | fi |
| 127 | |
| 128 | for i in `eval echo {1..$repeat_max}`; do |
| 129 | response_code=`curl -o /dev/null --silent --head --write-out '%{http_code}' $curl_command` |
| 130 | echo "..." |
| 131 | if [[ ! -z $status_code ]] ; then |
| 132 | if [ "$status_code" -eq "$response_code" ] |
| 133 | then |
| 134 | echo "SUCCESS:Actual Status code <$response_code> match the expected code <$status_code>" |
| 135 | return 0 |
| 136 | else |
| 137 | echo "WARNING:Expected <$status_code> but Actual <$response_code>" |
| 138 | fi |
| 139 | else |
| 140 | #GREP_STRING |
| 141 | if [[ $parameters == *"GREP_STRING"* ]] |
| 142 | then |
| 143 | grep_command=`echo $parameters | sed -e 's/.*GREP_STRING=//g'` |
| 144 | grep_command=`echo $grep_command | sed -e 's/ REPEAT_NUMBER=.*//g' | sed -e 's/ CURL_COMMAND=.*//g' | sed -e 's/ WAIT_MESSAGE=.*//g' | sed -e 's/ MAX_TIME=.*//g' | sed -e 's/ EXCLUDE_STRING.*//g'` |
| 145 | else |
| 146 | echo "-Grep_command is empty-" # Or no parameters passed. |
| 147 | return 0 |
| 148 | fi |
| 149 | |
| 150 | str=`curl -sS -m$max_time $curl_command | grep "$grep_command"` |
| 151 | echo "BODY::$str" |
| 152 | if [[ ! -z $exclude_string ]] |
| 153 | then |
| 154 | if [[ -z $str ]] |
| 155 | then |
| 156 | echo "SUCCESS: body response does not contains '$grep_command'"; |
| 157 | break; |
| 158 | else |
| 159 | echo "Fall_Short: Body response still contains '$grep_command'" |
| 160 | fi |
| 161 | else |
| 162 | if [[ ! -z $str ]] |
| 163 | then |
| 164 | echo "SUCCESS: body response contains '$grep_command'"; |
| 165 | break; |
| 166 | else |
| 167 | echo "Fall_Short: Element '$grep_command' not found yet # "$i"" |
| 168 | fi |
| 169 | fi |
| 170 | |
| 171 | if [ "$?" = "7" ]; then |
| 172 | echo 'Connection refused or can not connect to server/proxy'; |
| 173 | str='' |
| 174 | fi |
| 175 | fi |
| 176 | seconds2sleep=`fibonacci_number $i` |
| 177 | echo $wait_message |
| 178 | echo "Iteration::$i out of $repeat_max " |
| 179 | echo "Quiet time for $seconds2sleep seconds ..." |
| 180 | sleep $seconds2sleep |
| 181 | |
| 182 | # if waiting for a long time, log system load |
| 183 | if [ $i -gt 45 ] |
| 184 | then |
| 185 | memory_details |
| 186 | fi |
| 187 | done |
| 188 | #MEMORY_USAGE |
| 189 | if [[ $parameters == *"MEMORY_USAGE"* ]] |
| 190 | then |
| 191 | echo "==========================MEMORY USAGE==================================" |
| 192 | memory_details |
| 193 | echo "========================================================================" |
| 194 | fi |
| 195 | return 0 |
| 196 | } |
| 197 | |
| 198 | function run_simulator () |
| 199 | { |
| 200 | run_robottestlib |
| 201 | run_simulator_docker $1 |
| 202 | } |
| 203 | |
| 204 | function run_robottestlib () |
| 205 | { |
| 206 | #Start the robottest REST library if not started |
| 207 | if ! pgrep -f robottest > /dev/null |
| 208 | then |
| 209 | #Download the latest robottest jar |
| 210 | wget -q -O ${SCRIPTS}/integration/mockserver/org.openo.robottest.jar "https://nexus.open-o.org/service/local/artifact/maven/redirect?r=snapshots&g=org.openo.integration&a=org.openo.robottest&e=jar&v=LATEST" |
| 211 | chmod +x ${SCRIPTS}/integration/mockserver/org.openo.robottest.jar |
| 212 | eval `java -cp ${SCRIPTS}/integration/mockserver/org.openo.robottest.jar org.openo.robot.test.robottest.MyRemoteLibrary` & |
| 213 | fi |
| 214 | } |
| 215 | |
| 216 | function run_simulator_docker () |
| 217 | { |
| 218 | #Start the simulator docker if not started |
| 219 | SIMULATOR_IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' simulator` |
| 220 | if [[ -z $SIMULATOR_IP ]] |
| 221 | then |
| 222 | echo "Starting simulator docker..." |
| 223 | SIMULATOR_JSON=$1 |
| 224 | if [[ -z $SIMULATOR_JSON ]] |
| 225 | then |
| 226 | SIMULATOR_JSON=main.json |
| 227 | fi |
| 228 | docker run -d -i -t --name simulator -e SIMULATOR_JSON=$SIMULATOR_JSON -p 18009:18009 -p 18008:18008 openoint/simulate-test-docker |
| 229 | SIMULATOR_IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' simulator` |
| 230 | fi |
| 231 | |
| 232 | #Set the simulator IP in robot variables |
| 233 | ROBOT_VARIABLES=${ROBOT_VARIABLES}" -v SIMULATOR_IP:${SIMULATOR_IP} -v SCRIPTS:${SCRIPTS}" |
| 234 | echo ${ROBOT_VARIABLES} |
| 235 | } |
| 236 | |
| 237 | function get_docker_compose_service () |
| 238 | { |
| 239 | local service=$1 |
| 240 | local compose_file=${2:-docker-compose.yml} |
| 241 | |
| 242 | echo $(docker-compose --file ./${compose_file} ps | grep $service | cut -d " " -f1 ) |
| 243 | } |
| 244 | |
| 245 | function bypass_ip_adress () |
| 246 | { |
| 247 | local ip_address=$1 |
| 248 | |
| 249 | if [[ $no_proxy && $no_proxy != *$ip_address* ]]; then |
| 250 | export no_proxy=$no_proxy,$ip_address |
| 251 | fi |
| 252 | } |
| 253 | |
| 254 | function wait_for_service_init () |
| 255 | { |
| 256 | local service_url=$1 |
| 257 | |
| 258 | for delay in {1..50}; do |
| 259 | curl -sS ${service_url} && break |
| 260 | echo "$delay - Waiting for $service_url..." |
| 261 | sleep $delay |
| 262 | done |
| 263 | } |