Merge "Clean autotest folder"
[nonrtric.git] / test / common / do_curl_function.sh
1 #!/bin/bash
2
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
9 #
10 #       http://www.apache.org/licenses/LICENSE-2.0
11 #
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=================================================
18 #
19
20
21
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 #   RESULT="*" means that returned payload is not checked, may container any text
29 #   RESULT="<text>" menans that the returned payload has to match the <text> exactly
30 #   RESULT="json:<returned-payload>" means that the returned json payload is compared with the expected result (order of json keys and index is irrelevant)
31 # Env BODY contains the response body after the call
32 # Any error will stop script execution
33 # How to use in a test script:  source this file into your bash test script to the make the function available.
34
35 do_curl() {
36     echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
37     if [ $# -lt 3 ]; then
38         echo "Need 3 or more parameters, <http-operation> <url> <response-code> [file]: "$@
39         echo "Exting test script....."
40         exit 1
41     fi
42     curlstr="curl -X "$1" -sw %{http_code} localhost:$PORT$2 -H accept:*/*"
43     if [ $# -gt 3 ]; then
44         curlstr=$curlstr" -H Content-Type:application/json --data-binary @"$4
45     fi
46     echo "  CMD:"$curlstr
47     res=$($curlstr)
48     status=${res:${#res}-3}
49     body=${res:0:${#res}-3}
50     export body
51     if [ $status -ne $3 ]; then
52         echo "  Error status:"$status" Expected status: "$3
53         echo "  Body: "$body
54         echo "Exting test script....."
55         exit 1
56     else
57         echo "  OK, code: "$status"     (Expected)"
58         echo "  Body: "$body
59         if [ "$RESULT" == "*" ]; then
60             echo "  Body contents not checked"
61         elif [[ "$RESULT" == "json:"* ]]; then
62             result=${RESULT:5:${#RESULT}}
63             #Find dir of the common dir
64             DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
65             res=$(python ${DIR}/compare_json.py "$result" "$body")
66             if [ $res -eq 0 ]; then
67                 echo "  Body as expected"
68             else
69                 echo "  Expected json body: "$result
70                 echo "Exiting....."
71                 exit 1
72             fi
73         else
74             body="$(echo $body | tr -d '\n' )"
75             if [ "$RESULT" == "$body" ]; then
76                 echo "  Body as expected"
77             else
78                 echo "  Expected body: "$RESULT
79                 echo "Exiting....."
80                 exit 1
81             fi
82         fi
83     fi
84 }