Add ability to force reloading of all packages
PiperOrigin-RevId: 298372839
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
index 1759139..8b0fb95 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
@@ -76,6 +76,7 @@
import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.Nullable;
import org.junit.Rule;
import org.junit.Test;
@@ -205,6 +206,41 @@
}
@Test
+ public void testSkyframeExecutorClearedPackagesResultsInReload() throws Exception {
+ scratch.file("pkg/BUILD", "sh_library(name='foo', srcs=['foo.sh'])");
+ scratch.file("pkg/foo.sh");
+
+ invalidatePackages();
+
+ // Use number of times the package was validated as a proxy for number of times it was loaded.
+ AtomicInteger validationCount = new AtomicInteger();
+ doAnswer(
+ inv -> {
+ if (inv.getArgument(0, Package.class).getName().equals("pkg")) {
+ validationCount.incrementAndGet();
+ }
+ return null;
+ })
+ .when(mockPackageValidator)
+ .validate(any(Package.class), any(ExtendedEventHandler.class));
+
+ SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//pkg"));
+ EvaluationResult<PackageValue> result1 =
+ SkyframeExecutorTestUtils.evaluate(
+ getSkyframeExecutor(), skyKey, /*keepGoing=*/ false, reporter);
+ assertThatEvaluationResult(result1).hasNoError();
+
+ skyframeExecutor.clearLoadedPackages();
+
+ EvaluationResult<PackageValue> result2 =
+ SkyframeExecutorTestUtils.evaluate(
+ getSkyframeExecutor(), skyKey, /*keepGoing=*/ false, reporter);
+ assertThatEvaluationResult(result2).hasNoError();
+
+ assertThat(validationCount.get()).isEqualTo(2);
+ }
+
+ @Test
public void testPropagatesFilesystemInconsistencies() throws Exception {
reporter.removeHandler(failFastHandler);
RecordingDifferencer differencer = getSkyframeExecutor().getDifferencerForTesting();