New st-client deployment. Allow to load same stack id (accumulative services), ignori...
[anna.git] / example / diameter / launcher / deployments / st-client / configure.sh
diff --git a/example/diameter/launcher/deployments/st-client/configure.sh b/example/diameter/launcher/deployments/st-client/configure.sh
new file mode 100755 (executable)
index 0000000..383c21a
--- /dev/null
@@ -0,0 +1,157 @@
+#!/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
+