public static void createClientCache(String hostName, Integer port1, Integer port2)
      throws Exception {
    int PORT1 = port1;
    int PORT2 = port2;
    Properties props = new Properties();
    props.setProperty(MCAST_PORT, "0");
    props.setProperty(LOCATORS, "");
    new HABugInPutDUnitTest().createCache(props);
    AttributesFactory factory = new AttributesFactory();
    factory.setScope(Scope.DISTRIBUTED_ACK);
    ClientServerTestCase.configureConnectionPool(factory, hostName, new int[] {PORT1, PORT2}, true,
        -1, 2, null);
    RegionAttributes attrs = factory.create();
    cache.createRegion(REGION_NAME, attrs);
    Region region = cache.getRegion(SEPARATOR + REGION_NAME);
    assertNotNull(region);
    region.registerInterest(KEY1);
  }
This Dunit test is to verify the bug in put() operation. When the put is invoked on the server
and NotifyBySubscription is false then it follows normal path and then again calls put of region
on which region queue is based. so recurssion is happening.
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ha/HABugInPutDUnitTest.java