#!/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 "
" 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