1 4 package com.ubermq.jms.server.journal.impl; 5 6 import java.io.*; 7 8 import junit.framework.*; 9 import EDU.oswego.cs.dl.util.concurrent.*; 10 11 import com.ubermq.jms.client.test.DurableTestCase.*; 12 import com.ubermq.jms.common.datagram.impl.*; 13 import com.ubermq.jms.server.journal.*; 14 import com.ubermq.kernel.*; 15 import com.ubermq.kernel.overflow.*; 16 17 21 public class ArbiterTestCase extends TestCase 22 { 23 24 27 public ArbiterTestCase(String arg0) 28 { 29 super(arg0); 30 } 31 32 public void testArbiters() 33 throws Exception 34 { 35 IDatagram ad = new AckDatagram(); 36 IOverflowHandler h = new DropIncoming(); 37 38 SynchronizedInt one = new SynchronizedInt(0), 39 two = new SynchronizedInt(0), 40 three = new SynchronizedInt(0); 41 42 DatagramSink nodeOne = new IncrementOutputNode(one), 43 nodeTwo = new IncrementOutputNode(two), 44 nodeThree = new IncrementOutputNode(three); 45 46 DurableConnectionArbiter a = new SingletonArbiter(); 48 a.connect(nodeOne); 49 a.output(ad, h); 50 Assert.assertEquals(one.get(), 1); 51 52 a.disconnect(nodeOne); 53 Assert.assertTrue(!a.isOpen()); 54 try { 55 a.output(ad, h); 56 Assert.assertTrue(false); 57 } catch(IOException iox) { 58 Assert.assertTrue(true); 59 } 60 Assert.assertEquals(one.get(), 1); 61 62 a.connect(nodeOne); 63 a.output(ad, h); 64 Assert.assertEquals(one.get(), 2); 65 66 a.connect(nodeTwo); 67 a.output(ad, h); 68 Assert.assertEquals(one.get() + two.get(), 3); 69 70 int oldOne = one.get(); 71 a.disconnect(nodeOne); 72 a.output(ad, h); 73 Assert.assertEquals(oldOne, one.get()); 74 Assert.assertEquals(one.get() + two.get(), 4); 75 76 one.set(0); 78 two.set(0); 79 three.set(0); 80 81 a = new RoundRobinArbiter(); 82 a.connect(nodeOne); 83 a.connect(nodeTwo); 84 a.connect(nodeThree); 85 86 final int N = 21; 87 for (int i = 0; i < N; i++) 88 { 89 a.output(ad, h); 90 } 91 92 Assert.assertTrue(one.get() == two.get() && 93 two.get() == three.get() && 94 three.get() == N/3); 95 96 one.set(0); 97 two.set(0); 98 three.set(0); 99 a.disconnect(nodeThree); 100 a.output(ad,h); 101 a.output(ad,h); 102 Assert.assertEquals(one.get(), 1); 103 Assert.assertEquals(two.get(), 1); 104 105 one.set(0); 107 two.set(0); 108 three.set(0); 109 110 a = new FailoverArbiter(); 111 Assert.assertTrue(!a.isOpen()); 112 a.connect(nodeOne); 113 a.connect(nodeTwo); 114 Assert.assertTrue(a.isOpen()); 115 116 a.output(ad, h); 117 a.output(ad, h); 118 a.output(ad, h); 119 Assert.assertEquals(one.get(), 3); 120 Assert.assertEquals(two.get(), 0); 121 122 ((IncrementOutputNode)nodeOne).setOpen(false); 123 Assert.assertTrue(a.isOpen()); 124 for (int i = 0; i < 3; i++) 125 { 126 try { 127 a.output(ad, h); 128 } catch(IOException iox) { 129 Assert.assertTrue(a.isOpen()); 130 a.output(ad, h); 131 } 132 } 133 Assert.assertTrue(a.isOpen()); 134 Assert.assertEquals(one.get(), 3); 135 Assert.assertEquals(two.get(), 3); 136 137 ((IncrementOutputNode)nodeOne).setOpen(true); 138 } 139 140 } 141 | Popular Tags |