aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java31
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java71
3 files changed, 97 insertions, 32 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
index b6c8443d84..031d6183d0 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
@@ -250,18 +250,43 @@ public class StandaloneTestStrategy extends TestStrategy {
env.put("TEST_SRCDIR", testSrcDir);
env.put("TEST_TMPDIR", tmpDirString);
env.put("TEST_WORKSPACE", action.getRunfilesPrefix());
+
+ // TODO(ulfjack): Call into TestRunnerAction.setupEnvVariables instead.
TestRunnerAction.ResolvedPaths resolvedPaths = action.resolve(execRoot);
env.put(
"XML_OUTPUT_FILE", resolvedPaths.getXmlOutputPath().relativeTo(execRoot).getPathString());
+ env.put("TEST_SIZE", action.getTestProperties().getSize().toString());
+ env.put("TEST_TIMEOUT", Integer.toString(getTimeout(action)));
+
+ // When we run test multiple times, set different TEST_RANDOM_SEED values for each run.
+ if (action.getConfiguration().getRunsPerTestForLabel(action.getOwner().getLabel()) > 1) {
+ env.put("TEST_RANDOM_SEED", Integer.toString(action.getRunNumber() + 1));
+ }
+
+ String testFilter = action.getExecutionSettings().getTestFilter();
+ if (testFilter != null) {
+ env.put("TESTBRIDGE_TEST_ONLY", testFilter);
+ }
+
+ if (action.isSharded()) {
+ env.put("TEST_SHARD_INDEX", Integer.toString(action.getShardNum()));
+ env.put(
+ "TEST_TOTAL_SHARDS", Integer.toString(action.getExecutionSettings().getTotalShards()));
+ }
if (!action.isEnableRunfiles()) {
env.put("RUNFILES_MANIFEST_ONLY", "1");
}
if (action.isCoverageMode()) {
+ env.put(
+ "COVERAGE_MANIFEST",
+ action.getExecutionSettings().getInstrumentedFileManifest().getExecPathString());
+ // Instruct remote-runtest.sh/local-runtest.sh not to cd into the runfiles directory.
+ env.put("RUNTEST_PRESERVE_CWD", "1");
+ env.put("MICROCOVERAGE_REQUESTED", action.isMicroCoverageMode() ? "true" : "false");
env.put("COVERAGE_DIR", action.getCoverageDirectory().toString());
env.put("COVERAGE_OUTPUT_FILE", action.getCoverageData().getExecPathString());
}
-
return env;
}
diff --git a/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
index 1cf2033600..d353302b7e 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java
@@ -131,9 +131,6 @@ public abstract class TestStrategy implements TestActionContext {
public static final PathFragment TEST_TMP_ROOT = new PathFragment("_tmp");
- // Used for selecting subset of testcase / testmethods.
- private static final String TEST_BRIDGE_TEST_FILTER_ENV = "TESTBRIDGE_TEST_ONLY";
-
// Used for generating unique temporary directory names. Contains the next numeric index for every
// executable base name.
private final Map<String, Integer> tmpIndex = new HashMap<>();
@@ -165,34 +162,6 @@ public abstract class TestStrategy implements TestActionContext {
env.putAll(action.getConfiguration().getLocalShellEnvironment());
env.remove("LANG");
env.put("TZ", "UTC");
- env.put("TEST_SIZE", action.getTestProperties().getSize().toString());
- env.put("TEST_TIMEOUT", Integer.toString(getTimeout(action)));
-
- if (action.isSharded()) {
- env.put("TEST_SHARD_INDEX", Integer.toString(action.getShardNum()));
- env.put(
- "TEST_TOTAL_SHARDS", Integer.toString(action.getExecutionSettings().getTotalShards()));
- }
-
- // When we run test multiple times, set different TEST_RANDOM_SEED values for each run.
- if (action.getConfiguration().getRunsPerTestForLabel(action.getOwner().getLabel()) > 1) {
- env.put("TEST_RANDOM_SEED", Integer.toString(action.getRunNumber() + 1));
- }
-
- String testFilter = action.getExecutionSettings().getTestFilter();
- if (testFilter != null) {
- env.put(TEST_BRIDGE_TEST_FILTER_ENV, testFilter);
- }
-
- if (action.isCoverageMode()) {
- env.put(
- "COVERAGE_MANIFEST",
- action.getExecutionSettings().getInstrumentedFileManifest().getExecPathString());
- // Instruct remote-runtest.sh/local-runtest.sh not to cd into the runfiles directory.
- env.put("RUNTEST_PRESERVE_CWD", "1");
- env.put("MICROCOVERAGE_REQUESTED", action.isMicroCoverageMode() ? "true" : "false");
- }
-
return env;
}
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 a69d45c959..b84055110b 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
@@ -57,6 +57,9 @@ import javax.annotation.Nullable;
public class TestRunnerAction extends AbstractAction implements NotifyOnActionCacheHit {
public static final PathFragment COVERAGE_TMP_ROOT = new PathFragment("_coverage");
+ // Used for selecting subset of testcase / testmethods.
+ private static final String TEST_BRIDGE_TEST_FILTER_ENV = "TESTBRIDGE_TEST_ONLY";
+
private static final String GUID = "94857c93-f11c-4cbc-8c1b-e0a281633f9e";
private final NestedSet<Artifact> runtime;
@@ -358,6 +361,70 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
}
}
+ public void setupEnvVariables(Map<String, String> env, int timeoutInSeconds) {
+ env.put("TEST_SIZE", getTestProperties().getSize().toString());
+ env.put("TEST_TIMEOUT", Integer.toString(timeoutInSeconds));
+ env.put("TEST_WORKSPACE", getRunfilesPrefix());
+
+ // When we run test multiple times, set different TEST_RANDOM_SEED values for each run.
+ // Don't override any previous setting.
+ if (getConfiguration().getRunsPerTestForLabel(getOwner().getLabel()) > 1
+ && !env.containsKey("TEST_RANDOM_SEED")) {
+ env.put("TEST_RANDOM_SEED", Integer.toString(getRunNumber() + 1));
+ }
+
+ String testFilter = getExecutionSettings().getTestFilter();
+ if (testFilter != null) {
+ env.put(TEST_BRIDGE_TEST_FILTER_ENV, testFilter);
+ }
+
+ env.put("TEST_WARNINGS_OUTPUT_FILE", getTestWarningsPath().getPathString());
+ env.put("TEST_UNUSED_RUNFILES_LOG_FILE", getUnusedRunfilesLogPath().getPathString());
+
+ env.put("TEST_LOGSPLITTER_OUTPUT_FILE", getSplitLogsPath().getPathString());
+
+ env.put("TEST_UNDECLARED_OUTPUTS_ZIP", getUndeclaredOutputsZipPath().getPathString());
+ env.put("TEST_UNDECLARED_OUTPUTS_DIR", getUndeclaredOutputsDir().getPathString());
+ env.put("TEST_UNDECLARED_OUTPUTS_MANIFEST", getUndeclaredOutputsManifestPath().getPathString());
+ env.put(
+ "TEST_UNDECLARED_OUTPUTS_ANNOTATIONS",
+ getUndeclaredOutputsAnnotationsPath().getPathString());
+ env.put(
+ "TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR",
+ getUndeclaredOutputsAnnotationsDir().getPathString());
+
+ env.put("TEST_PREMATURE_EXIT_FILE", getExitSafeFile().getPathString());
+ env.put("TEST_INFRASTRUCTURE_FAILURE_FILE", getInfrastructureFailureFile().getPathString());
+
+ if (isSharded()) {
+ env.put("TEST_SHARD_INDEX", Integer.toString(getShardNum()));
+ env.put("TEST_TOTAL_SHARDS", Integer.toString(getExecutionSettings().getTotalShards()));
+ env.put("TEST_SHARD_STATUS_FILE", getTestShard().getPathString());
+ }
+ env.put("XML_OUTPUT_FILE", getXmlOutputPath().getPathString());
+
+ if (!isEnableRunfiles()) {
+ // If runfiles are disabled, tell remote-runtest.sh/local-runtest.sh about that.
+ env.put("RUNFILES_MANIFEST_ONLY", "1");
+ }
+
+ if (isCoverageMode()) {
+ // Instruct remote-runtest.sh/local-runtest.sh not to cd into the runfiles directory.
+ // TODO(ulfjack): Find a way to avoid setting this variable.
+ env.put("RUNTEST_PRESERVE_CWD", "1");
+
+ env.put("COVERAGE_MANIFEST", getCoverageManifest().getExecPathString());
+ env.put("COVERAGE_DIR", getCoverageDirectory().getPathString());
+ env.put("COVERAGE_OUTPUT_FILE", getCoverageData().getExecPathString());
+ if (isMicroCoverageMode()) {
+ env.put("MICROCOVERAGE_REQUESTED", "true");
+ env.put("MICROCOVERAGE_OUTPUT_FILE", getMicroCoverageData().getExecPathString());
+ } else {
+ env.put("MICROCOVERAGE_REQUESTED", "false");
+ }
+ }
+ }
+
/**
* Gets the test name in a user-friendly format.
* Will generally include the target name and run/shard numbers, if applicable.
@@ -474,6 +541,10 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
return coverageData;
}
+ @Nullable public Artifact getCoverageManifest() {
+ return getExecutionSettings().getInstrumentedFileManifest();
+ }
+
/** Returns true if coverage data should be gathered. */
public boolean isCoverageMode() {
return coverageData != null;