117 lines
3.3 KiB
Bash
Executable file
117 lines
3.3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
BASEDIR=$(cd "$(dirname "$0")"; pwd)
|
|
cd $BASEDIR
|
|
|
|
. ./stress-test-config.sh
|
|
|
|
MVN=${MVN:-mvn}
|
|
PROVISIONING_PARAMETERS=${PROVISIONING_PARAMETERS:-}
|
|
PROVISION_COMMAND="$MVN verify -P provision,import-dump $PROVISIONING_PARAMETERS -Ddataset=$dataset"
|
|
TEARDOWN_COMMAND="$MVN verify -P teardown"
|
|
|
|
function runCommand {
|
|
echo " $1"
|
|
echo
|
|
if ! $debug; then eval "$1"; fi
|
|
}
|
|
|
|
function runTest {
|
|
|
|
# use specified warmUpPeriod only in the first iteration, or if provisioning is enabled
|
|
if [[ $i == 0 || $provisioning == true ]]; then
|
|
warmUpParameter="-DwarmUpPeriod=$warmUpPeriod ";
|
|
else
|
|
warmUpParameter="-DwarmUpPeriod=0 ";
|
|
fi
|
|
if [[ $sequentialUsersFrom == -1 || $provisioning == true ]]; then
|
|
sequentialUsers=$sequentialUsersFrom
|
|
else
|
|
sequentialUsers=`echo "$sequentialUsersFrom * ( $i + 1 )" | bc`
|
|
fi
|
|
|
|
TEST_COMMAND="$MVN verify -Ptest $@ -Ddataset=$dataset $warmUpParameter -DfilterResults=true -DsequentialUsersFrom=$sequentialUsers -DusersPerSec=$usersPerSec"
|
|
|
|
echo "ITERATION: $(( i+1 )) / $maxIterations $ITERATION_INFO"
|
|
echo
|
|
|
|
if $provisioning; then
|
|
runCommand "$PROVISION_COMMAND"
|
|
if [[ $? != 0 ]]; then
|
|
echo "Provisioning failed."
|
|
runCommand "$TEARDOWN_COMMAND" || break
|
|
break
|
|
fi
|
|
runCommand "$TEST_COMMAND"
|
|
export testResult=$?
|
|
runCommand "$TEARDOWN_COMMAND" || exit 1
|
|
else
|
|
runCommand "$TEST_COMMAND"
|
|
export testResult=$?
|
|
fi
|
|
|
|
[[ $testResult != 0 ]] && echo "Test exit code: $testResult"
|
|
|
|
}
|
|
|
|
|
|
|
|
echo "Starting ${algorithm} stress test"
|
|
echo
|
|
|
|
usersPerSecTop=0
|
|
|
|
case "${algorithm}" in
|
|
|
|
incremental)
|
|
|
|
for (( i=0; i < $maxIterations; i++)); do
|
|
|
|
usersPerSec=`echo "$usersPerSec0 + $i * $incrementFactor" | bc`
|
|
|
|
runTest $@
|
|
|
|
if [[ $testResult == 0 ]]; then
|
|
usersPerSecTop=$usersPerSec
|
|
else
|
|
echo "INFO: Last iteration failed. Stopping the loop."
|
|
break
|
|
fi
|
|
|
|
done
|
|
|
|
;;
|
|
|
|
bisection)
|
|
|
|
for (( i=0; i < $maxIterations; i++)); do
|
|
|
|
intervalSize=`echo "$highPoint - $lowPoint" | bc`
|
|
usersPerSec=`echo "$lowPoint + $intervalSize * 0.5" | bc`
|
|
if [[ `echo "$intervalSize < $tolerance" | bc` == 1 ]]; then echo "INFO: intervalSize < tolerance. Stopping the loop."; break; fi
|
|
if [[ `echo "$intervalSize < 0" | bc` == 1 ]]; then echo "ERROR: Invalid state: lowPoint > highPoint. Stopping the loop."; exit 1; fi
|
|
ITERATION_INFO="L: $lowPoint H: $highPoint intervalSize: $intervalSize tolerance: $tolerance"
|
|
|
|
runTest $@
|
|
|
|
if [[ $testResult == 0 ]]; then
|
|
usersPerSecTop=$usersPerSec
|
|
echo "INFO: Last iteration succeeded. Continuing with the upper half of the interval."
|
|
lowPoint=$usersPerSec
|
|
else
|
|
echo "INFO: Last iteration failed. Continuing with the lower half of the interval."
|
|
highPoint=$usersPerSec
|
|
fi
|
|
|
|
done
|
|
|
|
;;
|
|
|
|
*)
|
|
echo "Algorithm '${algorithm}' not supported."
|
|
exit 1
|
|
;;
|
|
|
|
esac
|
|
|
|
echo "Highest load with passing test: $usersPerSecTop users per second"
|