#!/bin/bash
+#####################################################
+#### ####
+## ##
+# THIS SCRIPT IS NORMALLY INTENDED FOR INTERNAL USE #
+## ##
+#### ####
+#####################################################
#############
# VARIABLES #
#############
CLONE_WKDIR=$(mktemp -d)
-MAX_NUMBER_GROUPS=400
+#MAX_NUMBER_GROUPS=400
+MAX_NUMBER_GROUPS=200
# (depends on the machine)
+CLONE_EXTRA_VARS_SCR_BN=clone-extra-vars.sh
#############
# FUNCTIONS #
#############
_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
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 " 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 " Edit the variables section to add more special values if you need them."
+ echo
+ echo " Currently, 4 variables are supported to be replaced:"
+ 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 " Optionally (when exists), a user defined file '$CLONE_EXTRA_VARS_SCR_BN' is sourced to extend the parseable"
+ echo " variables used within the test case stuff (this script must be placed on that directory). The script"
+ echo " will be called with the sequence number as argument during clone procedure, and shall define the needed"
+ echo " variable values referenced in the parsed files. The variables must be named as '__<name>__' which ensures"
+ echo " that main clone script environment is not contaminated."
echo
echo " initial sequence: initial sequence number to parse over variables."
echo " final sequence: final sequence number to parse over variables."
local wkdir=$2
mkdir -p $wkdir
- ############################################# SPECIAL VARIABLES SECTION #############################################
- ################################ EDIT THIS SECTION IF YOU NEED NEW SPECIAL VARIABLES ################################
+ ############################################# VARIABLES SECTION #############################################
testid=$sequence
seq8=$(printf "%08d" $testid)
- msisdn9=6${seq8}
ipv4hex=$seq8
- #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
-
- 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
- source $target
- #rm $target
- ######################################### END SPECIAL VARIABLES SECTION #########################################
+ __TESTID__=$testid
+ __SEQ8__=$seq8
+ __IPV4HEX__=$ipv4hex
+ __IPV4__=$ipv4
+ [ -n "$extra_vars" ] && source $CLONE_EXTRA_VARS_SCR_FILE $sequence
+ ######################################### END VARIABLES SECTION #########################################
# Parse template files:
parse_file $sequence $TESTCASE_TEMPLATE $wkdir/testcase.txt.$sequence
rm $wkdir/testcase.txt.$sequence
# Population:
- if [ -n "$POPULATION_FILE" ]
+ if [ -n "$POPULATION" ]
then
parse_file $sequence $POPULATION_FILE $CLONE_WKDIR/${POPULATION}.$sequence
cat $CLONE_WKDIR/${POPULATION}.$sequence >> $POPULATION_ALL
POPULATION=$6
POPULATION_FILE=$TESTCASE_TEMPLATE_DIR/$POPULATION
POPULATION_ALL=$TESTCASE_TEMPLATE_DIR/${POPULATION}.all
+CLONE_EXTRA_VARS_SCR_FILE=$TESTCASE_TEMPLATE_DIR/$CLONE_EXTRA_VARS_SCR_BN
+extra_vars=
+[ -f $CLONE_EXTRA_VARS_SCR_FILE ] && extra_vars=yes
[ "$4" = "" ] && usage
fi
N_ITEMS=$((CLONE_SEQ_END - CLONE_SEQ_BEGIN + 1))
+[ "$N_ITEMS" -lt 1 ] && _exit "Initial sequence ($CLONE_SEQ_BEGIN) provided must be under final sequence value ($CLONE_SEQ_END) !!"
+[ "$CLONE_SEQ_END" -gt "99999999" ] && echo "Warning: some sequence value in range provided overflows __SEQ8__ and derived variables (__IPV4__ and __IPV4HEX__). Be care about using them ..."
+
if [ -z "$N_GROUPS" ]
then
N_GROUPS=$((N_ITEMS/25))
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
children_before=$(children)
offset=0
$OPERATION "test|clear"
+[ $? -ne 0 ] && _exit "Clone aborted: failed to clean tests !"
echo "Please be patient, this may take a while ..."
#echo "Temporary directory: $CLONE_WKDIR"
for group in `seq 1 $((N_GROUPS+1))`
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