KickJava   Java API By Example, From Geeks To Geeks.

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


1 package org.objectweb.celtix.bus.ws.rm;
2
3 import java.math.BigInteger JavaDoc;
4 import java.util.Date JavaDoc;
5
6 import javax.xml.datatype.DatatypeConfigurationException JavaDoc;
7 import javax.xml.datatype.DatatypeFactory JavaDoc;
8 import javax.xml.datatype.Duration JavaDoc;
9
10 import junit.framework.TestCase;
11
12 import org.objectweb.celtix.bus.configuration.wsrm.AcksPolicyType;
13 import org.objectweb.celtix.bus.configuration.wsrm.SequenceTerminationPolicyType;
14 import org.objectweb.celtix.bus.configuration.wsrm.SourcePolicyType;
15 import org.objectweb.celtix.ws.addressing.v200408.EndpointReferenceType;
16 import org.objectweb.celtix.ws.rm.Expires;
17 import org.objectweb.celtix.ws.rm.Identifier;
18 import org.objectweb.celtix.ws.rm.ObjectFactory;
19 import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
20 import org.objectweb.celtix.ws.rm.SequenceAcknowledgement.AcknowledgementRange;
21 import org.objectweb.celtix.ws.rm.policy.RMAssertionType;
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 import static org.easymock.classextension.EasyMock.reset;
30 import static org.easymock.classextension.EasyMock.verify;
31
32 public class SourceSequenceTest extends TestCase {
33
34     ObjectFactory factory = new ObjectFactory();
35     Identifier id;
36     EndpointReferenceType ref;
37     RMSource source;
38     RMDestination destination;
39     RMHandler handler;
40     RMAssertionType rma;
41     AcksPolicyType ap;
42  
43     public void setUp() {
44        
45         id = factory.createIdentifier();
46         id.setValue("seq");
47         ref = createMock(EndpointReferenceType.class);
48         source = createMock(RMSource.class);
49         destination = createMock(RMDestination.class);
50         handler = createMock(RMHandler.class);
51         ap = RMUtils.getWSRMConfFactory().createAcksPolicyType();
52         rma = RMUtils.getWSRMPolicyFactory().createRMAssertionType();
53         BaseRetransmissionInterval bri =
54             RMUtils.getWSRMPolicyFactory().createRMAssertionTypeBaseRetransmissionInterval();
55         bri.setMilliseconds(new BigInteger JavaDoc("3000"));
56         rma.setBaseRetransmissionInterval(bri);
57         ExponentialBackoff eb =
58             RMUtils.getWSRMPolicyFactory().createRMAssertionTypeExponentialBackoff();
59         eb.getOtherAttributes().put(RetransmissionQueue.EXPONENTIAL_BACKOFF_BASE_ATTR,
60                                     RetransmissionQueue.DEFAULT_EXPONENTIAL_BACKOFF);
61         
62     }
63
64     public void testConstructors() {
65
66         Identifier otherId = factory.createIdentifier();
67         otherId.setValue("otherSeq");
68        
69         SourceSequence seq = null;
70         
71         seq = new SourceSequence(id);
72         assertEquals(id, seq.getIdentifier());
73         assertTrue(!seq.isLastMessage());
74         assertTrue(!seq.isExpired());
75         assertEquals(BigInteger.ZERO, seq.getCurrentMessageNr());
76         assertNotNull(seq.getAcknowledgement());
77         assertEquals(0, seq.getAcknowledgement().getAcknowledgementRange().size());
78         assertTrue(!seq.allAcknowledged());
79         assertFalse(seq.offeredBy(otherId));
80         
81         Date JavaDoc expiry = new Date JavaDoc(System.currentTimeMillis() + 3600 * 1000);
82         
83         seq = new SourceSequence(id, expiry, null);
84         assertEquals(id, seq.getIdentifier());
85         assertTrue(!seq.isLastMessage());
86         assertTrue(!seq.isExpired());
87         assertEquals(BigInteger.ZERO, seq.getCurrentMessageNr());
88         assertNotNull(seq.getAcknowledgement());
89         assertEquals(0, seq.getAcknowledgement().getAcknowledgementRange().size());
90         assertTrue(!seq.allAcknowledged());
91         assertFalse(seq.offeredBy(otherId));
92         
93         seq = new SourceSequence(id, expiry, otherId);
94         assertTrue(seq.offeredBy(otherId));
95         assertFalse(seq.offeredBy(id));
96     }
97     
98     public void testSetExpires() throws DatatypeConfigurationException JavaDoc {
99         SourceSequence seq = new SourceSequence(id);
100         
101         Expires expires = factory.createExpires();
102         
103         DatatypeFactory JavaDoc dbf = DatatypeFactory.newInstance();
104         Duration JavaDoc d = dbf.newDuration(0);
105         expires.setValue(d);
106         seq.setExpires(expires);
107         assertTrue(!seq.isExpired());
108         
109         d = dbf.newDuration("PT0S");
110         expires.setValue(d);
111         seq.setExpires(expires);
112         assertTrue(!seq.isExpired());
113         
114         d = dbf.newDuration(1000);
115         expires.setValue(d);
116         seq.setExpires(expires);
117         assertTrue(!seq.isExpired());
118         
119         d = dbf.newDuration("-PT1S");
120         expires.setValue(d);
121         seq.setExpires(expires);
122         assertTrue(seq.isExpired());
123     }
124     
125     public void testEqualsAndHashCode() {
126         SourceSequence seq = new SourceSequence(id);
127         SourceSequence otherSeq = null;
128         assertTrue(!seq.equals(otherSeq));
129         otherSeq = new SourceSequence(id);
130         assertEquals(seq, otherSeq);
131         assertEquals(seq.hashCode(), otherSeq.hashCode());
132         Identifier otherId = factory.createIdentifier();
133         otherId.setValue("otherSeq");
134         otherSeq = new SourceSequence(otherId);
135         assertTrue(!seq.equals(otherSeq));
136         assertTrue(seq.hashCode() != otherSeq.hashCode());
137         assertTrue(!seq.equals(this));
138     }
139     
140     public void testSetAcknowledged() {
141         SourceSequence seq = new SourceSequence(id);
142         SequenceAcknowledgement ack = seq.getAcknowledgement();
143         ack = RMUtils.getWSRMFactory().createSequenceAcknowledgement();
144         AcknowledgementRange r = RMUtils.getWSRMFactory().createSequenceAcknowledgementAcknowledgementRange();
145         r.setLower(new BigInteger JavaDoc("1"));
146         r.setUpper(new BigInteger JavaDoc("2"));
147         ack.getAcknowledgementRange().add(r);
148         r = RMUtils.getWSRMFactory().createSequenceAcknowledgementAcknowledgementRange();
149         r.setLower(new BigInteger JavaDoc("4"));
150         r.setUpper(new BigInteger JavaDoc("6"));
151         ack.getAcknowledgementRange().add(r);
152         r = RMUtils.getWSRMFactory().createSequenceAcknowledgementAcknowledgementRange();
153         r.setLower(new BigInteger JavaDoc("8"));
154         r.setUpper(new BigInteger JavaDoc("10"));
155         ack.getAcknowledgementRange().add(r);
156         seq.setAcknowledged(ack);
157         assertSame(ack, seq.getAcknowledgement());
158         assertEquals(3, ack.getAcknowledgementRange().size());
159         assertTrue(!seq.isAcknowledged(new BigInteger JavaDoc("3")));
160     }
161     
162     public void testAllAcknowledged() throws SequenceFault {
163         
164         SourceSequence seq = new SourceSequence(id, null, null, new BigInteger JavaDoc("4"), false);
165         
166         assertTrue(!seq.allAcknowledged());
167         seq.setLastMessage(true);
168         assertTrue(!seq.allAcknowledged());
169         SequenceAcknowledgement ack = RMUtils.getWSRMFactory().createSequenceAcknowledgement();
170         AcknowledgementRange r = RMUtils.getWSRMFactory().createSequenceAcknowledgementAcknowledgementRange();
171         r.setLower(BigInteger.ONE);
172         r.setUpper(new BigInteger JavaDoc("2"));
173         ack.getAcknowledgementRange().add(r);
174         seq.setAcknowledged(ack);
175         assertTrue(!seq.allAcknowledged());
176         r.setUpper(new BigInteger JavaDoc("4"));
177         assertTrue(seq.allAcknowledged());
178     }
179     
180     public void testNextMessageNumber() {
181         SourceSequence seq = null;
182         SourcePolicyType sp = RMUtils.getWSRMConfFactory().createSourcePolicyType();
183         
184         // default termination policy
185

186         SequenceTerminationPolicyType stp =
187             RMUtils.getWSRMConfFactory().createSequenceTerminationPolicyType();
188         sp.setSequenceTerminationPolicy(stp);
189         
190         seq = new SourceSequence(id);
191         seq.setSource(source);
192         assertTrue(!nextSequences(seq, sp, 10));
193         
194         // termination policy max length = 1
195

196         seq = new SourceSequence(id);
197         seq.setSource(source);
198         stp.setMaxLength(BigInteger.ONE);
199         assertTrue(nextSequences(seq, sp, 10));
200         assertEquals(BigInteger.ONE, seq.getCurrentMessageNr());
201         
202         // termination policy max length = 5
203
seq = new SourceSequence(id);
204         seq.setSource(source);
205         stp.setMaxLength(new BigInteger JavaDoc("5"));
206         assertTrue(!nextSequences(seq, sp, 2));
207         
208         // termination policy max range exceeded
209

210         seq = new SourceSequence(id);
211         seq.setSource(source);
212         stp.setMaxLength(null);
213         stp.setMaxRanges(new Integer JavaDoc(3));
214         acknowledge(seq, 1, 2, 4, 5, 6, 8, 9, 10);
215         assertTrue(nextSequences(seq, sp, 10));
216         assertEquals(BigInteger.ONE, seq.getCurrentMessageNr());
217         
218         // termination policy max range not exceeded
219

220         seq = new SourceSequence(id);
221         seq.setSource(source);
222         stp.setMaxLength(null);
223         stp.setMaxRanges(new Integer JavaDoc(4));
224         acknowledge(seq, 1, 2, 4, 5, 6, 8, 9, 10);
225         assertTrue(!nextSequences(seq, sp, 10));
226         
227         // termination policy max unacknowledged
228
}
229    
230     private boolean nextSequences(SourceSequence seq, SourcePolicyType sp, int n) {
231         reset(source);
232         source.getSequenceTerminationPolicy();
233         expectLastCall().andReturn(sp.getSequenceTerminationPolicy());
234         replay(source);
235         
236         int i = 0;
237         while ((i < n) && !seq.isLastMessage()) {
238             assertNotNull(seq.nextMessageNumber());
239             verify(source);
240             reset(source);
241             source.getSequenceTerminationPolicy();
242             expectLastCall().andReturn(sp.getSequenceTerminationPolicy());
243             replay(source);
244             i++;
245         }
246         return seq.isLastMessage();
247     }
248     
249     // this method cannot be private because of a bug in PMD which otherwise
250
// would report it as an 'unused private method'
251
protected void acknowledge(SourceSequence seq, int... messageNumbers) {
252         SequenceAcknowledgement ack = factory.createSequenceAcknowledgement();
253         int i = 0;
254         while (i < messageNumbers.length) {
255             AcknowledgementRange r = factory.createSequenceAcknowledgementAcknowledgementRange();
256             Integer JavaDoc li = new Integer JavaDoc(messageNumbers[i]);
257             BigInteger JavaDoc l = new BigInteger JavaDoc(li.toString());
258             r.setLower(l);
259             i++;
260             
261             while (i < messageNumbers.length && (messageNumbers[i] - messageNumbers[i - 1]) == 1) {
262                 i++;
263             }
264             Integer JavaDoc ui = new Integer JavaDoc(messageNumbers[i - 1]);
265             BigInteger JavaDoc u = new BigInteger JavaDoc(ui.toString());
266             r.setUpper(u);
267             ack.getAcknowledgementRange().add(r);
268         }
269         seq.setAcknowledged(ack);
270     }
271     
272 }
273
Popular Tags