Make TestProvider provide the list of test outputs
The plan is to use this in a follow up CL to determine outputs of a test for the purposes of staging them locally when using remote execution.
Closes #8944.
PiperOrigin-RevId: 259291416
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
index 6e8ee8d..0022330 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
@@ -20,6 +20,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactRoot;
import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
@@ -330,6 +331,7 @@
List<Artifact.DerivedArtifact> results =
Lists.newArrayListWithCapacity(runsPerTest * shardRuns);
ImmutableList.Builder<Artifact> coverageArtifacts = ImmutableList.builder();
+ ImmutableList.Builder<ActionInput> testOutputs = ImmutableList.builder();
for (int run = 0; run < runsPerTest; run++) {
// Use a 1-based index for user friendliness.
@@ -358,7 +360,7 @@
coverageArtifacts.add(coverageArtifact);
}
- env.registerAction(
+ TestRunnerAction testRunnerAction =
new TestRunnerAction(
ruleContext.getActionOwner(),
inputs,
@@ -379,7 +381,13 @@
(!isUsingTestWrapperInsteadOfTestSetupScript
|| executionSettings.needsShell(isExecutedOnWindows))
? ShToolchain.getPathOrError(ruleContext)
- : null));
+ : null);
+
+ testOutputs.addAll(testRunnerAction.getSpawnOutputs());
+ testOutputs.addAll(testRunnerAction.getOutputs());
+
+ env.registerAction(testRunnerAction);
+
results.add(cacheStatus);
}
}
@@ -394,8 +402,14 @@
reportGenerator = reportGeneratorTarget.getProvider(FilesToRunProvider.class);
}
- return new TestParams(runsPerTest, shards, TestTimeout.getTestTimeout(ruleContext.getRule()),
- ruleContext.getRule().getRuleClass(), ImmutableList.copyOf(results),
- coverageArtifacts.build(), reportGenerator);
+ return new TestParams(
+ runsPerTest,
+ shards,
+ TestTimeout.getTestTimeout(ruleContext.getRule()),
+ ruleContext.getRule().getRuleClass(),
+ ImmutableList.copyOf(results),
+ coverageArtifacts.build(),
+ reportGenerator,
+ testOutputs.build());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
index cc64055..1be1bde 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.analysis.test;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
@@ -74,6 +75,7 @@
private final ImmutableList<Artifact.DerivedArtifact> testStatusArtifacts;
private final ImmutableList<Artifact> coverageArtifacts;
private final FilesToRunProvider coverageReportGenerator;
+ private final ImmutableList<ActionInput> outputs;
/**
* Don't call this directly. Instead use {@link
@@ -86,7 +88,8 @@
String testRuleClass,
ImmutableList<Artifact.DerivedArtifact> testStatusArtifacts,
ImmutableList<Artifact> coverageArtifacts,
- FilesToRunProvider coverageReportGenerator) {
+ FilesToRunProvider coverageReportGenerator,
+ ImmutableList<ActionInput> outputs) {
this.runs = runs;
this.shards = shards;
this.timeout = timeout;
@@ -94,6 +97,7 @@
this.testStatusArtifacts = testStatusArtifacts;
this.coverageArtifacts = coverageArtifacts;
this.coverageReportGenerator = coverageReportGenerator;
+ this.outputs = outputs;
}
/**
@@ -145,5 +149,10 @@
public FilesToRunProvider getCoverageReportGenerator() {
return coverageReportGenerator;
}
+
+ /** Returns the list of mandatory and optional test outputs. */
+ public ImmutableList<ActionInput> getOutputs() {
+ return outputs;
+ }
}
}