diff options
author | 2016-10-13 18:17:48 +0000 | |
---|---|---|
committer | 2016-10-14 09:32:53 +0000 | |
commit | 0c7a42a09d85ddffd9b860bcb31e4c43a00632c1 (patch) | |
tree | ec637fb0aedd23c75b066bbbc27f96ae0362324c /src/test | |
parent | 7c3d668a9c598110256495d2863b53c9d40befb1 (diff) |
Slight refactor of ExternalFilesHelper:
-Make FileType and ExternalFileAction public.
-Have producers use ExternalFileAction, rather than a boolean, to specify the desired behavior.
And a big change in semantics (doesn't affect Bazel):
-Replace ExternalFileAction.ERROR_OUT with ExternalFileAction.ASSUME_NON_EXISTENT_AND_IMMUTABLE, which does what it sounds like. This new action, like the old ERROR_OUT, is _not_ used in Bazel.
--
MOS_MIGRATED_REVID=136063159
Diffstat (limited to 'src/test')
9 files changed, 68 insertions, 68 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java index 79e4013a93..cd017bec2d 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java @@ -21,6 +21,7 @@ import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.skyframe.ActionLookupValue.ActionLookupKey; +import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; @@ -73,7 +74,9 @@ abstract class ArtifactFunctionTestCase { BlazeDirectories directories = new BlazeDirectories(root, root, root, TestConstants.PRODUCT_NAME); ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper( - pkgLocator, false, directories); + pkgLocator, + ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, + directories); differencer = new RecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator( diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java index 6c42579537..ea1fc818db 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; 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.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.TestConstants; @@ -61,8 +62,10 @@ public class ContainingPackageLookupFunctionTest extends FoundationTestCase { new AtomicReference<>(new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory))); deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of()); ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper( - pkgLocator, false, new BlazeDirectories(rootDirectory, rootDirectory, rootDirectory, - TestConstants.PRODUCT_NAME)); + pkgLocator, + ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, + new BlazeDirectories( + rootDirectory, rootDirectory, rootDirectory, TestConstants.PRODUCT_NAME)); Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>(); skyFunctions.put( diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java index 5257324ff4..fd972da8fb 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java @@ -40,6 +40,7 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; +import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.testutil.ManualClock; import com.google.devtools.build.lib.testutil.TestConstants; @@ -113,15 +114,15 @@ public class FileFunctionTest { } private SequentialBuildDriver makeDriver() { - return makeDriver(/*errorOnExternalFiles=*/ false); + return makeDriver(ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS); } - private SequentialBuildDriver makeDriver(boolean errorOnExternalFiles) { + private SequentialBuildDriver makeDriver(ExternalFileAction externalFileAction) { AtomicReference<PathPackageLocator> pkgLocatorRef = new AtomicReference<>(pkgLocator); BlazeDirectories directories = new BlazeDirectories(pkgRoot, outputBase, pkgRoot, TestConstants.PRODUCT_NAME); ExternalFilesHelper externalFilesHelper = - new ExternalFilesHelper(pkgLocatorRef, errorOnExternalFiles, directories); + new ExternalFilesHelper(pkgLocatorRef, externalFileAction, directories); differencer = new RecordingDifferencer(); MemoizingEvaluator evaluator = new InMemoryMemoizingEvaluator( @@ -657,99 +658,76 @@ public class FileFunctionTest { } @Test - public void testFilesOutsideRootWhenExternalDisallowed() throws Exception { + public void testFilesOutsideRootWhenExternalAssumedNonExistentAndImmutable() throws Exception { file("/outsideroot"); - SequentialBuildDriver driver = makeDriver(/*errorOnExternalFiles=*/ true); + SequentialBuildDriver driver = + makeDriver(ExternalFileAction.ASSUME_NON_EXISTENT_AND_IMMUTABLE_FOR_EXTERNAL_PATHS); SkyKey key = skyKey("/outsideroot"); EvaluationResult<SkyValue> result = driver.evaluate( ImmutableList.of(key), false, DEFAULT_THREAD_COUNT, NullEventHandler.INSTANCE); - assertTrue(result.hasError()); - assertThatEvaluationResult(result) - .hasErrorEntryForKeyThat(key) - .hasExceptionThat() - .isInstanceOf(FileOutsidePackageRootsException.class); - assertThatEvaluationResult(result) - .hasErrorEntryForKeyThat(key) - .hasExceptionThat() - .hasMessage("Encountered reference to external mutable [/]/[outsideroot]"); + assertThatEvaluationResult(result).hasNoError(); + FileValue value = (FileValue) result.get(key); + assertThat(value).isNotNull(); + assertFalse(value.exists()); } @Test - public void testAbsoluteSymlinksToFilesOutsideRootWhenExternalDisallowed() throws Exception { + public void testAbsoluteSymlinksToFilesOutsideRootWhenExternalAssumedNonExistentAndImmutable() + throws Exception { file("/outsideroot"); symlink("a", "/outsideroot"); - SequentialBuildDriver driver = makeDriver(/*errorOnExternalFiles=*/ true); + SequentialBuildDriver driver = + makeDriver(ExternalFileAction.ASSUME_NON_EXISTENT_AND_IMMUTABLE_FOR_EXTERNAL_PATHS); SkyKey key = skyKey("a"); EvaluationResult<SkyValue> result = driver.evaluate( ImmutableList.of(key), false, DEFAULT_THREAD_COUNT, NullEventHandler.INSTANCE); - assertTrue(result.hasError()); - assertThatEvaluationResult(result) - .hasErrorEntryForKeyThat(key) - .hasExceptionThat() - .isInstanceOf(SymlinkOutsidePackageRootsException.class); - assertThatEvaluationResult(result) - .hasErrorEntryForKeyThat(key) - .hasExceptionThat() - .hasMessage( - "Encountered symlink [/root]/[a] linking to external mutable [/]/[outsideroot]"); + assertThatEvaluationResult(result).hasNoError(); + FileValue value = (FileValue) result.get(key); + assertThat(value).isNotNull(); + assertFalse(value.exists()); } - /** - * A slightly more complicated negative test to ensure that the error message contains the real - * symlink and external path instead of the path of the top-level skyframe file node. In other - * words, the error is bubbled up to the top-level node, but the error message stops getting - * updated once it enters the internal path boundary. - */ @Test - public void testAbsoluteSymlinksReferredByInternalFilesToFilesOutsideRootWhenExternalDisallowed() + public void testAbsoluteSymlinksReferredByInternalFilesToFilesOutsideRootWhenExternalAssumedNonExistentAndImmutable() throws Exception { file("/outsideroot/src/foo/bar"); symlink("/root/src", "/outsideroot/src"); - SequentialBuildDriver driver = makeDriver(/*errorOnExternalFiles=*/ true); + SequentialBuildDriver driver = + makeDriver(ExternalFileAction.ASSUME_NON_EXISTENT_AND_IMMUTABLE_FOR_EXTERNAL_PATHS); SkyKey key = skyKey("/root/src/foo/bar"); EvaluationResult<SkyValue> result = driver.evaluate( ImmutableList.of(key), false, DEFAULT_THREAD_COUNT, NullEventHandler.INSTANCE); - assertTrue(result.hasError()); - assertThatEvaluationResult(result) - .hasErrorEntryForKeyThat(key) - .hasExceptionThat() - .isInstanceOf(SymlinkOutsidePackageRootsException.class); - assertThatEvaluationResult(result) - .hasErrorEntryForKeyThat(key) - .hasExceptionThat() - .hasMessage( - "Encountered symlink [/root]/[src] linking to external mutable [/]/[outsideroot/src]"); + assertThatEvaluationResult(result).hasNoError(); + FileValue value = (FileValue) result.get(key); + assertThat(value).isNotNull(); + assertFalse(value.exists()); } @Test - public void testRelativeSymlinksToFilesOutsideRootWhenExternalDisallowed() throws Exception { + public void testRelativeSymlinksToFilesOutsideRootWhenExternalAssumedNonExistentAndImmutable() + throws Exception { file("../outsideroot"); symlink("a", "../outsideroot"); - SequentialBuildDriver driver = makeDriver(/*errorOnExternalFiles=*/ true); + SequentialBuildDriver driver = + makeDriver(ExternalFileAction.ASSUME_NON_EXISTENT_AND_IMMUTABLE_FOR_EXTERNAL_PATHS); SkyKey key = skyKey("a"); EvaluationResult<SkyValue> result = driver.evaluate( ImmutableList.of(key), false, DEFAULT_THREAD_COUNT, NullEventHandler.INSTANCE); - assertTrue(result.hasError()); - assertThatEvaluationResult(result) - .hasErrorEntryForKeyThat(key) - .hasExceptionThat() - .isInstanceOf(SymlinkOutsidePackageRootsException.class); - assertThatEvaluationResult(result) - .hasErrorEntryForKeyThat(key) - .hasExceptionThat() - .hasMessage( - "Encountered symlink [/root]/[a] linking to external mutable [/]/[outsideroot]"); + assertThatEvaluationResult(result).hasNoError(); + FileValue value = (FileValue) result.get(key); + assertThat(value).isNotNull(); + assertFalse(value.exists()); } @Test @@ -757,13 +735,18 @@ public class FileFunctionTest { Path file = file("insideroot"); symlink("a", file.getPathString()); - SequentialBuildDriver driver = makeDriver(/*allowExternalReferences=*/ false); + SequentialBuildDriver driver = + makeDriver(ExternalFileAction.ASSUME_NON_EXISTENT_AND_IMMUTABLE_FOR_EXTERNAL_PATHS); SkyKey key = skyKey("a"); EvaluationResult<SkyValue> result = driver.evaluate( ImmutableList.of(key), false, DEFAULT_THREAD_COUNT, NullEventHandler.INSTANCE); - assertFalse(result.hasError()); + assertThatEvaluationResult(result).hasNoError(); + FileValue value = (FileValue) result.get(key); + assertThat(value).isNotNull(); + assertTrue(value.exists()); + assertThat(value.realRootedPath().getRelativePath().getPathString()).isEqualTo("insideroot"); } @SuppressWarnings({"rawtypes", "unchecked"}) 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 e4b5bbeef5..3b66ae153f 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 @@ -36,6 +36,7 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.packages.FilesetEntry.SymlinkBehavior; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; +import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.TestConstants; @@ -83,8 +84,9 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase { AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of()); ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper( - pkgLocator, false, new BlazeDirectories(outputBase, outputBase, rootDirectory, - TestConstants.PRODUCT_NAME)); + pkgLocator, + ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, + new BlazeDirectories(outputBase, outputBase, rootDirectory, TestConstants.PRODUCT_NAME)); Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>(); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java index 1ec88f5ce1..e4bf7f1dec 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java @@ -37,6 +37,7 @@ 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.DirtinessCheckerUtils.BasicFilesystemDirtinessChecker; +import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; @@ -103,7 +104,7 @@ public class FilesystemValueCheckerTest { BlazeDirectories directories = new BlazeDirectories(pkgRoot, pkgRoot, pkgRoot, TestConstants.PRODUCT_NAME); ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper( - pkgLocator, false, directories); + pkgLocator, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, directories); skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction( new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper)); skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator)); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java index a00dd07a16..020934314f 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; 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.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.GlobValue.InvalidGlobPatternException; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.testutil.ManualClock; @@ -123,7 +124,9 @@ public abstract class GlobFunctionTest { AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of()); ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper( - pkgLocator, false, new BlazeDirectories(root, root, root, TestConstants.PRODUCT_NAME)); + pkgLocator, + ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, + new BlazeDirectories(root, root, root, TestConstants.PRODUCT_NAME)); Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>(); skyFunctions.put(SkyFunctions.GLOB, new GlobFunction(alwaysUseDirListing())); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java index c200c41347..40bebb74aa 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java @@ -29,6 +29,7 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.packages.RuleClassProvider; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; +import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.skyframe.PackageLookupValue.BuildFileName; import com.google.devtools.build.lib.skyframe.PackageLookupValue.ErrorReason; @@ -75,7 +76,7 @@ public abstract class PackageLookupFunctionTest extends FoundationTestCase { new BlazeDirectories( rootDirectory, outputBase, rootDirectory, analysisMock.getProductName()); ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper( - pkgLocator, false, directories); + pkgLocator, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, directories); Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>(); skyFunctions.put( 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 4bbad979e2..b769b6dd0a 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 @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.analysis.util.AnalysisMock; 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.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFile; import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.TraversalRequest; @@ -89,7 +90,7 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe new BlazeDirectories( rootDirectory, outputBase, rootDirectory, analysisMock.getProductName()); ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper( - pkgLocator, false, directories); + pkgLocator, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, directories); ConfiguredRuleClassProvider ruleClassProvider = analysisMock.createRuleClassProvider(); Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>(); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java index c5d1022689..18f029391d 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java @@ -50,6 +50,7 @@ import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.exec.SingleBuildFileCache; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; +import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.TestConstants; @@ -151,7 +152,9 @@ public abstract class TimestampBuilderTestCase extends FoundationTestCase { BlazeDirectories directories = new BlazeDirectories(rootDirectory, outputBase, rootDirectory, TestConstants.PRODUCT_NAME); ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper( - pkgLocator, false, directories); + pkgLocator, + ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, + directories); differencer = new RecordingDifferencer(); ActionExecutionStatusReporter statusReporter = |