diff --git a/src/test/shell/bazel/run_test.sh b/src/test/shell/bazel/run_test.sh index 8f30f03345e637..0795c7331e3dc8 100755 --- a/src/test/shell/bazel/run_test.sh +++ b/src/test/shell/bazel/run_test.sh @@ -125,4 +125,90 @@ eof echo "$output" | grep --fixed-strings 'ExecuteProgram(C:\first_part second_part)' || fail "Expected error message to contain unquoted path" } +function test_run_with_runfiles_env() { + mkdir -p b + cat > b/BUILD <<'EOF' +sh_binary( + name = "binary", + srcs = ["binary.sh"], + deps = ["@bazel_tools//tools/bash/runfiles"], +) +EOF + cat > b/binary.sh <<'EOF' +#!/usr/bin/env bash +# --- begin runfiles.bash initialization v3 --- +# Copy-pasted from the Bazel Bash runfiles library v3. +set -uo pipefail; set +e; f=bazel_tools/tools/bash/runfiles/runfiles.bash +source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \ + source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \ + source "$0.runfiles/$f" 2>/dev/null || \ + source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ + source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ + { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e +# --- end runfiles.bash initialization v3 --- + +own_path=$(rlocation main/b/binary.sh) +echo "own path: $own_path" +test -f "$own_path" +EOF + chmod +x b/binary.sh + + bazel run //b:binary --script_path=script.bat &>"$TEST_log" \ + || fail "Script generation should succeed" + + cat ./script.bat &>"$TEST_log" + + # Make it so that the runfiles variables point to an incorrect but valid + # runfiles directory/manifest, simulating a left over one from a different + # test to which RUNFILES_DIR and RUNFILES_MANIFEST_FILE point in the client + # env. + BOGUS_RUNFILES_DIR="$(pwd)/bogus_runfiles/bazel_tools/tools/bash/runfiles" + mkdir -p "$BOGUS_RUNFILES_DIR" + touch "$BOGUS_RUNFILES_DIR/runfiles.bash" + BOGUS_RUNFILES_MANIFEST_FILE="$(pwd)/bogus_manifest" + echo "bazel_tools/tools/bash/runfiles/runfiles.bash bogus/path" > "$BOGUS_RUNFILES_MANIFEST_FILE" + + RUNFILES_DIR="$BOGUS_RUNFILES_DIR" RUNFILES_MANIFEST_FILE="$BOGUS_RUNFILES_MANIFEST_FILE" \ + ./script.bat || fail "Run should succeed" +} + +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 952754c82dd62d..1a5be236bb3c47 100755 --- a/tools/test/test-setup.sh +++ b/tools/test/test-setup.sh @@ -322,11 +322,13 @@ if [[ "${EXPERIMENTAL_SPLIT_XML_GENERATION}" == "1" ]]; then ("$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=$!