Merge "Update Release Notes for Bronze"
[nonrtric.git] / test / common / agent_api_functions.sh
index 312eacb..1e1077b 100644 (file)
 
 # Generic function to query the agent via the REST or DMAAP interface.
 # Used by all other agent api test functions
+# If operation prefix is '_BATCH' the the send and get response is split in two sequences,
+# one for sending the requests and one for receiving the response
+# but only when using the DMAAP interface
 # REST or DMAAP is controlled of the base url of $ADAPTER
-# arg: GET|PUT|POST|DELETE <url> [<file>]
+# arg: (GET|PUT|POST|DELETE|GET_BATCH|PUT_BATCH|POST_BATCH|DELETE_BATCH <url> [<file>]) | (RESPONSE <correlation-id>)
 # (Not for test scripts)
 __do_curl_to_agent() {
     echo "(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
@@ -39,30 +42,41 @@ __do_curl_to_agent() {
                httpcode=" -sw %{http_code}"
                accept=''
                content=''
-
+               batch=0
+               if [[ $1 == *"_BATCH" ]]; then
+                       batch=1
+               fi
                if [ $# -gt 2 ]; then
                        content=" -H Content-Type:application/json"
                fi
-               if [ $1 == "GET" ]; then
+               if [ $1 == "GET" ] || [ $1 == "GET_BATCH" ]; then
                        oper="GET"
-                       if [ $# -ne 2 ];then
+                       if [ $# -ne 2 ]; then
                                paramError=1
                        fi
-               elif [ $1 == "PUT" ]; then
+               elif [ $1 == "PUT" ] || [ $1 == "PUT_BATCH" ]; then
                        oper="PUT"
                        if [ $# -eq 3 ]; then
                                file=" --data-binary @$3"
                        fi
                        accept=" -H accept:application/json"
-               elif [ $1 == "POST" ]; then
+               elif [ $1 == "POST" ] || [ $1 == "POST_BATCH" ]; then
                        oper="POST"
                        accept=" -H accept:*/*"
-                       if [ $# -ne 2 ];then
+                       if [ $# -ne 2 ]; then
                                paramError=1
                        fi
-               elif [ $1 == "DELETE" ]; then
+               elif [ $1 == "DELETE" ] || [ $1 == "DELETE_BATCH" ]; then
                        oper="DELETE"
-                       if [ $# -ne 2 ];then
+                       if [ $# -ne 2 ]; then
+                               paramError=1
+                       fi
+               elif [ $1 == "RESPONSE" ]; then
+                       oper="RESPONSE"
+                       if [ $# -ne 2 ]; then
+                               paramError=1
+                       fi
+                       if ! [ $ADAPTER == $DMAAPBASE ]; then
                                paramError=1
                        fi
                else
@@ -73,16 +87,16 @@ __do_curl_to_agent() {
     if [ $paramError -eq 1 ]; then
                ((RES_CONF_FAIL++))
         echo "-Incorrect number of parameters to __do_curl_agent " $@ >> $HTTPLOG
-        echo "-Expected: GET|PUT|POST|DELETE <url> [<file>]" >> $HTTPLOG
+        echo "-Expected: (GET|PUT|POST|DELETE|GET_BATCH|PUT_BATCH|POST_BATCH|DELETE_BATCH <url> [<file>]) | (RESPONSE <correlation-id>) [<file>]" >> $HTTPLOG
         echo "-Returning response 000" >> $HTTPLOG
         echo "-000"
         return 1
     fi
 
-    if [ $ADAPTER == $RESTBASE ]; then
+    if [ $ADAPTER == $RESTBASE ] || [ $ADAPTER == $RESTBASE_SECURE ]; then
         url=" "${ADAPTER}${2}
         oper=" -X "$oper
-        curlString="curl"${oper}${timeout}${httpcode}${accept}${content}${url}${file}
+        curlString="curl -k "${oper}${timeout}${httpcode}${accept}${content}${url}${file}
         echo " CMD: "$curlString >> $HTTPLOG
                if [ $# -eq 3 ]; then
                        echo " FILE: $(<$3)" >> $HTTPLOG
@@ -119,70 +133,81 @@ __do_curl_to_agent() {
         echo $res
         return 0
     else
-        requestUrl=$2
-        if [ $1 == "PUT" ] && [ $# -eq 3 ]; then
-            payload="$(cat $3 | tr -d '\n' | tr -d ' ' )"
-            echo "payload: "$payload >> $HTTPLOG
-            file=" --data-binary "$payload
-        fi
-               #urlencode the request url since it will be carried by send-request url
-               requestUrl=$(python -c "from __future__ import print_function; import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))"  "$2")
-        url=" "${ADAPTER}"/send-request?url="${requestUrl}"&operation="${oper}
-        curlString="curl -X POST${timeout}${httpcode}${content}${url}${file}"
-        echo " CMD: "$curlString >> $HTTPLOG
-        res=$($curlString)
-        retcode=$?
-        if [ $retcode -ne 0 ]; then
-            echo " RETCODE: "$retcode >> $HTTPLOG
-            echo "000"
-            return 1
-        fi
-        echo " RESP: "$res >> $HTTPLOG
-        status=${res:${#res}-3}
-        if [ $status -ne 200 ]; then
-            echo "000"
-            return 1
-        fi
-        cid=${res:0:${#res}-3}
-        url=" "${ADAPTER}"/receive-response?correlationid="${cid}
-        curlString="curl -X GET"${timeout}${httpcode}${url}
-        echo " CMD: "$curlString >> $HTTPLOG
-        res=$($curlString)
-        retcode=$?
-        if [ $retcode -ne 0 ]; then
-            echo " RETCODE: "$retcode >> $HTTPLOG
-            echo "000"
-            return 1
-        fi
-        echo " RESP: "$res >> $HTTPLOG
-        status=${res:${#res}-3}
-               TS=$SECONDS
-               # wait of the reply from the agent...
-        while [ $status -eq 204 ]; do
-                       if [ $(($SECONDS - $TS)) -gt 90 ]; then
-                echo " RETCODE: (timeout after 90s)" >> $HTTPLOG
-                echo "000"
-                return 1
+               if [ $oper != "RESPONSE" ]; then
+                       requestUrl=$2
+                       if [ $1 == "PUT" ] && [ $# -eq 3 ]; then
+                               payload="$(cat $3 | tr -d '\n' | tr -d ' ' )"
+                               echo "payload: "$payload >> $HTTPLOG
+                               file=" --data-binary "$payload
                        fi
-            sleep 1
-            echo " CMD: "$curlString >> $HTTPLOG
-            res=$($curlString)
-            if [ $retcode -ne 0 ]; then
-                echo " RETCODE: "$retcode >> $HTTPLOG
-                echo "000"
-                return 1
-            fi
-            echo " RESP: "$res >> $HTTPLOG
-            status=${res:${#res}-3}
-        done
-        if [ $status -eq 200 ]; then
-            body=${res:0:${#res}-3}
-            echo $body
-            return 0
-        fi
-        echo "Status not 200, returning response 000" >> $HTTPLOG
-        echo "0000"
-        return 1
+                       #urlencode the request url since it will be carried by send-request url
+                       requestUrl=$(python3 -c "from __future__ import print_function; import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))"  "$2")
+                       url=" "${ADAPTER}"/send-request?url="${requestUrl}"&operation="${oper}
+                       curlString="curl -X POST${timeout}${httpcode}${content}${url}${file}"
+                       echo " CMD: "$curlString >> $HTTPLOG
+                       res=$($curlString)
+                       retcode=$?
+                       if [ $retcode -ne 0 ]; then
+                               echo " RETCODE: "$retcode >> $HTTPLOG
+                               echo "000"
+                               return 1
+                       fi
+                       echo " RESP: "$res >> $HTTPLOG
+                       status=${res:${#res}-3}
+                       if [ $status -ne 200 ]; then
+                               echo "000"
+                               return 1
+                       fi
+                       cid=${res:0:${#res}-3}
+                       if [[ $batch -eq 1 ]]; then
+                               echo $cid"200"
+                               return 0
+                       fi
+               fi
+               if [ $oper == "RESPONSE" ] || [ $batch -eq 0 ]; then
+                       if [ $oper == "RESPONSE" ]; then
+                               cid=$2
+                       fi
+                       url=" "${ADAPTER}"/receive-response?correlationid="${cid}
+                       curlString="curl -X GET"${timeout}${httpcode}${url}
+                       echo " CMD: "$curlString >> $HTTPLOG
+                       res=$($curlString)
+                       retcode=$?
+                       if [ $retcode -ne 0 ]; then
+                               echo " RETCODE: "$retcode >> $HTTPLOG
+                               echo "000"
+                               return 1
+                       fi
+                       echo " RESP: "$res >> $HTTPLOG
+                       status=${res:${#res}-3}
+                       TS=$SECONDS
+                       # wait of the reply from the agent...
+                       while [ $status -eq 204 ]; do
+                               if [ $(($SECONDS - $TS)) -gt 90 ]; then
+                                       echo " RETCODE: (timeout after 90s)" >> $HTTPLOG
+                                       echo "000"
+                                       return 1
+                               fi
+                               sleep 0.01
+                               echo " CMD: "$curlString >> $HTTPLOG
+                               res=$($curlString)
+                               if [ $retcode -ne 0 ]; then
+                                       echo " RETCODE: "$retcode >> $HTTPLOG
+                                       echo "000"
+                                       return 1
+                               fi
+                               echo " RESP: "$res >> $HTTPLOG
+                               status=${res:${#res}-3}
+                       done
+                       if [ $status -eq 200 ]; then
+                               body=${res:0:${#res}-3}
+                               echo $body
+                               return 0
+                       fi
+                       echo "Status not 200, returning response 000" >> $HTTPLOG
+                       echo "0000"
+                       return 1
+               fi
     fi
 }
 
@@ -226,7 +251,7 @@ api_get_policies() {
        fi
 
     if [ $paramError -ne 0 ]; then
-        __print_err "<response-code> <ric-id>|NORIC <service-id>|NOSERVICE <policy-ype-id>|NOTYPE [ NOID | [<policy-id> <ric-id> <service-id> EMPTY|<policy-type-id> <template-file>]*]" $@
+        __print_err "<response-code> <ric-id>|NORIC <service-id>|NOSERVICE <policy-type-id>|NOTYPE [ NOID | [<policy-id> <ric-id> <service-id> EMPTY|<policy-type-id> <template-file>]*]" $@
         return 1
     fi
        queryparams=""
@@ -255,6 +280,7 @@ api_get_policies() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -271,7 +297,7 @@ api_get_policies() {
                                if [ "$targetJson" != "[" ]; then
                                        targetJson=$targetJson","
                                fi
-                               targetJson=$targetJson"{\"id\":\"${arr[$i]}\",\"lastModified\":\"????\",\"ric\":\"${arr[$i+1]}\",\"service\":\"${arr[$i+2]}\",\"type\":"
+                               targetJson=$targetJson"{\"id\":\"$UUID${arr[$i]}\",\"lastModified\":\"????\",\"ric\":\"${arr[$i+1]}\",\"service\":\"${arr[$i+2]}\",\"type\":"
                                if [ "${arr[$i+3]}" == "EMPTY" ]; then
                                        targetJson=$targetJson"\"\","
                                else
@@ -286,11 +312,12 @@ api_get_policies() {
 
                targetJson=$targetJson"]"
                echo "TARGET JSON: $targetJson" >> $HTTPLOG
-               res=$(python ../common/compare_json.py "$targetJson" "$body" "id")
+               res=$(python3 ../common/compare_json.py "$targetJson" "$body")
 
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -314,13 +341,14 @@ api_get_policy() {
         return 1
     fi
 
-       query="/policy?id=$2"
+       query="/policy?id=$UUID$2"
        res="$(__do_curl_to_agent GET $query)"
        status=${res:${#res}-3}
 
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -331,10 +359,11 @@ api_get_policy() {
                sed 's/XXX/'${2}'/g' $3 > $file
                targetJson=$(< $file)
                echo "TARGET JSON: $targetJson" >> $HTTPLOG
-               res=$(python ../common/compare_json.py "$targetJson" "$body")
+               res=$(python3 ../common/compare_json.py "$targetJson" "$body")
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -345,15 +374,15 @@ api_get_policy() {
 }
 
 # API Test function: PUT /policy
-# args: <response-code> <service-name> <ric-id> <policytype-id> <policy-id> <template-file> [<count>]
+# args: <response-code> <service-name> <ric-id> <policytype-id> <policy-id> <transient> <template-file> [<count>]
 # (Function for test scripts)
 api_put_policy() {
        echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
     echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
        ((RES_TEST++))
 
-    if [ $# -lt 6 ] || [ $# -gt 7 ]; then
-        __print_err "<response-code> <service-name> <ric-id> <policytype-id> <policy-id> <template-file> [<count>]" $@
+    if [ $# -lt 7 ] || [ $# -gt 8 ]; then
+        __print_err "<response-code> <service-name> <ric-id> <policytype-id> <policy-id> <transient>|NOTRANSIENT <template-file> [<count>]" $@
         return 1
     fi
 
@@ -361,39 +390,40 @@ api_put_policy() {
        count=0
        max=1
 
-       if [ $# -eq 7 ]; then
-               max=$7
+       if [ $# -eq 8 ]; then
+               max=$8
        fi
 
        pid=$5
-       file=$6
+       file=$7
 
        while [ $count -lt $max ]; do
-               query="/policy?id=$pid&ric=$ric&service=$2"
+               query="/policy?id=$UUID$pid&ric=$ric&service=$2"
 
-               if [ $4 == "NOTYPE" ]; then
-                       query="/policy?id=$pid&ric=$ric&service=$2"
-               else
-                       query="/policy?id=$pid&ric=$ric&service=$2&type=$4"
+               if [ $4 != "NOTYPE" ]; then
+                       query=$query"&type=$4"
+               fi
+
+               if [ $6 != NOTRANSIENT ]; then
+                       query=$query"&transient=$6"
                fi
 
                file=".p.json"
-               sed 's/XXX/'${pid}'/g' $6 > $file
+               sed 's/XXX/'${pid}'/g' $7 > $file
        res="$(__do_curl_to_agent PUT $query $file)"
        status=${res:${#res}-3}
-               echo -ne " Creating "$count"("$max")\033[0K\r"
-
+               echo -ne " Creating "$count"("$max")${SAMELINE}"
                if [ $status -ne $1 ]; then
-                       let pid=$pid+1
                        echo " Created "$count"?("$max")"
                        echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
 
                let pid=$pid+1
                let count=$count+1
-               echo -ne " Created  "$count"("$max")\033[0K\r"
+               echo -ne " Created  "$count"("$max")${SAMELINE}"
        done
        echo ""
 
@@ -402,6 +432,176 @@ api_put_policy() {
        return 0
 }
 
+# API Test function: PUT /policy to run in batch
+# args: <response-code> <service-name> <ric-id> <policytype-id> <policy-id> <transient> <template-file> [<count>]
+# (Function for test scripts)
+api_put_policy_batch() {
+       echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
+    echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
+       ((RES_TEST++))
+
+    if [ $# -lt 7 ] || [ $# -gt 8 ]; then
+        __print_err "<response-code> <service-name> <ric-id> <policytype-id> <policy-id> <transient> <template-file> [<count>]" $@
+        return 1
+    fi
+
+       ric=$3
+       count=0
+       max=1
+
+       if [ $# -eq 8 ]; then
+               max=$8
+       fi
+
+       pid=$5
+       file=$7
+       ARR=""
+       while [ $count -lt $max ]; do
+               query="/policy?id=$UUID$pid&ric=$ric&service=$2"
+
+               if [ $4 != "NOTYPE" ]; then
+                       query=$query"&type=$4"
+               fi
+
+               if [ $6 != NOTRANSIENT ]; then
+                       query=$query"&transient=$6"
+               fi
+
+               file=".p.json"
+               sed 's/XXX/'${pid}'/g' $7 > $file
+       res="$(__do_curl_to_agent PUT_BATCH $query $file)"
+       status=${res:${#res}-3}
+               echo -ne " Requested(batch) "$count"("$max")${SAMELINE}"
+
+               if [ $status -ne 200 ]; then
+                       echo " Requested(batch) "$count"?("$max")"
+                       echo -e $RED" FAIL. Exepected status 200 (in request), got "$status $ERED
+                       ((RES_FAIL++))
+                       __check_stop_at_error
+                       return 1
+               fi
+               cid=${res:0:${#res}-3}
+               ARR=$ARR" "$cid
+               let pid=$pid+1
+               let count=$count+1
+               echo -ne " Requested(batch)  "$count"("$max")${SAMELINE}"
+       done
+
+       echo ""
+       count=0
+       for cid in $ARR; do
+
+       res="$(__do_curl_to_agent RESPONSE $cid)"
+       status=${res:${#res}-3}
+               echo -ne " Created(batch) "$count"("$max")${SAMELINE}"
+
+               if [ $status -ne $1 ]; then
+                       echo " Created(batch) "$count"?("$max")"
+                       echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
+                       ((RES_FAIL++))
+                       __check_stop_at_error
+                       return 1
+               fi
+
+               let count=$count+1
+               echo -ne " Created(batch)  "$count"("$max")${SAMELINE}"
+       done
+
+       echo ""
+
+       ((RES_PASS++))
+       echo -e $GREEN" PASS"$EGREEN
+       return 0
+}
+
+# API Test function: PUT /policy to run in i parallel for a number of rics
+# args: <response-code> <service-name> <ric-id-base> <number-of-rics> <policytype-id> <policy-start-id> <transient> <template-file> <count-per-ric> <number-of-threads>
+# (Function for test scripts)
+api_put_policy_parallel() {
+       echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
+    echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
+       ((RES_TEST++))
+
+    if [ $# -ne 10 ]; then
+        __print_err " <response-code> <service-name> <ric-id-base> <number-of-rics> <policytype-id> <policy-start-id> <transient> <template-file> <count-per-ric> <number-of-threads>" $@
+        return 1
+    fi
+       resp_code=$1; shift;
+       serv=$1; shift
+       ric_base=$1; shift;
+       num_rics=$1; shift;
+       type=$1; shift;
+       start_id=$1; shift;
+       transient=$1; shift;
+       template=$1; shift;
+       count=$1; shift;
+       pids=$1; shift;
+
+       if [ $ADAPTER != $RESTBASE ] && [ $ADAPTER != $RESTBASE_SECURE ]; then
+               echo " Info - api_put_policy_parallel uses only the agent REST interface - create over dmaap in parallel is not supported"
+               echo " Info - will execute over agent REST"
+       fi
+
+       if [ $serv == "NOSERVICE" ]; then
+               serv=""
+       fi
+       query="/policy?service=$serv"
+
+       if [ $type != "NOTYPE" ]; then
+               query=$query"&type=$type"
+       fi
+
+       if [ $transient != NOTRANSIENT ]; then
+               query=$query"&transient=$transient"
+       fi
+
+       urlbase=${ADAPTER}${query}
+
+       for ((i=1; i<=$pids; i++))
+       do
+               uuid=$UUID
+               if [ -z "$uuid" ]; then
+                       uuid="NOUUID"
+               fi
+               echo "" > ".pid${i}.res.txt"
+               echo $resp_code $urlbase $ric_base $num_rics $uuid $start_id $template $count $pids $i > ".pid${i}.txt"
+               echo $i
+       done  | xargs -n 1 -I{} -P $pids bash -c '{
+               arg=$(echo {})
+               echo " Parallel process $arg started"
+               tmp=$(< ".pid${arg}.txt")
+               python3 ../common/create_policies_process.py $tmp > .pid${arg}.res.txt
+       }'
+       msg=""
+       for ((i=1; i<=$pids; i++))
+       do
+               file=".pid${i}.res.txt"
+               tmp=$(< $file)
+               if [ -z "$tmp" ]; then
+                       echo " Process $i : unknown result (result file empty"
+                       msg="failed"
+               else
+                       res=${tmp:0:1}
+                       if [ $res == "0" ]; then
+                               echo " Process $i : OK"
+                       else
+                               echo " Process $i : failed - "${tmp:1}
+                               msg="failed"
+                       fi
+               fi
+       done
+       if [ -z $msg ]; then
+               echo " $(($count*$num_rics)) policies created/updated"
+               ((RES_PASS++))
+               echo -e $GREEN" PASS"$EGREEN
+               return 0
+       fi
+
+       echo -e $RED" FAIL. One of more processes failed to execute" $ERED
+       ((RES_FAIL++))
+       __check_stop_at_error
+       return 1
+}
 
 # API Test function: DELETE /policy
 # args: <response-code> <policy-id> [count]
@@ -426,28 +626,170 @@ api_delete_policy() {
        pid=$2
 
        while [ $count -lt $max ]; do
-               query="/policy?id="$pid
+               query="/policy?id="$UUID$pid
                res="$(__do_curl_to_agent DELETE $query)"
                status=${res:${#res}-3}
-               echo -ne " Deleting "$count"("$max")\033[0K\r"
+               echo -ne " Deleting "$count"("$max")${SAMELINE}"
 
                if [ $status -ne $1 ]; then
                        echo " Deleted "$count"?("$max")"
                        echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
+                       return 1
+               fi
+               let pid=$pid+1
+               let count=$count+1
+               echo -ne " Deleted  "$count"("$max")${SAMELINE}"
+       done
+       echo ""
+
+       ((RES_PASS++))
+       echo -e $GREEN" PASS"$EGREEN
+       return 0
+}
+
+# API Test function: DELETE /policy to run in batch
+# args: <response-code> <policy-id> [count]
+# (Function for test scripts)
+api_delete_policy_batch() {
+       echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
+    echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
+       ((RES_TEST++))
+
+    if [ $# -lt 2 ] || [ $# -gt 3 ]; then
+        __print_err "<response-code> <policy-id> [count]" $@
+        return 1
+    fi
+
+       count=0
+       max=1
+
+       if [ $# -eq 3 ]; then
+               max=$3
+       fi
+
+       pid=$2
+       ARR=""
+       while [ $count -lt $max ]; do
+               query="/policy?id="$UUID$pid
+               res="$(__do_curl_to_agent DELETE_BATCH $query)"
+               status=${res:${#res}-3}
+               echo -ne " Requested(batch) "$count"("$max")${SAMELINE}"
+
+               if [ $status -ne 200 ]; then
+                       echo " Requested(batch) "$count"?("$max")"
+                       echo -e $RED" FAIL. Exepected status 200 (in request), got "$status $ERED
+                       ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
+               cid=${res:0:${#res}-3}
+               ARR=$ARR" "$cid
                let pid=$pid+1
                let count=$count+1
-               echo -ne " Deleted  "$count"("$max")\033[0K\r"
+               echo -ne " Requested(batch)  "$count"("$max")${SAMELINE}"
        done
+
        echo ""
 
+       count=0
+       for cid in $ARR; do
+
+       res="$(__do_curl_to_agent RESPONSE $cid)"
+       status=${res:${#res}-3}
+               echo -ne " Deleted(batch) "$count"("$max")${SAMELINE}"
+
+               if [ $status -ne $1 ]; then
+                       echo " Deleted(batch) "$count"?("$max")"
+                       echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
+                       ((RES_FAIL++))
+                       __check_stop_at_error
+                       return 1
+               fi
+
+               let count=$count+1
+               echo -ne " Deleted(batch)  "$count"("$max")${SAMELINE}"
+       done
+
        ((RES_PASS++))
        echo -e $GREEN" PASS"$EGREEN
        return 0
 }
 
+# API Test function: DELETE /policy to run in i parallel for a number of rics
+# args: <response-code> <number-of-rics> <policy-start-id> <count-per-ric> <number-of-threads>
+# (Function for test scripts)
+api_delete_policy_parallel() {
+       echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
+    echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
+       ((RES_TEST++))
+
+    if [ $# -ne 5 ]; then
+        __print_err " <response-code> <ric-id-base> <number-of-rics> <policy-start-id> <count-per-ric> <number-of-threads>" $@
+        return 1
+    fi
+       resp_code=$1; shift;
+       num_rics=$1; shift;
+       start_id=$1; shift;
+       count=$1; shift;
+       pids=$1; shift;
+
+       if [ $ADAPTER != $RESTBASE ] && [ $ADAPTER != $RESTBASE_SECURE ]; then
+               echo " Info - api_delete_policy_parallel uses only the agent REST interface - create over dmaap in parallel is not supported"
+               echo " Info - will execute over agent REST"
+       fi
+
+       query="/policy"
+
+       urlbase=${ADAPTER}${query}
+
+       for ((i=1; i<=$pids; i++))
+       do
+               uuid=$UUID
+               if [ -z "$uuid" ]; then
+                       uuid="NOUUID"
+               fi
+               echo "" > ".pid${i}.del.res.txt"
+               echo $resp_code $urlbase $num_rics $uuid $start_id $count $pids $i > ".pid${i}.del.txt"
+               echo $i
+       done  | xargs -n 1 -I{} -P $pids bash -c '{
+               arg=$(echo {})
+               echo " Parallel process $arg started"
+               tmp=$(< ".pid${arg}.del.txt")
+               python3 ../common/delete_policies_process.py $tmp > .pid${arg}.del.res.txt
+       }'
+       msg=""
+       for ((i=1; i<=$pids; i++))
+       do
+               file=".pid${i}.del.res.txt"
+               tmp=$(< $file)
+               if [ -z "$tmp" ]; then
+                       echo " Process $i : unknown result (result file empty"
+                       msg="failed"
+               else
+                       res=${tmp:0:1}
+                       if [ $res == "0" ]; then
+                               echo " Process $i : OK"
+                       else
+                               echo " Process $i : failed - "${tmp:1}
+                               msg="failed"
+                       fi
+               fi
+       done
+       if [ -z $msg ]; then
+               echo " $(($count*$num_rics)) deleted"
+               ((RES_PASS++))
+               echo -e $GREEN" PASS"$EGREEN
+               return 0
+       fi
+
+       echo -e $RED" FAIL. One of more processes failed to execute" $ERED
+       ((RES_FAIL++))
+       __check_stop_at_error
+       return 1
+}
+
 # API Test function: GET /policy_ids
 # args: <response-code> <ric-id>|NORIC <service-id>|NOSERVICE <type-id>|NOTYPE ([<policy-instance-id]*|NOID)
 # (Function for test scripts)
@@ -489,6 +831,7 @@ api_get_policy_ids() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -501,17 +844,18 @@ api_get_policy_ids() {
                                targetJson=$targetJson","
                        fi
                        if [ $pid != "NOID" ]; then
-                               targetJson=$targetJson"\"$pid\""
+                               targetJson=$targetJson"\"$UUID$pid\""
                        fi
                done
 
                targetJson=$targetJson"]"
                echo "TARGET JSON: $targetJson" >> $HTTPLOG
-               res=$(python ../common/compare_json.py "$targetJson" "$body")
+               res=$(python3 ../common/compare_json.py "$targetJson" "$body")
 
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -541,6 +885,7 @@ api_get_policy_schema() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -550,11 +895,12 @@ api_get_policy_schema() {
 
                targetJson=$(< $3)
                echo "TARGET JSON: $targetJson" >> $HTTPLOG
-               res=$(python ../common/compare_json.py "$targetJson" "$body")
+               res=$(python3 ../common/compare_json.py "$targetJson" "$body")
 
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -588,6 +934,7 @@ api_get_policy_schemas() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -602,17 +949,18 @@ api_get_policy_schemas() {
                        if [ $file == "NOFILE" ]; then
                                targetJson=$targetJson"{}"
                        else
-                               targetJson=$targetJson$(< $3)
+                               targetJson=$targetJson$(< $file)
                        fi
                done
 
                targetJson=$targetJson"]"
                echo "TARGET JSON: $targetJson" >> $HTTPLOG
-               res=$(python ../common/compare_json.py "$targetJson" "$body")
+               res=$(python3 ../common/compare_json.py "$targetJson" "$body")
 
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -653,7 +1001,7 @@ api_get_policy_status() {
                return 1
        fi
 
-       query="/policy_status?id="$2
+       query="/policy_status?id="$UUID$2
 
        res="$(__do_curl_to_agent GET $query)"
     status=${res:${#res}-3}
@@ -661,16 +1009,18 @@ api_get_policy_status() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
        echo "TARGET JSON: $targetJson" >> $HTTPLOG
        body=${res:0:${#res}-3}
-       res=$(python ../common/compare_json.py "$targetJson" "$body")
+       res=$(python3 ../common/compare_json.py "$targetJson" "$body")
 
        if [ $res -ne 0 ]; then
                echo -e $RED" FAIL, returned body not correct"$ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -706,6 +1056,7 @@ api_get_policy_types() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -725,11 +1076,12 @@ api_get_policy_types() {
 
                targetJson=$targetJson"]"
                echo "TARGET JSON: $targetJson" >> $HTTPLOG
-               res=$(python ../common/compare_json.py "$targetJson" "$body")
+               res=$(python3 ../common/compare_json.py "$targetJson" "$body")
 
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -761,6 +1113,7 @@ api_get_status() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -793,6 +1146,7 @@ api_get_ric() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -801,6 +1155,7 @@ api_get_ric() {
                if [ "$body" != "$3" ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -836,24 +1191,27 @@ api_get_rics() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
        if [ $# -gt 2 ]; then
                body=${res:0:${#res}-3}
-               res=$(python ../common/create_rics_json.py ".tmp_rics.json" "$3" )
+               res=$(python3 ../common/create_rics_json.py ".tmp_rics.json" "$3" )
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, could not create target ric info json"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
 
                targetJson=$(<.tmp_rics.json)
        echo "TARGET JSON: $targetJson" >> $HTTPLOG
-               res=$(python ../common/compare_json.py "$targetJson" "$body")
+               res=$(python3 ../common/compare_json.py "$targetJson" "$body")
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -890,6 +1248,7 @@ api_put_service() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -905,7 +1264,6 @@ api_get_services() {
        echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
     echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
        ((RES_TEST++))
-
        #Number of accepted parameters: 1, 2, 4, 7, 10, 13,...
        paramError=1
        if [ $# -eq 1 ]; then
@@ -938,6 +1296,7 @@ api_get_services() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -960,10 +1319,11 @@ api_get_services() {
                done
                targetJson=$targetJson"]"
                echo "TARGET JSON: $targetJson" >> $HTTPLOG
-               res=$(python ../common/compare_json.py "$targetJson" "$body" "serviceName")
+               res=$(python3 ../common/compare_json.py "$targetJson" "$body")
                if [ $res -ne 0 ]; then
                        echo -e $RED" FAIL, returned body not correct"$ERED
                        ((RES_FAIL++))
+                       __check_stop_at_error
                        return 1
                fi
        fi
@@ -993,6 +1353,7 @@ api_get_service_ids() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -1007,11 +1368,12 @@ api_get_service_ids() {
 
        targetJson=$targetJson"]"
        echo "TARGET JSON: $targetJson" >> $HTTPLOG
-       res=$(python ../common/compare_json.py "$targetJson" "$body" "serviceName")
+       res=$(python3 ../common/compare_json.py "$targetJson" "$body")
 
        if [ $res -ne 0 ]; then
                echo -e $RED" FAIL, returned body not correct"$ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -1040,6 +1402,7 @@ api_delete_services() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi
 
@@ -1068,6 +1431,7 @@ api_put_services_keepalive() {
        if [ $status -ne $1 ]; then
                echo -e $RED" FAIL. Exepected status "$1", got "$status $ERED
                ((RES_FAIL++))
+               __check_stop_at_error
                return 1
        fi