You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by an...@apache.org on 2006/11/01 18:36:09 UTC

svn commit: r470005 [3/3] - in /incubator/cxf/trunk/rt/ws/rm: ./ src/main/java/org/apache/cxf/ws/rm/ src/main/java/org/apache/cxf/ws/rm/impl/ src/main/java/org/apache/cxf/ws/rm/persistence/ src/main/java/org/apache/cxf/ws/rm/soap/ src/main/resources/ME...

Added: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java?view=auto&rev=470005
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java (added)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java Wed Nov  1 09:36:06 2006
@@ -0,0 +1,125 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.ws.rm;
+
+import java.lang.reflect.Method;
+import java.math.BigInteger;
+import java.util.Collections;
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.phase.PhaseInterceptorChain;
+import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
+import org.apache.cxf.ws.addressing.AttributedURIType;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.ws.addressing.JAXWSAConstants;
+import org.apache.cxf.ws.addressing.MAPAggregator;
+import org.apache.cxf.ws.addressing.v200408.AttributedURI;
+import org.easymock.classextension.EasyMock;
+import org.easymock.classextension.IMocksControl;
+
+public class RMOutInterceptorTest extends TestCase {
+    
+    private IMocksControl control;
+    
+    public void setUp() {
+        control = EasyMock.createNiceControl();
+    }
+    
+    public void testOrdering() {
+        Phase p = new Phase(Phase.PRE_LOGICAL, 1);
+        PhaseInterceptorChain chain = 
+            new PhaseInterceptorChain(Collections.singletonList(p));
+        MAPAggregator map = new MAPAggregator();
+        RMOutInterceptor rmi = new RMOutInterceptor();        
+        chain.add(rmi);
+        chain.add(map);
+        Iterator it = chain.iterator();
+        assertSame("Unexpected order.", map, it.next());
+        assertSame("Unexpected order.", rmi, it.next());                      
+    } 
+    
+    public void testHandleApplicationMessage() throws NoSuchMethodException, SequenceFault {
+        AddressingPropertiesImpl maps = createMAPs("greetMe", "localhost:9000/GreeterPort", 
+            org.apache.cxf.ws.addressing.Names.WSA_NONE_ADDRESS);
+        Method[] mocked = new Method[] {
+            AbstractRMInterceptor.class.getDeclaredMethod("getManager", new Class[]{}),
+            RMOutInterceptor.class.getDeclaredMethod("addAcknowledgements",
+                new Class[] {Destination.class, RMProperties.class, Identifier.class, 
+                             AttributedURI.class})            
+        };
+        RMOutInterceptor interceptor = control.createMock(RMOutInterceptor.class, mocked); 
+        RMManager manager = control.createMock(RMManager.class);
+        EasyMock.expect(interceptor.getManager()).andReturn(manager).times(3);
+        
+        Message message = control.createMock(Message.class);
+
+        EasyMock.expect(message.get(Message.REQUESTOR_ROLE)).andReturn(Boolean.TRUE).anyTimes();        
+        EasyMock.expect(message.get(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_OUTBOUND))
+            .andReturn(maps).anyTimes();
+        RMProperties rmpsOut = new RMProperties();
+        EasyMock.expect(message.get(RMMessageConstants.RM_PROPERTIES_OUTBOUND)).andReturn(rmpsOut);
+        EasyMock.expect(message.get(RMMessageConstants.RM_PROPERTIES_INBOUND)).andReturn(null);
+        
+        Source source = control.createMock(Source.class);
+        EasyMock.expect(manager.getSource(message)).andReturn(source);
+        Destination destination = control.createMock(Destination.class);
+        EasyMock.expect(manager.getDestination(message)).andReturn(destination);
+        SourceSequence sseq = control.createMock(SourceSequence.class);
+        EasyMock.expect(manager.getSequence((Identifier)EasyMock.isNull(), EasyMock.same(message), 
+                                        EasyMock.same(maps))).andReturn(sseq);
+        EasyMock.expect(sseq.nextMessageNumber((Identifier)EasyMock.isNull(), 
+            (BigInteger)EasyMock.isNull())).andReturn(BigInteger.TEN);
+        EasyMock.expect(sseq.isLastMessage()).andReturn(false).times(2);
+        interceptor.addAcknowledgements(EasyMock.same(destination), EasyMock.same(rmpsOut), 
+            (Identifier)EasyMock.isNull(), EasyMock.isA(AttributedURI.class));
+        EasyMock.expectLastCall();
+        Identifier sid = control.createMock(Identifier.class);
+        EasyMock.expect(sseq.getIdentifier()).andReturn(sid);
+        EasyMock.expect(sseq.getCurrentMessageNr()).andReturn(BigInteger.TEN);
+
+        
+        control.replay();
+        interceptor.handleMessage(message, false);
+        assertSame(sid, rmpsOut.getSequence().getIdentifier());        
+        assertEquals(BigInteger.TEN, rmpsOut.getSequence().getMessageNumber());
+        assertNull(rmpsOut.getSequence().getLastMessage());
+        control.verify();
+    }
+    
+    private AddressingPropertiesImpl createMAPs(String action, String to, String replyTo) {
+        AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
+        org.apache.cxf.ws.addressing.ObjectFactory factory = 
+            new org.apache.cxf.ws.addressing.ObjectFactory();
+        AttributedURIType uri = factory.createAttributedURIType();
+        uri.setValue(action);
+        maps.setAction(uri);
+        uri = factory.createAttributedURIType();
+        uri.setValue(to);
+        maps.setTo(uri);
+        EndpointReferenceType epr = RMUtils.createReference(replyTo);
+        maps.setReplyTo(epr);
+        return maps;
+           
+    }
+}

Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/SourceSequenceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/SourceSequenceTest.java?view=auto&rev=470005
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/SourceSequenceTest.java (added)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/SourceSequenceTest.java Wed Nov  1 09:36:06 2006
@@ -0,0 +1,320 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.ws.rm;
+
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.xml.datatype.Duration;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.cxf.jaxb.DatatypeFactory;
+import org.apache.cxf.ws.rm.manager.SequenceTerminationPolicyType;
+import org.apache.cxf.ws.rm.manager.SourcePolicyType;
+import org.easymock.classextension.EasyMock;
+import org.easymock.classextension.IMocksControl;
+
+public class SourceSequenceTest extends TestCase {
+
+    private IMocksControl control;
+    private ObjectFactory factory;
+    private Identifier id;
+
+    private Source source;
+    private RMManager manager;
+    private SourcePolicyType sp;
+    private SequenceTerminationPolicyType stp;
+  
+    public void setUp() {        
+        factory = new ObjectFactory();
+        id = factory.createIdentifier();
+        id.setValue("seq");
+        
+        control = EasyMock.createNiceControl();
+    }
+    
+    public void tearDown() {
+        source = null;
+        manager = null;
+        sp = null;
+        stp = null;
+    }
+    
+    void setUpSource() {
+        source = control.createMock(Source.class); 
+        manager = control.createMock(RMManager.class);
+        EasyMock.expect(source.getManager()).andReturn(manager).anyTimes();
+
+        // default termination policy
+        
+        org.apache.cxf.ws.rm.manager.ObjectFactory cfgFactory = 
+            new org.apache.cxf.ws.rm.manager.ObjectFactory();
+        sp = cfgFactory.createSourcePolicyType();
+        stp = cfgFactory
+            .createSequenceTerminationPolicyType(); 
+        sp.setSequenceTerminationPolicy(stp);
+        EasyMock.expect(manager.getSourcePolicy()).andReturn(sp).anyTimes();
+    }
+    
+
+    public void testConstructors() {
+
+        Identifier otherId = factory.createIdentifier();
+        otherId.setValue("otherSeq");
+       
+        SourceSequence seq = null;
+        
+        seq = new SourceSequence(id);
+        assertEquals(id, seq.getIdentifier());
+        assertTrue(!seq.isLastMessage());
+        assertTrue(!seq.isExpired());
+        assertEquals(BigInteger.ZERO, seq.getCurrentMessageNr());
+        assertNotNull(seq.getAcknowledgement());
+        assertEquals(0, seq.getAcknowledgement().getAcknowledgementRange().size());
+        assertTrue(!seq.allAcknowledged());
+        assertFalse(seq.offeredBy(otherId));
+        
+        Date expiry = new Date(System.currentTimeMillis() + 3600 * 1000);
+        
+        seq = new SourceSequence(id, expiry, null);
+        assertEquals(id, seq.getIdentifier());
+        assertTrue(!seq.isLastMessage());
+        assertTrue(!seq.isExpired());
+        assertEquals(BigInteger.ZERO, seq.getCurrentMessageNr());
+        assertNotNull(seq.getAcknowledgement());
+        assertEquals(0, seq.getAcknowledgement().getAcknowledgementRange().size());
+        assertTrue(!seq.allAcknowledged());
+        assertFalse(seq.offeredBy(otherId));
+        
+        seq = new SourceSequence(id, expiry, otherId);
+        assertTrue(seq.offeredBy(otherId));
+        assertFalse(seq.offeredBy(id));
+    }
+    
+    public void testSetExpires() {
+        SourceSequence seq = new SourceSequence(id);
+        
+        Expires expires = factory.createExpires();
+        seq.setExpires(expires);
+            
+        assertTrue(!seq.isExpired());
+        
+        Duration d = DatatypeFactory.PT0S;          
+        expires.setValue(d); 
+        seq.setExpires(expires);
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException ex) {
+            assertTrue(!seq.isExpired());
+        }
+        
+        d = DatatypeFactory.createDuration("PT1S");        
+        expires.setValue(d);
+        seq.setExpires(expires);
+        assertTrue(!seq.isExpired());
+        
+        d = DatatypeFactory.createDuration("-PT1S");  
+        expires.setValue(d);
+        seq.setExpires(expires);
+        assertTrue(seq.isExpired());   
+    }
+
+    public void testEqualsAndHashCode() {
+        SourceSequence seq = new SourceSequence(id);
+        SourceSequence otherSeq = null;
+        assertTrue(!seq.equals(otherSeq));
+        otherSeq = new SourceSequence(id);
+        assertEquals(seq, otherSeq);
+        assertEquals(seq.hashCode(), otherSeq.hashCode());
+        Identifier otherId = factory.createIdentifier();
+        otherId.setValue("otherSeq");
+        otherSeq = new SourceSequence(otherId);
+        assertTrue(!seq.equals(otherSeq));
+        assertTrue(seq.hashCode() != otherSeq.hashCode()); 
+        assertTrue(!seq.equals(this));
+    }
+    
+
+    public void testSetAcknowledged() {
+        SourceSequence seq = new SourceSequence(id);
+        SequenceAcknowledgement ack = seq.getAcknowledgement();
+        ack = factory.createSequenceAcknowledgement();
+        SequenceAcknowledgement.AcknowledgementRange r = 
+            factory.createSequenceAcknowledgementAcknowledgementRange();
+        r.setLower(new BigInteger("1"));
+        r.setUpper(new BigInteger("2"));
+        ack.getAcknowledgementRange().add(r);
+        r = factory.createSequenceAcknowledgementAcknowledgementRange();
+        r.setLower(new BigInteger("4"));
+        r.setUpper(new BigInteger("6"));
+        ack.getAcknowledgementRange().add(r);
+        r = factory.createSequenceAcknowledgementAcknowledgementRange();
+        r.setLower(new BigInteger("8"));
+        r.setUpper(new BigInteger("10"));
+        ack.getAcknowledgementRange().add(r);
+        seq.setAcknowledged(ack);
+        assertSame(ack, seq.getAcknowledgement());
+        assertEquals(3, ack.getAcknowledgementRange().size());
+        assertTrue(!seq.isAcknowledged(new BigInteger("3")));  
+        assertTrue(seq.isAcknowledged(new BigInteger("5")));
+    } 
+
+    public void testAllAcknowledged() throws SequenceFault {
+        
+        SourceSequence seq = new SourceSequence(id, null, null, new BigInteger("4"), false);        
+        
+        assertTrue(!seq.allAcknowledged());
+        seq.setLastMessage(true);
+        assertTrue(!seq.allAcknowledged());
+        SequenceAcknowledgement ack = factory.createSequenceAcknowledgement();
+        SequenceAcknowledgement.AcknowledgementRange r = 
+            factory.createSequenceAcknowledgementAcknowledgementRange();
+        r.setLower(BigInteger.ONE);
+        r.setUpper(new BigInteger("2"));
+        ack.getAcknowledgementRange().add(r);
+        seq.setAcknowledged(ack);
+        assertTrue(!seq.allAcknowledged());
+        r.setUpper(new BigInteger("4"));
+        assertTrue(seq.allAcknowledged());
+    }
+    
+    public void testNextMessageNumber() {     
+        SourceSequence seq = null;        
+        setUpSource();
+        control.replay();
+        
+        // default termination policy
+
+        seq = new SourceSequence(id);  
+        seq.setSource(source);
+        assertTrue(!nextMessages(seq, 10));
+        control.verify();
+        
+        // termination policy max length = 1
+        
+        seq = new SourceSequence(id); 
+        seq.setSource(source);
+        stp.setMaxLength(BigInteger.ONE);
+        assertTrue(nextMessages(seq, 10));
+        assertEquals(BigInteger.ONE, seq.getCurrentMessageNr());
+        control.verify();
+        
+        // termination policy max length = 5
+        seq = new SourceSequence(id); 
+        seq.setSource(source);
+        stp.setMaxLength(new BigInteger("5"));
+        assertTrue(!nextMessages(seq, 2));
+        control.verify();
+        
+        // termination policy max range exceeded
+        
+        seq = new SourceSequence(id); 
+        seq.setSource(source);
+        stp.setMaxLength(null);
+        stp.setMaxRanges(new Integer(3));
+        acknowledge(seq, 1, 2, 4, 5, 6, 8, 9, 10);
+        assertTrue(nextMessages(seq, 10));
+        assertEquals(BigInteger.ONE, seq.getCurrentMessageNr());
+        control.verify();
+        
+        // termination policy max range not exceeded
+        
+        seq = new SourceSequence(id); 
+        seq.setSource(source);
+        stp.setMaxLength(null);
+        stp.setMaxRanges(new Integer(4));
+        acknowledge(seq, 1, 2, 4, 5, 6, 8, 9, 10);
+        assertTrue(!nextMessages(seq, 10));
+        control.verify();
+        
+        // termination policy max unacknowledged 
+    }
+    
+    public void testGetEndpointIdentfier() {
+        setUpSource();
+        QName qn = new QName("abc", "xyz");
+        EasyMock.expect(source.getName()).andReturn(qn);
+        control.replay();
+        
+        SourceSequence seq = new SourceSequence(id);
+        seq.setSource(source);
+        assertEquals("Unexpected endpoint identifier", "{abc}xyz", seq.getEndpointIdentifier());
+        control.verify();
+    }
+    
+    public void testCheckOfferingSequenceClosed() {
+        SourceSequence seq = null;
+        
+        setUpSource();
+ 
+        RMEndpoint rme = control.createMock(RMEndpoint.class);
+        EasyMock.expect(source.getReliableEndpoint()).andReturn(rme).anyTimes();
+        Destination destination = control.createMock(Destination.class);
+        EasyMock.expect(rme.getDestination()).andReturn(destination).anyTimes();
+        DestinationSequence dseq = control.createMock(DestinationSequence.class); 
+        Identifier did = control.createMock(Identifier.class);
+        EasyMock.expect(destination.getSequence(did)).andReturn(dseq).anyTimes();
+        EasyMock.expect(dseq.getLastMessageNumber()).andReturn(BigInteger.ONE).anyTimes();
+        EasyMock.expect(did.getValue()).andReturn("dseq").anyTimes();
+        
+        control.replay();
+        
+        seq = new SourceSequence(id, null, did);  
+        seq.setSource(source);        
+        seq.nextMessageNumber(did, BigInteger.ONE);
+        assertTrue(seq.isLastMessage());
+        
+        control.verify();
+    }
+   
+    private boolean nextMessages(SourceSequence seq, 
+                                 int n) {
+        int i = 0;
+        while ((i < n) && !seq.isLastMessage()) {            
+            assertNotNull(seq.nextMessageNumber());
+            i++;
+        }
+        return seq.isLastMessage();
+    }
+    
+    protected void acknowledge(SourceSequence seq, int... messageNumbers) {
+        SequenceAcknowledgement ack = factory.createSequenceAcknowledgement();
+        int i = 0;
+        while (i < messageNumbers.length) {
+            SequenceAcknowledgement.AcknowledgementRange r = 
+                factory.createSequenceAcknowledgementAcknowledgementRange();
+            Integer li = new Integer(messageNumbers[i]);
+            BigInteger l = new BigInteger(li.toString());
+            r.setLower(l);
+            i++;
+            
+            while (i < messageNumbers.length && (messageNumbers[i] - messageNumbers[i - 1]) == 1) {
+                i++;
+            }
+            Integer ui = new Integer(messageNumbers[i - 1]);
+            BigInteger u = new BigInteger(ui.toString());
+            r.setUpper(u);
+            ack.getAcknowledgementRange().add(r);
+        }
+        seq.setAcknowledged(ack);
+    }
+}

Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/SourceSequenceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/SourceSequenceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java?view=diff&rev=470005&r1=470004&r2=470005
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java Wed Nov  1 09:36:06 2006
@@ -195,7 +195,6 @@
                                              RMConstants.WSRM_ACK_REQUESTED_NAME});
     }
 
-
     public void testDecodeSequence() throws XMLStreamException {
         SoapMessage message = setUpInboundMessage("resources/Message1.xml");
         RMSoapInterceptor codec = new RMSoapInterceptor();