X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2Flauncher%2Fresources%2Fscripts%2FtinyTestcase.sh;h=01674c217cb7d75a19fb0e633eea543cf8788680;hb=8cc313630b9926900da2abdce7dff280a7fc8d6a;hp=c4f4db9191ce13f5a06ced2ba0cd279198e43ee5;hpb=77105a89de724b0bc5b4b9c9f2844cb44db1de3e;p=anna.git diff --git a/example/diameter/launcher/resources/scripts/tinyTestcase.sh b/example/diameter/launcher/resources/scripts/tinyTestcase.sh index c4f4db9..01674c2 100755 --- a/example/diameter/launcher/resources/scripts/tinyTestcase.sh +++ b/example/diameter/launcher/resources/scripts/tinyTestcase.sh @@ -6,6 +6,8 @@ SCR_DIR=`readlink -f $0 | xargs dirname` TESTCASE_BN=testcase.txt WHAT=????????? +REQUEST_STEP= +VARIANT__dflt=safe ############# # FUNCTIONS # @@ -19,12 +21,12 @@ _exit() { usage() { echo - echo "Usage: $0 [seconds_timeout]" + echo "Usage: $0 [variant: fast|[safe]]" echo echo " source_directory:" echo " The source directory may contain .xml and .metadata files grouped by pairs and alphabetically classified," echo " and also (and this is VERY IMPORTANT), a file called 'origin-hosts' containing a list of Origin-Host" - echo " values that are used from the point of view of the ADML testing system, together with the type of the" + echo " values that represents the point of view of the ADML testing system, together with the type of the" echo " simulated ADML node (client/server):" echo echo " .hex.as.xml: ANNA-Diameter XML message format." @@ -51,8 +53,13 @@ usage() { 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 @@ -69,11 +76,58 @@ usage() { _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 " 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 () { @@ -92,8 +146,10 @@ update_testcase () { local adml_type=$4 local wait_command=waitfe + # wait xml variant: + local waitxml_command=waitfe-xml local send_command=sendxml2e - [ "$adml_type" = "server" ] && { wait_command=waitfc ; send_command=sendxml2c ; } + [ "$adml_type" = "server" ] && { wait_command=waitfc ; waitxml_command=waitfc-xml ; send_command=sendxml2c ; } # Ignore disconnect peer messages on testcase format (they have no session-id): @@ -106,11 +162,30 @@ update_testcase () { local lines=$(wc -l $TESTCASE_BN | awk '{ print $1 }') local s_wait="test|1|$wait_command|$code|$((1-isrequest))" + # wait xml variant: + 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" + if [ $isrequest -eq 1 ] then - echo "test|1|$send_command|$xml" >> $TESTCASE_BN + # Send the request + # Special case for SNR/SNA (code=8388636) and STR (code=275) going to SAPC: the Session-Id is created on client and received on SLR previously + if [ "$adml_type" = "server" ] + then + if [ "$code" = "8388636" -o "$code" = "275" ] + then + s_send="test|1|$send_command|$xml|$REQUEST_STEP" + s_wait="test|1|$wait_command|$code|0|||" + fi + fi + + echo "$s_send" >> $TESTCASE_BN + if [ -n "$resultcode" ] then local hbh="$(grep -o "hop-by-hop-id=\"[0-9]*\"" $xml)" @@ -122,12 +197,43 @@ update_testcase () { _rc=$(getResultCode $ans_xml) [ -n "$_rc" ] && rc=$_rc fi + + # Wait the answer: s_wait="${s_wait}|${rc}" fi - echo "$s_wait" >> $TESTCASE_BN + + # Wait step: + if [ "$VARIANT" = "fast" ] + then + echo "$s_wait" >> $TESTCASE_BN + else + echo "$s_waitxml" >> $TESTCASE_BN + fi + else - echo "$s_wait" >> $TESTCASE_BN - echo "test|1|$send_command|$xml|$((lines+1))" >> $TESTCASE_BN + local next_step_number=$((lines+1)) + + # Wait the request + # Special case for SLR/SLA (code=8388635) and STR (code=275) coming from SAPC: the Session-Id is created on client + if [ "$adml_type" = "server" ] + then + if [ "$code" = "8388635" -o "$code" = "275" ] + then + s_wait="test|1|$wait_command|$code|1" + REQUEST_STEP=$next_step_number + fi + fi + + # 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 fi } @@ -152,20 +258,25 @@ awk '{ print $NF }' $ohs_file | egrep -qw 'client|server' [ ${PIPESTATUS[1]} -ne 0 ] && _exit "Can't found any Origin-Host in '$ohs_file' with a valid ADML node role value (client or server) !!" # Identify useful frames: those which are created at test-bed side (all except frames coming from tested systems): -rm -f *.needed +0> .involved_frames +0> .involved_origin_hosts +n_involved_frames=0 for oh in `awk '{ print $1 }' $ohs_file` do for frame in $(grep -l "^originhost=$oh$" *.*metadata | cut -d\. -f1) do - touch ${frame}.needed + echo "$frame" >> .involved_frames + echo "$oh" >> .involved_origin_hosts + n_involved_frames=$((n_involved_frames + 1)) done done -ls *.needed >/dev/null 2>/dev/null -[ $? -ne 0 ] && _exit "No frame has been selected within '$SOURCE_DIR' for provided origin-hosts file !!" +[ $n_involved_frames -eq 0 ] && _exit "No frame has been selected within '$SOURCE_DIR' for provided origin-hosts file !!" +sort .involved_frames > .involved_frames_sort +mv .involved_frames_sort .involved_frames # Messages classification: -0> cers_4_starting -0> ceas_4_establishing +#0> cers_4_starting +#0> ceas_4_establishing 0> cers_4_starting_origin_hosts 0> ceas_4_establishing_origin_hosts 0> requests_4_sending @@ -173,11 +284,16 @@ ls *.needed >/dev/null 2>/dev/null 0> $TESTCASE_BN # Optional timeout: -TIMEOUT_SEC=$3 -[ -n "$TIMEOUT_SEC" ] && echo "test|1|timeout|$((TIMEOUT_SEC * 1000))" >> $TESTCASE_BN +TIMEOUT_SEC=$2 +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 `ls *.needed | cut -d\. -f1 | sort -n` +for frame in `cat .involved_frames` do mtd=( `ls ${frame}.*metadata 2>/dev/null` ) [ ${#mtd[@]} -ne 1 ] && _exit "There must be one metadata file corresponding to frame '$frame' !!" @@ -196,7 +312,7 @@ do grep -q "^code=257$" $mtd if [ $? -eq 0 ] then - echo $frame >> cers_4_starting + #echo $frame >> cers_4_starting [ -z "$originHost" ] && _exit "Missing Origin-Host (frame $frame, CER message) !!" echo "$originHost" >> cers_4_starting_origin_hosts ln -sf $xml cer.${originHost}.xml @@ -213,7 +329,7 @@ do grep -q "^code=257$" $mtd if [ $? -eq 0 ] then - echo $frame >> ceas_4_establishing + #echo $frame >> ceas_4_establishing originHost=$(grep ^originhost= ${frame}.metadata | cut -d= -f2-) [ -z "$originHost" ] && _exit "Missing Origin-Host (frame $frame, CEA message) !!" echo "$originHost" >> ceas_4_establishing_origin_hosts @@ -228,22 +344,15 @@ do update_testcase $mtd $xml "" $adml_type fi done -rm -f *.needed # We will replace all the requests hop-by-hop's with a unique value, to avoid bad sniffing cases (different sources using bad values). # For example, the frame number could be valid enough. hbh_ini= hbh_fin= -# involved frames: -involved_xmls= -grep "|sendxml" $TESTCASE_BN > .involved_frames -n_involved=`wc -l .involved_frames | awk '{ print $1 }'` -count=1 -for frame in `cat .involved_frames | cut -d\| -f4 | cut -d\. -f1` +for frame in `cat .involved_frames` do xml=( `ls ${frame}.*xml` ) - involved_xmls="$involved_xmls $xml" mtd=( `ls ${frame}.*metadata` ) isrequest=$(grep "isrequest=1" $mtd) if [ -n "$isrequest" ] @@ -251,15 +360,17 @@ do hbh_ini="$(grep -o "hop-by-hop-id=\"[0-9]*\"" $xml)" sed -i 's/'$hbh_ini'/hop-by-hop-id="'$frame'"/' $xml fi - count=$((count+1)) done +rm .involved_frames -# Involved origin hosts: -grep " .involved_origin_hosts -grep -w -f .involved_origin_hosts $ohs_file > .involved_origin_hosts_with_info +# Simplify origin hosts file (oh + adml role): +sort -u .involved_origin_hosts > .involved_origin_hosts_unique +grep -w -f .involved_origin_hosts_unique $ohs_file > .involved_origin_hosts_with_info +mv .involved_origin_hosts_with_info $ohs_file +rm .involved_origin_hosts .involved_origin_hosts_unique # Missing CERs: -for oh in $(awk -v input=client '{if ($2 == input) print $1;}' .involved_origin_hosts_with_info) +for oh in $(awk -v input=client '{if ($2 == input) print $1;}' $ohs_file) do cer=$SOURCE_DIR/cer.${oh}.xml if [ ! -f $cer ] @@ -267,7 +378,7 @@ do echo $oh >> cers_4_starting_origin_hosts echo "Missing CER: `basename $cer` (a basic template has been created, please edit & fix the unknowns)" cat << EOF > $cer - + @@ -282,7 +393,7 @@ EOF done # Missing CEAs: -for oh in $(awk -v input=server '{if ($2 == input) print $1;}' .involved_origin_hosts_with_info) +for oh in $(awk -v input=server '{if ($2 == input) print $1;}' $ohs_file) do cea=$SOURCE_DIR/cea.${oh}.xml if [ ! -f $cea ] @@ -290,7 +401,7 @@ do echo $oh >> ceas_4_establishing_origin_hosts echo "Missing CEA: `basename $cea` (a basic template has been created, please edit & fix the unknowns)" cat << EOF > $cea - + @@ -315,7 +426,5 @@ EOF fi done -rm -f .involved_origin_hosts .involved_origin_hosts_with_info - exit 0