private void verifyClientSubscriptionStatsOnSecondary(final int eventsCount) {
    await().until(() -> {
      HARegionQueueStats stats = getCacheClientProxy().getHARegionQueue().getStatistics();

      int numOfEvents = eventsCount - 1; // No marker

      long qrmed = stats.getEventsRemovedByQrm();

      return qrmed == numOfEvents || qrmed + 1 == numOfEvents;
      // Why +1 above? Because sometimes(TODO: explain further) there may
      // not be any QRM sent to the secondary for the last event dispatched
      // at primary.
    });
  }
The test creates two datastores with a partitioned region, and also running a cache server each.
A publisher client is connected to one server while a subscriber client is connected to both the
servers. The partitioned region has entry expiry set with ttl of 3 seconds and action as DESTROY.
The test ensures that the EXPIRE_DESTROY events are propagated to the subscriber client and the
secondary server does process the QRMs for the EXPIRE_DESTROY events.
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/partitioned/QueueRemovalMessageProcessingDistributedTest.java