KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > ubermq > jms > server > journal > impl > ArbiterTestCase


1 /*
2  * Contents copyright 2002-03 Rhombus Technologies.
3  */

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 /**
18  *
19  * @author jp
20  */

21 public class ArbiterTestCase extends TestCase
22 {
23
24     /**
25      * @param arg0
26      */

27     public ArbiterTestCase(String JavaDoc arg0)
28     {
29         super(arg0);
30     }
31
32     public void testArbiters()
33     throws Exception JavaDoc
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         // test singelton
47
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         // ok test round robin
77
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         // test failover
106
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