1 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 ; 16 import java.util.Iterator ; 17 import java.util.concurrent.BrokenBarrierException ; 18 import java.util.concurrent.CyclicBarrier ; 19 20 public class EnumSetTestApp extends AbstractErrorCatchingTransparentApp { 21 22 enum Utensil { 23 FORK("Fork"), SPOON("Spoon"), KNIFE("Knife"); 24 25 private final String name; 26 27 Utensil(final String name) { 28 this.name = name; 29 } 30 31 public String getName() { 32 return name; 33 } 34 35 } 36 37 private static final EnumSet <Utensil> FULL_FLATWARE_SET = EnumSet.allOf(Utensil.class); 38 private static final EnumSet <Utensil> AVAILABLE_UTENSILS = EnumSet.allOf(Utensil.class); 39 40 private final EnumSet <Utensil> clusteredFlatwareSet; 41 private final CyclicBarrier barrier; 42 43 public static void visitL1DSOConfig(final ConfigVisitor visitor, final DSOClientConfigHelper config) { 44 final String 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 appId, final ApplicationConfig cfg, final ListenerProvider listenerProvider) { 55 super(appId, cfg, listenerProvider); 56 clusteredFlatwareSet = EnumSet.noneOf(Utensil.class); 57 barrier = new CyclicBarrier (getParticipantCount()); 58 } 59 60 protected void runTest() throws Throwable { 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 <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 , BrokenBarrierException { 86 barrier.await(); 87 } 88 89 private void verifySetOperations() { 90 synchronized (clusteredFlatwareSet) { 91 Assert.assertFalse(clusteredFlatwareSet.isEmpty()); 93 assertFlatwareSetCompleteness(true); 94 for (Utensil utensil : Utensil.values()) { 95 Assert.assertTrue(clusteredFlatwareSet.contains(utensil)); 96 } 97 98 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 |