@Override
      public Object call() {
        Cache cache = getCache();
        List<CacheServer> servers = cache.getCacheServers();
        CacheServer server;
        if (servers.size() > 0) {
          server = servers.get(0);
        } else {
          server = cache.addCacheServer();
          int port = AvailablePortHelper.getRandomAvailableTCPPort();
          server.setPort(port);
          server.setHostnameForClients("localhost");
          try {
            server.start();
          } catch (IOException e) {
            Assert.fail("Failed to start server ", e);
          }
        }
        if (usePR) {
          RegionFactory factory = cache.createRegionFactory(RegionShortcut.PARTITION);
          PartitionAttributesFactory pf = new PartitionAttributesFactory();
          pf.setTotalNumBuckets(2);
          factory.setPartitionAttributes(pf.create());
          factory.create(regionName);
        } else {
          cache.createRegionFactory(RegionShortcut.REPLICATE).create(regionName);
        }
        return server.getPort();
      }
This tests the fix for bug #43407 under a variety of configurations and also tests that
tombstones are treated in a similar manner. The ticket complains that a client that does a get(K)
does not end up with the entry in its cache if K is invalid on the server.
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClientServerInvalidAndDestroyedEntryDUnitTest.java