diff options
Diffstat (limited to 'src')
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; |