package org.infinispan.client.hotrod.near; import static org.infinispan.client.hotrod.test.HotRodClientTestingUtil.withRemoteCacheManager; import static org.testng.AssertJUnit.assertEquals; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.infinispan.client.hotrod.configuration.NearCacheMode; import org.infinispan.client.hotrod.test.RemoteCacheManagerCallable; import org.infinispan.client.hotrod.test.SingleHotRodServerTest; import org.infinispan.commons.CacheConfigurationException; import org.testng.annotations.Test; @Test(groups = "functional", testName = "client.hotrod.near.InvalidatedNearCacheTest") public class InvalidatedNearCacheTest extends SingleHotRodServerTest { AssertsNearCache<Integer, String> assertClient; @Override protected RemoteCacheManager getRemoteCacheManager() { assertClient = createAssertClient(); return assertClient.manager; } protected <K, V> AssertsNearCache<K, V> createAssertClient() { ConfigurationBuilder builder = clientConfiguration(); return AssertsNearCache.create(this.<byte[], Object>cache(), builder); } protected <K, V> RemoteCache<K, V> createClient() { ConfigurationBuilder builder = clientConfiguration(); return new RemoteCacheManager(builder.build()).getCache(); } private ConfigurationBuilder clientConfiguration() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServer().host("127.0.0.1").port(hotrodServer.getPort()); builder.nearCache().mode(getNearCacheMode()).maxEntries(-1); return builder; } protected NearCacheMode getNearCacheMode() { return NearCacheMode.INVALIDATED; } public void testGetNearCacheAfterConnect() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServer().host("127.0.0.1").port(hotrodServer.getPort()); RemoteCacheManager manager = new RemoteCacheManager(builder.build()); RemoteCache cache = manager.getCache(); cache.put(1, "one"); cache.put(2, "two"); builder.nearCache().mode(getNearCacheMode()).maxEntries(-1); assertClient = AssertsNearCache.create(this.<byte[], Object>cache(), builder); assertEquals(2, assertClient.remote.size()); assertClient.expectNoNearEvents(); assertClient.get(1, "one").expectNearGetValue(1, null).expectNearPutIfAbsent(1, "one"); assertClient.get(2, "two").expectNearGetValue(2, null).expectNearPutIfAbsent(2, "two"); assertClient.remove(1).expectNearRemove(1); assertClient.remove(2).expectNearRemove(2); } public void testGetNearCache() { assertClient.expectNoNearEvents(); assertClient.get(1, null).expectNearGetNull(1); assertClient.put(1, "v1").expectNearRemove(1); assertClient.get(1, "v1").expectNearGetNull(1).expectNearPutIfAbsent(1, "v1"); assertClient.get(1, "v1").expectNearGetValue(1, "v1"); assertClient.remove(1).expectNearRemove(1); assertClient.get(1, null).expectNearGetNull(1); } public void testGetVersionedNearCache() { assertClient.expectNoNearEvents(); assertClient.getVersioned(1, null).expectNearGetNull(1); assertClient.put(1, "v1").expectNearRemove(1); assertClient.getVersioned(1, "v1").expectNearGetNull(1).expectNearPutIfAbsent(1, "v1"); assertClient.getVersioned(1, "v1").expectNearGetValueVersion(1, "v1"); assertClient.remove(1).expectNearRemove(1); assertClient.getVersioned(1, null).expectNearGetNull(1); } public void testUpdateNearCache() { assertClient.expectNoNearEvents(); assertClient.put(1, "v1").expectNearRemove(1); assertClient.put(1, "v2").expectNearRemove(1); assertClient.get(1, "v2").expectNearGetNull(1).expectNearPutIfAbsent(1, "v2"); assertClient.get(1, "v2").expectNearGetValue(1, "v2"); assertClient.put(1, "v3").expectNearRemove(1); assertClient.remove(1).expectNearRemove(1); } public void testGetUpdatesNearCache() { assertClient.expectNoNearEvents(); assertClient.put(1, "v1").expectNearRemove(1); final AssertsNearCache<Integer, String> newAsserts = createAssertClient(); withRemoteCacheManager(new RemoteCacheManagerCallable(newAsserts.manager) { @Override public void call() { newAsserts.expectNoNearEvents(); newAsserts.get(1, "v1").expectNearGetNull(1).expectNearPutIfAbsent(1, "v1"); } }); } @Test(expectedExceptions = CacheConfigurationException.class, expectedExceptionsMessageRegExp = ".*When enabling near caching, number of max entries must be configured.*") public void testConfigurationWithoutMaxEntries() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServer().host("127.0.0.1").port(hotrodServer.getPort()); builder.nearCache().mode(getNearCacheMode()); new RemoteCacheManager(builder.build()); } }