# VARIABLES #
#############
CLONE_WKDIR=$(mktemp -d)
-MAX_NUMBER_GROUPS=400
+#MAX_NUMBER_GROUPS=400
+MAX_NUMBER_GROUPS=200
# (depends on the machine)
#############
#############
_exit (){
echo
- echo $1
+ echo -e $1
echo
+ # Background jobs:
+ #remaining_jobs=$(jobs -p)
+ (kill -9 $(jobs -p) 2>&1) >/dev/null
+
# Cleanup:
rm -rf $CLONE_WKDIR
}
usage() {
- echo "Usage: $0 <ADML directory> <testcase variable file> <initial sequence> <final sequence> [number of groups]"
+ echo "Usage: $0 <ADML directory> <testcase variable file> <initial sequence> <final sequence> [number of groups] [population]"
echo
echo " ADML directory: path to the ADML directory where 'operation.sh' script is used to load the test cases."
echo " testcase variable file: path to the testcase file with parseable variables, for example '<directory>/testcase.txt.msk'."
echo " xml files within this test case, must exist with aditional .msk extension in the same directory."
+ echo
echo " Currently, 9 variables are supported to be replaced:"
- echo " __TESTID__ : sequence number. For example if you provide 1 to 20 for this script, it will be 1 .. 20"
- echo " __SEQ8__ : 8-digit number corresponding to the sequence number (00000001 for 1, and so on)"
- echo " __MSISDN9__: 9-digit msisdn"
- echo " __IPV4HEX__: hexadecimal IPv4 address, for example: 00000001"
- echo " __IPV4__ : IPv4 address, for example: 0.0.0.1"
- echo " __SGX1_SUFFIX__: 1<8-digit sequence>"
- echo " __SRX1_SUFFIX__: \""
- echo " __SGX2_SUFFIX__: 2<8-digit sequence>"
- echo " __SRX2_SUFFIX__: \""
+ echo
+ echo " * __TESTID__ : sequence number. For example if you provide 1 to 20 for this script, it will be 1 .. 20"
+ echo " * __SEQ8__ : 8-digit number corresponding to the sequence number (00000001 for 1, and so on)"
+ echo " * __IPV4HEX__ : hexadecimal IPv4 address, for example: 00000001"
+ echo " * __IPV4__ : IPv4 address, for example: 0.0.0.1"
+ echo
+ #echo " One variant (former ones plus 1):"
+ #echo " __SEQ8P1__ : 8-digit number corresponding to the sequence number (00000002 for 1, and so on)"
+ #echo " __IPV4HEXP1__: hexadecimal IPv4 address, for example: 00000002"
+ #echo " __IPV4P1__ : IPv4 address, for example: 0.0.0.2"
+ #echo
+ echo " Edit the variables section to add more special values if you need them."
echo
echo " initial sequence: initial sequence number to parse over variables."
echo " final sequence: final sequence number to parse over variables."
echo " number of groups: number of background group jobs to clone the provided sequence range."
- echo " By default, it will be the number of items divided by 25, with a maximum of $MAX_NUMBER_GROUPS."
- echo
- echo
+ echo " By default (or if you provide \"\"), it will be the number of items divided by 25, with a maximum"
+ echo " of $MAX_NUMBER_GROUPS."
+ echo " population: Optionally, a population file (basename) can be provided. It must exist on the same directory"
+ echo " than other stuff (testcase, xml files). The behaviour will be the accumulation of every parsing"
+ echo " operation during clone procedure regarding the templated content of the population file. The"
+ echo " accumulated content will be dump over a new file created together with cloned <population> and"
+ echo " named with the extension '.all' (<population>.all). This population file could be useful to"
+ echo " specify database commands related to each sequence (each single testcase), in order to have"
+ echo " the whole population file. This won't include common database elements for the tested scenary,"
+ echo " which shall be provisioned in a separated procedure."
+ echo
_exit
}
local wkdir=$2
mkdir -p $wkdir
- # Values:
+ ############################################# SPECIAL VARIABLES SECTION #############################################
+ ################################ EDIT THIS SECTION IF YOU NEED NEW SPECIAL VARIABLES ################################
testid=$sequence
seq8=$(printf "%08d" $testid)
- msisdn9=6${seq8}
+ #seq8_p1=$((seq8+1))
ipv4hex=$seq8
+ #ipv4hex_p1=$seq8_p1
#ipv4=$(for i in $(echo $seq8 | sed 's/\(..\)/0x\1 /g'); do printf "%d." $i; done | sed 's/\.$/\n/')
# Numbers beginning with "0" are treated as octal (i.e. base-8): we would have 'invalid octal number with 08 and 09'
# Solution: convert to base-10 in this way: $((10#$i))
ipv4=$(for i in $(echo $seq8 | sed 's/\(..\)/ \1 /g'); do printf "%d." $((10#$i)); done | sed 's/\.$/\n/')
- # Sessions
- sgx1_suffix=1$seq8
- srx1_suffix=1$seq8
- sgx2_suffix=2$seq8
- srx2_suffix=2$seq8
+ #ipv4_p1=$(for i in $(echo $seq8_p1 | sed 's/\(..\)/ \1 /g'); do printf "%d." $((10#$i)); done | sed 's/\.$/\n/')
local target=$wkdir/values.${1}
echo "__TESTID__=$testid" > $target
echo "__SEQ8__=$seq8" >> $target
- echo "__MSISDN9__=$msisdn9" >> $target
echo "__IPV4HEX__=$ipv4hex" >> $target
echo "__IPV4__=$ipv4" >> $target
- echo "__SGX1_SUFFIX__=$sgx1_suffix" >> $target
- echo "__SRX1_SUFFIX__=$srx1_suffix" >> $target
- echo "__SGX2_SUFFIX__=$sgx2_suffix" >> $target
- echo "__SRX2_SUFFIX__=$srx2_suffix" >> $target
+ ## First variant:
+ #echo "__SEQ8P1__=$seq8_p1" >> $target
+ #echo "__IPV4HEXP1__=$ipv4hex_p1" >> $target
+ #echo "__IPV4P1__=$ipv4_p1" >> $target
source $target
#rm $target
+ ######################################### END SPECIAL VARIABLES SECTION #########################################
+
# Parse template files:
parse_file $sequence $TESTCASE_TEMPLATE $wkdir/testcase.txt.$sequence
done
cat $wkdir/testcase.txt.$sequence >> $wkdir/testcase.txt
rm $wkdir/testcase.txt.$sequence
+
+ # Population:
+ if [ -n "$POPULATION" ]
+ then
+ parse_file $sequence $POPULATION_FILE $CLONE_WKDIR/${POPULATION}.$sequence
+ cat $CLONE_WKDIR/${POPULATION}.$sequence >> $POPULATION_ALL
+ fi
}
# $1: group number; $2: initial subrange value; $3: final subrange value
for i in `seq $2 $3`
do
clone $i $CLONE_WKDIR/$1
- #sleep 0.01
+ sleep 0.01
done
}
ADML_DIR=$1
TESTCASE_TEMPLATE=`readlink -f $2`
+TESTCASE_TEMPLATE_DIR=`dirname $TESTCASE_TEMPLATE`
CLONE_SEQ_BEGIN=$3
CLONE_SEQ_END=$4
N_GROUPS=$5
+POPULATION=$6
+POPULATION_FILE=$TESTCASE_TEMPLATE_DIR/$POPULATION
+POPULATION_ALL=$TESTCASE_TEMPLATE_DIR/${POPULATION}.all
[ "$4" = "" ] && usage
[ ! -f $OPERATION ] && _exit "Missing '$OPERATION' file !!"
[ ! -f $TESTCASE_TEMPLATE ] && _exit "Missing '$TESTCASE_TEMPLATE' testcase template file !!"
-TESTCASE_TEMPLATE_DIR=`dirname $TESTCASE_TEMPLATE`
+if [ -n "$POPULATION" ]
+then
+ bn_population=`basename $POPULATION`
+ [ "$bn_population" != "$POPULATION" ] && _exit "Only basename is allowed for population provided !!"
+ [ ! -f $POPULATION_FILE ] && _exit "Missing provided population file '$POPULATION_FILE' !!"
+ 0> $POPULATION_ALL
+fi
+
N_ITEMS=$((CLONE_SEQ_END - CLONE_SEQ_BEGIN + 1))
if [ -z "$N_GROUPS" ]
then
GROUPS_SIZE=$((N_ITEMS/N_GROUPS))
if [ "$GROUPS_SIZE" -eq 0 ]
then
- echo "Assuming minimum allowed number of groups: $N_ITEMS"
+ echo "Assuming minimum allowed number of groups (one group per item): $N_ITEMS"
GROUPS_SIZE=1
N_GROUPS=$N_ITEMS
fi
timestamp_begin=$(echo "scale=3 ; $(date '+%s') + $(date '+%N') / 1000000000" | bc)
children_before=$(children)
offset=0
-echo "Please be patient, this may take a while ..."
$OPERATION "test|clear"
+echo "Please be patient, this may take a while ..."
+#echo "Temporary directory: $CLONE_WKDIR"
for group in `seq 1 $((N_GROUPS+1))`
do
n_begin=$((CLONE_SEQ_BEGIN + offset))
clone_group $group $n_begin $n_end &
offset=$((group * GROUPS_SIZE))
done
-children_now=$(children)
# Wait background jobs to finish:
while true
echo -n .
r_file=`readlink -f $file`
dn_r_file=`dirname $r_file`
- #bn_dn_r_file=`basename $dn_r_file`
- #echo "Programming group $bn_dn_r_file ..."
- $OPERATION -f $r_file >/dev/null
- #$OPERATION -f $r_file > $dn_r_file/result.txt
+ $OPERATION -t 300 -f $r_file > $dn_r_file/result.txt
+ res=$?
+ if [ $res -ne 0 ]
+ then
+ bn_dn_r_file=`basename $dn_r_file`
+ exception_dir=$ADML_DIR/exception_stuff_${bn_dn_r_file}
+ rm -rf $exception_dir
+ cp -r $dn_r_file $exception_dir
+ cp $ADML_DIR/launcher.trace $exception_dir
+ _exit "Exception detected programming a testcase. Check for '$exception_dir'"
+ fi
rm -rf $dn_r_file &
done