aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java224
1 files changed, 128 insertions, 96 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java
index 7b806f371d..ef2373f6ae 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java
@@ -22,16 +22,13 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Root;
import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
+import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.vfs.PathFragment;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
/**
* Test for {@link Runfiles}.
*/
@@ -45,79 +42,92 @@ public class RunfilesTest extends FoundationTestCase {
assertEquals(EventKind.WARNING, Iterables.getOnlyElement(eventCollector).getKind());
}
+ private Runfiles.RunfilesPath runfilesPath(String path) {
+ return runfilesPath(new PathFragment(path));
+ }
+
+ private Runfiles.RunfilesPath runfilesPath(PathFragment path) {
+ return Runfiles.RunfilesPath.alreadyResolved(
+ path, new PathFragment(TestConstants.WORKSPACE_NAME));
+ }
+
@Test
public void testFilterListForObscuringSymlinksCatchesBadObscurer() throws Exception {
- Map<PathFragment, Artifact> obscuringMap = new HashMap<>();
PathFragment pathA = new PathFragment("a");
Root root = Root.asSourceRoot(scratch.resolve("/workspace"));
Artifact artifactA = new Artifact(new PathFragment("a"), root);
- obscuringMap.put(pathA, artifactA);
- obscuringMap.put(new PathFragment("a/b"), new Artifact(new PathFragment("c/b"),
- root));
- assertThat(Runfiles.filterListForObscuringSymlinks(reporter, null, obscuringMap).entrySet())
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ null, PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath("a"), artifactA);
+ builder.put(runfilesPath("a/b"), new Artifact(new PathFragment("c/b"), root));
+ assertThat(builder.filterListForObscuringSymlinks(reporter, null).build().entrySet())
.containsExactly(Maps.immutableEntry(pathA, artifactA)).inOrder();
checkWarning();
}
@Test
public void testFilterListForObscuringSymlinksCatchesBadGrandParentObscurer() throws Exception {
- Map<PathFragment, Artifact> obscuringMap = new HashMap<>();
+ Runfiles.ManifestBuilder obscuringMap = new Runfiles.ManifestBuilder(
+ null, PathFragment.EMPTY_FRAGMENT, false);
PathFragment pathA = new PathFragment("a");
Root root = Root.asSourceRoot(scratch.resolve("/workspace"));
- Artifact artifactA = new Artifact(new PathFragment("a"),
- root);
- obscuringMap.put(pathA, artifactA);
- obscuringMap.put(new PathFragment("a/b/c"), new Artifact(new PathFragment("b/c"),
- root));
- assertThat(Runfiles.filterListForObscuringSymlinks(reporter, null, obscuringMap).entrySet())
+ Artifact artifactA = new Artifact(new PathFragment("a"), root);
+
+ obscuringMap.put(runfilesPath("a"), artifactA);
+ obscuringMap.put(runfilesPath("a/b/c"), new Artifact(new PathFragment("b/c"), root));
+ assertThat(obscuringMap.filterListForObscuringSymlinks(reporter, null).build().entrySet())
.containsExactly(Maps.immutableEntry(pathA, artifactA)).inOrder();
checkWarning();
}
@Test
public void testFilterListForObscuringSymlinksCatchesBadObscurerNoListener() throws Exception {
- Map<PathFragment, Artifact> obscuringMap = new HashMap<>();
+ Runfiles.ManifestBuilder obscuringMap = new Runfiles.ManifestBuilder(
+ null, PathFragment.EMPTY_FRAGMENT, false);
PathFragment pathA = new PathFragment("a");
Root root = Root.asSourceRoot(scratch.resolve("/workspace"));
Artifact artifactA = new Artifact(new PathFragment("a"),
root);
- obscuringMap.put(pathA, artifactA);
- obscuringMap.put(new PathFragment("a/b"), new Artifact(new PathFragment("c/b"),
- root));
- assertThat(Runfiles.filterListForObscuringSymlinks(null, null, obscuringMap).entrySet())
+ obscuringMap.put(runfilesPath("a"), artifactA);
+ obscuringMap.put(runfilesPath("a/b"), new Artifact(new PathFragment("c/b"), root));
+ assertThat(obscuringMap.filterListForObscuringSymlinks(null, null).build().entrySet())
.containsExactly(Maps.immutableEntry(pathA, artifactA)).inOrder();
}
@Test
public void testFilterListForObscuringSymlinksIgnoresOkObscurer() throws Exception {
- Map<PathFragment, Artifact> obscuringMap = new HashMap<>();
+ Runfiles.ManifestBuilder obscuringMap = new Runfiles.ManifestBuilder(
+ null, PathFragment.EMPTY_FRAGMENT, false);
PathFragment pathA = new PathFragment("a");
Root root = Root.asSourceRoot(scratch.resolve("/workspace"));
Artifact artifactA = new Artifact(new PathFragment("a"),
root);
- obscuringMap.put(pathA, artifactA);
- obscuringMap.put(new PathFragment("a/b"), new Artifact(new PathFragment("a/b"),
- root));
+ obscuringMap.put(runfilesPath("a"), artifactA);
+ obscuringMap.put(runfilesPath("a/b"), new Artifact(new PathFragment("a/b"), root));
- assertThat(Runfiles.filterListForObscuringSymlinks(reporter, null, obscuringMap).entrySet())
+ assertThat(obscuringMap.filterListForObscuringSymlinks(reporter, null).build().entrySet())
.containsExactly(Maps.immutableEntry(pathA, artifactA)).inOrder();
assertNoEvents();
}
@Test
public void testFilterListForObscuringSymlinksNoObscurers() throws Exception {
- Map<PathFragment, Artifact> obscuringMap = new HashMap<>();
+ Runfiles.ManifestBuilder obscuringMap = new Runfiles.ManifestBuilder(
+ null, PathFragment.EMPTY_FRAGMENT, false);
PathFragment pathA = new PathFragment("a");
Root root = Root.asSourceRoot(scratch.resolve("/workspace"));
Artifact artifactA = new Artifact(new PathFragment("a"),
root);
- obscuringMap.put(pathA, artifactA);
+ obscuringMap.put(
+ Runfiles.RunfilesPath.alreadyResolved(
+ pathA, new PathFragment(TestConstants.WORKSPACE_NAME)),
+ artifactA);
PathFragment pathBC = new PathFragment("b/c");
Artifact artifactBC = new Artifact(new PathFragment("a/b"),
root);
- obscuringMap.put(pathBC, artifactBC);
- assertThat(Runfiles.filterListForObscuringSymlinks(reporter, null, obscuringMap)
- .entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactA),
+ obscuringMap.put(runfilesPath(pathBC), artifactBC);
+ assertThat(obscuringMap.filterListForObscuringSymlinks(reporter, null).build()
+ .entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactA),
Maps.immutableEntry(pathBC, artifactBC));
assertNoEvents();
}
@@ -140,14 +150,15 @@ public class RunfilesTest extends FoundationTestCase {
PathFragment pathA = new PathFragment("a");
Artifact artifactB = new Artifact(new PathFragment("b"), root);
Artifact artifactC = new Artifact(new PathFragment("c"), root);
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
-
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null);
- checker.put(map, pathA, artifactB);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactB));
- checker.put(map, pathA, artifactC);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactC));
+
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+
+ builder.put(runfilesPath(pathA), artifactB);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactB));
+ builder.put(runfilesPath(pathA), artifactC);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactC));
checkConflictWarning();
}
@@ -157,15 +168,15 @@ public class RunfilesTest extends FoundationTestCase {
PathFragment pathA = new PathFragment("a");
Artifact artifactB = new Artifact(new PathFragment("b"), root);
Artifact artifactC = new Artifact(new PathFragment("c"), root);
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
// Same as above but with ERROR not WARNING
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.ERROR, reporter, null);
- checker.put(map, pathA, artifactB);
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.ERROR, reporter, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath(pathA), artifactB);
reporter.removeHandler(failFastHandler); // So it doesn't throw AssertionError
- checker.put(map, pathA, artifactC);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactC));
+ builder.put(runfilesPath(pathA), artifactC);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactC));
checkConflictError();
}
@@ -174,13 +185,13 @@ public class RunfilesTest extends FoundationTestCase {
Root root = Root.asSourceRoot(scratch.resolve("/workspace"));
PathFragment pathA = new PathFragment("a");
Artifact artifactB = new Artifact(new PathFragment("b"), root);
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null);
- checker.put(map, pathA, null);
- checker.put(map, pathA, artifactB);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactB));
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath(pathA), null);
+ builder.put(runfilesPath(pathA), artifactB);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactB));
checkConflictWarning();
}
@@ -189,14 +200,14 @@ public class RunfilesTest extends FoundationTestCase {
Root root = Root.asSourceRoot(scratch.resolve("/workspace"));
PathFragment pathA = new PathFragment("a");
Artifact artifactB = new Artifact(new PathFragment("b"), root);
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
// Same as above but opposite order
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null);
- checker.put(map, pathA, artifactB);
- checker.put(map, pathA, null);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, null));
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath(pathA), artifactB);
+ builder.put(runfilesPath(pathA), null);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, null));
checkConflictWarning();
}
@@ -206,13 +217,13 @@ public class RunfilesTest extends FoundationTestCase {
PathFragment pathA = new PathFragment("a");
Artifact artifactB = new Artifact(new PathFragment("b"), root);
Artifact artifactC = new Artifact(new PathFragment("c"), root);
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.IGNORE, reporter, null);
- checker.put(map, pathA, artifactB);
- checker.put(map, pathA, artifactC);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactC));
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.IGNORE, reporter, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath(pathA), artifactB);
+ builder.put(runfilesPath(pathA), artifactC);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactC));
assertNoEvents();
}
@@ -222,13 +233,13 @@ public class RunfilesTest extends FoundationTestCase {
PathFragment pathA = new PathFragment("a");
Artifact artifactB = new Artifact(new PathFragment("b"), root);
Artifact artifactC = new Artifact(new PathFragment("c"), root);
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, null, null);
- checker.put(map, pathA, artifactB);
- checker.put(map, pathA, artifactC);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactC));
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, null, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath(pathA), artifactB);
+ builder.put(runfilesPath(pathA), artifactC);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactC));
assertNoEvents();
}
@@ -239,27 +250,27 @@ public class RunfilesTest extends FoundationTestCase {
Artifact artifactB = new Artifact(new PathFragment("b"), root);
Artifact artifactB2 = new Artifact(new PathFragment("b"), root);
assertEquals(artifactB, artifactB2);
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null);
- checker.put(map, pathA, artifactB);
- checker.put(map, pathA, artifactB2);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactB2));
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath(pathA), artifactB);
+ builder.put(runfilesPath(pathA), artifactB2);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, artifactB2));
assertNoEvents();
}
@Test
public void testPutIgnoresNullAndNull() {
PathFragment pathA = new PathFragment("a");
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null);
- checker.put(map, pathA, null);
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath(pathA), null);
// Add it again
- checker.put(map, pathA, null);
- assertThat(map.entrySet()).containsExactly(Maps.immutableEntry(pathA, null));
+ builder.put(runfilesPath(pathA), null);
+ assertThat(builder.build().entrySet()).containsExactly(Maps.immutableEntry(pathA, null));
assertNoEvents();
}
@@ -271,16 +282,16 @@ public class RunfilesTest extends FoundationTestCase {
PathFragment pathC = new PathFragment("c");
Artifact artifactA = new Artifact(new PathFragment("a"), root);
Artifact artifactB = new Artifact(new PathFragment("b"), root);
- Map<PathFragment, Artifact> map = new LinkedHashMap<>();
- Runfiles.ConflictChecker checker =
- new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null);
- checker.put(map, pathA, artifactA);
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null),
+ PathFragment.EMPTY_FRAGMENT, false);
+ builder.put(runfilesPath(pathA), artifactA);
// Add different artifact under different path
- checker.put(map, pathB, artifactB);
+ builder.put(runfilesPath(pathB), artifactB);
// Add artifact again under different path
- checker.put(map, pathC, artifactA);
- assertThat(map.entrySet())
+ builder.put(runfilesPath(pathC), artifactA);
+ assertThat(builder.build().entrySet())
.containsExactly(
Maps.immutableEntry(pathA, artifactA),
Maps.immutableEntry(pathB, artifactB),
@@ -291,29 +302,50 @@ public class RunfilesTest extends FoundationTestCase {
@Test
public void testBuilderMergeConflictPolicyDefault() {
- Runfiles r1 = new Runfiles.Builder("TESTING").build();
- Runfiles r2 = new Runfiles.Builder("TESTING").merge(r1).build();
+ Runfiles r1 = new Runfiles.Builder("TESTING", false).build();
+ Runfiles r2 = new Runfiles.Builder("TESTING", false).merge(r1).build();
assertEquals(Runfiles.ConflictPolicy.IGNORE, r2.getConflictPolicy());
}
@Test
public void testBuilderMergeConflictPolicyInherit() {
- Runfiles r1 = new Runfiles.Builder("TESTING").build()
+ Runfiles r1 = new Runfiles.Builder("TESTING", false).build()
.setConflictPolicy(Runfiles.ConflictPolicy.WARN);
- Runfiles r2 = new Runfiles.Builder("TESTING").merge(r1).build();
+ Runfiles r2 = new Runfiles.Builder("TESTING", false).merge(r1).build();
assertEquals(Runfiles.ConflictPolicy.WARN, r2.getConflictPolicy());
}
@Test
public void testBuilderMergeConflictPolicyInheritStrictest() {
- Runfiles r1 = new Runfiles.Builder("TESTING").build()
+ Runfiles r1 = new Runfiles.Builder("TESTING", false).build()
.setConflictPolicy(Runfiles.ConflictPolicy.WARN);
- Runfiles r2 = new Runfiles.Builder("TESTING").build()
+ Runfiles r2 = new Runfiles.Builder("TESTING", false).build()
.setConflictPolicy(Runfiles.ConflictPolicy.ERROR);
- Runfiles r3 = new Runfiles.Builder("TESTING").merge(r1).merge(r2).build();
+ Runfiles r3 = new Runfiles.Builder("TESTING", false).merge(r1).merge(r2).build();
assertEquals(Runfiles.ConflictPolicy.ERROR, r3.getConflictPolicy());
// Swap ordering
- Runfiles r4 = new Runfiles.Builder("TESTING").merge(r2).merge(r1).build();
+ Runfiles r4 = new Runfiles.Builder("TESTING", false).merge(r2).merge(r1).build();
assertEquals(Runfiles.ConflictPolicy.ERROR, r4.getConflictPolicy());
}
+
+ @Test
+ public void testLegacyRunfilesStructure() {
+ Root root = Root.asSourceRoot(scratch.resolve("/workspace"));
+ PathFragment workspaceName = new PathFragment("wsname");
+ PathFragment pathB = new PathFragment("repo/b");
+ Artifact artifactB = new Artifact(pathB, root);
+
+ Runfiles.ManifestBuilder builder = new Runfiles.ManifestBuilder(
+ new Runfiles.ConflictChecker(Runfiles.ConflictPolicy.WARN, reporter, null),
+ workspaceName,
+ true);
+
+ builder.put(runfilesPath(pathB), artifactB);
+
+ assertThat(builder.build().entrySet()).containsExactly(
+ Maps.immutableEntry(workspaceName.getRelative(".runfile"), null),
+ Maps.immutableEntry(workspaceName.getRelative("external").getRelative(pathB), artifactB),
+ Maps.immutableEntry(pathB, artifactB));
+ assertNoEvents();
+ }
}