@Test
  public void testCacheListenerAfterDestroy() throws CacheException {
    String name = getUniqueName();
    final Object key = getUniqueName();
    final Object value = 42;
    Object arg = "ARG";
    // final boolean localScope = getRegionAttributes().getScope().isLocal();

    TestCacheListener listener = new TestCacheListener() {
      @Override
      public void afterCreate2(EntryEvent event) {
        // This method will get invoked when the region is populated
      }

      @Override
      public void afterDestroy2(EntryEvent event) {
        assertEquals(key, event.getKey());
        assertEquals(value, event.getOldValue());
        assertNull(event.getNewValue());
        verifyEventProps(event);
      }
    };

    AttributesFactory factory = new AttributesFactory(getRegionAttributes());
    factory.setCacheListener(listener);
    Region region = createRegion(name, factory.create());

    region.create(key, value);
    assertTrue(listener.wasInvoked());
    region.destroy(key);
    assertTrue(listener.wasInvoked());

    region.create(key, value);
    assertTrue(listener.wasInvoked());
    region.destroy(key, arg);
    assertTrue(listener.wasInvoked());
  }
Tests that the <code>CacheListener</code> is called after an entry is
{@linkplain CacheListener#afterDestroy destroyed}.
geode-core/src/distributedTest/java/org/apache/geode/cache30/CacheListenerTestCase.java