@Test
  public void testVLSNConsistencyJoinGroup()
      throws UnknownMasterException, DatabaseException, InterruptedException {

    createGroup();
    ReplicatedEnvironment masterRep = repEnvInfo[0].getEnv();
    assertEquals(State.MASTER, masterRep.getState());
    leaveGroupAllButMaster();
    /* Populates just the master. */
    populateDB(masterRep, TEST_DB_NAME, 100);
    UUID uuid = RepInternal.getRepImpl(masterRep).getRepNode().getUUID();
    long masterVLSN =
        RepInternal.getRepImpl(masterRep).getVLSNIndex().getRange().getLast().getSequence()
            + 2 /* 1 new entry + txn commit record */;

    JoinCommitThread jt = new JoinCommitThread(new CommitToken(uuid, masterVLSN), repEnvInfo[1]);
    jt.start();
    Thread.sleep(5000);
    // supply the vlsn it's waiting for. Record count MUST sync up with
    // the expected masterVLSN
    populateDB(masterRep, TEST_DB_NAME, 1);
    jt.join(JOIN_WAIT_TIME);

    assertTrue(!jt.isAlive());
    assertNull("Join thread exception", jt.testException);
  }
  @Test
  public void testDefaultJoinGroup() throws UnknownMasterException, DatabaseException {

    createGroup();
    ReplicatedEnvironment masterRep = repEnvInfo[0].getEnv();
    assertEquals(State.MASTER, masterRep.getState());
    leaveGroupAllButMaster();
    /* Populates just the master. */
    CommitToken ct = populateDB(masterRep, TEST_DB_NAME, 100);

    /* Replicas should have caught up when they re-open their handles. */
    for (RepEnvInfo ri : repEnvInfo) {
      ReplicatedEnvironment rep = (ri.getEnv() == null) ? ri.openEnv() : ri.getEnv();
      VLSN repVLSN = RepInternal.getRepImpl(rep).getVLSNIndex().getRange().getLast();
      assertTrue(new VLSN(ct.getVLSN()).compareTo(repVLSN) <= 0);
    }
  }