blob: 684c418417e918d4f5b0e9a227444fa19f4ef08c [file] [log] [blame]
#!/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
}