package org.infinispan.client.hotrod; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNull; import java.util.concurrent.TimeUnit; import org.infinispan.client.hotrod.test.MultiHotRodServersTest; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.testng.annotations.Test; /** * This test verifies that an entry can be expired from the Hot Rod server * using the default expiry lifespan or maxIdle. </p> * * @author William Burns * @since 8.0 */ @Test(groups = "functional", testName = "client.hotrod.MixedExpiryTest") public class MixedExpiryTest extends MultiHotRodServersTest { @Override protected void createCacheManagers() throws Throwable { ConfigurationBuilder builder = getDefaultClusteredCacheConfig(CacheMode.REPL_SYNC, false); configure(builder); createHotRodServers(1, builder); } protected void configure(ConfigurationBuilder configurationBuilder) { } public void testMixedExpiryLifespan() { RemoteCacheManager client0 = client(0); RemoteCache<String, String> cache0 = client0.getCache(); String key = "someKey"; assertNull(cache0.put(key, "value1", 1000, TimeUnit.SECONDS, 1000, TimeUnit.SECONDS)); assertEquals("value1", cache0.get(key)); // expected "value1" assertMetadataAndValue(cache0.getWithMetadata(key), "value1", 1000, 1000); assertEquals("value1", cache0.withFlags(Flag.FORCE_RETURN_VALUE).put(key, "value2", -1, TimeUnit.SECONDS, 1000, TimeUnit.SECONDS)); assertEquals("value2", cache0.get(key)); // expected "value2" assertMetadataAndValue(cache0.getWithMetadata(key), "value2", -1, 1000); assertEquals("value2", cache0.withFlags(Flag.FORCE_RETURN_VALUE).put(key, "value3", -1, TimeUnit.SECONDS, 1000, TimeUnit.SECONDS)); assertEquals("value3", cache0.get(key)); // expected "value3" assertMetadataAndValue(cache0.getWithMetadata(key), "value3", -1, 1000); } public void testMixedExpiryMaxIdle() { RemoteCacheManager client0 = client(0); RemoteCache<String, String> cache0 = client0.getCache(); String key = "someKey"; assertNull(cache0.put(key, "value1", 1000, TimeUnit.SECONDS, 1000, TimeUnit.SECONDS)); assertEquals("value1", cache0.get(key)); // expected "value1" assertMetadataAndValue(cache0.getWithMetadata(key), "value1", 1000, 1000); assertEquals("value1", cache0.withFlags(Flag.FORCE_RETURN_VALUE).put(key, "value2", 1000, TimeUnit.SECONDS, -1, TimeUnit.SECONDS)); assertEquals("value2", cache0.get(key)); // expected "value2" assertMetadataAndValue(cache0.getWithMetadata(key), "value2", 1000, -1); assertEquals("value2", cache0.withFlags(Flag.FORCE_RETURN_VALUE).put(key, "value3", 1000, TimeUnit.SECONDS, -1, TimeUnit.SECONDS)); assertEquals("value3", cache0.get(key)); // expected "value3" assertMetadataAndValue(cache0.getWithMetadata(key), "value3", 1000, -1); } private <V> void assertMetadataAndValue(MetadataValue<V> metadataValue, V value, long lifespanSeconds, long maxIdleSeconds) { assertEquals(value, metadataValue.getValue()); assertEquals(lifespanSeconds, metadataValue.getLifespan()); assertEquals(maxIdleSeconds, metadataValue.getMaxIdle()); } }