blob: 18737c7265924662ea06440f16d49f2b839de7e8 [file] [log] [blame]
#!/bin/bash
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
########################################################################
#
# tests/interop/interop.sh
#
# Script to drive our cross-stack interop tests
#
########################################################################
interop_init()
{
SCRIPTNAME="interop.sh"
if [ -z "${INIT_SOURCED}" -o "${INIT_SOURCED}" != "TRUE" ] ; then
cd ../common
. ./init.sh
fi
mkdir -p "${HOSTDIR}/interop"
cd "${HOSTDIR}/interop"
INTEROP=${INTEROP:=tls_interop}
if [ ! -d "$INTEROP" ]; then
git clone -q https://github.com/mozilla/tls-interop "$INTEROP"
git -C "$INTEROP" checkout -q c00685aa953c49f1e844e614746aadc783e81b19
fi
INTEROP=$(cd "$INTEROP";pwd -P)
# We use the BoringSSL keyfiles
BORING=${BORING:=boringssl}
if [ ! -d "$BORING" ]; then
git clone -q https://boringssl.googlesource.com/boringssl "$BORING"
git -C "$BORING" checkout -q 7f4f41fa81c03e0f8ef1ab5b3d1d566b5968f107
fi
BORING=$(cd "$BORING";pwd -P)
mkdir "$BORING/build"
cd "$BORING/build"
# Build boring explicitly with gcc because it fails on builds where
# CC=clang-5.0, for example on asan-builds.
export CC=gcc
cmake ..
make -j$(nproc)
# Check out and build OpenSSL.
# Build with "enable-external-tests" to include the shim in the build.
cd "${HOSTDIR}"
OSSL=${OSSL:=openssl}
if [ ! -d "$OSSL" ]; then
git clone -q https://github.com/openssl/openssl.git "$OSSL"
git -C "$OSSL" checkout -q 7d38ca3f8bca58bf7b69e78c1f1ab69e5f429dff
fi
OSSL=$(cd "$OSSL";pwd -P)
cd "$OSSL"
./config enable-external-tests
make -j$(nproc)
#Some filenames in the OpenSSL repository contain "core".
#This prevents false positive "core file detected" errors.
detect_core
SCRIPTNAME="interop.sh"
html_head "interop test"
}
interop_cleanup()
{
html "</TABLE><BR>"
cd ${QADIR}
. common/cleanup.sh
}
# Function so we can easily add other stacks
interop_run()
{
test_name=$1
client=$2
server=$3
(cd "$INTEROP";
cargo run -- --client "$client" --server "$server" --rootdir "$BORING"/ssl/test/runner/ --test-cases cases.json $4 $5 ) 2>interop-${test_name}.errors | tee interop-${test_name}.log
RESULT=${PIPESTATUS[0]}
html_msg "${RESULT}" 0 "Interop ${test_name}" "Run successfully"
if [ $RESULT -ne 0 ]; then
cat interop-${test_name}.errors
cat interop-${test_name}.log
fi
grep -i 'FAILED\|Assertion failure' interop-${test_name}.errors
html_msg $? 1 "Interop ${test_name}" "No failures"
}
cd "$(dirname "$0")"
interop_init
NSS_SHIM="$BINDIR"/nss_bogo_shim
BORING_SHIM="$BORING"/build/ssl/test/bssl_shim
OSSL_SHIM="$OSSL"/test/ossl_shim/ossl_shim
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$OSSL"
interop_run "nss_nss" ${NSS_SHIM} ${NSS_SHIM}
interop_run "bssl_nss" ${BORING_SHIM} ${NSS_SHIM}
interop_run "nss_bssl" ${NSS_SHIM} ${BORING_SHIM} "--client-writes-first"
interop_run "ossl_nss" ${OSSL_SHIM} ${NSS_SHIM} "--force-IPv4"
interop_run "nss_ossl" ${NSS_SHIM} ${OSSL_SHIM} "--client-writes-first" "--force-IPv4"
interop_cleanup