#!/usr/bin/env bash
# Run the unit and simulation tests with different compiler sanitizers
# and under valgrind

cd ../..

if [ "$(uname -sm)" != "Linux x86_64" ]; then
  echo Test supported on Linux x86_64 only
  exit 1
fi

[ -f /etc/os-release ] && . /etc/os-release

if [ "$ID" = "fedora" ]; then
  echo Checking test dependencies:
  rpm -q {gcc,clang}.x86_64 {valgrind,libgcc,clang-libs}.{x86_64,i686} || exit 1
  rpm -q {libseccomp,nettle,nss-softokn-freebl,libtomcrypt,gnutls}-devel.{x86_64,i686} || exit 1
  echo
fi

touch Makefile

for extra_config_opts in \
  "--all-privops" \
  "--disable-ipv6" \
  "--disable-scfilter" \
  "--without-gnutls" \
  "--without-nettle" \
  "--without-nettle --without-nss" \
  "--without-nettle --without-nss --without-tomcrypt" \
  "--without-nettle --without-nss --without-tomcrypt --without-gnutls"; \
do
  for arch_opts in "-m32" ""; do
    pushd test/simulation/clknetsim || exit 1
    make clean > /dev/null 2>&1
    CFLAGS="$arch_opts -DCLKNETSIM_DISABLE_SYSCALL" make "$@" || exit 1
    echo

    popd

    for CC in gcc clang; do
      export CC

      for san_options in "" "-fsanitize=address" "-fsanitize=memory"; do
        export CFLAGS="-O2 -g -fsanitize=undefined -fsanitize=float-divide-by-zero -fno-sanitize-recover=undefined,float-divide-by-zero $san_options $arch_opts"

        # clang msan doesn't work on i686 and otherwise requires patches
        echo $CFLAGS | grep -q 'sanitize=memory' && continue

        [ -n "$TEST_NO_M32_CLANG" -a "$arch_opts" = "-m32" -a "$CC" = "clang" ] && continue

        [ -n "$TEST_GCC_STATIC_ASAN" -a "$CC" = "gcc" ] &&
                echo $CFLAGS | grep -q 'sanitize=address' && CFLAGS="$CFLAGS -static-libasan"

        config_opts="--with-user=chrony --with-ntp-era=1000000000 --enable-debug --enable-scfilter --enable-ntp-signd $extra_config_opts"

        echo -----------------------------------------------------------------------------
        echo CC=\"$CC\" CFLAGS=\"$CFLAGS\" ./configure $config_opts

        make distclean > /dev/null 2>&1

        ./configure $config_opts || exit 1

        if echo "$config_opts" | grep -q all-privops; then
          for op in ADJUSTTIME ADJUSTTIMEX SETTIME BINDSOCKET; do
            echo "#define PRIVOPS_$op 1" >> config.h
          done
        fi

        make "$@" || exit 1

        [ -n "$TEST_BUILD_ONLY" ] && continue

        echo
        pushd test/unit || exit 1
        make "$@" || exit 1
        if [ "$san_options" = "" ]; then
          make check TEST_WRAPPER="valgrind --error-exitcode=1" || exit 1
        else
          make check || exit 1
        fi
        popd

        [ -n "$TEST_UNIT_ONLY" ] && continue

        echo
        pushd test/simulation || exit 1
        export CLKNETSIM_RANDOM_SEED=101
        if [ "$arch_opts" = "" -a "$san_options" = "" ]; then
          CLKNETSIM_CLIENT_WRAPPER=valgrind ./run -i 1 || exit 1
        elif [ "$CC" = "gcc" ] && ! echo $CFLAGS | grep -q "-static-libasan"; then
          libasan=$(ldd ../../chronyd | grep -o '/.*lib.*/libasan.so.[0-9]')
          CLKNETSIM_PRELOAD=$libasan ./run -i 1 || exit 1
        else
          ./run -i 1 || exit 1
        fi
        popd
      done
    done
  done
done
