aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar felly <felly@google.com>2018-07-18 15:55:59 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-18 15:57:34 -0700
commit6c399d642d3451d6cd22009118f64f50ccaefd6a (patch)
tree5588d7115dc6a55d4658e02ae477dc2433cedbf3 /src/test/java/com/google/devtools/build/lib
parent64ea3cd90e1ead5ece533ee5a3cb4ee3520527fb (diff)
Introduce --strict_fileset_output which treats all output Artifacts encountered in a Fileset as a regular file.
PiperOrigin-RevId: 205152271
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java105
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java26
2 files changed, 88 insertions, 43 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
index 247b4dca5a..e972020051 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
@@ -231,7 +231,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ file,
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(params, symlink("output-name", file));
}
@@ -246,7 +247,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ symlink,
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ symlinks,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
switch (symlinks) {
case COPY:
assertSymlinksCreatedInOrder(params, symlink("output-name", "file.real"));
@@ -281,7 +283,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ dir,
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput*/ false);
assertSymlinksCreatedInOrder(
params, symlink("output-name/file.a", fileA), symlink("output-name/sub/file.b", fileB));
}
@@ -299,7 +302,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ symlink,
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ symlinks,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput*/ false);
switch (symlinks) {
case COPY:
assertSymlinksCreatedInOrder(params, symlink("output-name", "dir_real"));
@@ -354,7 +358,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create("output-name"),
/*excludes=*/ null,
/*symlinkBehaviorMode=*/ symlinks,
- /*pkgBoundaryMode=*/ pkgBoundaryMode);
+ /*pkgBoundaryMode=*/ pkgBoundaryMode,
+ /*strictFilesetOutput=*/ false);
switch (pkgBoundaryMode) {
case CROSS:
assertSymlinksCreatedInOrder(params, outA, outAsym, outBuild, outB);
@@ -441,7 +446,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create("output-name"),
/*excludes=*/ null,
/*symlinkBehaviorMode=*/ symlinks,
- /*pkgBoundaryMode=*/ pkgBoundaryMode);
+ /*pkgBoundaryMode=*/ pkgBoundaryMode,
+ /*strictFilesetOutput=*/ false);
switch (pkgBoundaryMode) {
case CROSS:
assertSymlinksCreatedInOrder(params, outA, outASym, outBuild, outB);
@@ -533,7 +539,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create("output-name"),
/*excludes=*/ null,
/*symlinkBehaviorMode=*/ symlinks,
- /*pkgBoundaryMode=*/ pkgBoundaryMode);
+ /*pkgBoundaryMode=*/ pkgBoundaryMode,
+ /*strictFilesetOutput=*/ false);
switch (pkgBoundaryMode) {
case CROSS:
assertSymlinksCreatedInOrder(
@@ -597,14 +604,16 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ path1,
PathFragment.create("inner-out1"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
FilesetTraversalParams inner2 =
FilesetTraversalParamsFactory.fileTraversal(
/*ownerLabel=*/ label("//foo"),
/*fileToTraverse=*/ path2,
PathFragment.create("inner-out2"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
FilesetTraversalParams outer =
FilesetTraversalParamsFactory.nestedTraversal(
/*ownerLabel=*/ label("//foo:bar"),
@@ -631,14 +640,16 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ path1,
PathFragment.create("inner-out1"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
FilesetTraversalParams inner2 =
FilesetTraversalParamsFactory.fileTraversal(
/*ownerLabel=*/ label("//foo"),
/*fileToTraverse=*/ path2,
PathFragment.create("inner-out2"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
FilesetTraversalParams middle1 =
FilesetTraversalParamsFactory.nestedTraversal(
/*ownerLabel=*/ label("//foo:middle1"),
@@ -652,7 +663,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ path3,
PathFragment.create("inner-out3"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
FilesetTraversalParams middle2 =
FilesetTraversalParamsFactory.nestedTraversal(
/*ownerLabel=*/ label("//foo:middle2"),
@@ -686,7 +698,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create(useInnerDir ? "inner-dir" : ""),
/*excludes=*/ null,
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
FilesetTraversalParams outer =
FilesetTraversalParamsFactory.nestedTraversal(
/*ownerLabel=*/ label("//foo"),
@@ -733,7 +746,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ linkName,
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(params); // expect empty results
}
@@ -754,7 +768,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create("output-name"),
/* excludes */ ImmutableSet.<String>of(),
/* symlinkBehaviorMode */ symlinkBehavior,
- /* pkgBoundaryMode */ PackageBoundaryMode.DONT_CROSS);
+ /* pkgBoundaryMode */ PackageBoundaryMode.DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(
params,
symlink("output-name/BUILD", buildFile),
@@ -774,7 +789,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create("output-name"),
/* excludes */ ImmutableSet.of("file.sym"),
/* symlinkBehaviorMode */ symlinkBehavior,
- /* pkgBoundaryMode */ PackageBoundaryMode.DONT_CROSS);
+ /* pkgBoundaryMode */ PackageBoundaryMode.DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(params, symlink("output-name/BUILD", buildFile));
}
@@ -804,7 +820,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create("output-name"),
/* excludes */ ImmutableSet.of(),
/* symlinkBehaviorMode */ SymlinkBehavior.COPY,
- /* pkgBoundaryMode */ PackageBoundaryMode.DONT_CROSS);
+ /* pkgBoundaryMode */ PackageBoundaryMode.DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(
params,
symlink("output-name/BUILD", buildFile),
@@ -812,13 +829,15 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
symlink("output-name/dir/innerfile.txt", innerFile));
// Make sure the file within the excluded directory is no longer present.
- params = FilesetTraversalParamsFactory.recursiveTraversalOfPackage(
+ params =
+ FilesetTraversalParamsFactory.recursiveTraversalOfPackage(
/* ownerLabel */ label("//foo"),
/* buildFile */ buildFile,
PathFragment.create("output-name"),
/* excludes */ ImmutableSet.of("dir"),
/* symlinkBehaviorMode */ SymlinkBehavior.COPY,
- /* pkgBoundaryMode */ PackageBoundaryMode.DONT_CROSS);
+ /* pkgBoundaryMode */ PackageBoundaryMode.DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(
params,
symlink("output-name/BUILD", buildFile),
@@ -834,7 +853,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ path,
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(params); // expect empty results
}
@@ -852,7 +872,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create("output-name"),
/*excludes=*/ null,
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(params); // expect empty results
}
@@ -867,7 +888,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create("output-name"),
/*excludes=*/ null,
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
assertSymlinksCreatedInOrder(params); // expect empty results
}
@@ -963,13 +985,16 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
@Test
public void testFingerprintOfFileTraversal() throws Exception {
new FingerprintTester(
- ImmutableMap.<String, Domain>of(
- "ownerLabel", notPartOfFingerprint("//foo", "//bar"),
- "fileToTraverse", partOfFingerprint("foo/file.a", "bar/file.b"),
- "destPath", partOfFingerprint("out1", "out2"),
- "symlinkBehaviorMode",
- partOfFingerprint(SymlinkBehavior.COPY, SymlinkBehavior.DEREFERENCE),
- "pkgBoundaryMode", partOfFingerprint(CROSS, DONT_CROSS))) {
+ ImmutableMap.<String, Domain>builder()
+ .put("ownerLabel", notPartOfFingerprint("//foo", "//bar"))
+ .put("fileToTraverse", partOfFingerprint("foo/file.a", "bar/file.b"))
+ .put("destPath", partOfFingerprint("out1", "out2"))
+ .put(
+ "symlinkBehaviorMode",
+ partOfFingerprint(SymlinkBehavior.COPY, SymlinkBehavior.DEREFERENCE))
+ .put("pkgBoundaryMode", partOfFingerprint(CROSS, DONT_CROSS))
+ .put("strictFilesetOutput", partOfFingerprint(true, false))
+ .build()) {
@Override
FilesetTraversalParams create(Map<String, ?> kwArgs) throws Exception {
return FilesetTraversalParamsFactory.fileTraversal(
@@ -977,7 +1002,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
getSourceArtifact((String) kwArgs.get("fileToTraverse")),
PathFragment.create((String) kwArgs.get("destPath")),
((SymlinkBehavior) kwArgs.get("symlinkBehaviorMode")),
- (PackageBoundaryMode) kwArgs.get("pkgBoundaryMode"));
+ (PackageBoundaryMode) kwArgs.get("pkgBoundaryMode"),
+ (Boolean) kwArgs.get("strictFilesetOutput"));
}
}.doTest();
}
@@ -996,6 +1022,7 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
"symlinkBehaviorMode",
partOfFingerprint(SymlinkBehavior.COPY, SymlinkBehavior.DEREFERENCE))
.put("pkgBoundaryMode", partOfFingerprint(CROSS, DONT_CROSS))
+ .put("strictFilesetOutput", partOfFingerprint(true, false))
.build()) {
@SuppressWarnings("unchecked")
@Override
@@ -1006,7 +1033,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create((String) kwArgs.get("destPath")),
(Set<String>) kwArgs.get("excludes"),
((SymlinkBehavior) kwArgs.get("symlinkBehaviorMode")),
- (PackageBoundaryMode) kwArgs.get("pkgBoundaryMode"));
+ (PackageBoundaryMode) kwArgs.get("pkgBoundaryMode"),
+ (Boolean) kwArgs.get("strictFilesetOutput"));
}
}.doTest();
}
@@ -1035,7 +1063,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
PathFragment.create((String) kwArgs.get("destPath")),
(Set<String>) kwArgs.get("excludes"),
((SymlinkBehavior) kwArgs.get("symlinkBehaviorMode")),
- (PackageBoundaryMode) kwArgs.get("pkgBoundaryMode"));
+ (PackageBoundaryMode) kwArgs.get("pkgBoundaryMode"),
+ /*strictFilesetOutput=*/ false);
}
}.doTest();
}
@@ -1048,7 +1077,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ getSourceArtifact("blah/file.a"),
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
FilesetTraversalParams n2 =
FilesetTraversalParamsFactory.fileTraversal(
@@ -1056,7 +1086,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ getSourceArtifact("meow/file.b"),
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
ImmutableList<FilesetTraversalParams> nested1 = ImmutableList.of(n1, n2);
FilesetTraversalParams n3 =
@@ -1065,7 +1096,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ getSourceArtifact("brrr/file.c"),
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
FilesetTraversalParams n4 =
FilesetTraversalParamsFactory.fileTraversal(
@@ -1073,7 +1105,8 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase {
/*fileToTraverse=*/ getSourceArtifact("hurr/file.d"),
PathFragment.create("output-name"),
/*symlinkBehaviorMode=*/ SymlinkBehavior.COPY,
- /*pkgBoundaryMode=*/ DONT_CROSS);
+ /*pkgBoundaryMode=*/ DONT_CROSS,
+ /*strictFilesetOutput=*/ false);
ImmutableList<FilesetTraversalParams> nested2 = ImmutableList.of(n3, n4);
new FingerprintTester(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
index 49c10c912c..da9b01b98a 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
@@ -245,19 +245,25 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
return path;
}
- private static TraversalRequest fileLikeRoot(Artifact file, PackageBoundaryMode pkgBoundaryMode) {
+ private static TraversalRequest fileLikeRoot(Artifact file, PackageBoundaryMode pkgBoundaryMode,
+ boolean strictOutput) {
return TraversalRequest.create(
DirectTraversalRoot.forFileOrDirectory(file),
!file.isSourceArtifact(),
pkgBoundaryMode,
- false,
+ strictOutput, false,
null);
}
+ private static TraversalRequest fileLikeRoot(Artifact file, PackageBoundaryMode pkgBoundaryMode) {
+ return fileLikeRoot(file, pkgBoundaryMode, false);
+ }
+
private static TraversalRequest pkgRoot(
RootedPath pkgDirectory, PackageBoundaryMode pkgBoundaryMode) {
return TraversalRequest.create(
- DirectTraversalRoot.forRootedPath(pkgDirectory), false, pkgBoundaryMode, true, null);
+ DirectTraversalRoot.forRootedPath(pkgDirectory), false, pkgBoundaryMode,
+ false, true, null);
}
private <T extends SkyValue> EvaluationResult<T> eval(SkyKey key) throws Exception {
@@ -416,8 +422,8 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
assertTraversalRootHashesAre(false, a, b);
}
- private void assertTraversalOfFile(Artifact rootArtifact) throws Exception {
- TraversalRequest traversalRoot = fileLikeRoot(rootArtifact, DONT_CROSS);
+ private void assertTraversalOfFile(Artifact rootArtifact, boolean strictOutput) throws Exception {
+ TraversalRequest traversalRoot = fileLikeRoot(rootArtifact, DONT_CROSS, strictOutput);
RootedPath rootedPath = createFile(rootedPath(rootArtifact), "foo");
// Assert that the SkyValue is built and looks right.
@@ -440,15 +446,21 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
@Test
public void testTraversalOfSourceFile() throws Exception {
- assertTraversalOfFile(sourceArtifact("foo/bar.txt"));
+ assertTraversalOfFile(sourceArtifact("foo/bar.txt"), false);
}
@Test
public void testTraversalOfGeneratedFile() throws Exception {
- assertTraversalOfFile(derivedArtifact("foo/bar.txt"));
+ assertTraversalOfFile(derivedArtifact("foo/bar.txt"), false);
}
@Test
+ public void testTraversalOfGeneratedFileWithStrictOutput() throws Exception {
+ assertTraversalOfFile(derivedArtifact("foo/bar.txt"), true);
+ }
+
+
+ @Test
public void testTraversalOfSymlinkToFile() throws Exception {
Artifact linkNameArtifact = sourceArtifact("foo/baz/qux.sym");
Artifact linkTargetArtifact = sourceArtifact("foo/bar/baz.txt");