blob: 698d24fca7db6a3362d5b21f6401d10ad825dbe6 [file] [log] [blame]
# This file expects to be sourced from another file in the same directory in
# order to set us up for siege testing.
set -u # exit the script if any variable is uninitialized
set -e
if [ -d devel ]; then
cd devel
fi
if [ ! -d siege ]; then
echo Run this script from the top or devel/ directories
exit 1
fi
if ! hash siege 2>/dev/null; then
echo "'siege' command is not found, please install it. "
echo "siege_instant_ipro needs 3.0.8 or newer, other tests work with 3.0.5 "
echo "as well."
exit 1
fi
# If an 'su' password is required, then get it before going off and compiling
# stuff.
./turn_on_timewait_recyling.sh
# Build optimized mod_pagespeed.so if necessary, and restart it.
callgrind=0
if [ $# -eq 1 ]; then
if [ $1 == "-callgrind" ]; then
shift
callgrind=1
fi
fi
# Stop callgrind if it was running previously.
callgrind_control -k
# Clear all caches to make sure we start from a known state.
make clean_slate_for_tests
# This variable contains config that we want to inject into siege.conf when
# constructing pagespeed.conf, by sed-replacing "CUSTOM_CONFIG". This works
# with multiple config lines.
custom_config=""
function add_config_line() {
custom_config+="\n $1"
}
# If $MEMCACHED_PORT is set (i.e. we were run from
# run_program_with_memcached.sh) then configure it in the apache conf.
set +u
if [ ! -z "$MEMCACHED_PORT" ]; then
add_config_line "ModPagespeedMemcachedServers localhost:$MEMCACHED_PORT"
fi
set -u
make apache_debug_stop
sed -e "s/#CUSTOM_CONFIG/$custom_config/" -e "s^#HOME^$HOME^" < siege/siege.conf \
> ~/apache2/conf/pagespeed.conf
if [ $callgrind -eq 1 ]; then
echo running with callgrind...
make -j8 apache_debug_install CONF=OptDebug
valgrind --tool=callgrind --collect-systime=yes ~/apache2/bin/httpd -X &
sleep 5
callgrind=1
else
echo running without calgrind -- use -callgrind to get a profile.
make -j8 apache_debug_restart BUILDTYPE=Release
fi
# This function returns its value in shell variable 'url'. Note that it
# will return whatever is in the HTML value, which is usually a relative
# url.
function extract_pagespeed_url() {
url=""
html=$1
grep_pattern="$2"
url_token_index="$3"
filters="$4"
OPTIONS="?PageSpeedFilters=$filters"
echo -n Finding pagespeed url in $html${OPTIONS}, pattern=\"${grep_pattern}\"
echo ' #' $url_token_index
while true; do
LINE=$(wget -q -O - $html$OPTIONS | grep "$grep_pattern")
if [ "$LINE" != '' ]; then
url=$(echo $LINE | cut -d\" -f$url_token_index)
echo $url
break
else
sleep .1
echo -n '.'
fi
done
}
this_file=$(basename "$0")
this_name=$(basename "$this_file" .sh)
common_options=("--log=/tmp/$this_name.log" --rc=/dev/null)
# Runs siege, passing on any provided arguments.
function run_siege_with_options() {
(set -x; siege "${common_options[@]}" "$@")
if [ $callgrind -eq 1 ]; then
sleep 2
callgrind_control -d
ls -ltR callgrind.*
echo Type \'callgrind_control -k\' to close down valgrind.
fi
(set -x; ./expectfail egrep "exit signal|CRASH" \
~/apache2/logs/error_log)
}
# Run siege on a set of arguments, with reasonable defaults.
function run_siege() {
run_siege_with_options --benchmark --time=60s --concurrent=50 "$@"
}