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) {