KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > ws > rm > DestinationSequenceTest


1 package org.objectweb.celtix.bus.ws.rm;
2
3 import java.io.IOException JavaDoc;
4 import java.math.BigInteger JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.Timer JavaDoc;
7
8 import javax.xml.datatype.DatatypeConfigurationException JavaDoc;
9
10 import junit.framework.TestCase;
11
12 import org.easymock.classextension.EasyMock;
13 import org.objectweb.celtix.bus.configuration.wsrm.AcksPolicyType;
14 import org.objectweb.celtix.ws.addressing.v200408.EndpointReferenceType;
15 import org.objectweb.celtix.ws.rm.Expires;
16 import org.objectweb.celtix.ws.rm.Identifier;
17 import org.objectweb.celtix.ws.rm.ObjectFactory;
18 import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
19 import org.objectweb.celtix.ws.rm.SequenceAcknowledgement.AcknowledgementRange;
20 import org.objectweb.celtix.ws.rm.policy.RMAssertionType;
21 import org.objectweb.celtix.ws.rm.policy.RMAssertionType.AcknowledgementInterval;
22 import org.objectweb.celtix.ws.rm.policy.RMAssertionType.BaseRetransmissionInterval;
23 import org.objectweb.celtix.ws.rm.policy.RMAssertionType.ExponentialBackoff;
24 import org.objectweb.celtix.ws.rm.wsdl.SequenceFault;
25
26 import static org.easymock.EasyMock.expectLastCall;
27 import static org.easymock.classextension.EasyMock.createMock;
28 import static org.easymock.classextension.EasyMock.replay;
29
30 public class DestinationSequenceTest extends TestCase {
31
32     ObjectFactory factory = new ObjectFactory();
33     Identifier id;
34     Expires expires;
35     EndpointReferenceType ref;
36     RMSource source;
37     RMDestination destination;
38     RMHandler handler;
39     RMAssertionType rma;
40     AcksPolicyType ap;
41  
42     public void setUp() {
43         expires = factory.createExpires();
44         id = factory.createIdentifier();
45         id.setValue("seq");
46         ref = createMock(EndpointReferenceType.class);
47         source = createMock(RMSource.class);
48         destination = createMock(RMDestination.class);
49         handler = createMock(RMHandler.class);
50         ap = RMUtils.getWSRMConfFactory().createAcksPolicyType();
51         rma = RMUtils.getWSRMPolicyFactory().createRMAssertionType();
52         BaseRetransmissionInterval bri =
53             RMUtils.getWSRMPolicyFactory().createRMAssertionTypeBaseRetransmissionInterval();
54         bri.setMilliseconds(new BigInteger JavaDoc("3000"));
55         rma.setBaseRetransmissionInterval(bri);
56         ExponentialBackoff eb =
57             RMUtils.getWSRMPolicyFactory().createRMAssertionTypeExponentialBackoff();
58         eb.getOtherAttributes().put(RetransmissionQueue.EXPONENTIAL_BACKOFF_BASE_ATTR,
59                                     RetransmissionQueue.DEFAULT_EXPONENTIAL_BACKOFF);
60         
61     }
62
63     public void testConstructors() throws DatatypeConfigurationException JavaDoc {
64
65         Identifier otherId = factory.createIdentifier();
66         otherId.setValue("otherSeq");
67         
68         DestinationSequence seq = new DestinationSequence(id, ref, destination);
69         assertEquals(id, seq.getIdentifier());
70         assertNull(seq.getLastMessageNr());
71         assertSame(ref, seq.getAcksTo());
72         assertNotNull(seq.getAcknowledgment());
73         assertNotNull(seq.getMonitor());
74         
75         SequenceAcknowledgement ack = RMUtils.getWSRMFactory().createSequenceAcknowledgement();
76         seq = new DestinationSequence(id, ref, BigInteger.TEN, ack);
77         assertEquals(id, seq.getIdentifier());
78         assertEquals(BigInteger.TEN, seq.getLastMessageNr());
79         assertSame(ref, seq.getAcksTo());
80         assertSame(ack, seq.getAcknowledgment());
81         assertNotNull(seq.getMonitor());
82     }
83     
84     public void testEqualsAndHashCode() {
85         DestinationSequence seq = new DestinationSequence(id, ref, destination);
86         DestinationSequence otherSeq = null;
87         assertTrue(!seq.equals(otherSeq));
88         otherSeq = new DestinationSequence(id, ref, destination);
89         assertEquals(seq, otherSeq);
90         assertEquals(seq.hashCode(), otherSeq.hashCode());
91         Identifier otherId = factory.createIdentifier();
92         otherId.setValue("otherSeq");
93         otherSeq = new DestinationSequence(otherId, ref, destination);
94         assertTrue(!seq.equals(otherSeq));
95         assertTrue(seq.hashCode() != otherSeq.hashCode());
96         assertTrue(!seq.equals(this));
97     }
98     
99     public void testAcknowledgeBasic() throws SequenceFault {
100         destination.getHandler();
101         expectLastCall().andReturn(handler).times(2);
102         destination.getRMAssertion();
103         expectLastCall().andReturn(rma).times(2);
104         destination.getAcksPolicy();
105         expectLastCall().andReturn(ap).times(2);
106         replay(destination);
107         replay(handler);
108         
109         DestinationSequence seq = new DestinationSequence(id, ref, destination);
110         List JavaDoc<AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange();
111         assertEquals(0, ranges.size());
112               
113         seq.acknowledge(new BigInteger JavaDoc("1"));
114         assertEquals(1, ranges.size());
115         AcknowledgementRange r1 = ranges.get(0);
116         assertEquals(1, r1.getLower().intValue());
117         assertEquals(1, r1.getUpper().intValue());
118         
119         seq.acknowledge(new BigInteger JavaDoc("2"));
120         assertEquals(1, ranges.size());
121         r1 = ranges.get(0);
122         assertEquals(1, r1.getLower().intValue());
123         assertEquals(2, r1.getUpper().intValue());
124     }
125     
126     public void testAcknowledgeLastMessageNumberExceeded() throws SequenceFault {
127         
128         DestinationSequence seq = new DestinationSequence(id, ref, destination);
129         
130         RMAssertionType ra = EasyMock.createMock(RMAssertionType.class);
131
132         destination.getRMAssertion();
133         expectLastCall().andReturn(ra);
134         rma.getAcknowledgementInterval();
135         expectLastCall().andReturn(null);
136         destination.getAcksPolicy();
137         expectLastCall().andReturn(null);
138         
139         replay(destination);
140         
141         seq.acknowledge(BigInteger.ONE);
142         seq.setLastMessageNumber(BigInteger.ONE);
143         try {
144             seq.acknowledge(new BigInteger JavaDoc("2"));
145             fail("Expected SequenceFault not thrown.");
146         } catch (SequenceFault sf) {
147             assertEquals("LastMessageNumberExceeded", sf.getFaultInfo().getFaultCode().getLocalPart());
148         }
149     }
150     
151     public void testAcknowledgeAppendRange() throws SequenceFault {
152    
153         destination.getHandler();
154         expectLastCall().andReturn(handler).times(5);
155         destination.getRMAssertion();
156         expectLastCall().andReturn(rma).times(5);
157         destination.getAcksPolicy();
158         expectLastCall().andReturn(ap).times(5);
159         replay(destination);
160         replay(handler);
161         
162         DestinationSequence seq = new DestinationSequence(id, ref, destination);
163         List JavaDoc<AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange();
164         seq.acknowledge(new BigInteger JavaDoc("1"));
165         seq.acknowledge(new BigInteger JavaDoc("2"));
166         seq.acknowledge(new BigInteger JavaDoc("5"));
167         seq.acknowledge(new BigInteger JavaDoc("4"));
168         seq.acknowledge(new BigInteger JavaDoc("6"));
169         assertEquals(2, ranges.size());
170         AcknowledgementRange r = ranges.get(0);
171         assertEquals(1, r.getLower().intValue());
172         assertEquals(2, r.getUpper().intValue());
173         r = ranges.get(1);
174         assertEquals(4, r.getLower().intValue());
175         assertEquals(6, r.getUpper().intValue());
176     }
177     
178     public void testAcknowledgeInsertRange() throws SequenceFault {
179         destination.getHandler();
180         expectLastCall().andReturn(handler).times(7);
181         destination.getRMAssertion();
182         expectLastCall().andReturn(rma).times(7);
183         destination.getAcksPolicy();
184         expectLastCall().andReturn(ap).times(7);
185         replay(destination);
186         replay(handler);
187         
188         DestinationSequence seq = new DestinationSequence(id, ref, destination);
189         List JavaDoc<AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange();
190         seq.acknowledge(new BigInteger JavaDoc("1"));
191         seq.acknowledge(new BigInteger JavaDoc("2"));
192         seq.acknowledge(new BigInteger JavaDoc("9"));
193         seq.acknowledge(new BigInteger JavaDoc("10"));
194         seq.acknowledge(new BigInteger JavaDoc("4"));
195         seq.acknowledge(new BigInteger JavaDoc("9"));
196         seq.acknowledge(new BigInteger JavaDoc("2"));
197         
198         assertEquals(3, ranges.size());
199         AcknowledgementRange r = ranges.get(0);
200         assertEquals(1, r.getLower().intValue());
201         assertEquals(2, r.getUpper().intValue());
202         r = ranges.get(1);
203         assertEquals(4, r.getLower().intValue());
204         assertEquals(4, r.getUpper().intValue());
205         r = ranges.get(2);
206         assertEquals(9, r.getLower().intValue());
207         assertEquals(10, r.getUpper().intValue());
208     }
209     
210     public void testAcknowledgePrependRange() throws SequenceFault {
211         destination.getHandler();
212         expectLastCall().andReturn(handler).times(6);
213         destination.getRMAssertion();
214         expectLastCall().andReturn(rma).times(6);
215         destination.getAcksPolicy();
216         expectLastCall().andReturn(ap).times(6);
217         replay(destination);
218         replay(handler);
219         
220         DestinationSequence seq = new DestinationSequence(id, ref, destination);
221         List JavaDoc<AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange();
222         seq.acknowledge(new BigInteger JavaDoc("4"));
223         seq.acknowledge(new BigInteger JavaDoc("5"));
224         seq.acknowledge(new BigInteger JavaDoc("6"));
225         seq.acknowledge(new BigInteger JavaDoc("4"));
226         seq.acknowledge(new BigInteger JavaDoc("2"));
227         seq.acknowledge(new BigInteger JavaDoc("2"));
228         assertEquals(2, ranges.size());
229         AcknowledgementRange r = ranges.get(0);
230         assertEquals(2, r.getLower().intValue());
231         assertEquals(2, r.getUpper().intValue());
232         r = ranges.get(1);
233         assertEquals(4, r.getLower().intValue());
234         assertEquals(6, r.getUpper().intValue());
235     }
236     
237     public void testMonitor() throws SequenceFault {
238         Timer JavaDoc t = new Timer JavaDoc();
239         destination.getHandler();
240         expectLastCall().andReturn(handler).times(15);
241         handler.getTimer();
242         expectLastCall().andReturn(t).times(15);
243         destination.getRMAssertion();
244         expectLastCall().andReturn(rma).times(15);
245         destination.getAcksPolicy();
246         expectLastCall().andReturn(ap).times(15);
247         replay(destination);
248         replay(handler);
249         
250         
251         DestinationSequence seq = new DestinationSequence(id, ref, destination);
252         SequenceMonitor monitor = seq.getMonitor();
253         assertNotNull(monitor);
254         monitor.setMonitorInterval(500);
255         
256         assertEquals(0, monitor.getMPM());
257         
258         BigInteger JavaDoc mn = BigInteger.ONE;
259         
260         for (int i = 0; i < 10; i++) {
261             seq.acknowledge(mn);
262             mn = mn.add(BigInteger.ONE);
263             try {
264                 Thread.sleep(50);
265             } catch (InterruptedException JavaDoc ex) {
266                 // ignore
267
}
268         }
269         int mpm1 = monitor.getMPM();
270         assertTrue(mpm1 > 0);
271         
272         for (int i = 0; i < 5; i++) {
273             seq.acknowledge(mn);
274             mn = mn.add(BigInteger.ONE);
275             try {
276                 Thread.sleep(100);
277             } catch (InterruptedException JavaDoc ex) {
278                 // ignore
279
}
280         }
281         int mpm2 = monitor.getMPM();
282         assertTrue(mpm2 > 0);
283         assertTrue(mpm1 > mpm2);
284     }
285     
286     public void testAcknowledgeImmediate() throws SequenceFault {
287         destination.getHandler();
288         expectLastCall().andReturn(handler).times(1);
289         destination.getRMAssertion();
290         expectLastCall().andReturn(rma).times(1);
291         destination.getAcksPolicy();
292         expectLastCall().andReturn(ap).times(1);
293         replay(destination);
294         replay(handler);
295         
296         DestinationSequence seq = new DestinationSequence(id, ref, destination);
297         assertTrue(!seq.sendAcknowledgement());
298               
299         seq.acknowledge(new BigInteger JavaDoc("1"));
300         
301         assertTrue(seq.sendAcknowledgement());
302         seq.acknowledgmentSent();
303         assertFalse(seq.sendAcknowledgement());
304     }
305     
306     public void testAcknowledgeDeferred() throws SequenceFault, IOException JavaDoc {
307         ap.setIntraMessageThreshold(0);
308         AcknowledgementInterval ai =
309             RMUtils.getWSRMPolicyFactory().createRMAssertionTypeAcknowledgementInterval();
310         ai.setMilliseconds(new BigInteger JavaDoc("200"));
311         rma.setAcknowledgementInterval(ai);
312        
313         Timer JavaDoc timer = new Timer JavaDoc();
314         destination.getHandler();
315         expectLastCall().andReturn(handler).times(3);
316         handler.getTimer();
317         expectLastCall().andReturn(timer).times(1);
318         destination.getRMAssertion();
319         expectLastCall().andReturn(rma).times(3);
320         destination.getAcksPolicy();
321         expectLastCall().andReturn(ap).times(3);
322         
323         DestinationSequence seq = new DestinationSequence(id, ref, destination);
324         assertTrue(!seq.sendAcknowledgement());
325         
326         RMProxy proxy = createMock(RMProxy.class);
327         handler.getProxy();
328         expectLastCall().andReturn(proxy);
329         proxy.acknowledge(seq);
330         expectLastCall();
331         
332         replay(destination);
333         replay(handler);
334         replay(proxy);
335               
336         seq.acknowledge(new BigInteger JavaDoc("1"));
337         seq.acknowledge(new BigInteger JavaDoc("2"));
338         seq.acknowledge(new BigInteger JavaDoc("3"));
339         
340         assertFalse(seq.sendAcknowledgement());
341         
342         try {
343             Thread.sleep(250);
344         } catch (InterruptedException JavaDoc ex) {
345             // ignore
346
}
347         assertTrue(seq.sendAcknowledgement());
348         seq.acknowledgmentSent();
349         assertFalse(seq.sendAcknowledgement());
350     }
351 }
352
Popular Tags