aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-09-25 15:18:49 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-09-28 11:39:01 +0000
commitb393a53c5a3ce2cfd28a42d6362a02401f987543 (patch)
tree1cdffbcb8a9db946893d63d9ce5310a3b0401f7e /src/main/java/com/google/devtools/build/lib
parentdc7af5392e60b6b98ebaea7ead11d47218a8df03 (diff)
Find the test setup script based on its basename and not its precise exec path.
This is necessary so that the existence of a script //tools/test:test-setup.sh is not hardcoded into Bazel, which is in turn necessary so that the Bazel tools (//tools/...) are not required to be in the main repository. -- MOS_MIGRATED_REVID=103943618
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java15
3 files changed, 25 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
index 3f27547250..1d1e101b18 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.test;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
+import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.BaseSpawn;
import com.google.devtools.build.lib.actions.EnvironmentalExecException;
import com.google.devtools.build.lib.actions.ExecException;
@@ -60,7 +61,7 @@ public class StandaloneTestStrategy extends TestStrategy {
this.workspace = workspace;
}
- private static final String TEST_SETUP = "tools/test/test-setup.sh";
+ private static final String TEST_SETUP_BASENAME = "test-setup.sh";
@Override
public void exec(TestRunnerAction action, ActionExecutionContext actionExecutionContext)
@@ -88,11 +89,12 @@ public class StandaloneTestStrategy extends TestStrategy {
info.put("timeout", "" + getTimeout(action));
info.putAll(action.getTestProperties().getExecutionInfo());
+ Artifact testSetup = action.getRuntimeArtifact(TEST_SETUP_BASENAME);
Spawn spawn =
new BaseSpawn(
// Bazel lacks much of the tooling for coverage, so we don't attempt to pass a coverage
// script here.
- getArgs(TEST_SETUP, "", action),
+ getArgs(testSetup.getExecPathString(), "", action),
env,
info,
new RunfilesSupplierImpl(
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 b03386598e..1955d6a87f 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
@@ -23,11 +23,13 @@ import com.google.devtools.build.lib.actions.Root;
import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
+import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.RunfilesSupport;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.TargetUtils;
@@ -188,9 +190,9 @@ public final class TestActionBuilder {
NestedSetBuilder<Artifact> inputsBuilder = NestedSetBuilder.stableOrder();
inputsBuilder.addTransitive(
NestedSetBuilder.create(Order.STABLE_ORDER, runfilesSupport.getRunfilesMiddleman()));
- for (TransitiveInfoCollection dep : ruleContext.getPrerequisites("$test_runtime", Mode.HOST)) {
- inputsBuilder.addTransitive(dep.getProvider(FileProvider.class).getFilesToBuild());
- }
+ NestedSet<Artifact> testRuntime = PrerequisiteArtifacts.nestedSet(
+ ruleContext, "$test_runtime", Mode.HOST);
+ inputsBuilder.addTransitive(testRuntime);
TestTargetProperties testProperties = new TestTargetProperties(
ruleContext, executionRequirements);
@@ -265,7 +267,7 @@ public final class TestActionBuilder {
}
env.registerAction(new TestRunnerAction(
- ruleContext.getActionOwner(), inputs,
+ ruleContext.getActionOwner(), inputs, testRuntime,
testLog, cacheStatus,
coverageArtifact, microCoverageArtifact,
testProperties, extraEnv, executionSettings,
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 5872fb17a6..84f66cbe3f 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
@@ -27,10 +27,12 @@ import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.actions.Executor;
import com.google.devtools.build.lib.actions.NotifyOnActionCacheHit;
import com.google.devtools.build.lib.actions.ResourceSet;
+import com.google.devtools.build.lib.actions.UserExecException;
import com.google.devtools.build.lib.analysis.RunfilesSupplierImpl;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.RunUnder;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.LoggingUtil;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -58,6 +60,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
private static final String GUID = "94857c93-f11c-4cbc-8c1b-e0a281633f9e";
+ private final NestedSet<Artifact> runtime;
private final BuildConfiguration configuration;
private final Artifact testLog;
private final Artifact cacheStatus;
@@ -111,6 +114,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
*/
TestRunnerAction(ActionOwner owner,
Iterable<Artifact> inputs,
+ NestedSet<Artifact> runtime, // Must be a subset of inputs
Artifact testLog,
Artifact cacheStatus,
Artifact coverageArtifact,
@@ -126,6 +130,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
// Note that this action only cares about the runfiles, not the mapping.
new RunfilesSupplierImpl(new PathFragment("runfiles"), executionSettings.getRunfiles()),
list(testLog, cacheStatus, coverageArtifact, microCoverageArtifact));
+ this.runtime = runtime;
this.configuration = Preconditions.checkNotNull(configuration);
this.testLog = testLog;
this.cacheStatus = cacheStatus;
@@ -539,6 +544,16 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
return getOutputs();
}
+ public Artifact getRuntimeArtifact(String basename) throws ExecException {
+ for (Artifact runtimeArtifact : runtime) {
+ if (runtimeArtifact.getExecPath().getBaseName().equals(basename)) {
+ return runtimeArtifact;
+ }
+ }
+
+ throw new UserExecException("'" + basename + "' not found in test runtime");
+ }
+
/**
* The same set of paths as the parent test action, resolved against a given exec root.
*/