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();