--- /dev/null
+#!/bin/bash
+
+#############
+# VARIABLES #
+#############
+MAXIMUM_ADML_ASYNC_RATE=50
+MAXIMUM_SUGGESTED_CLIENT_CONNECTION_PER_ADML_INSTANCE=10
+ADML_INSTANCES__ST_CONF_FILE=.st_conf_adml_instances
+ADML_CONNECTIONS__ST_CONF_FILE=.st_conf_adml_connections
+CYCLE_REPEATS__ST_CONF_FILE=.st_conf_cycle_repeats
+N_TESTCASES__ST_CONF_FILE=.st_conf_n_testcases
+
+#############
+# FUNCTIONS #
+#############
+_exit () {
+ echo
+ echo $1
+ echo
+ exit 1
+}
+
+# ceil of division $1/$2
+ceil() {
+ echo "$1 $2" | awk '{print int( ($1/$2) + 1 )}'
+}
+
+# Calculates the number of ADML instances and their client connections
+calculate_deployment_layout() {
+ echo "Input the maximum client connections accepted by the server to be tested [5000]:"
+ read max_server_accepted_connections
+ [ "$max_server_accepted_connections" = "" ] && max_server_accepted_connections=5000
+
+ echo "Input the maximum test case rate per second:"
+ read desired_rate
+ while [ -z "$desired_rate" ]; do read desired_rate; done
+
+ max_connections=$((desired_rate/MAXIMUM_ADML_ASYNC_RATE))
+ if [ $max_connections -eq 0 ]
+ then
+ G_ADML_CONNECTIONS=1
+ G_ADML_INSTANCES=1
+ return
+ fi
+ max_adml_instances=$((max_server_accepted_connections/MAXIMUM_SUGGESTED_CLIENT_CONNECTION_PER_ADML_INSTANCE))
+ if [ $max_connections -gt $max_server_accepted_connections ]
+ then
+ echo
+ echo "Maximum rate reached for $max_server_accepted_connections server connections:"
+ G_ADML_CONNECTIONS=$MAXIMUM_SUGGESTED_CLIENT_CONNECTION_PER_ADML_INSTANCE
+ G_ADML_INSTANCES=$max_adml_instances
+ return
+ fi
+
+ echo
+ echo "==========================================================================================================="
+ echo "Orientative table"
+ echo "-----------------------------------------------------------------------------------------------------------"
+ echo -e "Connects per instance:\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10"
+ echo -n "Number of instances: "
+ for conn in `seq 1 $MAXIMUM_SUGGESTED_CLIENT_CONNECTION_PER_ADML_INSTANCE`
+ do
+ instances=$(ceil $max_connections $conn)
+ echo -n -e "\t$instances"
+ done
+ echo
+ echo "==========================================================================================================="
+ echo
+ echo "Input selection (connections per instance 1..$MAXIMUM_SUGGESTED_CLIENT_CONNECTION_PER_ADML_INSTANCE) [1]:"
+ read G_ADML_CONNECTIONS
+ [ -z "$G_ADML_CONNECTIONS" ] && G_ADML_CONNECTIONS=1
+ [ $G_ADML_CONNECTIONS -lt 1 ] && G_ADML_CONNECTIONS=1
+ [ $G_ADML_CONNECTIONS -gt $MAXIMUM_SUGGESTED_CLIENT_CONNECTION_PER_ADML_INSTANCE ] && G_ADML_CONNECTIONS=$MAXIMUM_SUGGESTED_CLIENT_CONNECTION_PER_ADML_INSTANCE
+
+ G_ADML_INSTANCES=$((max_connections/G_ADML_CONNECTIONS))
+}
+
+#############
+# EXECUTION #
+#############
+
+cd `dirname $0`
+
+echo
+echo "====================================="
+echo "ADML SYSTEM TEST CONFIGURATION WIZARD"
+echo "====================================="
+echo
+
+calculate_deployment_layout
+
+# Dump persintently:
+echo $G_ADML_INSTANCES > $ADML_INSTANCES__ST_CONF_FILE
+echo $G_ADML_CONNECTIONS > $ADML_CONNECTIONS__ST_CONF_FILE
+
+echo
+echo "Suggested layout:"
+echo " - $G_ADML_INSTANCES ADML instances"
+echo " - $G_ADML_CONNECTIONS client connections per ADML instance"
+maximum_rate=$((G_ADML_INSTANCES*G_ADML_CONNECTIONS*MAXIMUM_ADML_ASYNC_RATE))
+echo " - Maximum rate: $maximum_rate test cases per second"
+echo
+echo "Usually, you will program a test case per subscriber. Input the number of test cases to program:"
+read N_TESTCASES
+while [ -z "$N_TESTCASES" ]; do read N_TESTCASES; done
+echo $N_TESTCASES > $N_TESTCASES__ST_CONF_FILE
+echo
+time_covered_1=$(ceil $N_TESTCASES $maximum_rate)
+time_covered=$(ceil $N_TESTCASES $((maximum_rate*G_ADML_INSTANCES)))
+echo "That amount covers $time_covered_1 seconds for one running ADML instance."
+if [ $G_ADML_INSTANCES -gt 1 ]
+then
+ echo "But you will have $G_ADML_INSTANCES instances running in parallel, then the total covered time is: $time_covered seconds"
+ testcase_per_adml_instance=$(ceil $N_TESTCASES $G_ADML_INSTANCES)
+ echo "(aproximately, $testcase_per_adml_instance test cases will be programmed on each ADML instance)"
+fi
+
+echo
+if [ $time_covered -lt 300 ]
+then
+ echo "$time_covered seconds is under 5 minutes, you should add more test cases to the pool except if you are sure"
+ echo " they will take less time that cycle completion. You could ensure that with a first timeout step."
+ echo "Configuring such timeout slightly under $((1000*time_covered)) milliseconds, you could repeat the cycle safely to"
+ echo " obtain a greater total time of testing."
+fi
+echo
+echo "How many total time do you want to cover (in minutes):"
+read minutes
+while [ -z "$minutes" ]; do read minutes; done
+seconds=$((minutes*60))
+repeats=$(ceil $seconds $time_covered)
+echo $repeats > $CYCLE_REPEATS__ST_CONF_FILE
+[ $repeats -gt 0 ] && echo "Configured $repeats cycle repeats ($repeats x $time_covered seconds = $seconds seconds (desired $minutes minutes)"
+echo
+echo "System test configuration completed."
+echo
+echo "Ready to clone/start the ADML instances: press ENTER to continue, CTRL+C to abort ..."
+read dummy
+[ ! -d realms ] && _exit "Missing realms configuration (expecting '$PWD/realms' directory). Try with 'realms.example' and see README inside it !"
+
+# Update services.xml regarding the number of client connections:
+cp realms/services.msk realms/services.xml
+sed -i 's/__CLIENT_CONNECTIONS__/'$G_ADML_CONNECTIONS'/g' realms/services.xml
+
+rm -rf ADMLS
+for instance in `seq 1 $G_ADML_INSTANCES`
+do
+ mkdir -p ADMLS/$instance
+ cd ADMLS/$instance
+ # Create resources:
+ ln -s ../../ADML-launcher
+ ln -s ../../operation.sh
+ ln -s ../../realms/services.xml
+ for cer in `ls ../../realms/cer*xml`; do ln -s $cer; done
+ cd - >/dev/null
+done
+