package org.infinispan.invalidation;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNull;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ClusterLoaderConfigurationBuilder;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.test.MultipleCacheManagersTest;
import org.testng.annotations.Test;
/**
* Tests to ensure that invalidation caches with a cluster cache loader properly retrieve the value from the remote
* cache
*
* @author William burns
* @since 6.0
*/
public class ClusteredCacheLoaderInvalidationTest extends MultipleCacheManagersTest {
private static final String key = "key";
private static final String value = "value";
private static final String changedValue = "changed-value";
private static final String cacheName = "inval-write-cache-store";
@Override
protected void createCacheManagers() throws Throwable {
ConfigurationBuilder cb = getDefaultClusteredCacheConfig(CacheMode.INVALIDATION_SYNC, false);
cb.persistence().addStore(ClusterLoaderConfigurationBuilder.class);
createClusteredCaches(2, cacheName, cb);
}
@Test
public void testCacheLoaderBeforeAfterInvalidation() {
assertNull(cache(0, cacheName).get(key));
cache(0, cacheName).put(key, value);
assertFalse("Invalidation should not contain the value in memory",
cache(1, cacheName).getAdvancedCache().getDataContainer().containsKey(key));
assertEquals(value, cache(1, cacheName).get(key));
cache(1, cacheName).put(key, changedValue);
assertFalse("Invalidation should not contain the value in memory after other node put",
cache(0, cacheName).getAdvancedCache().getDataContainer().containsKey(key));
assertEquals(changedValue, cache(0, cacheName).get(key));
}
}