Use getRunfilesPath for run_under executable path generation. getRootRelativePath doesn't return a valid runfiles path for external source files anymore after the recent external source root change. Also, it won't work for external labels either once the --nolegacy_external_runfiles becomes default. This fixes issue #12545.
PiperOrigin-RevId: 345435649
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
index f98b7d5..cb8f913 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
@@ -194,7 +194,7 @@
TestRunnerAction testAction, List<String> args, boolean executedOnWindows) {
TestTargetExecutionSettings execSettings = testAction.getExecutionSettings();
if (execSettings.getRunUnderExecutable() != null) {
- args.add(execSettings.getRunUnderExecutable().getRootRelativePath().getCallablePathString());
+ args.add(execSettings.getRunUnderExecutable().getRunfilesPath().getCallablePathString());
} else {
if (execSettings.needsShell(executedOnWindows)) {
// TestActionBuilder constructs TestRunnerAction with a 'null' shell only when none is
diff --git a/src/test/shell/bazel/bazel_test_test.sh b/src/test/shell/bazel/bazel_test_test.sh
index 2d61777..662b27b 100755
--- a/src/test/shell/bazel/bazel_test_test.sh
+++ b/src/test/shell/bazel/bazel_test_test.sh
@@ -266,6 +266,52 @@
expect_log 'hello script!!! testing/t1'
}
+function test_run_under_external_file_with_options() {
+ # Set up the external repo.
+ local run_repo=$TEST_TMPDIR/run
+ mkdir -p $run_repo || fail "mkdir run_repo failed"
+ touch $run_repo/WORKSPACE
+
+ cat <<EOF > $run_repo/BUILD
+exports_files(["under.sh"])
+EOF
+ cat <<EOF > $run_repo/under.sh
+#!/bin/sh
+echo running under @run//:under "\$*"
+EOF
+ chmod u+x $run_repo/under.sh
+
+
+ # Set up the main repo.
+ cat <<EOF > WORKSPACE
+local_repository(
+ name = "run",
+ path = "../run",
+)
+EOF
+
+ mkdir -p testing || fail "mkdir testing failed"
+
+ cat <<EOF > testing/BUILD
+sh_test(
+ name = "passing_test" ,
+ srcs = [ "passing_test.sh" ])
+EOF
+ cat <<EOF > testing/passing_test.sh
+#!/bin/sh
+exit 0
+EOF
+ chmod u+x testing/passing_test.sh
+
+
+ bazel test //testing:passing_test -s --run_under='@run//:under.sh -c' \
+ --test_output=all >& $TEST_log || fail "Expected success"
+
+ expect_log 'running under @run//:under -c testing/passing_test'
+ expect_log 'passing_test *PASSED'
+ expect_log '1 test passes.$'
+}
+
function test_test_timeout() {
mkdir -p dir