@Before
  public void setup() {
    clientCache = registerInterests(createClientCache(true));

    assertThat(clientCache, is(notNullValue()));

    example = clientCache.getRegion(toRegionPath("Example"));

    assertRegion(example, "Example", DataPolicy.NORMAL);
  }
  protected ClientCache createClientCache(final boolean durable) {
    String gemfireClientName =
        DurableClientCacheIntegrationTest.class.getSimpleName().concat("Client");

    ClientCacheFactory clientCacheFactory =
        new ClientCacheFactory()
            .addPoolServer(SERVER_HOST, SERVER_PORT)
            .setPoolSubscriptionEnabled(true)
            .set("name", gemfireClientName)
            .set("mcast-port", "0")
            .set("log-level", "config");

    if (durable) {
      clientCacheFactory.set("durable-client-id", gemfireClientName.concat("Id"));
      clientCacheFactory.set("durable-client-timeout", "300");
    }

    ClientCache clientCache = clientCacheFactory.create();

    assertThat(clientCache, is(notNullValue()));

    ClientRegionFactory<String, Integer> clientRegionFactory =
        clientCache.createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY);

    clientRegionFactory.setKeyConstraint(String.class);
    clientRegionFactory.setValueConstraint(Integer.class);

    if (durable) {
      clientRegionFactory.addCacheListener(
          new CacheListenerAdapter<String, Integer>() {
            @Override
            public void afterCreate(final EntryEvent<String, Integer> event) {
              System.out.printf(
                  "Created new entry in Region (%1$s) with key (%2$s) and value (%3$s)%n",
                  event.getRegion().getFullPath(), event.getKey(), event.getNewValue());
              regionCacheListenerEventValues.add(event.getNewValue());
            }

            @Override
            public void afterRegionLive(final RegionEvent<String, Integer> event) {
              System.out.printf("Region (%1$s) is live!%n", event.getRegion().getName());
            }
          });
    }

    Region<String, Integer> example = clientRegionFactory.create("Example");

    assertRegion(example, "Example", DataPolicy.NORMAL);

    return clientCache;
  }
  protected ClientCache registerInterests(final ClientCache clientCache) {
    Region<String, Integer> example = clientCache.getRegion(toRegionPath("Example"));

    assertRegion(example, "Example", DataPolicy.NORMAL);

    example.registerInterestRegex(".*", InterestResultPolicy.KEYS_VALUES, true);

    // assertThat(clientCache.getDefaultPool().getPendingEventCount(), is(equalTo(RUN_COUNT.get() ==
    // 1 ? -2 : 2)));

    clientCache.readyForEvents();

    return clientCache;
  }
    @Override
    public void init(final Properties parameters) {
      String regionName = parameters.getProperty(REGION_PARAMETER_NAME);
      String dataPolicyName = parameters.getProperty(DATA_POLICY_PARAMETER_NAME);

      Cache gemfireCache = CacheFactory.getAnyInstance();

      assertThat(gemfireCache, is(notNullValue()));

      Region<K, V> region = gemfireCache.getRegion(toRegionPath(regionName));

      assertRegion(region, regionName, resolveDataPolicy(dataPolicyName));

      region.putAll(getRegionData());
    }
  protected void runClientCacheProducer() {
    ClientCache localClientCache = null;

    try {
      localClientCache = createClientCache();

      Region<String, Integer> example = localClientCache.getRegion(toRegionPath("Example"));

      assertRegion(example, "Example");

      example.put("four", 4);
      example.put("five", 5);
    } finally {
      closeClientCache(localClientCache);
    }
  }