KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > EnumSetTestApp


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

5 package com.tctest;
6
7 import com.tc.object.config.ConfigVisitor;
8 import com.tc.object.config.DSOClientConfigHelper;
9 import com.tc.object.config.TransparencyClassSpec;
10 import com.tc.simulator.app.ApplicationConfig;
11 import com.tc.simulator.listener.ListenerProvider;
12 import com.tc.util.Assert;
13 import com.tctest.runner.AbstractErrorCatchingTransparentApp;
14
15 import java.util.EnumSet JavaDoc;
16 import java.util.Iterator JavaDoc;
17 import java.util.concurrent.BrokenBarrierException JavaDoc;
18 import java.util.concurrent.CyclicBarrier JavaDoc;
19
20 public class EnumSetTestApp extends AbstractErrorCatchingTransparentApp {
21
22   enum Utensil {
23     FORK("Fork"), SPOON("Spoon"), KNIFE("Knife");
24
25     private final String JavaDoc name;
26
27     Utensil(final String JavaDoc name) {
28       this.name = name;
29     }
30
31     public String JavaDoc getName() {
32       return name;
33     }
34
35   }
36
37   private static final EnumSet JavaDoc<Utensil> FULL_FLATWARE_SET = EnumSet.allOf(Utensil.class);
38   private static final EnumSet JavaDoc<Utensil> AVAILABLE_UTENSILS = EnumSet.allOf(Utensil.class);
39
40   private final EnumSet JavaDoc<Utensil> clusteredFlatwareSet;
41   private final CyclicBarrier JavaDoc barrier;
42
43   public static void visitL1DSOConfig(final ConfigVisitor visitor, final DSOClientConfigHelper config) {
44     final String JavaDoc testClass = EnumSetTestApp.class.getName();
45     config.addIncludePattern(testClass + "$*");
46     config.addWriteAutolock("* " + testClass + "*.*(..)");
47
48     final TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
49     spec.addRoot("AVAILABLE_UTENSILS", "AVAILABLE_UTENSILS");
50     spec.addRoot("clusteredFlatwareSet", "clusteredFlatwareSet");
51     spec.addRoot("barrier", "barrier");
52   }
53
54   public EnumSetTestApp(final String JavaDoc appId, final ApplicationConfig cfg, final ListenerProvider listenerProvider) {
55     super(appId, cfg, listenerProvider);
56     clusteredFlatwareSet = EnumSet.noneOf(Utensil.class);
57     barrier = new CyclicBarrier JavaDoc(getParticipantCount());
58   }
59
60   protected void runTest() throws Throwable JavaDoc {
61     barrier.await();
62     addUtensilToFlatwareSet(getNextUtensil());
63     waitForCompleteFlatwareSet();
64     verifySetOperations();
65   }
66
67   private Utensil getNextUtensil() {
68     final Utensil utensilToAddToFlatwareSet;
69     synchronized (AVAILABLE_UTENSILS) {
70       final Iterator JavaDoc<Utensil> iterator = AVAILABLE_UTENSILS.iterator();
71       utensilToAddToFlatwareSet = iterator.next();
72       Assert.assertNotNull(utensilToAddToFlatwareSet);
73       iterator.remove();
74       Assert.assertFalse(AVAILABLE_UTENSILS.contains(utensilToAddToFlatwareSet));
75     }
76     return utensilToAddToFlatwareSet;
77   }
78
79   private void addUtensilToFlatwareSet(final Utensil utensil) {
80     synchronized (clusteredFlatwareSet) {
81       clusteredFlatwareSet.add(utensil);
82     }
83   }
84
85   private void waitForCompleteFlatwareSet() throws InterruptedException JavaDoc, BrokenBarrierException JavaDoc {
86     barrier.await();
87   }
88
89   private void verifySetOperations() {
90     synchronized (clusteredFlatwareSet) {
91       // Read operations
92
Assert.assertFalse(clusteredFlatwareSet.isEmpty());
93       assertFlatwareSetCompleteness(true);
94       for (Utensil utensil : Utensil.values()) {
95         Assert.assertTrue(clusteredFlatwareSet.contains(utensil));
96       }
97
98       // Write operations
99
for (Utensil utensil : Utensil.values()) {
100         Assert.assertTrue(clusteredFlatwareSet.remove(utensil));
101         assertFlatwareSetCompleteness(false);
102         Assert.assertTrue(clusteredFlatwareSet.add(utensil));
103         assertFlatwareSetCompleteness(true);
104       }
105
106       clusteredFlatwareSet.clear();
107       assertEmpty();
108       Assert.assertTrue(clusteredFlatwareSet.addAll(FULL_FLATWARE_SET));
109       assertFlatwareSetCompleteness(true);
110
111       Assert.assertTrue(clusteredFlatwareSet.removeAll(FULL_FLATWARE_SET));
112       assertEmpty();
113       Assert.assertTrue(clusteredFlatwareSet.addAll(FULL_FLATWARE_SET));
114       assertFlatwareSetCompleteness(true);
115     }
116   }
117
118   private void assertFlatwareSetCompleteness(final boolean shouldBeComplete) {
119     synchronized (clusteredFlatwareSet) {
120       Assert.assertEquals(shouldBeComplete, clusteredFlatwareSet.containsAll(FULL_FLATWARE_SET));
121       Assert.assertEquals(shouldBeComplete, clusteredFlatwareSet.equals(FULL_FLATWARE_SET));
122       if (shouldBeComplete) {
123         Assert.assertEquals(clusteredFlatwareSet.size(), Utensil.values().length);
124       } else {
125         Assert.assertTrue(clusteredFlatwareSet.size() < Utensil.values().length);
126       }
127     }
128   }
129
130   private void assertEmpty() {
131     synchronized (clusteredFlatwareSet) {
132       Assert.assertTrue(clusteredFlatwareSet.isEmpty());
133       Assert.assertEquals(0, clusteredFlatwareSet.size());
134       assertFlatwareSetCompleteness(false);
135     }
136   }
137
138 }
139
Popular Tags