KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > transparency > InstrumentEverythingTestApp


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

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 JavaDoc;
21 import java.util.HashMap JavaDoc;
22 import java.util.List JavaDoc;
23 import java.util.Vector JavaDoc;
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 JavaDoc root = new ArrayList JavaDoc();
32   final CyclicBarrier barrier;
33
34   public InstrumentEverythingTestApp(String JavaDoc 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 JavaDoc testClass = InstrumentEverythingTestApp.class.getName();
41     TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
42     String JavaDoc 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     // config.addExcludePattern("*..SubClassA");
51

52     // Include everything to be instrumented.
53
config.addIncludePattern("*..*", false);
54   }
55
56   public void runTest() throws BrokenBarrierException, InterruptedException JavaDoc {
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 JavaDoc local = new ArrayList JavaDoc();
66       addALotOfObjects(local);
67       moveToStageAndWait(INTERMEDIATE);
68       verify(local, root);
69     }
70     printDetails();
71     moveToStage(END);
72   }
73
74   private void verify(List JavaDoc expected, List JavaDoc actual) {
75     Assert.assertEquals(expected, actual);
76   }
77
78   private void addALotOfObjects(List JavaDoc l) {
79     HashMap map = new HashMap();
80     map.put("hello", "saro");
81     map.put(new Integer JavaDoc(10), new Vector JavaDoc());
82     l.add(map);
83     l.add(new ArrayList JavaDoc());
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     // l.add(new StringBuffer("hello there"));
90
addFastHashMaps(l);
91     addClonedObjects(l);
92   }
93
94   private void addFastHashMaps(List JavaDoc l) {
95     // This is added to test fasthashmap's clone method. It uses clone() to put() objects in the
96
// map and earlier this used to cause problem. esp. when fast=true !!
97
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   // test to make sure clonedObjects gets shared properly.
116
private void addClonedObjects(List JavaDoc 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 JavaDoc l, Object JavaDoc 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