-# 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|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
- paramError=0
-
- if [ $# -lt 2 ] || [ $# -gt 3 ]; then
- paramError=1
- else
- timeout=""
- oper=""
- file=''
- 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" ] || [ $1 == "GET_BATCH" ]; then
- oper="GET"
- if [ $# -ne 2 ]; then
- paramError=1
- fi
- 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" ] || [ $1 == "POST_BATCH" ]; then
- oper="POST"
- accept=" -H accept:*/*"
- if [ $# -ne 2 ]; then
- paramError=1
- fi
- elif [ $1 == "DELETE" ] || [ $1 == "DELETE_BATCH" ]; then
- oper="DELETE"
- 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
- paramError=1
- fi
- fi
-
- if [ $paramError -eq 1 ]; then
- ((RES_CONF_FAIL++))
- echo "-Incorrect number of parameters to __do_curl_agent " $@ >> $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 ] || [ $ADAPTER == $RESTBASE_SECURE ]; then
- url=" "${ADAPTER}${2}
- oper=" -X "$oper
- curlString="curl -k "${oper}${timeout}${httpcode}${accept}${content}${url}${file}
- echo " CMD: "$curlString >> $HTTPLOG
- if [ $# -eq 3 ]; then
- echo " FILE: $(<$3)" >> $HTTPLOG
- fi
-
- # Do retry for configured response codes, otherwise only one attempt
- maxretries=5
- while [ $maxretries -ge 0 ]; do
-
- let maxretries=maxretries-1
- res=$($curlString)
- retcode=$?
- if [ $retcode -ne 0 ]; then
- echo " RETCODE: "$retcode >> $HTTPLOG
- echo "000"
- return 1
- fi
- retry=0
- echo " RESP: "$res >> $HTTPLOG
- status=${res:${#res}-3}
- if [ ! -z "${AGENT_RETRY_CODES}" ]; then
- for retrycode in $AGENT_RETRY_CODES; do
- if [ $retrycode -eq $status ]; then
- echo -e $RED" Retrying (according to set codes for retry), got status $status....."$ERED >> $HTTPLOG
- sleep 1
- retry=1
- fi
- done
- fi
- if [ $retry -eq 0 ]; then
- maxretries=-1
- fi
- done
- echo $res
- return 0
- else
- 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
- #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
-}
-