1 5 package com.tctest; 6 7 import EDU.oswego.cs.dl.util.concurrent.CyclicBarrier; 8 9 import com.tc.object.config.ConfigVisitor; 10 import com.tc.object.config.DSOClientConfigHelper; 11 import com.tc.object.config.spec.CyclicBarrierSpec; 12 import com.tc.object.loaders.IsolationClassLoader; 13 import com.tc.simulator.app.ApplicationConfig; 14 import com.tc.simulator.listener.ListenerProvider; 15 import com.tctest.runner.AbstractTransparentApp; 16 17 import java.util.ArrayList ; 18 import java.util.List ; 19 20 public class MissingClassApplyTestApp extends AbstractTransparentApp { 21 22 private static final String MISSING_CLASS_NAME = MissingClassApplyTestApp.class.getName() + "$MissingClass"; 23 private List root = new ArrayList (); 24 private CyclicBarrier barrier = new CyclicBarrier(getParticipantCount()); 25 26 public MissingClassApplyTestApp(String appId, ApplicationConfig cfg, ListenerProvider listenerProvider) { 27 super(appId, cfg, listenerProvider); 28 System.err.println("\n### CTor.missingClass=" + MISSING_CLASS_NAME); 29 } 30 31 public void run() { 32 try { 33 runTest(); 34 } catch (Throwable t) { 35 notifyError(t); 36 } 37 38 } 39 40 private void runTest() throws Exception { 41 42 final int nodeId = barrier.barrier(); 43 final boolean masterNode = nodeId == 0; 44 System.err.println("\n### NodeId=" + nodeId + ", ThreadId=" + Thread.currentThread().getName()); 45 if (!masterNode) { 46 final IsolationClassLoader icl = (IsolationClassLoader) getClass().getClassLoader(); 47 icl.throwOnLoad(MISSING_CLASS_NAME, MISSING_CLASS_NAME + " should not be found in this node [nodeId=" + nodeId + "]"); 48 } 49 barrier.barrier(); 50 checkClassAvailability(masterNode); 52 53 barrier.barrier(); 54 if (masterNode) { 56 add(new Object ()); 57 } 58 barrier.barrier(); 59 checkSize(1); 60 barrier.barrier(); 61 if (masterNode) { 64 add(new MissingClass()); 65 } 66 if (!masterNode) { 67 checkSize((masterNode) ? 2 : 1); 68 } 69 barrier.barrier(); 70 checkClassAvailability(masterNode); 72 } 73 74 private void checkClassAvailability(final boolean masterNode) { 75 if (masterNode) { 76 new MissingClass(); 77 } else { 78 Throwable exception = null; 79 try { 80 new MissingClass(); 81 } catch (Throwable e) { 82 exception = e; 83 } 84 if (exception == null) { 85 notifyError("Expected exception was not thrown!"); 86 } 87 } 88 } 89 90 public void add(Object o) { 91 synchronized (root) { 92 root.add(o); 93 } 94 } 95 96 public synchronized void checkSize(final int i) { 97 int actual; 98 synchronized (root) { 99 actual = root.size(); 100 } 101 if (i != actual) { 102 notifyError("Unexpected size: expected=" + i + ", actual=" + actual); 103 } 104 } 105 106 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 107 String testClass = MissingClassApplyTestApp.class.getName(); 108 109 System.err.println("\n### testClass=" + testClass); 110 System.err.println("\n### missingClass=" + MISSING_CLASS_NAME); 111 112 config.getOrCreateSpec(testClass) .addRoot("barrier", "barrier") .addRoot("root", "root"); 115 116 config.getOrCreateSpec(MISSING_CLASS_NAME); 117 118 config.addWriteAutolock("* " + testClass + "*.*(..)"); 119 new CyclicBarrierSpec().visit(visitor, config); 120 } 121 122 static class MissingClass { 123 } 125 126 } 127 | Popular Tags |