117 lines
3.3 KiB
Bash
Executable file
117 lines
3.3 KiB
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
|
|
# Set up the routing needed for the simulation
|
|
/setup.sh
|
|
|
|
# The following variables are available for use:
|
|
# - ROLE contains the role of this execution context, client or server
|
|
# - SERVER_PARAMS contains user-supplied command line parameters
|
|
# - CLIENT_PARAMS contains user-supplied command line parameters
|
|
|
|
QUICHE_DIR=/quiche
|
|
WWW_DIR=/www
|
|
DOWNLOAD_DIR=/downloads
|
|
QUICHE_CLIENT=quiche-client
|
|
QUICHE_SERVER=quiche-server
|
|
QUICHE_CLIENT_OPT="--no-verify --dump-responses ${DOWNLOAD_DIR} --wire-version 00000001"
|
|
# interop container has tso off. need to disable gso as well.
|
|
QUICHE_SERVER_OPT_COMMON="--listen [::]:443 --root $WWW_DIR --cert /certs/cert.pem --key /certs/priv.key --disable-gso --disable-pacing"
|
|
QUICHE_SERVER_OPT="$QUICHE_SERVER_OPT_COMMON --no-retry "
|
|
LOG_DIR=/logs
|
|
LOG=$LOG_DIR/log.txt
|
|
|
|
check_testcase () {
|
|
case $1 in
|
|
handshake | multiconnect | http3 )
|
|
echo "supported"
|
|
;;
|
|
|
|
transfer )
|
|
echo "supported"
|
|
;;
|
|
|
|
chacha20 )
|
|
if [ "$ROLE" == "client" ]; then
|
|
# We don't support selecting a cipher on the client-side.
|
|
echo "unsupported"
|
|
exit 127
|
|
elif [ "$ROLE" == "server" ]; then
|
|
echo "supported"
|
|
fi
|
|
;;
|
|
|
|
resumption )
|
|
echo "supported"
|
|
QUICHE_CLIENT_OPT="$QUICHE_CLIENT_OPT --session-file=session.bin"
|
|
;;
|
|
|
|
zerortt )
|
|
if [ "$ROLE" == "client" ]; then
|
|
echo "supported"
|
|
QUICHE_CLIENT_OPT="$QUICHE_CLIENT_OPT --session-file=session.bin --early-data"
|
|
elif [ "$ROLE" == "server" ]; then
|
|
echo "supported"
|
|
QUICHE_SERVER_OPT="$QUICHE_SERVER_OPT --early-data"
|
|
fi
|
|
;;
|
|
|
|
retry )
|
|
echo "supported"
|
|
QUICHE_SERVER_OPT="$QUICHE_SERVER_OPT_COMMON"
|
|
;;
|
|
|
|
*)
|
|
echo "unsupported"
|
|
exit 127
|
|
;;
|
|
|
|
esac
|
|
}
|
|
|
|
run_quiche_client_tests () {
|
|
# TODO: https://github.com/marten-seemann/quic-interop-runner/issues/61
|
|
# remove this sleep when the issue above is resolved.
|
|
sleep 3
|
|
|
|
case $1 in
|
|
multiconnect | resumption | zerortt )
|
|
for req in $REQUESTS
|
|
do
|
|
$QUICHE_DIR/$QUICHE_CLIENT $QUICHE_CLIENT_OPT \
|
|
$CLIENT_PARAMS $req >> $LOG 2>&1
|
|
done
|
|
;;
|
|
|
|
*)
|
|
$QUICHE_DIR/$QUICHE_CLIENT $QUICHE_CLIENT_OPT \
|
|
$CLIENT_PARAMS $REQUESTS >& $LOG
|
|
;;
|
|
|
|
esac
|
|
}
|
|
|
|
run_quiche_server_tests() {
|
|
$QUICHE_DIR/$QUICHE_SERVER $SERVER_PARAMS $QUICHE_SERVER_OPT >& $LOG
|
|
}
|
|
|
|
# Update config based on test case
|
|
check_testcase $TESTCASE
|
|
|
|
# Create quiche log directory
|
|
mkdir -p $LOG_DIR
|
|
|
|
if [ "$ROLE" == "client" ]; then
|
|
# Wait for the simulator to start up.
|
|
/wait-for-it.sh sim:57832 -s -t 30
|
|
echo "## Starting quiche client..."
|
|
echo "## Client params: $CLIENT_PARAMS"
|
|
echo "## Requests: $REQUESTS"
|
|
echo "## Test case: $TESTCASE"
|
|
run_quiche_client_tests $TESTCASE
|
|
elif [ "$ROLE" == "server" ]; then
|
|
echo "## Starting quiche server..."
|
|
echo "## Server params: $SERVER_PARAMS"
|
|
echo "## Test case: $TESTCASE"
|
|
run_quiche_server_tests
|
|
fi
|