summaryrefslogtreecommitdiffstats
path: root/tests/unit-test-driver.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit-test-driver.sh.in')
-rw-r--r--tests/unit-test-driver.sh.in60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/unit-test-driver.sh.in b/tests/unit-test-driver.sh.in
new file mode 100644
index 0000000..9a60db1
--- /dev/null
+++ b/tests/unit-test-driver.sh.in
@@ -0,0 +1,60 @@
+#!/bin/sh
+#
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# 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 https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+TOP_BUILDDIR=@abs_top_builddir@
+TOP_SRCDIR=@abs_top_srcdir@
+
+if [ -z "${1}" ]; then
+ echo "Usage: ${0} test_program" >&2
+ exit 1
+fi
+
+TEST_PROGRAM="${1}"
+TIMEOUT=300
+
+"${TEST_PROGRAM}" &
+TEST_PROGRAM_PID=${!}
+STATUS=124
+while [ ${TIMEOUT} -gt 0 ]; do
+ if ! kill -0 "${TEST_PROGRAM_PID}" 2>/dev/null; then
+ wait "${TEST_PROGRAM_PID}"
+ STATUS=${?}
+ break
+ fi
+ sleep 1
+ TIMEOUT=$((TIMEOUT - 1))
+done
+if [ ${TIMEOUT} -eq 0 ]; then
+ echo "PID ${TEST_PROGRAM_PID} exceeded run time limit, sending SIGABRT" >&2
+ kill -ABRT "${TEST_PROGRAM_PID}" 2>/dev/null
+fi
+
+TEST_PROGRAM_NAME=$(basename "${TEST_PROGRAM}")
+TEST_PROGRAM_WORK_DIR=$(dirname "${TEST_PROGRAM}")
+find "${TEST_PROGRAM_WORK_DIR}" -name 'core*' -or -name '*.core' | while read -r CORE_DUMP; do
+ BINARY=$(gdb --batch --core="${CORE_DUMP}" 2>/dev/null | sed -n "s/^Core was generated by \`\(.*\)'\.\$/\1/p")
+ if ! echo "${BINARY}" | grep -q "${TEST_PROGRAM_NAME}\$"; then
+ continue
+ fi
+ echo "I:${TEST_PROGRAM_NAME}:Core dump found: ${CORE_DUMP}"
+ echo "D:${TEST_PROGRAM_NAME}:backtrace from ${CORE_DUMP} start"
+ "${TOP_BUILDDIR}/libtool" --mode=execute gdb \
+ --batch \
+ --command="${TOP_SRCDIR}/bin/tests/system/run.gdb" \
+ --core="${CORE_DUMP}" \
+ -- \
+ "${BINARY}"
+ echo "D:${TEST_PROGRAM_NAME}:backtrace from ${CORE_DUMP} end"
+done
+
+exit ${STATUS}