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