Package org.objectweb.celtix.bus.ws.rm

Source Code of org.objectweb.celtix.bus.ws.rm.DestinationSequenceTest

package org.objectweb.celtix.bus.ws.rm;

import java.io.IOException;
import java.math.BigInteger;
import java.util.List;
import java.util.Timer;

import javax.xml.datatype.DatatypeConfigurationException;

import junit.framework.TestCase;

import org.easymock.classextension.EasyMock;
import org.objectweb.celtix.bus.configuration.wsrm.AcksPolicyType;
import org.objectweb.celtix.ws.addressing.v200408.EndpointReferenceType;
import org.objectweb.celtix.ws.rm.Expires;
import org.objectweb.celtix.ws.rm.Identifier;
import org.objectweb.celtix.ws.rm.ObjectFactory;
import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
import org.objectweb.celtix.ws.rm.SequenceAcknowledgement.AcknowledgementRange;
import org.objectweb.celtix.ws.rm.policy.RMAssertionType;
import org.objectweb.celtix.ws.rm.policy.RMAssertionType.AcknowledgementInterval;
import org.objectweb.celtix.ws.rm.policy.RMAssertionType.BaseRetransmissionInterval;
import org.objectweb.celtix.ws.rm.policy.RMAssertionType.ExponentialBackoff;
import org.objectweb.celtix.ws.rm.wsdl.SequenceFault;

import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.classextension.EasyMock.createMock;
import static org.easymock.classextension.EasyMock.replay;

public class DestinationSequenceTest extends TestCase {

    ObjectFactory factory = new ObjectFactory();
    Identifier id;
    Expires expires;
    EndpointReferenceType ref;
    RMSource source;
    RMDestination destination;
    RMHandler handler;
    RMAssertionType rma;
    AcksPolicyType ap;
    public void setUp() {
        expires = factory.createExpires();
        id = factory.createIdentifier();
        id.setValue("seq");
        ref = createMock(EndpointReferenceType.class);
        source = createMock(RMSource.class);
        destination = createMock(RMDestination.class);
        handler = createMock(RMHandler.class);
        ap = RMUtils.getWSRMConfFactory().createAcksPolicyType();
        rma = RMUtils.getWSRMPolicyFactory().createRMAssertionType();
        BaseRetransmissionInterval bri =
            RMUtils.getWSRMPolicyFactory().createRMAssertionTypeBaseRetransmissionInterval();
        bri.setMilliseconds(new BigInteger("3000"));
        rma.setBaseRetransmissionInterval(bri);
        ExponentialBackoff eb =
            RMUtils.getWSRMPolicyFactory().createRMAssertionTypeExponentialBackoff();
        eb.getOtherAttributes().put(RetransmissionQueue.EXPONENTIAL_BACKOFF_BASE_ATTR,
                                    RetransmissionQueue.DEFAULT_EXPONENTIAL_BACKOFF);
       
    }

    public void testConstructors() throws DatatypeConfigurationException {

        Identifier otherId = factory.createIdentifier();
        otherId.setValue("otherSeq");
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        assertEquals(id, seq.getIdentifier());
        assertNull(seq.getLastMessageNr());
        assertSame(ref, seq.getAcksTo());
        assertNotNull(seq.getAcknowledgment());
        assertNotNull(seq.getMonitor());  
       
        SequenceAcknowledgement ack = RMUtils.getWSRMFactory().createSequenceAcknowledgement();       
        seq = new DestinationSequence(id, ref, BigInteger.TEN, ack);
        assertEquals(id, seq.getIdentifier());
        assertEquals(BigInteger.TEN, seq.getLastMessageNr());
        assertSame(ref, seq.getAcksTo());
        assertSame(ack, seq.getAcknowledgment());
        assertNotNull(seq.getMonitor());   
    }
   
    public void testEqualsAndHashCode() {
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        DestinationSequence otherSeq = null;
        assertTrue(!seq.equals(otherSeq));
        otherSeq = new DestinationSequence(id, ref, destination);
        assertEquals(seq, otherSeq);
        assertEquals(seq.hashCode(), otherSeq.hashCode());
        Identifier otherId = factory.createIdentifier();
        otherId.setValue("otherSeq");
        otherSeq = new DestinationSequence(otherId, ref, destination);
        assertTrue(!seq.equals(otherSeq));
        assertTrue(seq.hashCode() != otherSeq.hashCode());
        assertTrue(!seq.equals(this));
    }
   
    public void testAcknowledgeBasic() throws SequenceFault {
        destination.getHandler();
        expectLastCall().andReturn(handler).times(2);
        destination.getRMAssertion();
        expectLastCall().andReturn(rma).times(2);
        destination.getAcksPolicy();
        expectLastCall().andReturn(ap).times(2);
        replay(destination);
        replay(handler);
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        List<AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange();
        assertEquals(0, ranges.size());
             
        seq.acknowledge(new BigInteger("1"));       
        assertEquals(1, ranges.size());
        AcknowledgementRange r1 = ranges.get(0);
        assertEquals(1, r1.getLower().intValue());
        assertEquals(1, r1.getUpper().intValue());
       
        seq.acknowledge(new BigInteger("2"));
        assertEquals(1, ranges.size());
        r1 = ranges.get(0);
        assertEquals(1, r1.getLower().intValue());
        assertEquals(2, r1.getUpper().intValue());
    }
   
    public void testAcknowledgeLastMessageNumberExceeded() throws SequenceFault
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
       
        RMAssertionType ra = EasyMock.createMock(RMAssertionType.class);

        destination.getRMAssertion();
        expectLastCall().andReturn(ra);
        rma.getAcknowledgementInterval();
        expectLastCall().andReturn(null);
        destination.getAcksPolicy();
        expectLastCall().andReturn(null);
       
        replay(destination);
       
        seq.acknowledge(BigInteger.ONE);
        seq.setLastMessageNumber(BigInteger.ONE);
        try {
            seq.acknowledge(new BigInteger("2"));
            fail("Expected SequenceFault not thrown.");
        } catch (SequenceFault sf) {
            assertEquals("LastMessageNumberExceeded", sf.getFaultInfo().getFaultCode().getLocalPart());
        }
    }
   
    public void testAcknowledgeAppendRange() throws SequenceFault {
  
        destination.getHandler();
        expectLastCall().andReturn(handler).times(5);
        destination.getRMAssertion();
        expectLastCall().andReturn(rma).times(5);
        destination.getAcksPolicy();
        expectLastCall().andReturn(ap).times(5);
        replay(destination);
        replay(handler);
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        List<AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange();       
        seq.acknowledge(new BigInteger("1"));
        seq.acknowledge(new BigInteger("2"))
        seq.acknowledge(new BigInteger("5"));
        seq.acknowledge(new BigInteger("4"));
        seq.acknowledge(new BigInteger("6"));
        assertEquals(2, ranges.size());
        AcknowledgementRange r = ranges.get(0);
        assertEquals(1, r.getLower().intValue());
        assertEquals(2, r.getUpper().intValue());
        r = ranges.get(1);
        assertEquals(4, r.getLower().intValue());
        assertEquals(6, r.getUpper().intValue())
    }
   
    public void testAcknowledgeInsertRange() throws SequenceFault {
        destination.getHandler();
        expectLastCall().andReturn(handler).times(7);
        destination.getRMAssertion();
        expectLastCall().andReturn(rma).times(7);
        destination.getAcksPolicy();
        expectLastCall().andReturn(ap).times(7);
        replay(destination);
        replay(handler);
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        List<AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange();       
        seq.acknowledge(new BigInteger("1"));
        seq.acknowledge(new BigInteger("2"));
        seq.acknowledge(new BigInteger("9"));
        seq.acknowledge(new BigInteger("10"));
        seq.acknowledge(new BigInteger("4"));
        seq.acknowledge(new BigInteger("9"));
        seq.acknowledge(new BigInteger("2"));
       
        assertEquals(3, ranges.size());
        AcknowledgementRange r = ranges.get(0);
        assertEquals(1, r.getLower().intValue());
        assertEquals(2, r.getUpper().intValue());
        r = ranges.get(1);
        assertEquals(4, r.getLower().intValue());
        assertEquals(4, r.getUpper().intValue());
        r = ranges.get(2);
        assertEquals(9, r.getLower().intValue());
        assertEquals(10, r.getUpper().intValue())
    }
   
    public void testAcknowledgePrependRange() throws SequenceFault {
        destination.getHandler();
        expectLastCall().andReturn(handler).times(6);
        destination.getRMAssertion();
        expectLastCall().andReturn(rma).times(6);
        destination.getAcksPolicy();
        expectLastCall().andReturn(ap).times(6);
        replay(destination);
        replay(handler);
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        List<AcknowledgementRange> ranges = seq.getAcknowledgment().getAcknowledgementRange();
        seq.acknowledge(new BigInteger("4"));
        seq.acknowledge(new BigInteger("5"));
        seq.acknowledge(new BigInteger("6"));
        seq.acknowledge(new BigInteger("4"));
        seq.acknowledge(new BigInteger("2"));
        seq.acknowledge(new BigInteger("2"));
        assertEquals(2, ranges.size());
        AcknowledgementRange r = ranges.get(0);
        assertEquals(2, r.getLower().intValue());
        assertEquals(2, r.getUpper().intValue());
        r = ranges.get(1);
        assertEquals(4, r.getLower().intValue());
        assertEquals(6, r.getUpper().intValue());     
    }
   
    public void testMonitor() throws SequenceFault {
        Timer t = new Timer();
        destination.getHandler();
        expectLastCall().andReturn(handler).times(15);
        handler.getTimer();
        expectLastCall().andReturn(t).times(15);
        destination.getRMAssertion();
        expectLastCall().andReturn(rma).times(15);
        destination.getAcksPolicy();
        expectLastCall().andReturn(ap).times(15);
        replay(destination);
        replay(handler);
       
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        SequenceMonitor monitor = seq.getMonitor();
        assertNotNull(monitor);
        monitor.setMonitorInterval(500);
       
        assertEquals(0, monitor.getMPM());
       
        BigInteger mn = BigInteger.ONE;
       
        for (int i = 0; i < 10; i++) {
            seq.acknowledge(mn);
            mn = mn.add(BigInteger.ONE);
            try {
                Thread.sleep(50);
            } catch (InterruptedException ex) {
                // ignore
            }
        }
        int mpm1 = monitor.getMPM();
        assertTrue(mpm1 > 0);
       
        for (int i = 0; i < 5; i++) {
            seq.acknowledge(mn);
            mn = mn.add(BigInteger.ONE);
            try {
                Thread.sleep(100);
            } catch (InterruptedException ex) {
                // ignore
            }
        }
        int mpm2 = monitor.getMPM();
        assertTrue(mpm2 > 0);
        assertTrue(mpm1 > mpm2);
    }
   
    public void testAcknowledgeImmediate() throws SequenceFault {
        destination.getHandler();
        expectLastCall().andReturn(handler).times(1);
        destination.getRMAssertion();
        expectLastCall().andReturn(rma).times(1);       
        destination.getAcksPolicy();
        expectLastCall().andReturn(ap).times(1);
        replay(destination);
        replay(handler);
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        assertTrue(!seq.sendAcknowledgement());
             
        seq.acknowledge(new BigInteger("1"));
       
        assertTrue(seq.sendAcknowledgement());
        seq.acknowledgmentSent();
        assertFalse(seq.sendAcknowledgement());
    }
   
    public void testAcknowledgeDeferred() throws SequenceFault, IOException {
        ap.setIntraMessageThreshold(0);
        AcknowledgementInterval ai =
            RMUtils.getWSRMPolicyFactory().createRMAssertionTypeAcknowledgementInterval();
        ai.setMilliseconds(new BigInteger("200"));
        rma.setAcknowledgementInterval(ai);       
      
        Timer timer = new Timer();
        destination.getHandler();
        expectLastCall().andReturn(handler).times(3);
        handler.getTimer();
        expectLastCall().andReturn(timer).times(1);
        destination.getRMAssertion();
        expectLastCall().andReturn(rma).times(3);
        destination.getAcksPolicy();
        expectLastCall().andReturn(ap).times(3);
       
        DestinationSequence seq = new DestinationSequence(id, ref, destination);
        assertTrue(!seq.sendAcknowledgement());
       
        RMProxy proxy = createMock(RMProxy.class);
        handler.getProxy();
        expectLastCall().andReturn(proxy);
        proxy.acknowledge(seq);
        expectLastCall();
       
        replay(destination);
        replay(handler);
        replay(proxy);
             
        seq.acknowledge(new BigInteger("1"));
        seq.acknowledge(new BigInteger("2"));
        seq.acknowledge(new BigInteger("3"));
       
        assertFalse(seq.sendAcknowledgement());
       
        try {
            Thread.sleep(250);
        } catch (InterruptedException ex) {
            // ignore
        }
        assertTrue(seq.sendAcknowledgement());
        seq.acknowledgmentSent();
        assertFalse(seq.sendAcknowledgement());
    }
}
TOP

Related Classes of org.objectweb.celtix.bus.ws.rm.DestinationSequenceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.