1 package org.objectweb.celtix.bus.ws.rm; 2 3 import java.math.BigInteger ; 4 import java.util.Date ; 5 6 import javax.xml.datatype.DatatypeConfigurationException ; 7 import javax.xml.datatype.DatatypeFactory ; 8 import javax.xml.datatype.Duration ; 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 ("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 expiry = new Date (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 { 99 SourceSequence seq = new SourceSequence(id); 100 101 Expires expires = factory.createExpires(); 102 103 DatatypeFactory dbf = DatatypeFactory.newInstance(); 104 Duration 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 ("1")); 146 r.setUpper(new BigInteger ("2")); 147 ack.getAcknowledgementRange().add(r); 148 r = RMUtils.getWSRMFactory().createSequenceAcknowledgementAcknowledgementRange(); 149 r.setLower(new BigInteger ("4")); 150 r.setUpper(new BigInteger ("6")); 151 ack.getAcknowledgementRange().add(r); 152 r = RMUtils.getWSRMFactory().createSequenceAcknowledgementAcknowledgementRange(); 153 r.setLower(new BigInteger ("8")); 154 r.setUpper(new BigInteger ("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 ("3"))); 160 } 161 162 public void testAllAcknowledged() throws SequenceFault { 163 164 SourceSequence seq = new SourceSequence(id, null, null, new BigInteger ("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 ("2")); 173 ack.getAcknowledgementRange().add(r); 174 seq.setAcknowledged(ack); 175 assertTrue(!seq.allAcknowledged()); 176 r.setUpper(new BigInteger ("4")); 177 assertTrue(seq.allAcknowledged()); 178 } 179 180 public void testNextMessageNumber() { 181 SourceSequence seq = null; 182 SourcePolicyType sp = RMUtils.getWSRMConfFactory().createSourcePolicyType(); 183 184 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 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 seq = new SourceSequence(id); 204 seq.setSource(source); 205 stp.setMaxLength(new BigInteger ("5")); 206 assertTrue(!nextSequences(seq, sp, 2)); 207 208 210 seq = new SourceSequence(id); 211 seq.setSource(source); 212 stp.setMaxLength(null); 213 stp.setMaxRanges(new Integer (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 220 seq = new SourceSequence(id); 221 seq.setSource(source); 222 stp.setMaxLength(null); 223 stp.setMaxRanges(new Integer (4)); 224 acknowledge(seq, 1, 2, 4, 5, 6, 8, 9, 10); 225 assertTrue(!nextSequences(seq, sp, 10)); 226 227 } 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 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 li = new Integer (messageNumbers[i]); 257 BigInteger l = new BigInteger (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 ui = new Integer (messageNumbers[i - 1]); 265 BigInteger u = new BigInteger (ui.toString()); 266 r.setUpper(u); 267 ack.getAcknowledgementRange().add(r); 268 } 269 seq.setAcknowledged(ack); 270 } 271 272 } 273 | Popular Tags |