public void testEventFilter() throws Exception {
    Object[] filterFactoryParams = new Object[] {"string_key_1", "user_1"};
    ClientEntryListener listener = new ClientEntryListener();
    remoteCache.addClientListener(listener, filterFactoryParams, null);

    User user1 = new UserPB();
    user1.setId(1);
    user1.setName("John");
    user1.setSurname("Doe");
    user1.setGender(User.Gender.MALE);
    user1.setAge(22);

    remoteCache.put("string_key_1", "string value 1");
    remoteCache.put("string_key_2", "string value 2");
    remoteCache.put("user_1", user1);

    assertEquals(3, remoteCache.keySet().size());

    ClientCacheEntryCreatedEvent e = listener.createEvents.poll(5, TimeUnit.SECONDS);
    assertEquals("string_key_1", e.getKey());

    e = listener.createEvents.poll(5, TimeUnit.SECONDS);
    assertEquals("user_1", e.getKey());

    e = listener.createEvents.poll(5, TimeUnit.SECONDS);
    assertNull("No more elements expected in queue!", e);
  }
 public void expectSingleEvent(K key, ClientEvent.Type type) {
   switch (type) {
     case CLIENT_CACHE_ENTRY_CREATED:
       ClientCacheEntryCreatedEvent createdEvent = pollEvent(type);
       assertAnyEquals(key, createdEvent.getKey());
       assertAnyEquals(serverDataVersion(remote, key), createdEvent.getVersion());
       break;
     case CLIENT_CACHE_ENTRY_MODIFIED:
       ClientCacheEntryModifiedEvent modifiedEvent = pollEvent(type);
       assertAnyEquals(key, modifiedEvent.getKey());
       assertAnyEquals(serverDataVersion(remote, key), modifiedEvent.getVersion());
       break;
     case CLIENT_CACHE_ENTRY_REMOVED:
       ClientCacheEntryRemovedEvent removedEvent = pollEvent(type);
       assertAnyEquals(key, removedEvent.getKey());
       break;
     case CLIENT_CACHE_ENTRY_EXPIRED:
       ClientCacheEntryExpiredEvent expiredEvent = pollEvent(type);
       assertAnyEquals(key, expiredEvent.getKey());
       break;
   }
   assertEquals(0, queue(type).size());
 }