diff --git a/src/test/java/com/google/devtools/build/lib/exec/SymlinkTreeHelperTest.java b/src/test/java/com/google/devtools/build/lib/exec/SymlinkTreeHelperTest.java
index e7314a9..8e81445 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/SymlinkTreeHelperTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/SymlinkTreeHelperTest.java
@@ -15,13 +15,19 @@
 package com.google.devtools.build.lib.exec;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.shell.Command;
 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 com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Map;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -48,4 +54,52 @@
     assertThat(commandLine[1]).isEqualTo("input_manifest");
     assertThat(commandLine[2]).isEqualTo("output/MANIFEST");
   }
+
+  @Test
+  public void readManifest() throws Exception {
+    Path execRoot = fs.getPath("/my/workspace");
+    execRoot.createDirectoryAndParents();
+    Path inputManifestPath = execRoot.getRelative("input_manifest");
+    FileSystemUtils.writeContentAsLatin1(inputManifestPath, "from to\nmetadata");
+    Map<PathFragment, PathFragment> symlinks =
+        SymlinkTreeHelper.readSymlinksFromFilesetManifest(inputManifestPath);
+    assertThat(symlinks).containsExactly(PathFragment.create("from"), PathFragment.create("to"));
+  }
+
+  @Test
+  public void readMultilineManifest() throws Exception {
+    Path execRoot = fs.getPath("/my/workspace");
+    execRoot.createDirectoryAndParents();
+    Path inputManifestPath = execRoot.getRelative("input_manifest");
+    FileSystemUtils.writeContentAsLatin1(
+        inputManifestPath, "from to\nmetadata\n/foo /bar\nmetadata");
+    Map<PathFragment, PathFragment> symlinks =
+        SymlinkTreeHelper.readSymlinksFromFilesetManifest(inputManifestPath);
+    assertThat(symlinks)
+        .containsExactly(
+            PathFragment.create("from"),
+            PathFragment.create("to"),
+            PathFragment.create("/foo"),
+            PathFragment.create("/bar"));
+  }
+
+  @Test
+  public void readCorruptManifest() throws Exception {
+    Path execRoot = fs.getPath("/my/workspace");
+    execRoot.createDirectoryAndParents();
+    Path inputManifestPath = execRoot.getRelative("input_manifest");
+    FileSystemUtils.writeContentAsLatin1(inputManifestPath, "from to");
+    assertThrows(
+        IOException.class,
+        () -> SymlinkTreeHelper.readSymlinksFromFilesetManifest(inputManifestPath));
+  }
+
+  @Test
+  public void readNonExistentManifestFails() {
+    Path execRoot = fs.getPath("/my/workspace");
+    Path inputManifestPath = execRoot.getRelative("input_manifest");
+    assertThrows(
+        FileNotFoundException.class,
+        () -> SymlinkTreeHelper.readSymlinksFromFilesetManifest(inputManifestPath));
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/exec/SymlinkTreeStrategyTest.java b/src/test/java/com/google/devtools/build/lib/exec/SymlinkTreeStrategyTest.java
index b81ad7a..b355035 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/SymlinkTreeStrategyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/SymlinkTreeStrategyTest.java
@@ -16,7 +16,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -34,7 +34,6 @@
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
 import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.vfs.OutputService;
-import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.Map;
 import org.junit.Test;
@@ -48,7 +47,8 @@
   @Test
   public void testArtifactToPathConversion() {
     Artifact artifact = getBinArtifactWithNoOwner("dir/foo");
-    assertThat(SymlinkTreeStrategy.TO_PATH.apply(artifact)).isEqualTo(artifact.getPath());
+    assertThat(SymlinkTreeStrategy.TO_PATH.apply(artifact))
+        .isEqualTo(artifact.getPath().asFragment());
     assertThat(SymlinkTreeStrategy.TO_PATH.apply(null)).isEqualTo(null);
   }
 
@@ -68,6 +68,13 @@
     Artifact inputManifest = getBinArtifactWithNoOwner("dir/manifest.in");
     Artifact outputManifest = getBinArtifactWithNoOwner("dir/MANIFEST");
     Artifact runfile = getBinArtifactWithNoOwner("dir/runfile");
+    doAnswer(
+            (i) -> {
+              outputManifest.getPath().getParentDirectory().createDirectoryAndParents();
+              return null;
+            })
+        .when(outputService)
+        .createSymlinkTree(any(), any());
 
     Runfiles runfiles =
         new Runfiles.Builder("TESTING", false)
@@ -87,13 +94,12 @@
     action.execute(context);
 
     @SuppressWarnings("unchecked")
-    ArgumentCaptor<Map<PathFragment, Path>> capture = ArgumentCaptor.forClass(Map.class);
-    verify(outputService, times(1))
-        .createSymlinkTree(any(), capture.capture(), any(), anyBoolean(), any());
+    ArgumentCaptor<Map<PathFragment, PathFragment>> capture = ArgumentCaptor.forClass(Map.class);
+    verify(outputService, times(1)).createSymlinkTree(capture.capture(), any());
     assertThat(capture.getValue())
         .containsExactly(
             PathFragment.create("TESTING/dir/runfile"),
-            runfile.getPath(),
+            runfile.getPath().asFragment(),
             PathFragment.create("TESTING/dir/empty"),
             null);
   }
