3 # ============LICENSE_START===============================================
4 # Copyright (C) 2020 Nordix Foundation. All rights reserved.
5 # ========================================================================
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
10 # http://www.apache.org/licenses/LICENSE-2.0
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 # ============LICENSE_END=================================================
22 # Function to execute curl towards a container (or process) and compare + print result
23 # Intended use is for basic test scripts where testing is done with curl and the returned response and payload need to be checked.
24 # args: GET|PUT|POST|DELETE <url> <target-response-code> [<json-file>]
25 # All calls made to 'localhost:'<port>.
26 # Expects env PORT set to intended port number
27 # Expects env RESULT to contain the target response body.
28 # Optional env HTTPX shall contain protocol 'http' or 'https'. If not set, 'http' is used. For 'https' all cert errors are ignored
29 # RESULT="*" means that returned payload is not checked, may container any text
30 # RESULT="<text>" means that the returned payload has to match the <text> exactly
31 # RESULT="json:<returned-payload>" means that the returned json payload is compared with the expected result (order of json keys and index is irrelevant)
32 # RESULT="json-array-size:<integer-size>" means that the returned json payload shall contain the number of element given by the <integer-size>
33 # Env BODY contains the response body after the call
34 # Any error will stop script execution
35 # How to use in a test script: source this file into your bash test script to the make the function available.
36 # The function may create a dir 'tmp' for temporary files.
39 echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
41 echo "Need 3 or more parameters, <http-operation> <url> <response-code> [file]: "$@
42 echo "Exting test script....."
46 if [ -z $HTTPX ]; then
47 if [ "$HTTPX" != "http" ] && [ "$HTTPX" != "https" ]; then
48 echo "Env var HTTPX shall be set to 'http' or 'https'"
49 echo "Exting test script....."
57 curlstr="curl -X "$1" -skw %{http_code} ${PROT}://localhost:$PORT$2 -H accept:*/*"
59 curlstr=$curlstr" -H Content-Type:application/json --data-binary @"$4
63 status=${res:${#res}-3}
64 body=${res:0:${#res}-3}
66 if [ $status -ne $3 ]; then
67 echo " Error status:"$status" Expected status: "$3
69 echo "Exting test script....."
72 echo " OK, code: "$status" (Expected)"
74 if [ "$RESULT" == "*" ]; then
75 echo " Body contents not checked"
76 elif [[ "$RESULT" == "json:"* ]]; then
77 result=${RESULT:5:${#RESULT}}
78 #Find dir of the common dir
79 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
80 res=$(python ${DIR}/compare_json.py "$result" "$body")
81 if [ $res -eq 0 ]; then
82 echo " Body as expected"
84 echo " Expected json body: "$result
88 elif [[ "$RESULT" == "json-array-size:"* ]]; then
89 count=${RESULT:16:${#RESULT}}
90 #Find dir of the common dir
91 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
93 echo $body > ./tmp/.tmp.json
94 res=$(python ${DIR}/count_json_elements.py ./tmp/.tmp.json)
95 if [ $res -eq $count ]; then
96 echo " Body (array size) as expected"
98 echo " Expected json array size: "$count
103 body="$(echo $body | tr -d '\n' )"
104 if [ "$RESULT" == "$body" ]; then
105 echo " Body as expected"
107 echo " Expected body: "$RESULT