TESTCASE_BN=testcase.txt
WHAT=?????????
REQUEST_STEP=
+VARIANT__dflt=safe
#############
# FUNCTIONS #
usage() {
echo
- echo "Usage: $0 <source_directory> [seconds_timeout]"
+ echo "Usage: $0 <source_directory> <seconds_timeout> [variant: fast|[safe]]"
echo
echo " source_directory:"
echo " The source directory may contain .xml and .metadata files grouped by pairs and alphabetically classified,"
echo " messages and metadata for each pcap diameter frame."
echo
echo
+ echo " variant:"
+ echo " Two variants are implemented: 'fast', where wait conditions does not check the complete message, and"
+ echo " 'safe' which checks the full xml message content (good for function test). Default is '$VARIANT__dflt'."
+ echo
+ echo
echo " seconds_timeout:"
- echo " Timeout in seconds for the testcase. If not provided, no timeout will be programmed for the testcase."
+ echo " Timeout in seconds for the testcase. If '-' provided, no timeout will be programmed for the testcase."
echo
echo
echo
_exit
}
+# Check number:
+isnumber() {
+ local re='^[0-9]+$'
+ [[ "$1" =~ $re ]] && return 0
+ return 1
+}
+
# $1: xml file
# Nested Result-Code's not supported here (i.e. charging application)
getResultCode () {
grep "<avp name=\"Result-Code\"" $1 | awk -F'data=' '{ print $2 }' | cut -d\" -f2
}
+
+# $1: code; $2: isrequest; $3: frame to start searching: direction depends on isrequest (1: downwards, 0: upwards)
+search_xml () {
+ local code=$1
+ local isrequest=$2
+ local this_frame=$3
+ local frames=()
+
+ if [ $isrequest -eq 1 ]
+ then
+ # requests shall be before frame
+ frames=( $(ls *.*metadata | cut -d\. -f1 | sort -rn | awk -v frame=$this_frame '{ if($1 < frame) print $1 }') )
+ else
+ # answers shall be after frame
+ frames=( $(ls *.*metadata | cut -d\. -f1 | sort -n | awk -v frame=$this_frame '{ if($1 > frame) print $1 }') )
+ fi
+
+ local frame=
+ local mtd=
+ local found=
+ local _code=
+ local _isrequest=
+ for frame in ${frames[@]}
+ do
+ mtd=${frame}.metadata
+ [ ! -f $mtd ] && _exit "Unexpected error: can't found '$mtd' file !!"
+
+ _code=$(grep ^code $mtd | cut -d= -f2)
+ _isrequest=$(grep ^isrequest $mtd | cut -d= -f2)
+
+ [ $_code -ne $code -o $_isrequest -ne $isrequest ] && continue
+
+ found="$(ls ${frame}.*.xml 2>/dev/null)"
+ [ -z "$found" ] && _exit "Unexpected error: can't found xml file for frame '${frame}' file !!"
+ echo $found
+ return 0
+ done
+
+ return 1
+}
# $1: metadata file; $2: xml file; $3: check Result-Code indicator; $4: client/server (ADML node role)
update_testcase () {
local s_wait="test|1|$wait_command|$code|$((1-isrequest))"
# wait xml variant:
- local s_waitxml="test|1|$waitxml_command|$xml"
+ local this_frame=$(echo $xml | cut -d\. -f1)
+ local pairxml=$(search_xml $code $((1-isrequest)) $this_frame)
+ local s_waitxml="test|1|$waitxml_command|$pairxml"
+
[ -n "$sessionid" ] && s_wait="${s_wait}|||${sessionid}"
local s_send="test|1|$send_command|$xml"
# Wait the answer:
s_wait="${s_wait}|${rc}"
fi
- echo "$s_waitxml" >> $TESTCASE_BN
- echo "#$s_wait" >> $TESTCASE_BN
+
+ # Wait step:
+ if [ "$VARIANT" = "fast" ]
+ then
+ echo "$s_wait" >> $TESTCASE_BN
+ else
+ echo "$s_waitxml" >> $TESTCASE_BN
+ fi
+
else
local next_step_number=$((lines+1))
REQUEST_STEP=$next_step_number
fi
fi
- echo "$s_wait" >> $TESTCASE_BN
+
+ # Wait step:
+ if [ "$VARIANT" = "fast" ]
+ then
+ echo "$s_wait" >> $TESTCASE_BN
+ else
+ echo "$s_waitxml" >> $TESTCASE_BN
+ fi
# Send the answer
echo "test|1|$send_command|$xml|$next_step_number" >> $TESTCASE_BN
# Optional timeout:
TIMEOUT_SEC=$2
-[ -n "$TIMEOUT_SEC" ] && echo "test|1|timeout|$((TIMEOUT_SEC * 1000))" >> $TESTCASE_BN
+isnumber $TIMEOUT_SEC
+[ $? -eq 0 ] && echo "test|1|timeout|$((TIMEOUT_SEC * 1000))" >> $TESTCASE_BN
+
+# Variant:
+VARIANT=$VARIANT__dflt
+[ "$3" = "fast" ] && VARIANT=fast
# Process frames:
for frame in `cat .involved_frames`