1 4 package com.tctest.transparency; 5 6 import org.apache.commons.collections.FastHashMap; 7 8 import EDU.oswego.cs.dl.util.concurrent.BrokenBarrierException; 9 import EDU.oswego.cs.dl.util.concurrent.CyclicBarrier; 10 11 import com.tc.object.config.ConfigVisitor; 12 import com.tc.object.config.DSOClientConfigHelper; 13 import com.tc.object.config.TransparencyClassSpec; 14 import com.tc.object.config.spec.CyclicBarrierSpec; 15 import com.tc.simulator.app.ApplicationConfig; 16 import com.tc.simulator.listener.ListenerProvider; 17 import com.tc.util.Assert; 18 import com.tctest.runner.AbstractErrorCatchingTransparentApp; 19 20 import java.util.ArrayList ; 21 import java.util.HashMap ; 22 import java.util.List ; 23 import java.util.Vector ; 24 25 public class InstrumentEverythingTestApp extends AbstractErrorCatchingTransparentApp { 26 27 private static final int INITIAL = 0; 28 private static final int INTERMEDIATE = 1; 29 private static final int END = 2; 30 31 final List root = new ArrayList (); 32 final CyclicBarrier barrier; 33 34 public InstrumentEverythingTestApp(String appId, ApplicationConfig cfg, ListenerProvider listenerProvider) { 35 super(appId, cfg, listenerProvider); 36 barrier = new CyclicBarrier(getParticipantCount()); 37 } 38 39 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 40 String testClass = InstrumentEverythingTestApp.class.getName(); 41 TransparencyClassSpec spec = config.getOrCreateSpec(testClass); 42 String methodExpression = "* " + testClass + "*.*(..)"; 43 config.addWriteAutolock(methodExpression); 44 spec.addRoot("root", "root"); 45 spec.addRoot("barrier", "barrier"); 46 47 CyclicBarrierSpec cbspec = new CyclicBarrierSpec(); 48 cbspec.visit(visitor, config); 49 50 52 config.addIncludePattern("*..*", false); 54 } 55 56 public void runTest() throws BrokenBarrierException, InterruptedException { 57 int n = barrier.barrier(); 58 moveToStage(INITIAL); 59 if (n == 0) { 60 synchronized (root) { 61 addALotOfObjects(root); 62 } 63 moveToStage(INTERMEDIATE); 64 } else { 65 List local = new ArrayList (); 66 addALotOfObjects(local); 67 moveToStageAndWait(INTERMEDIATE); 68 verify(local, root); 69 } 70 printDetails(); 71 moveToStage(END); 72 } 73 74 private void verify(List expected, List actual) { 75 Assert.assertEquals(expected, actual); 76 } 77 78 private void addALotOfObjects(List l) { 79 HashMap map = new HashMap(); 80 map.put("hello", "saro"); 81 map.put(new Integer (10), new Vector ()); 82 l.add(map); 83 l.add(new ArrayList ()); 84 l.add(new SubClassA()); 85 l.add(new SubClassB()); 86 l.add(new SubClassB()); 87 l.add(new SubClassC()); 88 l.add(new SubClassD()); 89 addFastHashMaps(l); 91 addClonedObjects(l); 92 } 93 94 private void addFastHashMaps(List l) { 95 FastHashMap fslow = new FastHashMap(); 98 l.add(fslow); 99 fslow.put("key1", "value1"); 100 fslow.put("key2", "value2"); 101 fslow.put("key3", "value3"); 102 fslow.put("key4", "value4"); 103 fslow.put("key5", "value5"); 104 105 FastHashMap freallyslow = new FastHashMap(); 106 l.add(freallyslow); 107 freallyslow.setFast(true); 108 freallyslow.put("key1", "value1"); 109 freallyslow.put("key2", "value2"); 110 freallyslow.put("key3", "value3"); 111 freallyslow.put("key4", "value4"); 112 freallyslow.put("key5", "value5"); 113 } 114 115 private void addClonedObjects(List l) { 117 SubClassA a = new SubClassA(); 118 synchronizedAdd(l, a); 119 synchronizedAdd(l, a.getCopy()); 120 SubClassB b = new SubClassB(); 121 b.method1(); 122 synchronizedAdd(l, b); 123 synchronizedAdd(l, b.getCopy()); 124 SubClassC c = new SubClassC(); 125 synchronizedAdd(l, c); 126 synchronizedAdd(l, c); 127 synchronizedAdd(l, c); 128 synchronizedAdd(l, c.getCopy()); 129 synchronizedAdd(l, c.getCopy()); 130 synchronizedAdd(l, c.clone()); 131 synchronizedAdd(l, c.clone()); 132 synchronizedAdd(l, c.clone()); 133 SubClassD d = new SubClassD(); 134 synchronizedAdd(l, d.clone()); 135 synchronizedAdd(l, d.clone()); 136 synchronizedAdd(l, d); 137 synchronizedAdd(l, d); 138 synchronizedAdd(l, d.clone()); 139 synchronizedAdd(l, d.clone()); 140 } 141 142 private void synchronizedAdd(List l, Object o) { 143 synchronized (l) { 144 l.add(o); 145 } 146 } 147 148 private void printDetails() { 149 synchronized (root) { 150 System.err.println(Thread.currentThread().getName() + ": Root size() = " + root.size()); 151 } 152 } 153 154 } 155
| Popular Tags
|