[DMAAP-DR] Migrate csit suite to the repo
[dmaap/datarouter.git] / csit / scripts / common_functions.sh
diff --git a/csit/scripts/common_functions.sh b/csit/scripts/common_functions.sh
new file mode 100755 (executable)
index 0000000..684c418
--- /dev/null
@@ -0,0 +1,263 @@
+#!/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
+}