Martin Kletzander
2021-Jun-08 07:53 UTC
[Libguestfs] [libnbd PATCH 17/20] ci: Add support for test skipping
Some tests cannot be ran successfully and/or cannot properly probe for all their
dependency configurations. This allows for skipping of individual test cases
based on the OS and its version.
Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
---
ci/build_script.sh | 60 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 59 insertions(+), 1 deletion(-)
diff --git a/ci/build_script.sh b/ci/build_script.sh
index cecbbba0bbc0..36bd51eb8522 100755
--- a/ci/build_script.sh
+++ b/ci/build_script.sh
@@ -32,7 +32,65 @@ main() {
return 0
fi
- $MAKE check
+ # Add a way to run all the tests, even the skipped ones, with an
environment
+ # variable, so that it can be set fora branch or fork in GitLab.
+ if test "$SKIPPED_TESTS" != "force"
+ then
+ # Skip tests from ci/skipped_tests if this is the right OS version
+ # The file
+ local os_id
+ os_id="$(sh -c '. /etc/os-release; echo
"${NAME}-${VERSION_ID}"')"
+
+ echo OS ID: $os_id
+
+ # Skips comments and empty lines
+ grep '^[^#]' ci/skipped_tests | while read skipper
+ do
+ local regex="${skipper%%;*}"
+ local tests="${skipper#*;}"
+
+ echo SKIPPER: "$skipper"
+ echo REGEX: "$regex"
+ echo TESTS: "$tests"
+
+ # Ignore lines not meant for current $os_id
+ if ! echo "$os_id" | grep -q "$regex"; then
echo NOPE; continue; fi
+
+ echo SKIPPING $tests
+
+ for test_case in $tests
+ do
+ local test_case_bckup="${test_case}_skipped_test"
+ if ! git ls-files "$test_case" | grep -q
"$test_case"
+ then
+ make -C "$(dirname "$test_case")"
"$(basename "$test_case")" 2>/dev/null || :
+ fi
+ echo Backing up "$test_case" to
"${test_case_bckup}"
+ cp "$test_case" "${test_case_bckup}"
+
+ echo 'echo "Test skipped based on ci/skipped_tests
file"'> "$test_case"
+ echo 'exit 77'>> "$test_case"
+ chmod +x "$test_case"
+ done
+ done
+ fi
+
+ # We do not want the check to cause complete failure as we need to clean up
+ # the skipped test cases
+ local failed=0
+ $MAKE check || failed=1
+
+ find . -name '*_skipped_test' -print | while read test_case_bckup
+ do
+ local test_case="${test_case_bckup%_skipped_test}"
+
+ echo Moving "${test_case_bckup}" back to
"${test_case}"
+ rm -f "${test_case}"
+ mv -f "${test_case_bckup}" "${test_case}"
+ done
+
+ # Now it is safe to fail
+ test "$failed" -eq 0
if test "$CHECK_VALGRIND" = "force"
then
--
2.31.1
Eric Blake
2021-Jun-08 13:03 UTC
[Libguestfs] [libnbd PATCH 17/20] ci: Add support for test skipping
On Tue, Jun 08, 2021 at 09:53:58AM +0200, Martin Kletzander wrote:> Some tests cannot be ran successfully and/or cannot properly probe for all their > dependency configurations. This allows for skipping of individual test cases > based on the OS and its version. > > Signed-off-by: Martin Kletzander <mkletzan at redhat.com> > --- > ci/build_script.sh | 60 +++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 59 insertions(+), 1 deletion(-) > > diff --git a/ci/build_script.sh b/ci/build_script.sh > index cecbbba0bbc0..36bd51eb8522 100755 > --- a/ci/build_script.sh > +++ b/ci/build_script.sh > @@ -32,7 +32,65 @@ main() { > return 0 > fi > > - $MAKE check > + # Add a way to run all the tests, even the skipped ones, with an environment > + # variable, so that it can be set fora branch or fork in GitLab.for a> + if test "$SKIPPED_TESTS" != "force" > + then > + # Skip tests from ci/skipped_tests if this is the right OS version > + # The file > + local os_idci/build_script.sh is currently listed as #!/bin/sh, but local is a bashism. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org