Fixes & improvements
[anna.git] / example / diameter / launcher / resources / scripts / clone.sh
index c84423d..747e8b0 100755 (executable)
@@ -1,4 +1,11 @@
 #!/bin/bash
+#####################################################
+####                                             ####
+##                                                 ##
+# THIS SCRIPT IS NORMALLY INTENDED FOR INTERNAL USE #
+##                                                 ##
+####                                             ####
+#####################################################
 
 #############
 # VARIABLES #
@@ -7,6 +14,7 @@ CLONE_WKDIR=$(mktemp -d)
 #MAX_NUMBER_GROUPS=400
 MAX_NUMBER_GROUPS=200
 # (depends on the machine)
+CLONE_EXTRA_VARS_SCR_BN=clone-extra-vars.sh
 
 #############
 # FUNCTIONS #
@@ -39,19 +47,18 @@ usage() {
   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 "                                  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 "                                  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 "                                  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."
@@ -95,32 +102,20 @@ clone() {
   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)
-  #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/')
-  #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 "__IPV4HEX__=$ipv4hex" >> $target
-  echo "__IPV4__=$ipv4" >> $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 #########################################
 
+  __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
@@ -166,6 +161,9 @@ N_GROUPS=$5
 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
 
@@ -202,6 +200,7 @@ timestamp_begin=$(echo "scale=3 ; $(date '+%s') + $(date '+%N') / 1000000000" |
 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))`