@Before
  public void setUp() throws Exception {
    server1 = getVM(0); // datastore and server
    server2 = getVM(1); // datastore and server
    client1 = getVM(2); // durable client with subscription
    client2 = getVM(3); // durable client without subscription

    regionName = getClass().getSimpleName() + "_" + testName.getMethodName();
    hostName = getHostName();

    int port1 = server1.invoke(this::createCacheServerWithPRDatastore);
    int port2 = server2.invoke(this::createCacheServerWithPRDatastore);

    client1.invoke(() -> createClientCacheWithRI(port1, port2, "client1"));
    client2.invoke(() -> createClientCache(port1, "client2"));
  }
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