KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > PhysicalInstrumentedMethodsTestApp


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;
5
6 import EDU.oswego.cs.dl.util.concurrent.CyclicBarrier;
7
8 import com.tc.object.TCObject;
9 import com.tc.object.bytecode.ClassAdapterBase;
10 import com.tc.object.bytecode.TransparentAccess;
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.simulator.app.ApplicationConfig;
15 import com.tc.simulator.listener.ListenerProvider;
16 import com.tc.util.Assert;
17 import com.tctest.runner.AbstractTransparentApp;
18
19 import java.lang.reflect.Field JavaDoc;
20 import java.lang.reflect.Method JavaDoc;
21 import java.util.HashMap JavaDoc;
22 import java.util.HashSet JavaDoc;
23 import java.util.Iterator JavaDoc;
24 import java.util.LinkedHashMap JavaDoc;
25 import java.util.LinkedHashSet JavaDoc;
26 import java.util.Map JavaDoc;
27 import java.util.Set JavaDoc;
28 import java.util.Map.Entry;
29
30 public class PhysicalInstrumentedMethodsTestApp extends AbstractTransparentApp {
31
32   private final CyclicBarrier barrier;
33
34   private TestSubSubClass subRoot;
35
36   public PhysicalInstrumentedMethodsTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
37     super(appId, cfg, listenerProvider);
38     barrier = new CyclicBarrier(getParticipantCount());
39   }
40
41   public void run() {
42     try {
43       int index = barrier.barrier();
44
45       validateGenerateTCObjectFieldAndMethod(index);
46
47       if (index == 0) {
48         subRoot = new TestSubSubClass();
49       }
50
51       barrier.barrier();
52
53       fieldSettingTest(index);
54       fieldGettingTest(index);
55     } catch (Throwable JavaDoc t) {
56       notifyError(t);
57     }
58   }
59
60   private void validateGenerateTCObjectFieldAndMethod(int index) {
61     if (index == 0) {
62       validateGeneratedTCObjectField();
63       validateGeneratedTCObjectMethod();
64     }
65   }
66
67   private void validateGeneratedTCObjectField() {
68     Field JavaDoc f = null;
69     try {
70       f = TestParentClass.class.getDeclaredField(ClassAdapterBase.MANAGED_FIELD_NAME);
71       Assert.assertNotNull(f);
72     } catch (NoSuchFieldException JavaDoc e) {
73       throw new AssertionError JavaDoc("TestParentClass.class does not contain field " + ClassAdapterBase.MANAGED_FIELD_NAME);
74     }
75     
76     try {
77       f = TestSubClass.class.getDeclaredField(ClassAdapterBase.MANAGED_FIELD_NAME);
78       throw new AssertionError JavaDoc("Should have thrown an NoSuchFieldException.");
79     } catch (NoSuchFieldException JavaDoc e) {
80       // ignore Exception
81
}
82     
83     try {
84       f = TestSubSubClass.class.getDeclaredField(ClassAdapterBase.MANAGED_FIELD_NAME);
85       throw new AssertionError JavaDoc("Should have thrown an NoSuchFieldException.");
86     } catch (NoSuchFieldException JavaDoc e) {
87       // ignore Exception
88
}
89   }
90   
91   private void validateGeneratedTCObjectMethod() {
92     try {
93       TestParentClass.class.getDeclaredMethod(ClassAdapterBase.MANAGED_METHOD, new Class JavaDoc[]{TCObject.class});
94     } catch (NoSuchMethodException JavaDoc e) {
95       throw new AssertionError JavaDoc("TestParentClass.class does not contain method " + ClassAdapterBase.MANAGED_METHOD);
96     }
97     
98     try {
99       TestSubClass.class.getDeclaredMethod(ClassAdapterBase.MANAGED_METHOD, new Class JavaDoc[]{TCObject.class});
100       throw new AssertionError JavaDoc("Should have thrown a NoSuchMethodException.");
101     } catch (NoSuchMethodException JavaDoc e) {
102       // ignore
103
}
104     
105     try {
106       TestSubSubClass.class.getDeclaredMethod(ClassAdapterBase.MANAGED_METHOD, new Class JavaDoc[]{TCObject.class});
107       throw new AssertionError JavaDoc("Should have thrown a NoSuchMethodException.");
108     } catch (NoSuchMethodException JavaDoc e) {
109       // ignore
110
}
111
112   }
113
114   private void fieldSettingTest(int index) throws Exception JavaDoc {
115     subClassFieldUnManagedSettingUsingReflectionTest(index);
116     subClassFieldUnManagedSettingTest(index);
117     subClassFieldManagedSettingUsingReflectionTest(index);
118     subClassFieldManagedSettingTest(index);
119   }
120
121   private void fieldGettingTest(int index) throws Exception JavaDoc {
122     subClassAllFieldsUnManagedGettingTest(index);
123     subClassAllFieldsUnManagedGettingUsingReflectionTest(index);
124     subClassAllFieldsManagedGettingTest(index);
125     subClassAllFieldsManagedGettingUsingReflectionTest(index);
126   }
127
128   private void clear() throws Exception JavaDoc {
129     synchronized (subRoot) {
130       subRoot.clear();
131     }
132
133     barrier.barrier();
134   }
135
136   private void subClassFieldUnManagedSettingUsingReflectionTest(int index) throws Exception JavaDoc {
137     clear();
138
139     Set JavaDoc referenceSet = new HashSet JavaDoc();
140     referenceSet.add("first element");
141     referenceSet.add("second element");
142
143     Map JavaDoc referenceMap = new HashMap JavaDoc();
144     referenceMap.put("first key", "first element");
145     referenceMap.put("second key", "second element");
146
147     int[] referenceArray = new int[] { 1, 2 };
148
149     synchronized (subRoot) {
150       if (index == 0) {
151         Class JavaDoc subRootClass = subRoot.getClass();
152
153         // __tc_setfield will not notify the other clients.
154
Method JavaDoc m = subRootClass.getDeclaredMethod("__tc_setfield", new Class JavaDoc[] { String JavaDoc.class, Object JavaDoc.class });
155         m.invoke(subRoot, new Object JavaDoc[] {
156             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField", new Integer JavaDoc(2) });
157         m.invoke(subRoot, new Object JavaDoc[] {
158             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField", new Integer JavaDoc(7) });
159         m.invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField",
160             new Integer JavaDoc(4) });
161         m.invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField",
162             referenceSet });
163         m.invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField",
164             "testString" });
165         m.invoke(subRoot, new Object JavaDoc[] {
166             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField", new Integer JavaDoc(5) });
167         m.invoke(subRoot, new Object JavaDoc[] {
168             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField", referenceMap });
169         m.invoke(subRoot, new Object JavaDoc[] {
170             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField", referenceArray });
171
172         // This setting should do nothing.
173
m
174             .invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0",
175                 null });
176         TransparentAccess ta = (TransparentAccess) subRoot;
177         Assert.assertNotNull(ta
178             .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0"));
179
180         Assert.assertEquals(2, subRoot.getGrandChildIntField());
181         Assert.assertEquals(new Integer JavaDoc(7), subRoot.getGrandChildObjectField());
182         Assert.assertEquals(4, subRoot.getChildIntField());
183         assertSetsEqual(referenceSet, subRoot.getChildSetField());
184         Assert.assertEquals("testString", subRoot.getChildStringField());
185
186         Assert.assertEquals(5, subRoot.getParentIntField());
187         assertMappings(referenceMap, subRoot.getParentMapField());
188         assertIntegerArray(referenceArray, subRoot.getParentArrayField());
189
190       }
191     }
192     barrier.barrier();
193   }
194
195   private void subClassFieldUnManagedSettingTest(int index) throws Exception JavaDoc {
196     clear();
197
198     Set JavaDoc referenceSet = new HashSet JavaDoc();
199     referenceSet.add("first element");
200     referenceSet.add("second element");
201
202     Map JavaDoc referenceMap = new HashMap JavaDoc();
203     referenceMap.put("first key", "first element");
204     referenceMap.put("second key", "second element");
205
206     int[] referenceArray = new int[] { 1, 2 };
207
208     synchronized (subRoot) {
209       if (index == 0) {
210         TransparentAccess ta = (TransparentAccess) subRoot;
211
212         // __tc_setfield will not notify the other clients.
213
ta.__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField",
214                          new Integer JavaDoc(2));
215         ta.__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField",
216                          new Integer JavaDoc(7));
217         ta.__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField", new Integer JavaDoc(4));
218         ta.__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField", referenceSet);
219         ta.__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField", "testString");
220         ta
221             .__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField",
222                            new Integer JavaDoc(5));
223         ta.__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField", referenceMap);
224         ta.__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField",
225                          referenceArray);
226
227         // This setting should do nothing.
228
ta.__tc_setfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0", null);
229
230         Assert.assertNotNull(ta
231             .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0"));
232
233         Assert.assertEquals(2, subRoot.getGrandChildIntField());
234         Assert.assertEquals(new Integer JavaDoc(7), subRoot.getGrandChildObjectField());
235         Assert.assertEquals(4, subRoot.getChildIntField());
236         assertSetsEqual(referenceSet, subRoot.getChildSetField());
237         Assert.assertEquals("testString", subRoot.getChildStringField());
238
239         Assert.assertEquals(5, subRoot.getParentIntField());
240         assertMappings(referenceMap, subRoot.getParentMapField());
241         assertIntegerArray(referenceArray, subRoot.getParentArrayField());
242       }
243     }
244     barrier.barrier();
245   }
246
247   private void subClassFieldManagedSettingUsingReflectionTest(int index) throws Exception JavaDoc {
248     clear();
249
250     Set JavaDoc referenceSet = new HashSet JavaDoc();
251     referenceSet.add("first element");
252     referenceSet.add("second element");
253
254     Map JavaDoc referenceMap = new HashMap JavaDoc();
255     referenceMap.put("first key", "first element");
256     referenceMap.put("second key", "second element");
257
258     int[] referenceArray = new int[] { 1, 2 };
259
260     synchronized (subRoot) {
261       if (index == 0) {
262         Class JavaDoc subRootClass = subRoot.getClass();
263
264         Method JavaDoc m = subRootClass.getDeclaredMethod("__tc_setmanagedfield", new Class JavaDoc[] { String JavaDoc.class, Object JavaDoc.class });
265         m.invoke(subRoot, new Object JavaDoc[] {
266             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField", new Integer JavaDoc(2) });
267         m.invoke(subRoot, new Object JavaDoc[] {
268             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField", new Integer JavaDoc(7) });
269         m.invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField",
270             new Integer JavaDoc(4) });
271         m.invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField",
272             referenceSet });
273         m.invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField",
274             "testString" });
275         m.invoke(subRoot, new Object JavaDoc[] {
276             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField", new Integer JavaDoc(5) });
277         m.invoke(subRoot, new Object JavaDoc[] {
278             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField", referenceMap });
279         m.invoke(subRoot, new Object JavaDoc[] {
280             "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField", referenceArray });
281
282         // This setting should do nothing.
283
m
284             .invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0",
285                 null });
286       }
287     }
288
289     barrier.barrier();
290
291     TransparentAccess ta = (TransparentAccess) subRoot;
292     Assert.assertNotNull(ta
293         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0"));
294
295     Assert.assertEquals(2, subRoot.getGrandChildIntField());
296     Assert.assertEquals(new Integer JavaDoc(7), subRoot.getGrandChildObjectField());
297     Assert.assertEquals(4, subRoot.getChildIntField());
298     assertSetsEqual(referenceSet, subRoot.getChildSetField());
299     Assert.assertEquals("testString", subRoot.getChildStringField());
300
301     Assert.assertEquals(5, subRoot.getParentIntField());
302     assertMappings(referenceMap, subRoot.getParentMapField());
303     assertIntegerArray(referenceArray, subRoot.getParentArrayField());
304
305     barrier.barrier();
306   }
307
308   private void subClassFieldManagedSettingTest(int index) throws Exception JavaDoc {
309     clear();
310
311     Set JavaDoc referenceSet = new HashSet JavaDoc();
312     referenceSet.add("first element");
313     referenceSet.add("second element");
314
315     Map JavaDoc referenceMap = new HashMap JavaDoc();
316     referenceMap.put("first key", "first element");
317     referenceMap.put("second key", "second element");
318
319     int[] referenceArray = new int[] { 1, 2 };
320     TransparentAccess ta = (TransparentAccess) subRoot;
321
322     synchronized (subRoot) {
323       if (index == 0) {
324         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField",
325                                 new Integer JavaDoc(2));
326         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField",
327                                 new Integer JavaDoc(7));
328         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField",
329                                 new Integer JavaDoc(4));
330         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField",
331                                 referenceSet);
332         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField",
333                                 "testString");
334         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField",
335                                 new Integer JavaDoc(5));
336         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField",
337                                 referenceMap);
338         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField",
339                                 referenceArray);
340
341         // This setting should do nothing.
342
ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0", null);
343       }
344     }
345
346     barrier.barrier();
347
348     Assert.assertNotNull(ta
349         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0"));
350
351     Assert.assertEquals(2, subRoot.getGrandChildIntField());
352     Assert.assertEquals(new Integer JavaDoc(7), subRoot.getGrandChildObjectField());
353     Assert.assertEquals(4, subRoot.getChildIntField());
354     assertSetsEqual(referenceSet, subRoot.getChildSetField());
355     Assert.assertEquals("testString", subRoot.getChildStringField());
356
357     Assert.assertEquals(5, subRoot.getParentIntField());
358     assertMappings(referenceMap, subRoot.getParentMapField());
359     assertIntegerArray(referenceArray, subRoot.getParentArrayField());
360
361     barrier.barrier();
362   }
363
364   private void subClassAllFieldsUnManagedGettingUsingReflectionTest(int index) throws Exception JavaDoc {
365     clear();
366
367     Set JavaDoc referenceSet = new HashSet JavaDoc();
368     referenceSet.add("first element");
369     referenceSet.add("second element");
370
371     Map JavaDoc referenceMap = new HashMap JavaDoc();
372     referenceMap.put("first key", "first element");
373     referenceMap.put("second key", "second element");
374
375     int[] referenceArray = new int[] { 1, 2 };
376
377     synchronized (subRoot) {
378       TransparentAccess ta = (TransparentAccess) subRoot;
379       if (index == 0) {
380         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField",
381                                 new Integer JavaDoc(2));
382         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField",
383                                 new Integer JavaDoc(7));
384         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField",
385                                 new Integer JavaDoc(4));
386         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField",
387                                 referenceSet);
388         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField",
389                                 "testString");
390         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField",
391                                 new Integer JavaDoc(5));
392         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField",
393                                 referenceMap);
394         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField",
395                                 referenceArray);
396
397         Map JavaDoc map = new HashMap JavaDoc();
398         // __tc_getallfields() will not resolve reference.
399
Class JavaDoc subRootClass = subRoot.getClass();
400
401         Method JavaDoc m = subRootClass.getDeclaredMethod("__tc_getallfields", new Class JavaDoc[] { Map JavaDoc.class });
402         m.invoke(subRoot, new Object JavaDoc[] { map });
403
404         Assert.assertEquals(new Integer JavaDoc(2), map
405             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField"));
406         Assert.assertEquals(new Integer JavaDoc(7), map
407             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField"));
408         Assert.assertTrue(this == map.get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0"));
409         Assert.assertEquals(4, ((Integer JavaDoc) map
410             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField")).intValue());
411         assertSetsEqual(referenceSet, (Set JavaDoc) map
412             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField"));
413         Assert.assertEquals("testString", map
414             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField"));
415
416         Assert.assertEquals(5, ((Integer JavaDoc) map
417             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField")).intValue());
418         assertMappings(referenceMap, (Map JavaDoc) map
419             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField"));
420         assertIntegerArray(referenceArray, (int[]) map
421             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField"));
422
423       }
424     }
425     barrier.barrier();
426   }
427
428   private void subClassAllFieldsUnManagedGettingTest(int index) throws Exception JavaDoc {
429     clear();
430
431     Set JavaDoc referenceSet = new HashSet JavaDoc();
432     referenceSet.add("first element");
433     referenceSet.add("second element");
434
435     Map JavaDoc referenceMap = new HashMap JavaDoc();
436     referenceMap.put("first key", "first element");
437     referenceMap.put("second key", "second element");
438
439     int[] referenceArray = new int[] { 1, 2 };
440
441     synchronized (subRoot) {
442       TransparentAccess ta = (TransparentAccess) subRoot;
443       if (index == 0) {
444         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField",
445                                 new Integer JavaDoc(2));
446         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField",
447                                 new Integer JavaDoc(7));
448         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField",
449                                 new Integer JavaDoc(4));
450         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField",
451                                 referenceSet);
452         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField",
453                                 "testString");
454         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField",
455                                 new Integer JavaDoc(5));
456         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField",
457                                 referenceMap);
458         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField",
459                                 referenceArray);
460
461         Map JavaDoc map = new HashMap JavaDoc();
462         // __tc_getallfields() will not resolve reference.
463
ta.__tc_getallfields(map);
464         Assert.assertEquals(new Integer JavaDoc(2), map
465             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField"));
466         Assert.assertEquals(new Integer JavaDoc(7), map
467             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField"));
468         Assert.assertTrue(this == map.get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0"));
469         Assert.assertEquals(4, ((Integer JavaDoc) map
470             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField")).intValue());
471         assertSetsEqual(referenceSet, (Set JavaDoc) map
472             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField"));
473         Assert.assertEquals("testString", map
474             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField"));
475
476         Assert.assertEquals(5, ((Integer JavaDoc) map
477             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField")).intValue());
478         assertMappings(referenceMap, (Map JavaDoc) map
479             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField"));
480         assertIntegerArray(referenceArray, (int[]) map
481             .get("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField"));
482
483       }
484     }
485     barrier.barrier();
486   }
487
488   private void subClassAllFieldsManagedGettingUsingReflectionTest(int index) throws Exception JavaDoc {
489     clear();
490
491     Set JavaDoc referenceSet = new HashSet JavaDoc();
492     referenceSet.add("first element");
493     referenceSet.add("second element");
494
495     Map JavaDoc referenceMap = new HashMap JavaDoc();
496     referenceMap.put("first key", "first element");
497     referenceMap.put("second key", "second element");
498
499     int[] referenceArray = new int[] { 1, 2 };
500
501     synchronized (subRoot) {
502       TransparentAccess ta = (TransparentAccess) subRoot;
503       if (index == 0) {
504         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField",
505                                 new Integer JavaDoc(2));
506         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField",
507                                 new Integer JavaDoc(7));
508         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField",
509                                 new Integer JavaDoc(4));
510         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField",
511                                 referenceSet);
512         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField",
513                                 "testString");
514         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField",
515                                 new Integer JavaDoc(5));
516         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField",
517                                 referenceMap);
518         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField",
519                                 referenceArray);
520       }
521     }
522
523     barrier.barrier();
524
525     Class JavaDoc subRootClass = subRoot.getClass();
526
527     Method JavaDoc m = subRootClass.getDeclaredMethod("__tc_getmanagedfield", new Class JavaDoc[] { String JavaDoc.class });
528     Assert.assertEquals(2, ((Integer JavaDoc) m
529         .invoke(subRoot,
530                 new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField" }))
531         .intValue());
532     Assert
533         .assertEquals(
534                       7,
535                       ((Integer JavaDoc) m
536                           .invoke(
537                                   subRoot,
538                                   new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField" }))
539                           .intValue());
540     Assert.assertNotNull(m
541         .invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0" }));
542     if (index == 0) {
543       Assert.assertTrue(this == m
544           .invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0" }));
545     }
546     Assert.assertEquals(4, ((Integer JavaDoc) m
547         .invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField" }))
548         .intValue());
549     assertSetsEqual(referenceSet, (Set JavaDoc) m
550         .invoke(subRoot, new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField" }));
551     Assert
552         .assertEquals("testString", m
553             .invoke(subRoot,
554                     new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField" }));
555     Assert.assertEquals(5, ((Integer JavaDoc) m
556         .invoke(subRoot,
557                 new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField" }))
558         .intValue());
559     assertMappings(referenceMap, (Map JavaDoc) m
560         .invoke(subRoot,
561                 new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField" }));
562     assertIntegerArray(referenceArray, (int[]) m
563         .invoke(subRoot,
564                 new Object JavaDoc[] { "com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField" }));
565
566     barrier.barrier();
567   }
568
569   private void subClassAllFieldsManagedGettingTest(int index) throws Exception JavaDoc {
570     clear();
571
572     Set JavaDoc referenceSet = new HashSet JavaDoc();
573     referenceSet.add("first element");
574     referenceSet.add("second element");
575
576     Map JavaDoc referenceMap = new HashMap JavaDoc();
577     referenceMap.put("first key", "first element");
578     referenceMap.put("second key", "second element");
579
580     int[] referenceArray = new int[] { 1, 2 };
581     TransparentAccess ta = (TransparentAccess) subRoot;
582
583     synchronized (subRoot) {
584       if (index == 0) {
585         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField",
586                                 new Integer JavaDoc(2));
587         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField",
588                                 new Integer JavaDoc(7));
589         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField",
590                                 new Integer JavaDoc(4));
591         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField",
592                                 referenceSet);
593         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField",
594                                 "testString");
595         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField",
596                                 new Integer JavaDoc(5));
597         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField",
598                                 referenceMap);
599         ta.__tc_setmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField",
600                                 referenceArray);
601       }
602     }
603
604     barrier.barrier();
605
606     Assert.assertEquals(2, ((Integer JavaDoc) ta
607         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildIntField"))
608         .intValue());
609     Assert.assertEquals(new Integer JavaDoc(7), ta
610         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.grandChildObjectField"));
611     Assert.assertNotNull(ta
612         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0"));
613     if (index == 0) {
614       Assert.assertTrue(this == ta
615           .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubSubClass.this$0"));
616     }
617     Assert.assertEquals(4, ((Integer JavaDoc) ta
618         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childIntField")).intValue());
619     assertSetsEqual(referenceSet, (Set JavaDoc) ta
620         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childSetField"));
621     Assert.assertEquals("testString", ta
622         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestSubClass.childStringField"));
623
624     Assert.assertEquals(5, ((Integer JavaDoc) ta
625         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentIntField"))
626         .intValue());
627     assertMappings(referenceMap, (Map JavaDoc) ta
628         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentMapField"));
629     assertIntegerArray(referenceArray, (int[]) ta
630         .__tc_getmanagedfield("com.tctest.PhysicalInstrumentedMethodsTestApp$TestParentClass.parentArrayField"));
631
632     barrier.barrier();
633   }
634
635   private void assertIntegerArray(int[] expect, int[] actual) {
636     Assert.assertEquals(expect.length, actual.length);
637
638     for (int i = 0; i < expect.length; i++) {
639       Assert.assertEquals(expect[i], actual[i]);
640     }
641   }
642
643   private void assertMappings(Map JavaDoc expect, Map JavaDoc actual) {
644     Assert.assertEquals(expect.size(), actual.size());
645
646     Set JavaDoc expectEntries = expect.entrySet();
647     Set JavaDoc actualEntries = actual.entrySet();
648     if (actual instanceof LinkedHashMap JavaDoc) {
649       for (Iterator JavaDoc iExpect = expectEntries.iterator(), iActual = actualEntries.iterator(); iExpect.hasNext();) {
650         Assert.assertEquals(iExpect.next(), iActual.next());
651       }
652     }
653
654     for (Iterator JavaDoc i = expectEntries.iterator(); i.hasNext();) {
655       Entry entry = (Entry) i.next();
656       Assert.assertEquals(entry.getValue(), actual.get(entry.getKey()));
657     }
658
659     for (Iterator JavaDoc i = actualEntries.iterator(); i.hasNext();) {
660       Entry entry = (Entry) i.next();
661       Assert.assertEquals(entry.getValue(), expect.get(entry.getKey()));
662     }
663   }
664
665   private void assertSetsEqual(Set JavaDoc expectElements, Set JavaDoc actual) {
666     Assert.assertEquals(expectElements.size(), actual.size());
667
668     if (actual instanceof LinkedHashSet JavaDoc) {
669       for (Iterator JavaDoc iExpect = expectElements.iterator(), iActual = actual.iterator(); iExpect.hasNext();) {
670         Assert.assertEquals(iExpect.next(), iActual.next());
671       }
672     }
673
674     Assert.assertTrue(expectElements.containsAll(actual));
675     Assert.assertTrue(actual.containsAll(expectElements));
676
677     if (expectElements.isEmpty()) {
678       Assert.assertTrue(actual.isEmpty());
679     } else {
680       Assert.assertFalse(actual.isEmpty());
681     }
682   }
683
684   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
685     TransparencyClassSpec spec = config.getOrCreateSpec(CyclicBarrier.class.getName());
686     config.addWriteAutolock("* " + CyclicBarrier.class.getName() + "*.*(..)");
687
688     String JavaDoc testClass = PhysicalInstrumentedMethodsTestApp.class.getName();
689     spec = config.getOrCreateSpec(testClass);
690     config.addIncludePattern(testClass + "$*");
691     config.addIncludePattern(testClass + "$*$TestSubSubInnerClass");
692
693     String JavaDoc methodExpression = "* " + testClass + "*.*(..)";
694     config.addWriteAutolock(methodExpression);
695
696     spec.addRoot("subRoot", "subRoot");
697     spec.addRoot("barrier", "barrier");
698   }
699
700   private static class TestParentClass {
701     private int parentIntField;
702     private Map JavaDoc parentMapField;
703     private int[] parentArrayField;
704
705     public TestParentClass() {
706       this.parentIntField = 0;
707       this.parentMapField = new HashMap JavaDoc();
708     }
709
710     public int getParentIntField() {
711       return parentIntField;
712     }
713
714     public void setParentIntField(int parentIntField) {
715       this.parentIntField = parentIntField;
716     }
717
718     public Map JavaDoc getParentMapField() {
719       return parentMapField;
720     }
721
722     public void setParentMapField(Map JavaDoc parentMapField) {
723       this.parentMapField = parentMapField;
724     }
725
726     public int[] getParentArrayField() {
727       return parentArrayField;
728     }
729
730     public void setParentArrayField(int[] parentArrayField) {
731       this.parentArrayField = parentArrayField;
732     }
733
734     public void clear() {
735       this.parentIntField = 0;
736       this.parentMapField.clear();
737     }
738   }
739
740   private static class TestSubClass extends TestParentClass {
741     private int childIntField;
742     private Set JavaDoc childSetField;
743     private String JavaDoc childStringField;
744     private int index;
745
746     public TestSubClass() {
747       this.index = 0;
748       this.childIntField = 0;
749       this.childSetField = new HashSet JavaDoc();
750     }
751
752     public void clear() {
753       this.index = 0;
754       this.childIntField = 0;
755       this.childSetField.clear();
756       super.clear();
757     }
758
759     public int getChildIntField() {
760       return childIntField;
761     }
762
763     public void setChildIntField(int childIntField) {
764       this.childIntField = childIntField;
765     }
766
767     public Set JavaDoc getChildSetField() {
768       return childSetField;
769     }
770
771     public void setChildSetField(Set JavaDoc childSetField) {
772       this.childSetField = childSetField;
773     }
774
775     public String JavaDoc getChildStringField() {
776       return childStringField;
777     }
778
779     public void setChildStringField(String JavaDoc childStringField) {
780       this.childStringField = childStringField;
781     }
782
783     public int getIndex() {
784       return index;
785     }
786
787     public void setIndex(int index) {
788       this.index = index;
789     }
790   }
791
792   private class TestSubSubClass extends TestSubClass {
793     private int grandChildIntField;
794     private Object JavaDoc grandChildObjectField;
795     private TestSubSubInnerClass t;
796
797     public TestSubSubClass() {
798       super();
799       this.grandChildIntField = 0;
800       this.grandChildObjectField = new Object JavaDoc();
801       this.t = new TestSubSubInnerClass(10);
802     }
803
804     public Object JavaDoc getT() {
805       // this method here to remove eclipse warning
806
return this.t;
807     }
808
809     public int getGrandChildIntField() {
810       return grandChildIntField;
811     }
812
813     public void setGrandChildIntField(int grandChildIntField) {
814       this.grandChildIntField = grandChildIntField;
815     }
816
817     public Object JavaDoc getGrandChildObjectField() {
818       return grandChildObjectField;
819     }
820
821     public void setGrandChildObjectField(Object JavaDoc grandChildObjectField) {
822       this.grandChildObjectField = grandChildObjectField;
823     }
824
825     public void clear() {
826       this.grandChildIntField = 0;
827       this.grandChildObjectField = new Object JavaDoc();
828       super.clear();
829     }
830
831     private class TestSubSubInnerClass {
832       private long l;
833
834       public TestSubSubInnerClass(long l) {
835         this.l = l;
836       }
837
838       long getL() {
839         // this method here to remove eclipse warning
840
return this.l;
841       }
842
843     }
844   }
845 }
846
Popular Tags