@Test
  public void testMissingMemberInBaseline() {
    vm1.invoke(this::installNewBackupMembershipListener);

    // Simulate the missing member by forcing a persistent member to go offline.
    PersistentID missingMember = vm0.invoke(() -> getPersistentID(diskStoreName1));

    vm0.invoke(() -> getCache().close());

    vm1.invoke(() -> {
      await().atMost(30, SECONDS).untilAsserted(() -> {
        assertThat(getMissingPersistentMembers()).contains(missingMember);
        assertThat(backupMembershipListener.hasMemberDeparted()).isTrue();
      });
    });

    // Perform performBackupBaseline and make sure that list of offline disk stores contains our
    // missing member.
    vm1.invoke(() -> {
      BackupStatus baselineStatus = performBackup(getBaselineDir().getAbsolutePath());
      validateBackupStatus(baselineStatus);
      assertThat(baselineStatus.getOfflineDiskStores()).hasSize(2);
    });

    // Find all of the member's oplogs in the missing member's diskstore directory structure
    // (*.crf,*.krf,*.drf)
    Collection<File> missingMemberOplogFiles =
        listFiles(new File(missingMember.getDirectory()), OPLOG_FILTER, DIRECTORY);
    assertThat(missingMemberOplogFiles).isNotEmpty();

    // Restart our missing member and make sure it is back online and part of the cluster
    vm0.invoke(() -> createCache(diskDirRule.getDiskDirFor(vm0), userDirInVM0));

    // After reconnecting make sure the other members agree that the missing member is back online.
    await().atMost(30, SECONDS).untilAsserted(() -> {
      assertThat(getMissingPersistentMembers()).doesNotContain(missingMember);
    });

    // Perform performBackupIncremental and make sure we have no offline disk stores.
    vm1.invoke(() -> {
      BackupStatus incrementalStatus =
          performBackup(getIncrementalDir().getAbsolutePath(), getBaselineBackupPath());
      validateBackupStatus(incrementalStatus);
      assertThat(incrementalStatus.getOfflineDiskStores()).isNotNull().isEmpty();
    });

    // Get the missing member's member id which is different from the PersistentID
    String memberId = vm0.invoke(this::getModifiedMemberId);

    // Get list of backed up oplog files in the performBackupIncremental backup for the missing
    // member
    File incrementalMemberDir = getBackupDirForMember(getIncrementalDir(), memberId);
    Collection<File> backupOplogFiles = listFiles(incrementalMemberDir, OPLOG_FILTER, DIRECTORY);
    assertThat(backupOplogFiles).isNotEmpty();

    // Transform missing member oplogs to just their file names.
    Collection<String> missingMemberOplogNames = new ArrayList<>();
    transform(missingMemberOplogFiles, missingMemberOplogNames, getFileNameTransformer());

    // Transform missing member's performBackupIncremental backup oplogs to just their file names.
    List<String> backupOplogNames = new ArrayList<>();
    transform(backupOplogFiles, backupOplogNames, getFileNameTransformer());

    // Make sure that the performBackupIncremental backup for the missing member contains all of the
    // operation logs for that member. This proves that a full backup was performed for that member.
    assertThat(backupOplogNames).containsAll(missingMemberOplogNames);
  }
Successful if a member performs a full backup when its backup data is not present in the
performBackupBaseline (for whatever reason). This also tests what happens when a member is
offline during the performBackupBaseline backup.

<p>
The test is regarded as successful when all of the missing members oplog files are backed up
during an performBackupIncremental backup. This means that the member performed a full backup
because its oplogs were missing in the performBackupBaseline.
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/backup/IncrementalBackupDistributedTest.java