tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ssl_gtests.sh (4368B)


      1 #!/bin/bash
      2 #
      3 # This Source Code Form is subject to the terms of the Mozilla Public
      4 # License, v. 2.0. If a copy of the MPL was not distributed with this
      5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      6 
      7 ########################################################################
      8 #
      9 # tests/ssl_gtests/ssl_gtests.sh
     10 #
     11 # Script to drive the ssl gtest unit tests
     12 #
     13 # needs to work on all Unix and Windows platforms
     14 #
     15 # special strings
     16 # ---------------
     17 #   FIXME ... known problems, search for this string
     18 #   NOTE .... unexpected behavior
     19 #
     20 ########################################################################
     21 
     22 ssl_gtest_certs() {
     23  mkdir -p "${SSLGTESTDIR}"
     24  cd "${SSLGTESTDIR}"
     25 
     26  PROFILEDIR=`pwd`
     27  if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
     28    PROFILEDIR=`cygpath -m "${PROFILEDIR}"`
     29  fi
     30 
     31  ${BINDIR}/certutil -N -d "${PROFILEDIR}" --empty-password 2>&1
     32  html_msg $? 0 "create ssl_gtest database"
     33 
     34  pushd "${QADIR}"
     35  . common/certsetup.sh
     36  popd
     37 
     38  counter=0
     39  make_cert client rsa sign
     40  make_cert rsa rsa sign kex
     41  make_cert rsa2048 rsa2048 sign kex
     42  make_cert rsa8192 rsa8192 sign kex
     43  make_cert rsa_sign rsa sign
     44  make_cert rsa_pss rsapss sign
     45  make_cert rsa_pss384 rsapss384 sign
     46  make_cert rsa_pss512 rsapss512 sign
     47  make_cert rsa_pss_noparam rsapss_noparam sign
     48  make_cert rsa_decrypt rsa kex
     49  make_cert ecdsa256 p256 sign
     50  make_cert ecdsa384 p384 sign
     51  make_cert ecdsa521 p521 sign
     52  make_cert ecdh_ecdsa p256 kex
     53  make_cert rsa_ca rsa_ca ca
     54  make_cert rsa_chain rsa_chain sign
     55  make_cert rsa_pss_ca rsapss_ca ca
     56  make_cert rsa_pss_chain rsapss_chain sign
     57  make_cert rsa_ca_rsa_pss_chain rsa_ca_rsapss_chain sign
     58  make_cert ecdh_rsa ecdh_rsa kex
     59  if [ -z "${NSS_DISABLE_DSA}" ]; then
     60      make_cert dsa dsa sign
     61  fi
     62  make_cert delegator_ecdsa256 delegator_p256 sign
     63  make_cert delegator_rsae2048 delegator_rsae2048 sign
     64  make_cert delegator_rsa_pss2048 delegator_rsa_pss2048 sign
     65 }
     66 
     67 ############################## ssl_gtest_init ##########################
     68 # local shell function to initialize this script
     69 ########################################################################
     70 ssl_gtest_init()
     71 {
     72  SCRIPTNAME=ssl_gtest.sh      # sourced - $0 would point to all.sh
     73 
     74  if [ -z "${CLEANUP}" ] ; then     # if nobody else is responsible for
     75      CLEANUP="${SCRIPTNAME}"       # cleaning this script will do it
     76  fi
     77  if [ -z "${INIT_SOURCED}" -o "${INIT_SOURCED}" != "TRUE" ]; then
     78      cd ../common
     79      . ./init.sh
     80  fi
     81 
     82  SCRIPTNAME=ssl_gtest.sh
     83  html_head SSL Gtests
     84 
     85  if [ ! -d "${SSLGTESTDIR}" ]; then
     86    ssl_gtest_certs
     87  fi
     88 
     89  cd "${SSLGTESTDIR}"
     90 }
     91 
     92 ########################## ssl_gtest_start #########################
     93 # Local function to actually start the test
     94 ####################################################################
     95 ssl_gtest_start()
     96 {
     97  if [ ! -f ${BINDIR}/ssl_gtest ]; then
     98    html_unknown "Skipping ssl_gtest (not built)"
     99    return
    100  fi
    101 
    102  SSLGTESTREPORT="${SSLGTESTDIR}/report.xml"
    103 
    104  local nshards=1
    105  local prefix=""
    106  local postfix=""
    107 
    108  export -f parallel_fallback
    109 
    110  # Determine the number of chunks.
    111  if [ -n "$GTESTFILTER" ]; then
    112    echo "DEBUG: Not parallelizing ssl_gtests because \$GTESTFILTER is set"
    113  elif type parallel 2>/dev/null; then
    114    nshards=$(parallel --number-of-cores || 1)
    115  fi
    116 
    117  if [ "$nshards" != 1 ]; then
    118    local indices=$(for ((i=0; i<$nshards; i++)); do echo $i; done)
    119    prefix="parallel -j$nshards --line-buffer --halt soon,fail=1"
    120    postfix="\&\& exit 0 \|\| exit 1 ::: $indices"
    121  fi
    122 
    123  echo "DEBUG: ssl_gtests will be divided into $nshards chunk(s)"
    124 
    125  # Run tests.
    126  ${prefix:-parallel_fallback} \
    127    GTEST_SHARD_INDEX={} \
    128      GTEST_TOTAL_SHARDS=$nshards \
    129        DYLD_LIBRARY_PATH="${DIST}/${OBJDIR}/lib" \
    130          ${BINDIR}/ssl_gtest -d "${SSLGTESTDIR}" \
    131            --gtest_output=xml:"${SSLGTESTREPORT}.{}" \
    132            --gtest_filter="${GTESTFILTER-*}" \
    133            $postfix
    134 
    135  html_msg $? 0 "ssl_gtests ran successfully"
    136 
    137  # Parse XML report(s).
    138  gtest_parse_report "${SSLGTESTREPORT}".* 
    139 }
    140 
    141 # Helper function used when 'parallel' isn't available.
    142 parallel_fallback()
    143 {
    144  eval "${@//\{\}/0}"
    145 }
    146 
    147 ssl_gtest_cleanup()
    148 {
    149  cd ${QADIR}
    150  . common/cleanup.sh
    151 }
    152 
    153 ################## main #################################################
    154 cd "$(dirname "$0")"
    155 ssl_gtest_init
    156 ssl_gtest_start
    157 ssl_gtest_cleanup