Refactor test action preparation Move all deletion / directory creation to prepareFileSystem. PiperOrigin-RevId: 245374483
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java index 2c45402..ead826f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
@@ -923,6 +923,10 @@ return getPath(xmlOutputPath); } + public Path getCoverageDirectory() { + return getPath(TestRunnerAction.this.getCoverageDirectory()); + } + public Path getCoverageDataPath() { return getPath(getCoverageData().getExecPath()); }
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 0483952..2eb8c08 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
@@ -97,7 +97,6 @@ TestRunnerAction action, ActionExecutionContext actionExecutionContext) throws ExecException, InterruptedException { Path execRoot = actionExecutionContext.getExecRoot(); - Path coverageDir = execRoot.getRelative(action.getCoverageDirectory()); Path runfilesDir = getLocalRunfilesDirectory( action, @@ -143,7 +142,7 @@ ImmutableList.copyOf(action.getSpawnOutputs()), localResourceUsage); return new StandaloneTestRunnerSpawn( - action, actionExecutionContext, spawn, tmpDir, coverageDir, workingDirectory, execRoot); + action, actionExecutionContext, spawn, tmpDir, workingDirectory, execRoot); } private StandaloneFailedAttemptResult processFailedTestAttempt( @@ -454,7 +453,6 @@ private final ActionExecutionContext actionExecutionContext; private final Spawn spawn; private final Path tmpDir; - private final Path coverageDir; private final Path workingDirectory; private final Path execRoot; @@ -463,14 +461,12 @@ ActionExecutionContext actionExecutionContext, Spawn spawn, Path tmpDir, - Path coverageDir, Path workingDirectory, Path execRoot) { this.testAction = testAction; this.actionExecutionContext = actionExecutionContext; this.spawn = spawn; this.tmpDir = tmpDir; - this.coverageDir = coverageDir; this.workingDirectory = workingDirectory; this.execRoot = execRoot; } @@ -483,7 +479,7 @@ @Override public TestAttemptContinuation beginExecution() throws InterruptedException, IOException, ExecException { - prepareFileSystem(testAction, tmpDir, coverageDir, workingDirectory); + prepareFileSystem(testAction, actionExecutionContext.getExecRoot(), tmpDir, workingDirectory); return beginTestAttempt(testAction, spawn, actionExecutionContext, execRoot); }
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 0dd2189..c846254 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
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.analysis.test.TestConfiguration; import com.google.devtools.build.lib.analysis.test.TestResult; import com.google.devtools.build.lib.analysis.test.TestRunnerAction; +import com.google.devtools.build.lib.analysis.test.TestRunnerAction.ResolvedPaths; import com.google.devtools.build.lib.analysis.test.TestTargetExecutionSettings; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Event; @@ -63,24 +64,32 @@ * not result in stale files. */ protected void prepareFileSystem( - TestRunnerAction testAction, Path tmpDir, Path coverageDir, Path workingDirectory) + TestRunnerAction testAction, Path execRoot, Path tmpDir, Path workingDirectory) throws IOException { - if (testAction.isCoverageMode()) { - recreateDirectory(coverageDir); + if (tmpDir != null) { + recreateDirectory(tmpDir); } - recreateDirectory(tmpDir); - workingDirectory.createDirectoryAndParents(); + if (workingDirectory != null) { + workingDirectory.createDirectoryAndParents(); + } + + ResolvedPaths resolvedPaths = testAction.resolve(execRoot); + if (testAction.isCoverageMode()) { + recreateDirectory(resolvedPaths.getCoverageDirectory()); + } + + resolvedPaths.getBaseDir().createDirectoryAndParents(); + resolvedPaths.getUndeclaredOutputsDir().createDirectoryAndParents(); + resolvedPaths.getUndeclaredOutputsAnnotationsDir().createDirectoryAndParents(); + resolvedPaths.getSplitLogsDir().createDirectoryAndParents(); } /** * Ensures that all directories used to run test are in the correct state and their content will * not result in stale files. Only use this if no local tmp and working directory are required. */ - protected void prepareFileSystem(TestRunnerAction testAction, Path coverageDir) - throws IOException { - if (testAction.isCoverageMode()) { - recreateDirectory(coverageDir); - } + protected void prepareFileSystem(TestRunnerAction testAction, Path execRoot) throws IOException { + prepareFileSystem(testAction, execRoot, null, null); } /** Removes directory if it exists and recreates it. */
diff --git a/src/test/shell/bazel/bazel_test_test.sh b/src/test/shell/bazel/bazel_test_test.sh index f2f9a0a..07c1f82 100755 --- a/src/test/shell/bazel/bazel_test_test.sh +++ b/src/test/shell/bazel/bazel_test_test.sh
@@ -717,12 +717,12 @@ bazel test -s //dir:test &> $TEST_log || fail "expected success" # Check that the undeclared outputs directory doesn't exist. - outputs_dir=bazel-testlogs/dir/test/test.outputs/ - [ ! -d $outputs_dir ] || fail "$outputs_dir was present after test" + outputs_zip=bazel-testlogs/dir/test/test.outputs/outputs.zip + [ ! -e $outputs_zip ] || fail "$outputs_zip was present after test" # Check that the undeclared outputs manifest directory doesn't exist. - outputs_manifest_dir=bazel-testlogs/dir/test/test.outputs_manifest/ - [ ! -d $outputs_manifest_dir ] || fail "$outputs_manifest_dir was present after test" + outputs_manifest=bazel-testlogs/dir/test/test.outputs_manifest/MANIFEST + [ ! -d $outputs_manifest ] || fail "$outputs_manifest was present after test" } function test_test_with_nobuild_runfile_manifests() {