@Test
  public void testVersionTagTimestampForDestroy() {


    // create three distributed systems with each having a cache containing
    // a Replicated Region with one entry and concurrency checks enabled.

    // Site 2 and Site 3 only know about Site 1 but Site 1 knows about both
    // Site 2 and Site 3.

    // Site 1
    Integer lnPort = vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1));
    createCacheInVMs(lnPort, vm1);
    Integer lnRecPort = vm1.invoke(WANTestBase::createReceiver);

    // Site 2
    Integer nyPort = vm2.invoke(() -> WANTestBase.createFirstRemoteLocator(2, lnPort));
    createCacheInVMs(nyPort, vm3);
    Integer nyRecPort = vm3.invoke(WANTestBase::createReceiver);

    // Site 3
    Integer tkPort = vm4.invoke(() -> WANTestBase.createFirstRemoteLocator(3, lnPort));
    createCacheInVMs(tkPort, vm5);
    Integer tkRecPort = vm5.invoke(WANTestBase::createReceiver);

    LogWriterUtils.getLogWriter().info("Created locators and receivers in 3 distributed systems");

    // Site 1
    vm1.invoke(() -> WANTestBase.createSender("ln1", 2, true, 10, 1, false, false, null, true));
    vm1.invoke(() -> WANTestBase.createSender("ln2", 3, true, 10, 1, false, false, null, true));

    vm1.invoke(
        () -> WANTestBase.createPartitionedRegion("repRegion", "ln1,ln2", 0, 1, isOffHeap()));
    vm1.invoke(() -> WANTestBase.startSender("ln1"));
    vm1.invoke(() -> WANTestBase.startSender("ln2"));
    vm1.invoke(() -> WANTestBase.waitForSenderRunningState("ln1"));
    vm1.invoke(() -> WANTestBase.waitForSenderRunningState("ln2"));

    // Site 2
    vm3.invoke(() -> WANTestBase.createSender("ny1", 1, true, 10, 1, false, false, null, true));

    vm3.invoke(() -> WANTestBase.createPartitionedRegion("repRegion", "ny1", 0, 1, isOffHeap()));
    vm3.invoke(() -> WANTestBase.startSender("ny1"));
    vm3.invoke(() -> WANTestBase.waitForSenderRunningState("ny1"));

    // Site 3 which only knows about Site 1.
    vm5.invoke(() -> WANTestBase.createSender("tk1", 1, true, 10, 1, false, false, null, true));

    vm5.invoke(() -> WANTestBase.createPartitionedRegion("repRegion", "tk1", 0, 1, isOffHeap()));
    vm5.invoke(() -> WANTestBase.startSender("tk1"));
    vm5.invoke(() -> WANTestBase.waitForSenderRunningState("tk1"));

    Wait.pause(2000);

    // Perform a put in vm1
    vm1.invoke(new CacheSerializableRunnable("Putting an entry in ds1") {

      @Override
      public void run2() throws CacheException {
        assertNotNull(cache);

        Region region = cache.getRegion(SEPARATOR + "repRegion");
        region.put("testKey", "testValue");

        assertEquals(1, region.size());
      }
    });

    // wait for vm1 to propagate put to vm3 and vm5
    Wait.pause(2000);

    long destroyTimeStamp = vm3
        .invoke(NewWANConcurrencyCheckForDestroyDUnitTest::getVersionTimestampAfterOp);

    // wait for vm1 to propagate destroyed entry's new version tag to vm5
    Wait.pause(2000);

    vm5.invoke(() -> NewWANConcurrencyCheckForDestroyDUnitTest.verifyTimestampAfterOp(
        destroyTimeStamp, 1 /* ds 3 receives gateway event only from ds 1 */));
  }
Test verifies that version tag for destroyed entry is propagated back to origin distributed
system if the version tag is applied and replaces old version information in destination
distributed system.

Version tag information which is relevant between multiple distributed systems consistency check
is basically dsid and timestamp.
geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/misc/NewWANConcurrencyCheckForDestroyDUnitTest.java