private void validateColocationLogger_withChildRegionGenerations(int childPRGenerationsCount,
      int expectedLogMessagesCount) {
    closeCache();

    try (SpyLogger spyLogger = new SpyLogger()) {
      createCache();
      createDiskStore(diskStoreName1);
      createPR_withPersistence(regionName, diskStoreName1, DEFAULT_RECOVERY_DELAY,
          DEFAULT_REDUNDANT_COPIES, DEFAULT_STARTUP_RECOVERY_DELAY);

      // Delay creation of child generation regions to see missing colocated region log message
      // parent region is generation 1, child region is generation 2, grandchild is 3, etc.

      ArgumentCaptor<String> messageCaptor = ArgumentCaptor.forClass(String.class);

      for (int generation = 2; generation < childPRGenerationsCount + 2; ++generation) {
        String childPRName = "region" + generation;
        String colocatedWithRegionName =
            generation == 2 ? regionName : "region" + (generation - 1);

        // delay between starting generations of child regions until the expected missing
        // colocation messages are logged
        int expectedCount = (generation - 1) * generation / 2;

        verify(spyLogger.logger(),
            timeout(TIMEOUT_MILLIS)
                .atLeast(expectedCount))
                    .accept(anyString());

        // Start the child region
        createChildPR_withPersistence(colocatedWithRegionName, childPRName, diskStoreName1,
            DEFAULT_RECOVERY_DELAY, DEFAULT_REDUNDANT_COPIES, DEFAULT_STARTUP_RECOVERY_DELAY);
      }

      verify(spyLogger.logger(),
          atLeast(expectedLogMessagesCount))
              .accept(messageCaptor.capture());

      for (String message : messageCaptor.getAllValues()) {
        assertThat(message).matches(PATTERN_FOR_MISSING_CHILD_LOG);
      }
    }
  }
Test that a rebalance will regions are in the middle of recovery doesn't cause issues.

This is slightly different than {@link #testRebalanceWithOfflineChildRegion(String)} because
in this case all of the regions have been created, but they are in the middle of actually
recovering buckets from disk.
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/partitioned/PersistentColocatedPartitionedRegionDistributedTest.java