#!/bin/bash # Copyright 2016-2017 Huawei Technologies Co., Ltd. # # 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. function memory_details(){ #General memory details echo "> top -bn1 | head -3" top -bn1 | head -3 echo echo "> free -h" free -h echo #Memory details per Docker echo "> docker ps" docker ps echo echo "> docker stats --no-stream" docker stats --no-stream echo } function fibonacci_number(){ set +x if [ $1 -le 1 ] then echo "1" elif [ $1 -le 10 ] then Num=$1 f1=0 f2=1 fn=-1 for i in `eval echo {1..$Num}`;do fn=$((f1+f2)) f1=$f2 f2=$fn done echo $fn else echo "30" fi } function wait_curl_driver(){ #Parameters: #CURL_COMMAND - the URL on which the curl command will be executed #GREP_STRING - Desired string to be found inside the body response of the # previous curl command #EXCLUDE_STRING - If the filtered string (GREP_STRING) must not exist in # the body response of the curl #WAIT_MESSAGE - the message to be displayed for logging purpose. (optional) #REPEAT_NUMBER - the maximum number of tries before abandoning the curl # command (optional, by default = 15) #MAX_TIME - Maximum time allowed for the transfer (in seconds) #STATUS_CODE - A HTTP status code desired to be found by getting the link # /!\ IMPORTANT NOTICE: the usage of STATUS_CODE option turn GREP_STRING/ # /!\ EXCLUDE_STRING/and the MAX_TIME options becomes obsolete with no # /!\ execution impact #MEMORY_USAGE - If Parameters exists shows the memory usage after curl # execution(s) repeat_max=15 parameters="$@" #WAIT_MESSAGE if [[ $parameters == *"WAIT_MESSAGE"* ]] then wait_message=`echo $parameters | sed -e "s/.*WAIT_MESSAGE=//g"` wait_message=`echo $wait_message | sed -e "s/ .*//g"` else wait_message="wait ..." fi #REPEAT_NUMBER if [[ $parameters == *"REPEAT_NUMBER"* ]] then repeat_max=`echo $parameters | sed -e "s/.*REPEAT_NUMBER=//g"` repeat_max=`echo $repeat_max | sed -e "s/ .*//g"` fi #CURL_COMMAND if [[ $parameters == *"CURL_COMMAND"* ]] then curl_command=`echo $parameters | sed -e 's/.*CURL_COMMAND=//g'` curl_command=`echo $curl_command | sed -e 's/ .*//g'` else echo "-Curl is empty-" # Or no parameterseter passed. return 0 fi #MAX_TIME if [[ $parameters == *"MAX_TIME"* ]] then max_time=`echo $parameters | sed -e 's/.*MAX_TIME=//g'` max_time=`echo $max_time | sed -e 's/ .*//g'` else max_time="5" fi exclude_string="" #EXCLUDE_STRING if [[ $parameters == *"EXCLUDE_STRING"* ]] then exclude_string="-v" fi status_code="" #STATUS_CODE if [[ $parameters == *"STATUS_CODE"* ]] then status_code=`echo $parameters | sed -e 's/.*STATUS_CODE=//g'` status_code=`echo $status_code | sed -e 's/ .*//g'` fi for i in `eval echo {1..$repeat_max}`; do response_code=`curl -o /dev/null --silent --head --write-out '%{http_code}' $curl_command` echo "..." if [[ ! -z $status_code ]] ; then if [ "$status_code" -eq "$response_code" ] then echo "SUCCESS:Actual Status code <$response_code> match the expected code <$status_code>" return 0 else echo "WARNING:Expected <$status_code> but Actual <$response_code>" fi else #GREP_STRING if [[ $parameters == *"GREP_STRING"* ]] then grep_command=`echo $parameters | sed -e 's/.*GREP_STRING=//g'` 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'` else echo "-Grep_command is empty-" # Or no parameters passed. return 0 fi str=`curl -sS -m$max_time $curl_command | grep "$grep_command"` echo "BODY::$str" if [[ ! -z $exclude_string ]] then if [[ -z $str ]] then echo "SUCCESS: body response does not contains '$grep_command'"; break; else echo "Fall_Short: Body response still contains '$grep_command'" fi else if [[ ! -z $str ]] then echo "SUCCESS: body response contains '$grep_command'"; break; else echo "Fall_Short: Element '$grep_command' not found yet # "$i"" fi fi if [ "$?" = "7" ]; then echo 'Connection refused or can not connect to server/proxy'; str='' fi fi seconds2sleep=`fibonacci_number $i` echo $wait_message echo "Iteration::$i out of $repeat_max " echo "Quiet time for $seconds2sleep seconds ..." sleep $seconds2sleep # if waiting for a long time, log system load if [ $i -gt 45 ] then memory_details fi done #MEMORY_USAGE if [[ $parameters == *"MEMORY_USAGE"* ]] then echo "==========================MEMORY USAGE==================================" memory_details echo "========================================================================" fi return 0 } function run_simulator () { run_robottestlib run_simulator_docker $1 } function run_robottestlib () { #Start the robottest REST library if not started if ! pgrep -f robottest > /dev/null then #Download the latest robottest jar 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" chmod +x ${SCRIPTS}/integration/mockserver/org.openo.robottest.jar eval `java -cp ${SCRIPTS}/integration/mockserver/org.openo.robottest.jar org.openo.robot.test.robottest.MyRemoteLibrary` & fi } function run_simulator_docker () { #Start the simulator docker if not started SIMULATOR_IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' simulator` if [[ -z $SIMULATOR_IP ]] then echo "Starting simulator docker..." SIMULATOR_JSON=$1 if [[ -z $SIMULATOR_JSON ]] then SIMULATOR_JSON=main.json fi docker run -d -i -t --name simulator -e SIMULATOR_JSON=$SIMULATOR_JSON -p 18009:18009 -p 18008:18008 openoint/simulate-test-docker SIMULATOR_IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' simulator` fi #Set the simulator IP in robot variables ROBOT_VARIABLES=${ROBOT_VARIABLES}" -v SIMULATOR_IP:${SIMULATOR_IP} -v SCRIPTS:${SCRIPTS}" echo ${ROBOT_VARIABLES} } function get_docker_compose_service () { local service=$1 local compose_file=${2:-docker-compose.yml} echo $(docker-compose --file ./${compose_file} ps | grep $service | cut -d " " -f1 ) } function bypass_ip_adress () { local ip_address=$1 if [[ $no_proxy && $no_proxy != *$ip_address* ]]; then export no_proxy=$no_proxy,$ip_address fi } function wait_for_service_init () { local service_url=$1 for delay in {1..50}; do curl -sS ${service_url} && break echo "$delay - Waiting for $service_url..." sleep $delay done }