@Test
  public void testCacheEvents() {
    TestCacheListener listener = new TestCacheListener() {
      @Override
      public void afterCreate2(EntryEvent event) {}
    };

    region.getAttributesMutator().addCacheListener(listener);

    IntStream.range(0, MAX_ENTRIES + 1).forEach((i) -> region.put(i, "value"));
    assertTrue(listener.wasInvoked());

    listener = new TestCacheListener() {
      @Override
      public void close2() {}
    };

    region.getAttributesMutator().addCacheListener(listener);

    IntStream.range(0, MAX_ENTRIES + 1).forEach((i) -> region.get(i, "value"));

    assertFalse(listener.wasInvoked());

    listener = new TestCacheListener() {
      @Override
      public void afterUpdate2(EntryEvent event) {
        assertEquals(null, event.getOldValue());
        assertEquals(false, event.isOldValueAvailable());
      }
    };

    region.getAttributesMutator().addCacheListener(listener);

    region.put(0, "value");
    assertTrue(listener.wasInvoked());
  }
Tests cache listeners in an overflow region are invoked and that their events are reasonable.
geode-core/src/integrationTest/java/org/apache/geode/cache30/DiskRegionIntegrationTest.java