Merge "Update O-RU Fronthaul Recovery apex version"
[nonrtric.git] / test / common / do_curl_function.sh
index e1d890d..6476711 100755 (executable)
 
 # Function to execute curl towards a container (or process) and compare + print result
 # Intended use is for basic test scripts where testing is done with curl and the returned response and payload need to be checked.
-# args: GET|PUT|POST|DELETE <url> <target-response-code> [<json-file>]
+# args: GET|PUT|POST|DELETE <url> <target-response-code> [<payload-file>]
 # All calls made to 'localhost:'<port>.
 # Expects env PORT set to intended port number
 # Expects env RESULT to contain the target response body.
-#   RESULT="*" means that returned payload is not checked, may container any text
-#   RESULT="<text>" menans that the returned payload has to match the <text> exactly
+# Optional env HTTPX shall contain protocol 'http' or 'https'. If not set, 'http' is used. For 'https' all cert errors are ignored
+#   RESULT="*" means that returned payload is not checked, may contain any text
+#   RESULT="<text>" means that the returned payload has to match the <text> exactly
 #   RESULT="json:<returned-payload>" means that the returned json payload is compared with the expected result (order of json keys and index is irrelevant)
+#   RESULT="json-array-size:<integer-size>" means that the returned json payload shall contain the number of element given by the <integer-size>
 # Env BODY contains the response body after the call
 # Any error will stop script execution
 # How to use in a test script:  source this file into your bash test script to the make the function available.
+# The function may create a dir 'tmp' for temporary files.
 
 do_curl() {
     echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
@@ -39,14 +42,49 @@ do_curl() {
         echo "Exting test script....."
         exit 1
     fi
-    curlstr="curl -X "$1" -sw %{http_code} localhost:$PORT$2 -H accept:*/*"
+
+    if [ -z $HTTPX ]; then
+        if [ "$HTTPX" != "http" ] && [ "$HTTPX" != "https" ]; then
+            echo "Env var HTTPX shall be set to 'http' or 'https'"
+            echo "Exting test script....."
+            exit 1
+        fi
+        PROT="http"
+    else
+        PROT=$HTTPX
+    fi
+
+    req_content=""
+    if [ -z "$REQ_CONTENT" ]; then
+        if [ $# -gt 3 ]; then
+            req_content="-H Content-Type:application/json" #Assuming json
+        fi
+    else
+        req_content="-H Content-Type:$REQ_CONTENT"
+    fi
+    resp_content=""
+    if [ -z "$RESP_CONTENT" ]; then
+        if [[ "$RESULT" == "json"* ]]; then
+            resp_content="application/json"
+        elif [[ "$RESULT" == "*" ]]; then
+            resp_content=""
+        else
+            resp_content="text/plain"
+        fi
+    else
+        resp_content=$RESP_CONTENT
+    fi
+    curlstr="curl -X "$1" -skw :%{content_type}:%{http_code} ${PROT}://localhost:$PORT$2 -H accept:*/*"
     if [ $# -gt 3 ]; then
-        curlstr=$curlstr" -H Content-Type:application/json --data-binary @"$4
+        curlstr=$curlstr" $req_content --data-binary @"$4
     fi
     echo "  CMD:"$curlstr
     res=$($curlstr)
     status=${res:${#res}-3}
-    body=${res:0:${#res}-3}
+    reminder=${res:0:${#res}-4}
+    content_type="${reminder##*:}"
+    body="${reminder%:*}"
+
     export body
     if [ $status -ne $3 ]; then
         echo "  Error status:"$status" Expected status: "$3
@@ -55,6 +93,16 @@ do_curl() {
         exit 1
     else
         echo "  OK, code: "$status"     (Expected)"
+        if [[ "$resp_content" == '*' ]]; then
+            :
+        elif [[ "$content_type" == *"$resp_content"* ]]; then
+            echo "  Content type: "$content_type"     (Expected)"
+        else
+            echo "  Expected content type: "$resp_content
+            echo "  Got: "$content_type
+            echo "Exiting....."
+            exit 1
+        fi
         echo "  Body: "$body
         if [ "$RESULT" == "*" ]; then
             echo "  Body contents not checked"
@@ -70,6 +118,20 @@ do_curl() {
                 echo "Exiting....."
                 exit 1
             fi
+        elif [[ "$RESULT" == "json-array-size:"* ]]; then
+            count=${RESULT:16:${#RESULT}}
+            #Find dir of the common dir
+            DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+            mkdir -p tmp
+            echo $body > ./tmp/.tmp.json
+            res=$(python ${DIR}/count_json_elements.py ./tmp/.tmp.json)
+            if [ $res -eq $count ]; then
+                echo "  Body (array size) as expected"
+            else
+                echo "  Expected json array size: "$count
+                echo "Exiting....."
+                exit 1
+            fi
         else
             body="$(echo $body | tr -d '\n' )"
             if [ "$RESULT" == "$body" ]; then