@Test
  public void testFPR_Persistence() {
    vm0.invoke(() -> {
      createCache();
      new RegionBuilder<>()
          .addFixedPartitionAttributes(createFixedPartition(Q1.toString(), true, 3))
          .addFixedPartitionAttributes(createFixedPartition(Q2.toString(), false, 3))
          .redundantCopies(1)
          .localMaxMemory(40)
          .totalNumBuckets(12)
          .partitionResolver(new QuarterFixedPartitionResolver<>())
          .persistent(true)
          .create(QUARTERS_REGION);
    });

    vm1.invoke(() -> {
      createCache();
      new RegionBuilder<>()
          .addFixedPartitionAttributes(createFixedPartition(Q2.toString(), true, 3))
          .addFixedPartitionAttributes(createFixedPartition(Q1.toString(), false, 3))
          .redundantCopies(1)
          .localMaxMemory(40)
          .totalNumBuckets(12)
          .partitionResolver(new QuarterFixedPartitionResolver<>())
          .persistent(true)
          .create(QUARTERS_REGION);
    });

    vm0.invoke(() -> {
      putQuartersData(Q1);
      putQuartersData(Q2);
    });

    vm0.invoke(() -> validatePrimaryData(27 * 2, Q1, Q2));
    vm1.invoke(() -> validatePrimaryData(27 * 2, Q2, Q1));

    for (VM vm : asList(vm0, vm1)) {
      vm.invoke(() -> validatePrimaryBucketsForQuarters(6, 3));
    }

    for (VM vm : asList(vm0, vm1)) {
      vm.invoke(this::closeCache);
    }

    vm1.invoke(() -> {
      RecoveryFinishedObserver observer = new RecoveryFinishedObserver(QUARTERS_REGION);
      InternalResourceManager.setResourceObserver(observer);

      createCache();
      new RegionBuilder<>()
          .addFixedPartitionAttributes(createFixedPartition(Q2.toString(), true, 3))
          .addFixedPartitionAttributes(createFixedPartition(Q1.toString(), false, 3))
          .redundantCopies(1)
          .localMaxMemory(40)
          .totalNumBuckets(12)
          .partitionResolver(new QuarterFixedPartitionResolver<>())
          .persistent(true)
          .create(QUARTERS_REGION);

      await().until(observer::isRecoveryFinished);
    });

    vm1.invoke(() -> {
      validateQuartersData(Q1);
      validateQuartersData(Q2);

      validatePrimaryData(27 * 2, Q2, Q1);
      validatePrimaryBucketsForQuarters(6, 6);
    });

    vm0.invoke(() -> {
      RecoveryFinishedObserver observer = new RecoveryFinishedObserver(QUARTERS_REGION);
      InternalResourceManager.setResourceObserver(observer);

      createCache();
      new RegionBuilder<>()
          .addFixedPartitionAttributes(createFixedPartition(Q1.toString(), true, 3))
          .addFixedPartitionAttributes(createFixedPartition(Q2.toString(), false, 3))
          .redundantCopies(1)
          .localMaxMemory(40)
          .totalNumBuckets(12)
          .partitionResolver(new QuarterFixedPartitionResolver<>())
          .persistent(true)
          .create(QUARTERS_REGION);

      await().until(observer::isRecoveryFinished);
    });

    vm0.invoke(() -> validatePrimaryData(27 * 2, Q1, Q2));
    vm1.invoke(() -> validatePrimaryData(27 * 2, Q2, Q1));

    for (VM vm : asList(vm0, vm1)) {
      vm.invoke(() -> validatePrimaryBucketsForQuarters(6, 3));
    }

    vm0.invoke(() -> validateQuartersData(Q1));
    vm1.invoke(() -> validateQuartersData(Q2));
  }
Tests validate the behavior of FPR with persistence when all members goes down and comes up.
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/partitioned/fixed/FixedPartitioningWithColocationAndPersistenceDUnitTest.java