aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Laszlo Csomor <laszlocsomor@google.com>2015-12-07 10:32:26 +0000
committerGravatar David Chen <dzc@google.com>2015-12-07 21:17:56 +0000
commite9c41c5ad913be2e4fa19f95491a8177cd9dd6f2 (patch)
treeab671d0e50b17724306b7e7eadef7551b66fc218 /src/test/java/com/google/devtools/build/lib
parentf815626bcd1e4ccdc2ff89e8a0ec754c2baa3b2d (diff)
RecursiveFilesystemTraversalFunction: introduce ResolvedFileFactoryForTesting.
Using this class it's easier to create ResolvedFile instances for tests that don't care about metadata eqality. -- MOS_MIGRATED_REVID=109562578
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java118
1 files changed, 47 insertions, 71 deletions
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 8f47c7e5a5..adc220e616 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
@@ -17,6 +17,10 @@ import static com.google.common.truth.Truth.assertThat;
import static com.google.devtools.build.lib.actions.FilesetTraversalParams.PackageBoundaryMode.CROSS;
import static com.google.devtools.build.lib.actions.FilesetTraversalParams.PackageBoundaryMode.DONT_CROSS;
import static com.google.devtools.build.lib.actions.FilesetTraversalParams.PackageBoundaryMode.REPORT_ERROR;
+import static com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFileFactoryForTesting.danglingSymlinkForTesting;
+import static com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFileFactoryForTesting.regularFileForTesting;
+import static com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFileFactoryForTesting.symlinkToDirectoryForTesting;
+import static com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFileFactoryForTesting.symlinkToFileForTesting;
import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
@@ -30,7 +34,6 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.events.NullEventHandler;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFile;
-import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFileFactory;
import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.TraversalRequest;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
import com.google.devtools.build.lib.util.BlazeClock;
@@ -69,7 +72,8 @@ import java.util.regex.Pattern;
@RunWith(JUnit4.class)
public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTestCase {
- private TimestampGranularityMonitor tsgm = new TimestampGranularityMonitor(BlazeClock.instance());
+ private final TimestampGranularityMonitor tsgm =
+ new TimestampGranularityMonitor(BlazeClock.instance());
private RecordingEvaluationProgressReceiver progressReceiver;
private MemoizingEvaluator evaluator;
private SequentialBuildDriver driver;
@@ -217,20 +221,15 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
@SafeVarargs
private final RecursiveFilesystemTraversalValue traverseAndAssertFiles(
TraversalRequest params, ResolvedFile... expectedFilesIgnoringMetadata) throws Exception {
- Set<ResolvedFile> expectedMap = new HashSet<>();
- for (ResolvedFile exp : expectedFilesIgnoringMetadata) {
- // Strip metadata so only the type and path of the objects are compared.
- expectedMap.add(exp.stripMetadataForTesting());
- }
RecursiveFilesystemTraversalValue result = evalTraversalRequest(params);
- Set<ResolvedFile> actualMap = new HashSet<>();
+ Set<ResolvedFile> actual = new HashSet<>();
for (ResolvedFile act : result.getTransitiveFiles()) {
// Strip metadata so only the type and path of the objects are compared.
- actualMap.add(act.stripMetadataForTesting());
+ actual.add(act.stripMetadataForTesting());
}
// First just assert equality of the keys, so in case of a mismatch the error message is easier
// to read.
- assertThat(expectedMap).isEqualTo(actualMap);
+ assertThat(actual).containsExactly((Object[]) expectedFilesIgnoringMetadata);
// The returned object still has the unstripped metadata.
return result;
@@ -295,36 +294,13 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
}
}
- private ResolvedFile resolvedFile(RootedPath path) throws Exception {
- return ResolvedFileFactory.regularFile(path, FileStateValue.create(path, tsgm));
- }
-
- private ResolvedFile resolvedDanglingSymlink(RootedPath linkNamePath, PathFragment linkTargetPath)
- throws Exception {
- return ResolvedFileFactory.danglingSymlink(
- linkNamePath, linkTargetPath, FileStateValue.create(linkNamePath, tsgm));
- }
-
- private ResolvedFile resolvedSymlinkToFile(
- RootedPath targetPath, RootedPath linkNamePath, PathFragment linkTargetPath)
- throws Exception {
- return ResolvedFileFactory.symlinkToFile(
- targetPath, linkNamePath, linkTargetPath, FileStateValue.create(linkNamePath, tsgm));
- }
-
- private ResolvedFile resolvedSymlinkToDir(
- RootedPath targetPath, RootedPath linkNamePath, PathFragment linkTargetPath)
- throws Exception {
- return ResolvedFileFactory.symlinkToDirectory(
- targetPath, linkNamePath, linkTargetPath, FileStateValue.create(linkNamePath, tsgm));
- }
private void assertTraversalOfFile(Artifact rootArtifact) throws Exception {
TraversalRequest traversalRoot = fileLikeRoot(rootArtifact, DONT_CROSS);
RootedPath rootedPath = createFile(rootedPath(rootArtifact), "foo");
// Assert that the SkyValue is built and looks right.
- ResolvedFile expected = resolvedFile(rootedPath);
+ ResolvedFile expected = regularFileForTesting(rootedPath);
RecursiveFilesystemTraversalValue v1 = traverseAndAssertFiles(traversalRoot, expected);
assertThat(progressReceiver.invalidations).isEmpty();
assertThat(progressReceiver.evaluations).contains(v1);
@@ -362,7 +338,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// Assert that the SkyValue is built and looks right.
RootedPath symlinkNamePath = rootedPath(linkNameArtifact);
RootedPath symlinkTargetPath = rootedPath(linkTargetArtifact);
- ResolvedFile expected = resolvedSymlinkToFile(symlinkTargetPath, symlinkNamePath, linkValue);
+ ResolvedFile expected = symlinkToFileForTesting(symlinkTargetPath, symlinkNamePath, linkValue);
RecursiveFilesystemTraversalValue v1 = traverseAndAssertFiles(traversalRoot, expected);
assertThat(progressReceiver.invalidations).isEmpty();
assertThat(progressReceiver.evaluations).contains(v1);
@@ -393,11 +369,11 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
traverseAndAssertFiles(
fileLikeRoot(directLinkArtifact, DONT_CROSS),
- resolvedSymlinkToFile(fileA, directLink, directLinkPath));
+ symlinkToFileForTesting(fileA, directLink, directLinkPath));
traverseAndAssertFiles(
fileLikeRoot(transitiveLinkArtifact, DONT_CROSS),
- resolvedSymlinkToFile(fileA, transitiveLink, transitiveLinkPath));
+ symlinkToFileForTesting(fileA, transitiveLink, transitiveLinkPath));
}
private void assertTraversalOfDirectory(Artifact directoryArtifact) throws Exception {
@@ -414,8 +390,8 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
TraversalRequest traversalRoot = fileLikeRoot(directoryArtifact, DONT_CROSS);
// Assert that the SkyValue is built and looks right.
- ResolvedFile expected1 = resolvedFile(file1);
- ResolvedFile expected2 = resolvedFile(file2);
+ ResolvedFile expected1 = regularFileForTesting(file1);
+ ResolvedFile expected2 = regularFileForTesting(file2);
RecursiveFilesystemTraversalValue v1 =
traverseAndAssertFiles(traversalRoot, expected1, expected2);
assertThat(progressReceiver.invalidations).isEmpty();
@@ -425,7 +401,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// Add a new file to the directory and see that the value is rebuilt.
RootedPath file3 = createFile(childOf(directoryArtifact, "foo.txt"));
invalidateDirectory(directoryArtifact);
- ResolvedFile expected3 = resolvedFile(file3);
+ ResolvedFile expected3 = regularFileForTesting(file3);
RecursiveFilesystemTraversalValue v2 =
traverseAndAssertFiles(traversalRoot, expected1, expected2, expected3);
assertThat(progressReceiver.invalidations).contains(rftvSkyKey(traversalRoot));
@@ -480,14 +456,14 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// Expect the file as if was a child of the direct symlink, not of the actual directory.
traverseAndAssertFiles(
fileLikeRoot(directLinkArtifact, DONT_CROSS),
- resolvedSymlinkToDir(parentOf(fileA), directLink, directLinkPath),
- resolvedFile(childOf(directLinkArtifact, "file.a")));
+ symlinkToDirectoryForTesting(parentOf(fileA), directLink, directLinkPath),
+ regularFileForTesting(childOf(directLinkArtifact, "file.a")));
// Expect the file as if was a child of the transitive symlink, not of the actual directory.
traverseAndAssertFiles(
fileLikeRoot(transitiveLinkArtifact, DONT_CROSS),
- resolvedSymlinkToDir(parentOf(fileA), transitiveLink, transitiveLinkPath),
- resolvedFile(childOf(transitiveLinkArtifact, "file.a")));
+ symlinkToDirectoryForTesting(parentOf(fileA), transitiveLink, transitiveLinkPath),
+ regularFileForTesting(childOf(transitiveLinkArtifact, "file.a")));
}
@Test
@@ -498,8 +474,8 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
traverseAndAssertFiles(
pkgRoot(parentOf(buildFilePath), DONT_CROSS),
- resolvedFile(buildFilePath),
- resolvedFile(file1));
+ regularFileForTesting(buildFilePath),
+ regularFileForTesting(file1));
}
@Test
@@ -516,9 +492,9 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// Assert that the SkyValue is built and looks right.
TraversalRequest traversalRoot = fileLikeRoot(linkNameArtifact, DONT_CROSS);
ResolvedFile expected1 =
- resolvedSymlinkToDir(rootedPath(linkTargetArtifact), linkName, linkValue);
- ResolvedFile expected2 = resolvedFile(childOf(linkNameArtifact, "file.1"));
- ResolvedFile expected3 = resolvedFile(childOf(linkNameArtifact, "sub/file.2"));
+ symlinkToDirectoryForTesting(rootedPath(linkTargetArtifact), linkName, linkValue);
+ ResolvedFile expected2 = regularFileForTesting(childOf(linkNameArtifact, "file.1"));
+ ResolvedFile expected3 = regularFileForTesting(childOf(linkNameArtifact, "sub/file.2"));
// We expect to see all the files from the symlink'd directory, under the symlink's path, not
// under the symlink target's path.
RecursiveFilesystemTraversalValue v1 =
@@ -530,7 +506,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// Add a new file to the directory and see that the value is rebuilt.
createFile(childOf(linkTargetArtifact, "file.3"));
invalidateDirectory(linkTargetArtifact);
- ResolvedFile expected4 = resolvedFile(childOf(linkNameArtifact, "file.3"));
+ ResolvedFile expected4 = regularFileForTesting(childOf(linkNameArtifact, "file.3"));
RecursiveFilesystemTraversalValue v2 =
traverseAndAssertFiles(traversalRoot, expected1, expected2, expected3, expected4);
assertThat(progressReceiver.invalidations).contains(rftvSkyKey(traversalRoot));
@@ -565,7 +541,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
parentOf(link).asPath().createDirectory();
link.asPath().createSymbolicLink(linkTarget);
traverseAndAssertFiles(
- fileLikeRoot(linkArtifact, DONT_CROSS), resolvedDanglingSymlink(link, linkTarget));
+ fileLikeRoot(linkArtifact, DONT_CROSS), danglingSymlinkForTesting(link, linkTarget));
}
@Test
@@ -578,8 +554,8 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
link.asPath().createSymbolicLink(linkTarget);
traverseAndAssertFiles(
fileLikeRoot(dirArtifact, DONT_CROSS),
- resolvedFile(file),
- resolvedDanglingSymlink(link, linkTarget));
+ regularFileForTesting(file),
+ danglingSymlinkForTesting(link, linkTarget));
}
private void assertTraverseSubpackages(PackageBoundaryMode traverseSubpackages) throws Exception {
@@ -594,8 +570,8 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
TraversalRequest traversalRoot = pkgRoot(parentOf(pkgBuildFile), traverseSubpackages);
- ResolvedFile expected1 = resolvedFile(pkgBuildFile);
- ResolvedFile expected2 = resolvedFile(subpkgBuildFile);
+ ResolvedFile expected1 = regularFileForTesting(pkgBuildFile);
+ ResolvedFile expected2 = regularFileForTesting(subpkgBuildFile);
switch (traverseSubpackages) {
case CROSS:
traverseAndAssertFiles(traversalRoot, expected1, expected2);
@@ -676,19 +652,19 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// the pp2-definition of //a/b.
traverseAndAssertFiles(
pkgRoot(parentOf(rootedPath(aBuildArtifact)), CROSS),
- resolvedFile(pp1aBuild),
- resolvedFile(pp1aFileA),
- resolvedFile(pp1aSubdirFileB),
- resolvedFile(pp2bBuild),
- resolvedFile(pp2bFileA));
+ regularFileForTesting(pp1aBuild),
+ regularFileForTesting(pp1aFileA),
+ regularFileForTesting(pp1aSubdirFileB),
+ regularFileForTesting(pp2bBuild),
+ regularFileForTesting(pp2bFileA));
// Traverse //a excluding subpackages. The result should only contain files from //a and not
// from //a/b.
traverseAndAssertFiles(
pkgRoot(parentOf(rootedPath(aBuildArtifact)), DONT_CROSS),
- resolvedFile(pp1aBuild),
- resolvedFile(pp1aFileA),
- resolvedFile(pp1aSubdirFileB));
+ regularFileForTesting(pp1aBuild),
+ regularFileForTesting(pp1aFileA),
+ regularFileForTesting(pp1aSubdirFileB));
// Create a relative symlink pp1://a/b.sym -> b/. It will be resolved to the subdirectory
// pp1://a/b, even though a package definition pp2://a/b exists.
@@ -701,11 +677,11 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// to see b.sym/b.fake (not b/b.fake).
traverseAndAssertFiles(
pkgRoot(parentOf(rootedPath(aBuildArtifact)), DONT_CROSS),
- resolvedFile(pp1aBuild),
- resolvedFile(pp1aFileA),
- resolvedFile(childOf(pp1aBsym, "file.fake")),
- resolvedSymlinkToDir(parentOf(pp1bFileFake), pp1aBsym, new PathFragment("b")),
- resolvedFile(pp1aSubdirFileB));
+ regularFileForTesting(pp1aBuild),
+ regularFileForTesting(pp1aFileA),
+ regularFileForTesting(childOf(pp1aBsym, "file.fake")),
+ symlinkToDirectoryForTesting(parentOf(pp1bFileFake), pp1aBsym, new PathFragment("b")),
+ regularFileForTesting(pp1aSubdirFileB));
}
@Test
@@ -716,7 +692,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// Assert that the SkyValue is built and looks right.
TraversalRequest params = fileLikeRoot(artifact, DONT_CROSS);
- ResolvedFile expected = resolvedFile(path);
+ ResolvedFile expected = regularFileForTesting(path);
RecursiveFilesystemTraversalValue v1 = traverseAndAssertFiles(params, expected);
assertThat(progressReceiver.evaluations).contains(v1);
progressReceiver.clear();
@@ -736,7 +712,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
// Assert that the SkyValue is built and looks right.
TraversalRequest params = fileLikeRoot(artifact, DONT_CROSS);
- ResolvedFile expected = resolvedFile(path);
+ ResolvedFile expected = regularFileForTesting(path);
RecursiveFilesystemTraversalValue v1 = traverseAndAssertFiles(params, expected);
assertThat(progressReceiver.evaluations).contains(v1);
progressReceiver.clear();
@@ -764,7 +740,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe
new TraversalRequest(
dir, false, PackageBoundaryMode.REPORT_ERROR, true, null, Pattern.compile(".*\\.txt"));
- ResolvedFile expected = resolvedFile(wantedPath);
+ ResolvedFile expected = regularFileForTesting(wantedPath);
traverseAndAssertFiles(traversalRoot, expected);
}