Prevent users from using the WorkerTestStrategy unless they're running with the ExperimentalTestRunner.
--
PiperOrigin-RevId: 149636903
MOS_MIGRATED_REVID=149636903
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java
index b84be69..547d5ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java
@@ -250,6 +250,16 @@
List<Artifact> results = Lists.newArrayListWithCapacity(runsPerTest * shardRuns);
ImmutableList.Builder<Artifact> coverageArtifacts = ImmutableList.builder();
+ boolean useExperimentalTestRunner = false;
+ if (ruleContext.attributes().has("use_testrunner", Type.BOOLEAN)) {
+ useExperimentalTestRunner =
+ ruleContext.attributes().get("use_testrunner", Type.BOOLEAN)
+ && ruleContext
+ .attributes()
+ .get("tags", Type.STRING_LIST)
+ .contains("experimental_testrunner");
+ }
+
for (int run = 0; run < runsPerTest; run++) {
// Use a 1-based index for user friendliness.
String testRunDir =
@@ -283,17 +293,13 @@
targetName.getRelative(shardRunDir + "coverage.micro.dat"), root);
}
- boolean useTestRunner = false;
- if (ruleContext.attributes().has("use_testrunner", Type.BOOLEAN)) {
- useTestRunner = ruleContext.attributes().get("use_testrunner", Type.BOOLEAN);
- }
env.registerAction(new TestRunnerAction(
ruleContext.getActionOwner(), inputs, testRuntime,
testLog, cacheStatus,
coverageArtifact, microCoverageArtifact,
testProperties, testEnv, executionSettings,
shard, run, config, ruleContext.getWorkspaceName(),
- useTestRunner));
+ useExperimentalTestRunner));
results.add(cacheStatus);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
index 4003cd1..a2eadfc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
@@ -92,7 +92,7 @@
private final int shardNum;
private final int runNumber;
private final String workspaceName;
- private final boolean useTestRunner;
+ private final boolean useExperimentalTestRunner;
// Mutable state related to test caching.
private boolean checkedCaching = false;
@@ -132,7 +132,7 @@
int runNumber,
BuildConfiguration configuration,
String workspaceName,
- boolean useTestRunner) {
+ boolean useExperimentalTestRunner) {
super(owner, inputs,
// Note that this action only cares about the runfiles, not the mapping.
new RunfilesSupplierImpl(new PathFragment("runfiles"), executionSettings.getRunfiles()),
@@ -172,7 +172,7 @@
this.undeclaredOutputsAnnotationsPath = undeclaredOutputsAnnotationsDir.getChild("ANNOTATIONS");
this.testInfrastructureFailure = baseDir.getChild("test.infrastructure_failure");
this.workspaceName = workspaceName;
- this.useTestRunner = useTestRunner;
+ this.useExperimentalTestRunner = useExperimentalTestRunner;
Map<String, String> mergedTestEnv = new HashMap<>(configuration.getTestEnv());
mergedTestEnv.putAll(extraTestEnv);
@@ -612,8 +612,8 @@
return executionSettings;
}
- public boolean useTestRunner() {
- return useTestRunner;
+ public boolean useExperimentalTestRunner() {
+ return useExperimentalTestRunner;
}
public boolean isSharded() {
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerTestStrategy.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerTestStrategy.java
index a3b8dff..82634a5 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerTestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerTestStrategy.java
@@ -83,9 +83,10 @@
Spawn spawn,
ActionExecutionContext actionExecutionContext)
throws ExecException, InterruptedException, IOException {
- if (!action.useTestRunner()) {
- throw new UserExecException("Tests that do not use the default test runner are incompatible"
- + " with the persistent worker test strategy. Please use another test strategy");
+ if (!action.useExperimentalTestRunner()) {
+ throw new UserExecException(
+ "Tests that do not use the experimental test runner are incompatible with the persistent"
+ + " worker test strategy. Please use another test strategy");
}
if (action.isCoverageMode()) {
throw new UserExecException("Coverage is currently incompatible"
diff --git a/src/test/shell/bazel/persistent_test_runner_test.sh b/src/test/shell/bazel/persistent_test_runner_test.sh
index db7a15b..a6d5d6d 100755
--- a/src/test/shell/bazel/persistent_test_runner_test.sh
+++ b/src/test/shell/bazel/persistent_test_runner_test.sh
@@ -154,6 +154,7 @@
java_test(name = "TestWithoutRunner",
srcs = ['TestWithoutRunner.java'],
use_testrunner = 0,
+ tags = ["experimental_testrunner"],
main_class = "testrunners.TestWithoutRunner"
)
EOF
@@ -167,7 +168,46 @@
|| true
expect_log \
- "Tests that do not use the default test runner are incompatible with the persistent worker"
+ "Tests that do not use the experimental test runner are incompatible with the persistent worker"
+}
+
+function test_fail_without_experimental_testrunner() {
+ mkdir -p java/testrunners || fail "mkdir failed"
+
+ cat > java/testrunners/Tests.java <<EOF
+package testrunners;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.junit.Test;
+
+@RunWith(JUnit4.class)
+public class Tests {
+
+ @Test
+ public void testPass() {
+ // This passes
+ }
+}
+EOF
+
+ cat > java/testrunners/BUILD <<EOF
+java_test(name = "Tests",
+ srcs = ['Tests.java'],
+ deps = ['@bazel_tools//tools/jdk:TestRunner_deploy.jar'],
+)
+EOF
+
+ bazel test --no_cache_test_results //java/testrunners:Tests >& $TEST_log \
+ || fail "Normal test execution should pass."
+
+ bazel test --no_cache_test_results --test_strategy=experimental_worker >& $TEST_log \
+ //java/testrunners:Tests \
+ && fail "Test should have failed when running with an experimental runner." \
+ || true
+
+ expect_log \
+ "Tests that do not use the experimental test runner are incompatible with the persistent worker"
}
run_suite "Persistent Test Runner tests"