blob: 2091d65a56afa0bef73857e2341ed2ddc42e8a5a [file] [log] [blame]
#!/bin/bash
# ============LICENSE_START===============================================
# Copyright (C) 2020 Nordix Foundation. All rights reserved.
# ========================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============LICENSE_END=================================================
#
# This is a script that contains specific test functions for Policy Agent API
### API functiond towards the Policy Agent
# 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 == $RESTBASE ] || [ $ADAPTER == $RESTBASE_SECURE ]; 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 -k -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 -k -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
}
#########################################################
#### Test case functions A1 Policy management service
#########################################################
# This function compare the size, towards a target value, of a json array returned from <url> of the Policy Agent.
# This is done immediately by setting PASS or FAIL or wait up to and optional timeout before setting PASS or FAIL
# args: json:<url> <target-value> [<timeout-in-seconds]
# (Function for test scripts)
api_equal() {
echo "(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
if [ $# -eq 2 ] || [ $# -eq 3 ]; then
if [[ $1 == "json:"* ]]; then
__var_test "Policy Agent" $LOCALHOST$POLICY_AGENT_EXTERNAL_PORT"/" $1 "=" $2 $3
return 0
fi
fi
((RES_CONF_FAIL++))
__print_err "needs two or three args: json:<json-array-param> <target-value> [ timeout ]" $@
return 1
}
# API Test function: GET /policies
# args: <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>]*]
# (Function for test scripts)
api_get_policies() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
paramError=0
if [ $# -lt 4 ]; then
paramError=1
elif [ $# -eq 5 ] && [ $5 != "NOID" ]; then
paramError=1
elif [ $# -gt 4 ] && [ $(($#%5)) -ne 4 ]; then
paramError=1
fi
if [ $paramError -ne 0 ]; then
__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=""
if [ $2 != "NORIC" ]; then
queryparams="?ric="$2
fi
if [ $3 != "NOSERVICE" ]; then
if [ -z $queryparams ]; then
queryparams="?service="$3
else
queryparams=$queryparams"&service="$3
fi
fi
if [ $4 != "NOTYPE" ]; then
if [ -z $queryparams ]; then
queryparams="?type="$4
else
queryparams=$queryparams"&type="$4
fi
fi
query="/policies"$queryparams
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
if [ $# -gt 4 ]; then
if [ $# -eq 5 ] && [ $5 == "NOID" ]; then
targetJson="["
else
body=${res:0:${#res}-3}
targetJson="["
arr=(${@:5})
for ((i=0; i<$(($#-4)); i=i+5)); do
if [ "$targetJson" != "[" ]; then
targetJson=$targetJson","
fi
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
targetJson=$targetJson"\"${arr[$i+3]}\","
fi
file=".p.json"
sed 's/XXX/'${arr[$i]}'/g' ${arr[$i+4]} > $file
json=$(cat $file)
targetJson=$targetJson"\"json\":"$json"}"
done
fi
targetJson=$targetJson"]"
echo "TARGET JSON: $targetJson" >> $HTTPLOG
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API Test function: GET /policy
#args: <response-code> <policy-id> [<template-file>]
# (Function for test scripts)
api_get_policy() {
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> [<template-file>] " $@
return 1
fi
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
if [ $# -eq 3 ]; then
#Create a policy json to compare with
body=${res:0:${#res}-3}
file=".p.json"
sed 's/XXX/'${2}'/g' $3 > $file
targetJson=$(< $file)
echo "TARGET JSON: $targetJson" >> $HTTPLOG
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API Test function: PUT /policy
# 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 7 ] || [ $# -gt 8 ]; then
__print_err "<response-code> <service-name> <ric-id> <policytype-id> <policy-id> <transient>|NOTRANSIENT <template-file> [<count>]" $@
return 1
fi
ric=$3
count=0
max=1
if [ $# -eq 8 ]; then
max=$8
fi
pid=$5
file=$7
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 $query $file)"
status=${res:${#res}-3}
echo -ne " Creating "$count"("$max")${SAMELINE}"
if [ $status -ne $1 ]; then
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")${SAMELINE}"
done
echo ""
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
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]
# (Function for test scripts)
api_delete_policy() {
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
while [ $count -lt $max ]; do
query="/policy?id="$UUID$pid
res="$(__do_curl_to_agent DELETE $query)"
status=${res:${#res}-3}
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 " 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)
api_get_policy_ids() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -lt 4 ]; then
__print_err "<response-code> <ric-id>|NORIC <service-id>|NOSERVICE <type-id>|NOTYPE ([<policy-instance-id]*|NOID)" $@
return 1
fi
queryparams=""
if [ $2 != "NORIC" ]; then
queryparams="?ric="$2
fi
if [ $3 != "NOSERVICE" ]; then
if [ -z $queryparams ]; then
queryparams="?service="$3
else
queryparams=$queryparams"&service="$3
fi
fi
if [ $4 != "NOTYPE" ]; then
if [ -z $queryparams ]; then
queryparams="?type="$4
else
queryparams=$queryparams"&type="$4
fi
fi
query="/policy_ids"$queryparams
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
if [ $# -gt 4 ]; then
body=${res:0:${#res}-3}
targetJson="["
for pid in ${@:5} ; do
if [ "$targetJson" != "[" ]; then
targetJson=$targetJson","
fi
if [ $pid != "NOID" ]; then
targetJson=$targetJson"\"$UUID$pid\""
fi
done
targetJson=$targetJson"]"
echo "TARGET JSON: $targetJson" >> $HTTPLOG
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API Test function: GET /policy_schema
# args: <response-code> <policy-type-id> [<schema-file>]
# (Function for test scripts)
api_get_policy_schema() {
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-type-id> [<schema-file>]" $@
return 1
fi
query="/policy_schema?id=$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
if [ $# -eq 3 ]; then
body=${res:0:${#res}-3}
targetJson=$(< $3)
echo "TARGET JSON: $targetJson" >> $HTTPLOG
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API Test function: GET /policy_schemas
# args: <response-code> <ric-id>|NORIC [<schema-file>|NOFILE]*
# (Function for test scripts)
api_get_policy_schemas() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -lt 2 ]; then
__print_err "<response-code> <ric-id>|NORIC [<schema-file>|NOFILE]*" $@
return 1
fi
query="/policy_schemas"
if [ $2 != "NORIC" ]; then
query=$query"?ric="$2
fi
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
if [ $# -gt 2 ]; then
body=${res:0:${#res}-3}
targetJson="["
for file in ${@:3} ; do
if [ "$targetJson" != "[" ]; then
targetJson=$targetJson","
fi
if [ $file == "NOFILE" ]; then
targetJson=$targetJson"{}"
else
targetJson=$targetJson$(< $file)
fi
done
targetJson=$targetJson"]"
echo "TARGET JSON: $targetJson" >> $HTTPLOG
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API Test function: GET /policy_status
# arg: <response-code> <policy-id> (STD <enforce-status> [<reason>])|(OSC <instance-status> <has-been-deleted>)
# (Function for test scripts)
api_get_policy_status() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -lt 4 ] || [ $# -gt 5 ]; then
__print_err "<response-code> <policy-id> (STD <enforce-status> [<reason>])|(OSC <instance-status> <has-been-deleted>)" $@
return 1
fi
targetJson=""
if [ $3 == "STD" ]; then
targetJson="{\"enforceStatus\":\"$4\""
if [ $# -eq 5 ]; then
targetJson=$targetJson",\"reason\":\"$5\""
fi
targetJson=$targetJson"}"
elif [ $3 == "OSC" ]; then
targetJson="{\"instance_status\":\"$4\""
if [ $# -eq 5 ]; then
targetJson=$targetJson",\"has_been_deleted\":\"$5\""
fi
targetJson=$targetJson",\"created_at\":\"????\"}"
else
__print_err "<response-code> (STD <enforce-status> [<reason>])|(OSC <instance-status> <has-been-deleted>)" $@
return 1
fi
query="/policy_status?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
echo "TARGET JSON: $targetJson" >> $HTTPLOG
body=${res:0:${#res}-3}
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API Test function: GET /policy_types
# args: <response-code> [<ric-id>|NORIC [<policy-type-id>|EMPTY [<policy-type-id>]*]]
# (Function for test scripts)
api_get_policy_types() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -lt 1 ]; then
__print_err "<response-code> [<ric-id>|NORIC [<policy-type-id>|EMPTY [<policy-type-id>]*]]" $@
return 1
fi
if [ $# -eq 1 ]; then
query="/policy_types"
elif [ $2 == "NORIC" ]; then
query="/policy_types"
else
query="/policy_types?ric=$2"
fi
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
if [ $# -gt 2 ]; then
body=${res:0:${#res}-3}
targetJson="["
for pid in ${@:3} ; do
if [ "$targetJson" != "[" ]; then
targetJson=$targetJson","
fi
if [ $pid == "EMPTY" ]; then
pid=""
fi
targetJson=$targetJson"\"$pid\""
done
targetJson=$targetJson"]"
echo "TARGET JSON: $targetJson" >> $HTTPLOG
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
#########################################################
#### Test case functions Health check
#########################################################
# API Test function: GET /status
# args: <response-code>
# (Function for test scripts)
api_get_status() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -ne 1 ]; then
__print_err "<response-code>" $@
return 1
fi
query="/status"
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
#########################################################
#### Test case functions RIC Repository
#########################################################
# API Test function: GET /ric
# args: <reponse-code> <management-element-id> [<ric-id>]
# (Function for test scripts)
api_get_ric() {
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 "<reponse-code> <management-element-id> [<ric-id>]" $@
return 1
fi
query="/ric?managedElementId="$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
if [ $# -eq 3 ]; then
body=${res:0:${#res}-3}
if [ "$body" != "$3" ]; then
echo -e $RED" FAIL, returned body not correct"$ERED
((RES_FAIL++))
__check_stop_at_error
return 1
fi
fi
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API test function: GET /rics
# args: <reponse-code> <policy-type-id>|NOTYPE [<space-separate-string-of-ricinfo>]
# example of <space-separate-string-of-ricinfo> = "ricsim_g1_1:me1_ricsim_g1_1,me2_ricsim_g1_1:1,2,4 ricsim_g1_1:me2_........."
# format of ric-info: <ric-id>:<list-of-mes>:<list-of-policy-type-ids>
# (Function for test scripts)
api_get_rics() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -lt 2 ]; then
__print_err "<reponse-code> <policy-type-id>|NOTYPE [<space-separate-string-of-ricinfo>]" $@
return 1
fi
query="/rics"
if [ $2 != "NOTYPE" ]; then
query="/rics?policyType="$2
fi
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
if [ $# -gt 2 ]; then
body=${res:0:${#res}-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=$(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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
##################################################################
#### API Test case functions Service registry and supervision ####
##################################################################
# API test function: PUT /service
# args: <response-code> <service-name> <keepalive-timeout> <callbackurl>
# (Function for test scripts)
api_put_service() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -ne 4 ]; then
__print_err "<response-code> <service-name> <keepalive-timeout> <callbackurl>" $@
return 1
fi
query="/service"
json="{\"callbackUrl\": \""$4"\",\"keepAliveIntervalSeconds\": \""$3"\",\"serviceName\": \""$2"\"}"
file=".tmp.json"
echo "$json" > $file
res="$(__do_curl_to_agent PUT $query $file)"
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API test function: GET /services
#args: <response-code> [ (<query-service-name> <target-service-name> <keepalive-timeout> <callbackurl>) | (NOSERVICE <target-service-name> <keepalive-timeout> <callbackurl> [<target-service-name> <keepalive-timeout> <callbackurl>]* )]
# (Function for test scripts)
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
paramError=0
elif [ $# -eq 2 ] && [ $2 != "NOSERVICE" ]; then
paramError=0
elif [ $# -eq 5 ]; then
paramError=0
elif [ $# -gt 5 ] && [ $2 == "NOSERVICE" ]; then
argLen=$(($#-2))
if [ $(($argLen%3)) -eq 0 ]; then
paramError=0
fi
fi
if [ $paramError -ne 0 ]; then
__print_err "<response-code> [ (<query-service-name> <target-service-name> <keepalive-timeout> <callbackurl>) | (NOSERVICE <target-service-name> <keepalive-timeout> <callbackurl> [<target-service-name> <keepalive-timeout> <callbackurl>]* )]" $@
return 1
fi
query="/services"
if [ $# -gt 1 ] && [ $2 != "NOSERVICE" ]; then
query="/services?name="$2
fi
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
if [ $# -gt 2 ]; then
variableArgCount=$(($#-2))
body=${res:0:${#res}-3}
targetJson="["
shift; shift;
cntr=0
while [ $cntr -lt $variableArgCount ]; do
servicename=$1; shift;
timeout=$1; shift;
callback=$1; shift;
if [ $cntr -gt 0 ]; then
targetJson=$targetJson","
fi
# timeSinceLastActivitySeconds value cannot be checked since value varies
targetJson=$targetJson"{\"serviceName\": \""$servicename"\",\"keepAliveIntervalSeconds\": "$timeout",\"timeSinceLastActivitySeconds\":\"????\",\"callbackUrl\": \""$callback"\"}"
let cntr=cntr+3
done
targetJson=$targetJson"]"
echo "TARGET JSON: $targetJson" >> $HTTPLOG
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API test function: GET /services (only checking service names)
# args: <response-code> [<service-name>]*"
# (Function for test scripts)
api_get_service_ids() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -lt 1 ]; then
__print_err "<response-code> [<service-name>]*" $@
return 1
fi
query="/services"
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
body=${res:0:${#res}-3}
targetJson="["
for rapp in ${@:2} ; do
if [ "$targetJson" != "[" ]; then
targetJson=$targetJson","
fi
targetJson=$targetJson"{\"callbackUrl\":\"????\",\"keepAliveIntervalSeconds\":\"????\",\"serviceName\":\""$rapp"\",\"timeSinceLastActivitySeconds\":\"????\"}"
done
targetJson=$targetJson"]"
echo "TARGET JSON: $targetJson" >> $HTTPLOG
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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API test function: DELETE /services
# args: <response-code> <service-name>
# (Function for test scripts)
api_delete_services() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -ne 2 ]; then
__print_err "<response-code> <service-name>" $@
return 1
fi
query="/services?name="$2
res="$(__do_curl_to_agent DELETE $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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}
# API test function: PUT /services/keepalive
# args: <response-code> <service-name>
# (Function for test scripts)
api_put_services_keepalive() {
echo -e $BOLD"TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ $EBOLD
echo "TEST(${BASH_LINENO[0]}): ${FUNCNAME[0]}" $@ >> $HTTPLOG
((RES_TEST++))
if [ $# -ne 2 ]; then
__print_err "<response-code> <service-name>" $@
return 1
fi
query="/services/keepalive?name="$2
res="$(__do_curl_to_agent PUT $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
((RES_PASS++))
echo -e $GREEN" PASS"$EGREEN
return 0
}