mirror of
https://github.com/wolfSSL/wolfssl
synced 2026-05-24 10:18:22 +00:00
147 lines
4 KiB
Bash
Executable file
147 lines
4 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
#benchmark.test
|
|
|
|
# if we can, isolate the network namespace to eliminate port collisions.
|
|
if [ -n "$NETWORK_UNSHARE_HELPER" ]; then
|
|
if [ -z "$NETWORK_UNSHARE_HELPER_CALLED" ]; then
|
|
export NETWORK_UNSHARE_HELPER_CALLED=yes
|
|
exec "$NETWORK_UNSHARE_HELPER" "$0" "$@" || exit $?
|
|
fi
|
|
elif [ "${AM_BWRAPPED-}" != "yes" ]; then
|
|
bwrap_path="$(command -v bwrap)"
|
|
if [ -n "$bwrap_path" ]; then
|
|
export AM_BWRAPPED=yes
|
|
exec "$bwrap_path" --unshare-net --dev-bind / / "$0" "$@"
|
|
fi
|
|
unset AM_BWRAPPED
|
|
fi
|
|
|
|
[ ! -x ./examples/client/client ] && printf '\n\n%s\n' "Client doesn't exist" \
|
|
&& exit 1
|
|
|
|
if ./examples/client/client -? 2>&1 | grep "Client not compiled in!" ; then
|
|
echo 'skipping benchmark.test because client not compiled in.' 1>&2
|
|
exit 77
|
|
fi
|
|
|
|
if ./examples/server/server -? 2>&1 | grep "Server not compiled in!" ; then
|
|
echo 'skipping benchmark.test because server not compiled in.' 1>&2
|
|
exit 77
|
|
fi
|
|
|
|
if [ "$#" -lt 2 ]; then
|
|
echo "Usage: $0 [mode] [num] [clientargs] [serverargs]" >&2
|
|
echo " [mode]: 1=Connection Rate (TPS), 2=Throughput Bytes" >&2
|
|
echo " [num]: Mode 1=Connection Count, Mode 2=Bytes to TX/RX" >&2
|
|
echo " [clientargs]: Passed to client (see \"./example/client/client -?\" for help)" >&2
|
|
echo " Example: Use different cipher suite: \"-l DHE-RSA-AES256-SHA\"" >&2
|
|
echo " [serverargs]: Passed to server (see \"./example/server/server -?\" for help)" >&2
|
|
echo " Example: Disable client certificate check: \"-d\"" >&2
|
|
echo "Note: If additional client or server args contains spaces wrap with double quotes" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Use unique benchmark port so it won't conflict with any other tests
|
|
bench_port=11113
|
|
no_pid=-1
|
|
server_pid=$no_pid
|
|
counter=0
|
|
client_result=-1
|
|
|
|
remove_ready_file() {
|
|
if test -e /tmp/wolfssl_server_ready; then
|
|
echo "removing existing server_ready file"
|
|
rm /tmp/wolfssl_server_ready
|
|
fi
|
|
}
|
|
|
|
|
|
do_cleanup() {
|
|
echo "in cleanup"
|
|
|
|
if [ $server_pid != $no_pid ] && kill -0 $server_pid 2>&-
|
|
then
|
|
# sleep to give sanitizers time to dump backtraces.
|
|
sleep 1
|
|
echo "killing server"
|
|
kill -9 $server_pid
|
|
fi
|
|
remove_ready_file
|
|
}
|
|
|
|
do_trap() {
|
|
echo "got trap"
|
|
do_cleanup
|
|
exit 1
|
|
}
|
|
|
|
trap do_trap INT TERM
|
|
|
|
# Start server in loop continuous mode (-L) with echo data (-e) enabled and non-blocking (-N)
|
|
echo "\nStarting example server for benchmark test"
|
|
remove_ready_file
|
|
# benchmark connections
|
|
if [ $1 -eq 1 ]
|
|
then
|
|
# start server in loop mode with port
|
|
./examples/server/server -i -p $bench_port $4 &
|
|
server_pid=$!
|
|
fi
|
|
|
|
# benchmark throughput
|
|
if [ $1 -eq 2 ]
|
|
then
|
|
# start server in loop mode, non-blocking, benchmark throughput with port
|
|
./examples/server/server -i -N -B $2 -p $bench_port $4 &
|
|
server_pid=$!
|
|
fi
|
|
|
|
# NOTE: We sleep for 2 seconds below. If timing the execution of this script
|
|
# with "time", bear in mind that those 2 seconds will be reflected in
|
|
# the "real" time.
|
|
echo "Waiting for server_ready file..."
|
|
while [ ! -s /tmp/wolfssl_server_ready -a "$counter" -lt 20 ]; do
|
|
sleep 0.1
|
|
counter=$((counter+ 1))
|
|
done
|
|
|
|
# benchmark connections
|
|
if [ $1 -eq 1 ]
|
|
then
|
|
echo "Starting example client to benchmark connection average time"
|
|
# start client to benchmark average time for each connection using port
|
|
./examples/client/client -b $2 -p $bench_port $3
|
|
client_result=$?
|
|
fi
|
|
|
|
# benchmark throughput
|
|
if [ $1 -eq 2 ]
|
|
then
|
|
echo "Starting example client to benchmark throughput"
|
|
# start client in non-blocking mode, benchmark throughput using port
|
|
./examples/client/client -N -B $2 -p $bench_port $3
|
|
client_result=$?
|
|
fi
|
|
|
|
if [ $client_result != 0 ]
|
|
then
|
|
echo "Client failed!"
|
|
do_cleanup
|
|
exit 1
|
|
fi
|
|
|
|
# End server
|
|
kill -6 $server_pid
|
|
server_result=$?
|
|
remove_ready_file
|
|
|
|
if [ $server_result != 0 ]
|
|
then
|
|
echo "Server failed!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "\nSuccess!\n"
|
|
|
|
exit 0
|