1 package com.tctest; 2 3 import java.lang.reflect.Field ; 4 import java.util.concurrent.BrokenBarrierException ; 5 import java.util.concurrent.CyclicBarrier ; 6 7 import org.apache.commons.collections.FastHashMap; 8 9 import com.tc.object.config.ConfigVisitor; 10 import com.tc.object.config.DSOClientConfigHelper; 11 import com.tc.object.config.TransparencyClassSpec; 12 import com.tc.simulator.app.ApplicationConfig; 13 import com.tc.simulator.listener.ListenerProvider; 14 import com.tc.util.Assert; 15 import com.tctest.runner.AbstractErrorCatchingTransparentApp; 16 17 public final class FastHashMapTestApp extends 18 AbstractErrorCatchingTransparentApp { 19 20 static final int EXPECTED_THREAD_COUNT = 2; 21 22 private final CyclicBarrier barrier; 23 24 private final FastHashMap clusteredFastHashMap; 25 26 public static void visitL1DSOConfig(final ConfigVisitor visitor, 27 final DSOClientConfigHelper config) { 28 config.addNewModule("clustered-commons-collections-3.1", "1.0.0"); 29 30 final String testClass = FastHashMapTestApp.class.getName(); 31 config.addIncludePattern(testClass + "$*"); 32 33 final TransparencyClassSpec spec = config.getOrCreateSpec(testClass); 34 spec.addRoot("barrier", "barrier"); 35 spec.addRoot("clusteredFastHashMap", "clusteredFastHashMap"); 36 } 37 38 public FastHashMapTestApp(final String appId, final ApplicationConfig cfg, 39 final ListenerProvider listenerProvider) { 40 super(appId, cfg, listenerProvider); 41 barrier = new CyclicBarrier (getParticipantCount()); 42 clusteredFastHashMap = new FastHashMap(); 43 clusteredFastHashMap.setFast(true); 44 } 45 46 protected void runTest() throws Throwable { 47 if (barrier.await() == 0) { 48 addDataToMap(2); 49 letOtherNodeProceed(); 50 waitForPermissionToProceed(); 51 verifyEntries(4); 52 removeDataFromMap(2); 53 letOtherNodeProceed(); 54 waitForPermissionToProceed(); 55 verifyEntries(0); 56 } else { 57 waitForPermissionToProceed(); 58 verifyEntries(2); 59 addDataToMap(2); 60 letOtherNodeProceed(); 61 waitForPermissionToProceed(); 62 verifyEntries(2); 63 clusteredFastHashMap.clear(); 64 letOtherNodeProceed(); 65 } 66 barrier.await(); 67 } 68 69 private void letOtherNodeProceed() throws InterruptedException , 71 BrokenBarrierException { 72 barrier.await(); 73 } 74 75 private void waitForPermissionToProceed() throws InterruptedException , 77 BrokenBarrierException { 78 barrier.await(); 79 } 80 81 private void addDataToMap(final int count) { 82 for (int pos = 0; pos < count; ++pos) { 83 clusteredFastHashMap.put(new Object (), new Object ()); 84 } 85 } 86 87 private void removeDataFromMap(final int count) { 88 for (int pos = 0; pos < count; ++pos) { 89 clusteredFastHashMap.remove(clusteredFastHashMap.keySet() 90 .iterator().next()); 91 } 92 } 93 94 private void verifyEntries(final int count) { 95 Assert.assertEquals(count, clusteredFastHashMap.size()); 96 Assert.assertEquals(count, clusteredFastHashMap.keySet().size()); 97 Assert.assertEquals(count, clusteredFastHashMap.values().size()); 98 } 99 100 } 101 | Popular Tags |