| 1 package org.objectweb.celtix.bus.ws.rm; 2 3 import java.io.IOException ; 4 import java.math.BigInteger ; 5 import java.util.List ; 6 import java.util.Timer ; 7 8 import javax.xml.datatype.DatatypeConfigurationException ; 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 ("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 { 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 <AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange(); 111 assertEquals(0, ranges.size()); 112 113 seq.acknowledge(new BigInteger ("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 ("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 ("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 <AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange(); 164 seq.acknowledge(new BigInteger ("1")); 165 seq.acknowledge(new BigInteger ("2")); 166 seq.acknowledge(new BigInteger ("5")); 167 seq.acknowledge(new BigInteger ("4")); 168 seq.acknowledge(new BigInteger ("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 <AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange(); 190 seq.acknowledge(new BigInteger ("1")); 191 seq.acknowledge(new BigInteger ("2")); 192 seq.acknowledge(new BigInteger ("9")); 193 seq.acknowledge(new BigInteger ("10")); 194 seq.acknowledge(new BigInteger ("4")); 195 seq.acknowledge(new BigInteger ("9")); 196 seq.acknowledge(new BigInteger ("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 <AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange(); 222 seq.acknowledge(new BigInteger ("4")); 223 seq.acknowledge(new BigInteger ("5")); 224 seq.acknowledge(new BigInteger ("6")); 225 seq.acknowledge(new BigInteger ("4")); 226 seq.acknowledge(new BigInteger ("2")); 227 seq.acknowledge(new BigInteger ("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 t = new Timer (); 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 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 ex) { 266 } 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 ex) { 278 } 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 ("1")); 300 301 assertTrue(seq.sendAcknowledgement()); 302 seq.acknowledgmentSent(); 303 assertFalse(seq.sendAcknowledgement()); 304 } 305 306 public void testAcknowledgeDeferred() throws SequenceFault, IOException { 307 ap.setIntraMessageThreshold(0); 308 AcknowledgementInterval ai = 309 RMUtils.getWSRMPolicyFactory().createRMAssertionTypeAcknowledgementInterval(); 310 ai.setMilliseconds(new BigInteger ("200")); 311 rma.setAcknowledgementInterval(ai); 312 313 Timer timer = new Timer (); 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 ("1")); 337 seq.acknowledge(new BigInteger ("2")); 338 seq.acknowledge(new BigInteger ("3")); 339 340 assertFalse(seq.sendAcknowledgement()); 341 342 try { 343 Thread.sleep(250); 344 } catch (InterruptedException ex) { 345 } 347 assertTrue(seq.sendAcknowledgement()); 348 seq.acknowledgmentSent(); 349 assertFalse(seq.sendAcknowledgement()); 350 } 351 } 352 | Popular Tags |