@Test
  public void testColocation_FPR_Persistence_Colocation() {
    for (VM vm : asList(vm0, vm1)) {
      vm.invoke(this::createCache);
    }

    vm0.invoke(() -> new RegionBuilder<>()
        .addFixedPartitionAttributes(createFixedPartition("10", true, 5))
        .addFixedPartitionAttributes(createFixedPartition("20", false, 5))
        .redundantCopies(1)
        .localMaxMemory(50)
        .totalNumBuckets(20)
        .partitionResolver(new CustomerFixedPartitionResolver<>())
        .persistent(true)
        .create(CUSTOMERS_REGION));

    vm1.invoke(() -> new RegionBuilder<>()
        .addFixedPartitionAttributes(createFixedPartition("20", true, 5))
        .addFixedPartitionAttributes(createFixedPartition("10", false, 5))
        .redundantCopies(1)
        .localMaxMemory(50)
        .totalNumBuckets(20)
        .partitionResolver(new CustomerFixedPartitionResolver<>())
        .persistent(true)
        .create(CUSTOMERS_REGION));

    for (VM vm : asList(vm0, vm1)) {
      vm.invoke(() -> new RegionBuilder<>()
          .redundantCopies(1)
          .localMaxMemory(50)
          .totalNumBuckets(20)
          .partitionResolver(new CustomerFixedPartitionResolver<>())
          .colocatedWith(CUSTOMERS_REGION)
          .create(ORDERS_REGION));
    }

    for (VM vm : asList(vm0, vm1)) {
      vm.invoke(() -> new RegionBuilder<>()
          .redundantCopies(1)
          .localMaxMemory(50)
          .totalNumBuckets(20)
          .partitionResolver(new CustomerFixedPartitionResolver<>())
          .colocatedWith(ORDERS_REGION)
          .create(SHIPMENTS_REGION));
    }

    for (VM vm : asList(vm0, vm1)) {
      vm.invoke(() -> {
        validateFixedPartitionAttributes(ORDERS_REGION);
        validateFixedPartitionAttributes(SHIPMENTS_REGION);
      });
    }

    vm0.invoke(() -> {
      putCustomersData(20);
      putOrdersData(20);
      putShipmentsData(20);

      validateColocatedData(10);
    });

    for (VM vm : asList(vm0, vm1)) {
      vm.invoke(() -> validatePrimaryBucketsForColocation(10, 5));
    }

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

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

      createCache();
      new RegionBuilder<>()
          .addFixedPartitionAttributes(createFixedPartition("20", true, 5))
          .addFixedPartitionAttributes(createFixedPartition("10", false, 5))
          .redundantCopies(1)
          .localMaxMemory(50)
          .totalNumBuckets(20)
          .partitionResolver(new CustomerFixedPartitionResolver<>())
          .persistent(true)
          .create(CUSTOMERS_REGION);

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

      validateCustomersData();
    });
  }
Tests validate the behavior of FPR with persistence and with colocation when all members goes
down and comes up.
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/partitioned/fixed/FixedPartitioningWithColocationAndPersistenceDUnitTest.java