diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7886e046581..41ef96f986d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,26 +9,26 @@ on: jobs: cfengine_cli: uses: ./.github/workflows/cfengine_cli.yml - unit_tests: - needs: cfengine_cli - uses: ./.github/workflows/unit_tests.yml +# unit_tests: +# needs: cfengine_cli +# uses: ./.github/workflows/unit_tests.yml shellcheck_tests: uses: ./.github/workflows/shellcheck.yml - asan_unit_tests: - needs: unit_tests - uses: ./.github/workflows/asan_unit_tests.yml - acceptance_tests: - needs: unit_tests - uses: ./.github/workflows/acceptance_tests.yml +# asan_unit_tests: +# needs: unit_tests +# uses: ./.github/workflows/asan_unit_tests.yml +# acceptance_tests: +# needs: unit_tests +# uses: ./.github/workflows/acceptance_tests.yml reactor_tests: needs: unit_tests uses: ./.github/workflows/reactor_tests.yml - macos_unit_tests: - needs: unit_tests - uses: ./.github/workflows/macos_unit_tests.yml - static_check: - needs: unit_tests - uses: ./.github/workflows/job-static-check.yml - valgrind_check: - needs: unit_tests - uses: ./.github/workflows/job-valgrind-check.yml +# macos_unit_tests: +# needs: unit_tests +# uses: ./.github/workflows/macos_unit_tests.yml +# static_check: +# needs: unit_tests +# uses: ./.github/workflows/job-static-check.yml +# valgrind_check: +# needs: unit_tests +# uses: ./.github/workflows/job-valgrind-check.yml diff --git a/tests/reactor/lib.sh b/tests/reactor/lib.sh index e938ea23a78..caa87a5c15f 100644 --- a/tests/reactor/lib.sh +++ b/tests/reactor/lib.sh @@ -172,6 +172,11 @@ set_installed_packages() { start_reactor() { "$CF_REACTOR" --no-fork --verbose -f "$1" >>"$LOG" 2>&1 & reactor_pid=$! + echo "reactor_pid is $reactor_pid" + if grep 'error:' "$LOG"; then + stop_reactor + exit 1 + fi trap stop_reactor EXIT } diff --git a/tests/reactor/run.sh b/tests/reactor/run.sh index 8394314c5d6..fff8059c2c6 100644 --- a/tests/reactor/run.sh +++ b/tests/reactor/run.sh @@ -37,7 +37,7 @@ run_test() { total=$((total + 1)) start=$(now) - output=$(sh "$dir/run_test.sh" "$1" 2>&1) + sh -ex "$dir/run_test.sh" "$1" 2>&1 | tee "$1".log result=$? elapsed=$(($(now) - start)) @@ -55,13 +55,15 @@ run_test() { failures="$failures $name " echo "--- FAIL: $name (${elapsed}s)" - echo "$output" + cat "$1".log echo "---" ;; esac + rm -f "$1".log } -for t in "$dir"/tests/*/*.sh "$dir"/tests/*/unsafe/*.sh; do +#for t in "$dir"/tests/*/*.sh "$dir"/tests/*/unsafe/*.sh; do +for t in "$dir"/tests/00_basics/001_vars.sh; do # skip the pattern itself if there are no unsafe tests [ -f "$t" ] || continue run_test "$t" diff --git a/tests/reactor/run_test.sh b/tests/reactor/run_test.sh index e1d78bb0135..a46cf10eafa 100644 --- a/tests/reactor/run_test.sh +++ b/tests/reactor/run_test.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -ex # Usage: run_test.sh TEST # @@ -40,7 +41,16 @@ REACTOR_TESTS_DIR=$(cd "$(dirname "$0")" && pwd) # Print the path of binary $1, see the usage above. find_binary() { if [ -n "$CF_BINDIR" ]; then - echo "$CF_BINDIR/$1" + if [ -x "$CF_BINDIR/$1.exe" ]; then + echo "$CF_BINDIR/$1.exe" + return + fi + if [ -x "$CF_BINDIR/$1" ]; then + echo "$CF_BINDIR/$1" + return + fi + echo "Unable to find executable for $1 in $CF_BINDIR" + exit 1 elif [ -x "$REACTOR_TESTS_DIR/../../$1/$1" ]; then # in-tree build, may be a libtool wrapper script echo "$REACTOR_TESTS_DIR/../../$1/$1" @@ -52,6 +62,7 @@ find_binary() { CF_REACTOR=${CF_REACTOR:-$(find_binary cf-reactor)} CF_PROMISES=${CF_PROMISES:-$(find_binary cf-promises)} export CF_REACTOR +export CF_PROMISES for b in "$CF_REACTOR" "$CF_PROMISES"; do if [ ! -x "$b" ]; then @@ -68,7 +79,19 @@ WORKDIR=$(mktemp -d "${TMPDIR:-/tmp}/cf-reactor-test.XXXXXX" 2>/dev/null) || { WORKDIR=$(cd "$WORKDIR" && pwd) trap 'rm -rf "$WORKDIR"' EXIT mkdir -p "$WORKDIR/bin" "$WORKDIR/tmp" -ln -s "$CF_PROMISES" "$WORKDIR/bin/cf-promises" + +ext="" +if echo $CF_PROMISES | grep -q exe; then + ext=".exe"; +fi +ln -s "$CF_PROMISES" "$WORKDIR/bin/cf-promises$ext" + +if [ -f "$CF_BINDIR/cf.events.dll" ]; then + ln -s "$CF_BINDIR/cf.events.dll" "$WORKDIR/bin/cf.events.dll" +fi +echo CRAIG DEBUG +ls -l "$WORKDIR"/bin + # Run a copy of the policy, keeping its path relative to lib.cf, as CFEngine # refuses to read policy files writable by group or others, which those of a @@ -86,9 +109,14 @@ LOG="$WORKDIR/reactor.log" PROMISE_NAME=$(basename "$t" .sh) export WORKDIR CFENGINE_TEST_OVERRIDE_WORKDIR LOG PROMISE_NAME -sh "$t" "$policy" > "$WORKDIR/test.log" 2>&1 +echo "--- Validate test policy $policy ---" +"$CF_PROMISES" -c $policy + +echo "--- Begin test $t ---" +bash -ex "$t" "$policy" 2>&1 | tee "$WORKDIR/test.log" result=$? if [ "$result" -ne 0 ]; then cat "$WORKDIR/test.log" fi +echo "--- End test $t with exit code $result ---" exit "$result" diff --git a/tests/reactor/win-run.sh b/tests/reactor/win-run.sh new file mode 100644 index 00000000000..82632260ae7 --- /dev/null +++ b/tests/reactor/win-run.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -ex + +export CF_BINDIR="/c/Program Files/CFEngine/bin" +dir=$(cd "$(dirname "$0")" && pwd) +export TMPDIR="$dir"/tmp +mkdir -p "$TMPDIR" + +bash -ex "$dir"/run.sh 2>&1 | tee test.log