package org.infinispan.api; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import org.infinispan.AdvancedCache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.container.DataContainer; import org.infinispan.test.MultipleCacheManagersTest; import org.infinispan.test.TestingUtil; import org.infinispan.transaction.LockingMode; import org.infinispan.transaction.TransactionMode; import org.infinispan.transaction.lookup.EmbeddedTransactionManagerLookup; import org.infinispan.util.logging.Log; import org.infinispan.util.logging.LogFactory; import org.testng.annotations.Test; /** * Tests if clear operation actually succeeds in removing all keys from all nodes of a distributed cluster. * See https://issues.jboss.org/browse/ISPN-2530. * * @author anistor@redhat.com * @since 5.2 */ @Test(groups = "functional", testName = "api.ClearTest") public class ClearTest extends MultipleCacheManagersTest { protected final Log log = LogFactory.getLog(getClass()); protected AdvancedCache<Integer, String> c0; protected AdvancedCache<Integer, String> c1; protected AdvancedCache<Integer, String> c2; @Override public Object[] factory() { return new Object[] { new ClearTest().cacheMode(CacheMode.DIST_SYNC).transactional(false), new ClearTest().cacheMode(CacheMode.DIST_SYNC).transactional(true).lockingMode(LockingMode.OPTIMISTIC), new ClearTest().cacheMode(CacheMode.DIST_SYNC).transactional(true).lockingMode(LockingMode.PESSIMISTIC), }; } @Override protected void createCacheManagers() throws Throwable { ConfigurationBuilder builder = getDefaultClusteredCacheConfig(cacheMode, transactional, transactional); builder.clustering().hash().numSegments(3) .stateTransfer().fetchInMemoryState(true) .locking().lockAcquisitionTimeout(TestingUtil.shortTimeoutMillis()); if (transactional) { builder.transaction().transactionMode(TransactionMode.TRANSACTIONAL) .transactionManagerLookup(new EmbeddedTransactionManagerLookup()) .lockingMode(lockingMode); } createCluster(builder, 3); waitForClusterToForm(); c0 = advancedCache(0); c1 = advancedCache(1); c2 = advancedCache(2); } public void testClear() throws Exception { final int numKeys = 5; log.infof("Putting %d keys into cache ..", numKeys); for (int i = 0; i < numKeys; i++) { String value = "val_" + i; c0.put(i, value); // force all values into L1 of the other nodes assertEquals(value, c0.get(i)); assertEquals(value, c1.get(i)); assertEquals(value, c2.get(i)); } log.info("Finished putting keys"); DataContainer dc0 = c0.getDataContainer(); DataContainer dc1 = c1.getDataContainer(); DataContainer dc2 = c2.getDataContainer(); assertTrue(dc0.size() > 0); assertTrue(dc1.size() > 0); assertTrue(dc2.size() > 0); log.info("Clearing cache .."); c0.clear(); log.info("Finished clearing cache"); assertEquals(0, dc0.size()); assertEquals(0, dc1.size()); assertEquals(0, dc2.size()); } }