private void validateColocationLogger_withChildRegion(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 second (i.e child) region to see missing colocated region log
      // message (logInterval/2 < delay < logInterval)

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

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

      for (String message : messageCaptor.getAllValues()) {
        assertThat(message).matches(PATTERN_FOR_MISSING_CHILD_LOG);
      }

      createChildPR_withPersistence(regionName, childRegionName1, diskStoreName1,
          DEFAULT_RECOVERY_DELAY, DEFAULT_REDUNDANT_COPIES, DEFAULT_STARTUP_RECOVERY_DELAY);
    }
  }
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