@Test
  public void testSimultaneousCrash() throws Exception {
    for (VM vm : toArray(vm0, vm1)) {
      vm.invoke(() -> createReplicateRegion(regionName, getDiskDirs(getVMId())));
    }

    vm0.invoke(() -> putEntry("A", "B"));

    vm1.invoke(() -> updateEntry("A", "C"));

    // Copy the regions as they are with both members online.
    for (VM vm : toArray(vm0, vm1)) {
      backupDir(vm.getId());
    }

    // destroy the members
    for (VM vm : toArray(vm0, vm1)) {
      vm.invoke(() -> getCache().close());
    }

    // now restore from backup
    for (VM vm : toArray(vm0, vm1)) {
      restoreBackup(vm.getId());
    }

    // This ought to wait for VM1 to come back
    AsyncInvocation<Void> createPersistentRegionInVM0 = vm0.invokeAsync(() -> {
      createReplicateRegion(regionName, getDiskDirs(getVMId()));
    });
    vm0.invoke(this::waitForBlockedInitialization);
    assertThat(createPersistentRegionInVM0.isAlive()).isTrue();

    vm1.invoke(() -> createReplicateRegion(regionName, getDiskDirs(getVMId())));

    createPersistentRegionInVM0.await();

    for (VM vm : toArray(vm0, vm1)) {
      vm.invoke(() -> validateEntry("A", "C"));
    }
  }
Tests that if two members crash simultaneously, they negotiate which member should initialize
with what is on disk and which member should copy data from that member.
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/persistence/PersistentRecoveryOrderDUnitTest.java