Add support to match regex in ok tests

This commit is contained in:
Rodrigo Arias 2022-10-07 13:08:14 +02:00
parent 22b34dcff6
commit 3eac598e2c
2 changed files with 47 additions and 5 deletions

View File

@ -68,11 +68,22 @@ function(ovni_test source)
"${OVNI_TEST_NAME}" "${OVNI_TEST_NAME}"
WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}") WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}")
else() else()
add_test(NAME "${OVNI_TEST_NAME}" if(OVNI_TEST_REGEX)
COMMAND # Custom error handler for ok too
"${driver}" add_test(NAME "${OVNI_TEST_NAME}"
"${OVNI_TEST_NAME}" COMMAND
WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}") "${OVNI_TEST_SOURCE_DIR}/match-ok.sh"
"${OVNI_TEST_REGEX}"
"${driver}"
"${OVNI_TEST_NAME}"
WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}")
else()
add_test(NAME "${OVNI_TEST_NAME}"
COMMAND
"${driver}"
"${OVNI_TEST_NAME}"
WORKING_DIRECTORY "${OVNI_TEST_BUILD_DIR}")
endif()
endif() endif()
set_tests_properties("${OVNI_TEST_NAME}" set_tests_properties("${OVNI_TEST_NAME}"

31
test/match-ok.sh Executable file
View File

@ -0,0 +1,31 @@
#!/bin/bash
# Copyright (c) 2022 Barcelona Supercomputing Center (BSC)
# SPDX-License-Identifier: GPL-3.0-or-later
# This script return 0 if and only if the given program returns zero
# AND the regex matches the output
# $1 = the regex as grep
# $2... The program
regex="$1"
shift
"${@}" 2>&1 | stdbuf -i0 -o0 tee /dev/stderr | grep -q "${regex}"
rcprog=${PIPESTATUS[0]} rcgrep=${PIPESTATUS[2]}
echo "rcprog='$rcprog' rcgrep='$rcgrep'"
if [ "$rcprog" = 0 ] && [ "$rcgrep" = 0 ]; then
echo "ok: program succeded and grep matched the error line"
exit 0
else
if [ "$rcprog" != 0 ]; then
echo "error: program exited with \"$rcprog\" rather than 0"
fi
if [ "$rcgrep" != 0 ]; then
echo "error: regex \"${regex}\" not matched"
fi
exit 1
fi