Simplify BinTools setup for integration tests
Progress on #4608.
PiperOrigin-RevId: 185126689
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java
index dc52388..dd1ac20 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java
@@ -105,32 +105,12 @@
}
/**
- * Populates the _bin directory by symlinking the necessary files from the given
- * srcDir, and returns the corresponding BinTools.
+ * Returns a BinTools instance. Before calling this method, you have to populate the
+ * {@link BlazeDirectories#getEmbeddedBinariesRoot} directory.
*/
@VisibleForTesting
public static BinTools forIntegrationTesting(
- BlazeDirectories directories, String srcDir, Iterable<String> tools, String repositoryName)
- throws IOException {
- Path srcPath = directories.getOutputBase().getFileSystem().getPath(srcDir);
- for (String embedded : tools) {
- Path runfilesPath = srcPath.getRelative(embedded);
- if (!runfilesPath.isFile()) {
- // The file isn't there - nothing to symlink!
- //
- // Note: This path is usually taken by the tests using the in-memory
- // file system. They can't run the embedded scripts anyhow, so there isn't
- // much point in creating a symlink to a non-existent binary here.
- continue;
- }
- Path outputPath = directories.getExecRoot(repositoryName).getChild("_bin").getChild(embedded);
- if (outputPath.exists()) {
- outputPath.delete();
- }
- FileSystemUtils.createDirectoryAndParents(outputPath.getParentDirectory());
- outputPath.createSymbolicLink(runfilesPath);
- }
-
+ BlazeDirectories directories, Iterable<String> tools, String repositoryName) {
return new BinTools(directories, ImmutableList.copyOf(tools)).setBinDir(repositoryName);
}
@@ -176,7 +156,7 @@
public void setupBuildTools(String workspaceName) throws ExecException {
setBinDir(workspaceName);
try {
- FileSystemUtils.createDirectoryAndParents(binDir);
+ binDir.createDirectoryAndParents();
} catch (IOException e) {
throw new EnvironmentalExecException("could not create directory '" + binDir + "'", e);
}
diff --git a/src/test/java/com/google/devtools/build/lib/integration/util/IntegrationMock.java b/src/test/java/com/google/devtools/build/lib/integration/util/IntegrationMock.java
index e392778..54a1154 100644
--- a/src/test/java/com/google/devtools/build/lib/integration/util/IntegrationMock.java
+++ b/src/test/java/com/google/devtools/build/lib/integration/util/IntegrationMock.java
@@ -18,7 +18,6 @@
import com.google.devtools.build.lib.testutil.BlazeTestUtils;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.vfs.FileSystem;
-import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import java.io.IOException;
import java.util.ArrayList;
@@ -33,14 +32,16 @@
}
/**
- * Populates the _embedded_binaries/ directory, containing all binaries/libraries, by symlinking
- * directories#getEmbeddedBinariesRoot() to the test's runfiles tree.
+ * Populates the _embedded_binaries/ directory with all files found in any of the directories in
+ * {@link TestConstants#EMBEDDED_SCRIPTS_PATHS} by creating symlinks in
+ * {@link BlazeDirectories#getEmbeddedBinariesRoot} that point to the runfiles tree
+ * of the currently running test (as obtained from {@link BlazeTestUtils#runfilesDir}).
*/
public BinTools getIntegrationBinTools(
FileSystem fileSystem, BlazeDirectories directories, String workspaceName)
throws IOException {
- Path embeddedDir = directories.getEmbeddedBinariesRoot();
- FileSystemUtils.createDirectoryAndParents(embeddedDir);
+ Path embeddedBinariesRoot = directories.getEmbeddedBinariesRoot();
+ embeddedBinariesRoot.createDirectoryAndParents();
Path runfiles = fileSystem.getPath(BlazeTestUtils.runfilesDir());
// Copy over everything in embedded_scripts.
@@ -56,13 +57,15 @@
for (Path fromFile : files) {
try {
- embeddedDir.getChild(fromFile.getBaseName()).createSymbolicLink(fromFile);
+ embeddedBinariesRoot.getChild(fromFile.getBaseName()).createSymbolicLink(fromFile);
} catch (IOException e) {
System.err.println("Could not symlink: " + e.getMessage());
}
}
return BinTools.forIntegrationTesting(
- directories, embeddedDir.toString(), TestConstants.EMBEDDED_TOOLS, workspaceName);
+ directories,
+ TestConstants.EMBEDDED_TOOLS,
+ workspaceName);
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
index d4c5cac..bd5adbf 100644
--- a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
@@ -145,7 +145,7 @@
LocalEnvProvider.UNMODIFIED))),
ImmutableList.<ActionContextProvider>of());
- executor.getExecRoot().createDirectory();
+ executor.getExecRoot().createDirectoryAndParents();
}
private Spawn createSpawn(String... arguments) {