#!/usr/bin/env bash

#  Copyright 2020-2021 Couchbase, Inc.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

PROJECT_ROOT="$( cd "$(dirname "$0"/..)" >/dev/null 2>&1 ; pwd -P )"

echo "HOSTNAME=${HOSTNAME}"
echo "NODE_NAME=${NODE_NAME}"
echo "CONTAINER_TAG=${CONTAINER_TAG}"
echo "JENKINS_SLAVE_LABELS=${JENKINS_SLAVE_LABELS}"
echo "NODE_LABELS=${NODE_LABELS}"

CB_CTEST=${CB_CTEST:-$(which ctest)}
CB_SANITIZER=${CB_SANITIZER:-""}

echo "CB_CTEST=${CB_CTEST}"

set -xu

BUILD_DIR="${PROJECT_ROOT}/cmake-build-tests"
if [ "x${CB_SANITIZER}" != "x" ]; then
    BUILD_DIR="${BUILD_DIR}-${CB_SANITIZER}"
fi

cd "${BUILD_DIR}"

cat /proc/sys/kernel/core_pattern
if [ -e /usr/bin/apport-unpack ]
then
    mkdir -p $HOME/.config/apport
    cat <<EOF >$HOME/.config/apport/settings
[main]
unpackaged=true
EOF
fi

ulimit -c unlimited

${CB_CTEST} --output-on-failure --label-regex 'integration|unit' --output-junit results.xml
STATUS=$?

if [ "x${STATUS}" != "x0" ]
then
    if [ -e /usr/bin/coredumpctl ]
    then
        /usr/bin/coredumpctl list --no-pager
        /usr/bin/coredumpctl -1 info
    elif [ -e /usr/bin/apport-unpack ]
    then
        for crash in /var/crash/*
        do
           if [ -f $crash ]
           then
             echo $crash
             /usr/bin/apport-unpack $crash /tmp/the_crash/
             executable=$(cat /tmp/the_crash/ExecutablePath)
             gdb $executable /tmp/the_crash/CoreDump --batch -ex "thread apply all bt"
             rm -rf $crash /tmp/the_crash
           fi
        done
    else
        for core in /tmp/core.* "${PWD}/core*"
        do
            echo $core
            executable=$(file $core | ruby -e "print ARGF.read[/execfn: '([^']+)'/, 1]")
            echo $executable
            gdb $executable $core --batch -ex "thread apply all bt"
            rm -f $core
        done
    fi
fi

exit $STATUS
