Fix https://github.com/bazelbuild/bazel/issues/18493. (#18512)
The use of the pipe in
https://github.com/bazelbuild/bazel/commit/b8e92cc55378fb7b80f5abe0abf59d41f53ba483 made it swallow the exit code, so we need to set pipefail.
Fix https://github.com/bazelbuild/bazel/issues/18493
Closes #18498.
PiperOrigin-RevId: 535520323
Change-Id: Idf1a5c39bf5b7deec29b76c10ece2825b568ebf2
Co-authored-by: Tobias Werth <twerth@google.com>
diff --git a/src/test/shell/bazel/run_test.sh b/src/test/shell/bazel/run_test.sh
index 8f30f03..fd6c3c0 100755
--- a/src/test/shell/bazel/run_test.sh
+++ b/src/test/shell/bazel/run_test.sh
@@ -125,4 +125,43 @@
echo "$output" | grep --fixed-strings 'ExecuteProgram(C:\first_part second_part)' || fail "Expected error message to contain unquoted path"
}
+function test_run_test_exit_code() {
+ # EXPERIMENTAL_SPLIT_XML_GENERATION is set by the outer bazel and influences
+ # the test setup of the inner bazel. To make sure we hit the codepath we want
+ # to test here, unset the variable.
+ unset EXPERIMENTAL_SPLIT_XML_GENERATION
+
+ mkdir -p foo
+ cat > foo/BUILD <<'EOF'
+sh_test(
+ name = "exit0",
+ srcs = ["exit0.sh"],
+)
+
+sh_test(
+ name = "exit1",
+ srcs = ["exit1.sh"],
+)
+EOF
+
+ cat > foo/exit0.sh <<'EOF'
+set -x
+exit 0
+EOF
+ chmod +x foo/exit0.sh
+ bazel run //foo:exit0 &>"$TEST_log" \
+ || fail "Expected exit code 0, received $?"
+
+ cat > foo/exit1.sh <<'EOF'
+set -x
+exit 1
+EOF
+ chmod +x foo/exit1.sh
+ bazel run --noexperimental_split_xml_generation //foo:exit1 &>"$TEST_log" \
+ && fail "Expected exit code 1, received $?"
+
+ # Avoid failing the test because of the last non-zero exit-code.
+ true
+}
+
run_suite "run_under_tests"
diff --git a/tools/test/test-setup.sh b/tools/test/test-setup.sh
index 952754c..1a5be23 100755
--- a/tools/test/test-setup.sh
+++ b/tools/test/test-setup.sh
@@ -322,11 +322,13 @@
("$1" "$TEST_PATH" "${@:3}" 2>&1) <&0 &
fi
else
+ set -o pipefail
if [ -z "$COVERAGE_DIR" ]; then
("${TEST_PATH}" "$@" 2>&1 | tee -a "${XML_OUTPUT_FILE}.log") <&0 &
else
("$1" "$TEST_PATH" "${@:3}" 2>&1 | tee -a "${XML_OUTPUT_FILE}.log") <&0 &
fi
+ set +o pipefail
fi
childPid=$!