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 2007/05/17 11:38:21 UTC
svn commit: r538850 [2/2] - in /incubator/cxf/trunk:
common/common/src/main/java/org/apache/cxf/configuration/spring/
common/common/src/main/resources/META-INF/
common/common/src/main/resources/schemas/configuration/ parent/
rt/core/src/main/java/org/a...
Copied: incubator/cxf/trunk/rt/ws/rm/src/main/resources/schemas/configuration/manager.xsd (from r537806, incubator/cxf/trunk/rt/ws/rm/src/main/resources/schemas/configuration/wsrm-manager.xsd)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/resources/schemas/configuration/manager.xsd?view=diff&rev=538850&p1=incubator/cxf/trunk/rt/ws/rm/src/main/resources/schemas/configuration/wsrm-manager.xsd&r1=537806&p2=incubator/cxf/trunk/rt/ws/rm/src/main/resources/schemas/configuration/manager.xsd&r2=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/resources/schemas/configuration/wsrm-manager.xsd (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/resources/schemas/configuration/manager.xsd Thu May 17 02:38:18 2007
@@ -18,185 +18,36 @@
under the License.
-->
+
<xs:schema targetNamespace="http://cxf.apache.org/ws/rm/manager"
xmlns:tns="http://cxf.apache.org/ws/rm/manager"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
- xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
+ xmlns:beans="http://www.springframework.org/schema/beans"
+ xmlns:cxf-beans="http://cxf.apache.org/configuration/beans"
elementFormDefault="qualified"
- attributeFormDefault="unqualified"
- jaxb:version="2.0">
-
- <xs:import namespace="http://schemas.xmlsoap.org/ws/2005/02/rm/policy" schemaLocation="wsrm-policy.xsd"/>
-
- <xs:complexType name="SourcePolicyType">
- <xs:annotation>
- <xs:documentation>RM source configuration properties.
- Used for configuring an RM source.
- </xs:documentation>
- </xs:annotation>
-
- <xs:sequence>
- <xs:element name="sequenceTerminationPolicy" type="tns:SequenceTerminationPolicyType" minOccurs="0"/>
- </xs:sequence>
-
- <xs:attribute name="sequenceExpiration" type="xs:duration" use="optional" default="PT0S">
- <xs:annotation>
- <xs:documentation>
- Preferred lifetime of a sequence - included in createSequence
- requests issued by an RM source.
- A default of PT0S means that the sequence should never expire.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="acksTo" type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>
- Address to which sequence acknowledgements should be sent.
- If this attribute is not set, defaults to the anonymous address.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="includeOffer" type="xs:boolean" use="optional" default="true">
- <xs:annotation>
- <xs:documentation>
- Indicates if an RM source should include an offer for an inbound sequence
- when issuing a createSequence request.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="offeredSequenceExpiration" type="xs:duration" use="optional" default="PT0S">
- <xs:annotation>
- <xs:documentation>
- The lifetime of an offered inbound sequence.
- A default of PT0S means that the sequence never expires.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- </xs:complexType>
-
- <xs:complexType name="DestinationPolicyType">
- <xs:annotation>
- <xs:documentation>RM destination configuration properties.
- Used for configuring an RM destination.
- </xs:documentation>
- </xs:annotation>
-
- <xs:sequence>
- <xs:element name="acksPolicy" type="tns:AcksPolicyType" minOccurs="0"/>
- </xs:sequence>
-
- <xs:attribute name="sequenceExpiration" type="xs:duration" use="optional" default="PT0S">
- <xs:annotation>
- <xs:documentation>
- Preferred lifetime of a sequence - can be lower than the duration
- requested by the RM source in a CreateSequence request.
- A default of PT0S means that the sequence should never expire.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- <xs:attribute name="acceptOffers" type="xs:boolean" use="optional" default="true">
- <xs:annotation>
- <xs:documentation>
- Indicates if an RM destination should accept inbound sequence offers.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- </xs:complexType>
-
- <xs:complexType name="SequenceTerminationPolicyType">
- <xs:attribute name="maxLength" type="xs:unsignedLong" use="optional" default="0">
- <xs:annotation>
- <xs:documentation>
- The maximum length of a sequence.
- A value of 0 means the sequence length is unbound.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="maxRanges" type="xs:int" use="optional" default="0">
- <xs:annotation>
- <xs:documentation>
- The maximum number of acknowledgment ranges tolerated in sequence
- acknowledgment. When this value is exceeded the sequence
- will be terminated.
- A value of 0 means sequence termination does not depend on
- the number of acknowledgment ranges.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="maxUnacknowledged" type="xs:int" use="optional" default="0">
- <xs:annotation>
- <xs:documentation>
- The maximum number of unacknowledged messages that can accrue within per
- sequence before the sequence is terminated.
- A value of 0 means sequence termination does not depend on
- the number of unacknowledgment messages.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="terminateOnShutdown" type="xs:boolean" use ="optional" default="false">
- <xs:annotation>
- <xs:documentation>
- Specifies if sequences should be terminated when the bus is shutdown.
- If set to true, and no last message had been sent for a sequence,
- an out of band LastMessage will be issued (in response to which
- a sequence acknowledgment will be sent). If a last message had already been
- sent, an acknowledgment is requested instead.
- If, after processing these acknowledgement, all messages have been acknowledged,
- an attempt is then made to terminates these sequences.
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- </xs:complexType>
-
- <xs:complexType name="AcksPolicyType">
- <xs:attribute name="intraMessageThreshold" type="xs:int" use="optional" default="10">
- <xs:annotation>
- <xs:documentation>
- Restricts the deferred sending of acknowledgments to the case where the stream of incoming
- messages is steady, i.e. the number of messages for one destination per minute stays above the
- specified threshold (only effective if the AcknowledgmentInterval specified in the
- RMAssertion is greater 0).
- </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- </xs:complexType>
-
- <xs:complexType name="DeliveryAssuranceType">
- <xs:sequence>
- <xs:element name="AtMostOnce" minOccurs="0">
- <xs:complexType>
- <xs:sequence/>
- </xs:complexType>
- </xs:element>
- <xs:element name="AtLeastOnce" minOccurs="0">
- <xs:complexType>
- <xs:sequence/>
- </xs:complexType>
- </xs:element>
- <xs:element name="InOrder" minOccurs="0">
- <xs:complexType>
- <xs:sequence/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
-
-
- <xs:element name="deliveryAssurance" type="tns:DeliveryAssuranceType"/>
- <xs:element name="sourcePolicy" type="tns:SourcePolicyType"/>
- <xs:element name="destinationPolicy" type="tns:DestinationPolicyType"/>
+ attributeFormDefault="unqualified">
- <xs:complexType name="RMManagerConfigBean">
- <xs:sequence>
- <xs:element ref="wsrmp:RMAssertion" minOccurs="0"/>
- <xs:element ref="tns:deliveryAssurance" minOccurs="0"/>
- <xs:element ref="tns:sourcePolicy" minOccurs="0"/>
- <xs:element ref="tns:destinationPolicy" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
+ <xs:include schemaLocation="http://cxf.apache.org/ws/rm/manager-types.xsd"/>
+ <xs:import namespace="http://www.springframework.org/schema/beans" />
+ <xs:import namespace="http://cxf.apache.org/configuration/beans" />
+ <xs:import namespace="http://schemas.xmlsoap.org/ws/2005/02/rm/policy" />
+
+ <xs:element name="rmManager">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="beans:identifiedType">
+ <xs:sequence>
+ <xs:element ref="wsrmp:RMAssertion" minOccurs="0"/>
+ <xs:element ref="tns:deliveryAssurance" minOccurs="0"/>
+ <xs:element ref="tns:sourcePolicy" minOccurs="0"/>
+ <xs:element ref="tns:destinationPolicy" minOccurs="0"/>
+ <xs:element ref="beans:property" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="cxf-beans:beanAttributes"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
- <xs:element name="rmManager" type="tns:RMManagerConfigBean"/>
- </xs:schema>
+</xs:schema>
Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/AbstractEndpointTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/AbstractEndpointTest.java?view=diff&rev=538850&r1=538849&r2=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/AbstractEndpointTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/AbstractEndpointTest.java Thu May 17 02:38:18 2007
@@ -19,8 +19,6 @@
package org.apache.cxf.ws.rm;
-import javax.xml.namespace.QName;
-
import org.apache.cxf.endpoint.Endpoint;
import org.easymock.classextension.EasyMock;
import org.easymock.classextension.IMocksControl;
@@ -50,7 +48,7 @@
@Test
public void testAccessors() {
- QName n = new QName("abc");
+ String n = "abc";
EasyMock.expect(rme.getName()).andReturn(n);
Endpoint ae = control.createMock(Endpoint.class);
EasyMock.expect(rme.getApplicationEndpoint()).andReturn(ae);
Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/DestinationSequenceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/DestinationSequenceTest.java?view=diff&rev=538850&r1=538849&r2=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/DestinationSequenceTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/DestinationSequenceTest.java Thu May 17 02:38:18 2007
@@ -25,8 +25,6 @@
import java.util.List;
import java.util.Timer;
-import javax.xml.namespace.QName;
-
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
@@ -131,12 +129,12 @@
@Test
public void testGetEndpointIdentifier() {
setUpDestination();
- QName qn = new QName("abc", "xyz");
- EasyMock.expect(destination.getName()).andReturn(qn);
+ String name = "abc";
+ EasyMock.expect(destination.getName()).andReturn(name);
control.replay();
DestinationSequence seq = new DestinationSequence(id, ref, destination);
- assertEquals("Unexpected endpoint identifier", "{abc}xyz", seq.getEndpointIdentifier());
+ assertEquals("Unexpected endpoint identifier", name, seq.getEndpointIdentifier());
control.verify();
}
Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java?view=diff&rev=538850&r1=538849&r2=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java Thu May 17 02:38:18 2007
@@ -86,11 +86,15 @@
@Test
public void testGetName() {
EndpointInfo aei = control.createMock(EndpointInfo.class);
- EasyMock.expect(ae.getEndpointInfo()).andReturn(aei);
- QName qn = new QName("cxf");
- EasyMock.expect(aei.getName()).andReturn(qn);
+ EasyMock.expect(ae.getEndpointInfo()).andReturn(aei).times(2);
+ QName eqn = new QName("ns2", "endpoint");
+ EasyMock.expect(aei.getName()).andReturn(eqn);
+ ServiceInfo asi = control.createMock(ServiceInfo.class);
+ EasyMock.expect(aei.getService()).andReturn(asi);
+ QName sqn = new QName("ns1", "service");
+ EasyMock.expect(asi.getName()).andReturn(sqn);
control.replay();
- assertSame(qn, rme.getName());
+ assertEquals("{ns1}service.{ns2}endpoint", rme.getName());
}
@Test
Added: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerConfigurationTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerConfigurationTest.java?view=auto&rev=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerConfigurationTest.java (added)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerConfigurationTest.java Thu May 17 02:38:18 2007
@@ -0,0 +1,128 @@
+/**
+ * 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.Collection;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.ws.rm.persistence.RMMessage;
+import org.apache.cxf.ws.rm.persistence.RMStore;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class RMManagerConfigurationTest extends Assert {
+
+ @Test
+ public void testConfiguration() {
+ SpringBusFactory factory = new SpringBusFactory();
+ Bus bus = factory.createBus("org/apache/cxf/ws/rm/custom-rmmanager.xml");
+ RMManager manager = bus.getExtension(RMManager.class);
+ assertNotNull(manager);
+ assertTrue(manager.getSourcePolicy().getSequenceTerminationPolicy().isTerminateOnShutdown());
+ assertEquals(10000L, manager.getRMAssertion().getBaseRetransmissionInterval()
+ .getMilliseconds().longValue());
+ assertEquals(10000L, manager.getRMAssertion().getAcknowledgementInterval()
+ .getMilliseconds().longValue());
+ TestStore store = (TestStore)manager.getStore();
+ assertEquals("here", store.getLocation());
+
+ }
+
+ static class TestStore implements RMStore {
+
+ private String location;
+
+ public TestStore() {
+ // this(null);
+ }
+
+ /*
+ public TestStore(String l) {
+ location = l;
+ }
+ */
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+
+
+ public void createDestinationSequence(DestinationSequence seq) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void createSourceSequence(SourceSequence seq) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Collection<DestinationSequence> getDestinationSequences(String endpointIdentifier) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<RMMessage> getMessages(Identifier sid, boolean outbound) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Collection<SourceSequence> getSourceSequences(String endpointIdentifier) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void persistIncoming(DestinationSequence seq, RMMessage msg) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void persistOutgoing(SourceSequence seq, RMMessage msg) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeDestinationSequence(Identifier seq) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeMessages(Identifier sid, Collection<BigInteger> messageNrs, boolean outbound) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeSourceSequence(Identifier seq) {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+}
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerConfigurationTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerConfigurationTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java?view=diff&rev=538850&r1=538849&r2=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java Thu May 17 02:38:18 2007
@@ -89,17 +89,17 @@
@Test
public void testInitialisation() {
RMManager manager = new RMManager();
- assertTrue("RMAssertion is set.", !manager.isSetRMAssertion());
- assertTrue("sourcePolicy is set.", !manager.isSetSourcePolicy());
- assertTrue("destinationPolicy is set.", !manager.isSetDestinationPolicy());
- assertTrue("deliveryAssirance is set.", !manager.isSetDeliveryAssurance());
+ assertNull("RMAssertion is set.", manager.getRMAssertion());
+ assertNull("sourcePolicy is set.", manager.getSourcePolicy());
+ assertNull("destinationPolicy is set.", manager.getDestinationPolicy());
+ assertNull("deliveryAssirance is set.", manager.getDeliveryAssurance());
manager.initialise();
- assertTrue("RMAssertion is not set.", manager.isSetRMAssertion());
- assertTrue("sourcePolicy is not set.", manager.isSetSourcePolicy());
- assertTrue("destinationPolicy is not set.", manager.isSetDestinationPolicy());
- assertTrue("deliveryAssirance is not set.", manager.isSetDeliveryAssurance());
+ assertNotNull("RMAssertion is not set.", manager.getRMAssertion());
+ assertNotNull("sourcePolicy is not set.", manager.getSourcePolicy());
+ assertNotNull("destinationPolicy is not set.", manager.getDestinationPolicy());
+ assertNotNull("deliveryAssirance is not set.", manager.getDeliveryAssurance());
RMAssertion rma = manager.getRMAssertion();
assertTrue(rma.isSetExponentialBackoff());
@@ -420,5 +420,6 @@
assertTrue(!id1.getValue().equals(id2.getValue()));
control.replay();
}
+
}
Modified: 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=diff&rev=538850&r1=538849&r2=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/SourceSequenceTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/SourceSequenceTest.java Thu May 17 02:38:18 2007
@@ -23,7 +23,6 @@
import java.util.Date;
import javax.xml.datatype.Duration;
-import javax.xml.namespace.QName;
import org.apache.cxf.jaxb.DatatypeFactory;
import org.apache.cxf.ws.rm.manager.SequenceTerminationPolicyType;
@@ -281,13 +280,13 @@
@Test
public void testGetEndpointIdentfier() {
setUpSource();
- QName qn = new QName("abc", "xyz");
- EasyMock.expect(source.getName()).andReturn(qn);
+ String name = "abc";
+ EasyMock.expect(source.getName()).andReturn(name);
control.replay();
SourceSequence seq = new SourceSequence(id);
seq.setSource(source);
- assertEquals("Unexpected endpoint identifier", "{abc}xyz", seq.getEndpointIdentifier());
+ assertEquals("Unexpected endpoint identifier", name, seq.getEndpointIdentifier());
control.verify();
}
Added: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/custom-rmmanager.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/custom-rmmanager.xml?view=auto&rev=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/custom-rmmanager.xml (added)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/custom-rmmanager.xml Thu May 17 02:38:18 2007
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:cxf-beans="http://cxf.apache.org/configuration/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager"
+ xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
+ xsi:schemaLocation="
+http://cxf.apache.org/ws/rm/manager http://cxf.apache.org/ws/rm/manager.xsd
+http://schemas.xmlsoap.org/ws/2005/02/rm/policy http://schemas.xmlsoap.org/ws/2005/02/rm/wsrm-policy.xsd
+http://cxf.apache.org/configuration/beans http://cxf.apache.org/schemas/configuration/cxf-beans.xsd
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <import resource="rmmanager.xml"/>
+
+ <wsrm-mgr:rmManager name="{http://cxf.apache.org}ws.rm.RMManager">
+ <wsrm-policy:RMAssertion>
+ <wsrm-policy:BaseRetransmissionInterval Milliseconds="10000"/>
+ <wsrm-policy:AcknowledgementInterval Milliseconds="10000"/>
+ </wsrm-policy:RMAssertion>
+ <wsrm-mgr:sourcePolicy>
+ <wsrm-mgr:sequenceTerminationPolicy terminateOnShutdown="true"/>
+ </wsrm-mgr:sourcePolicy>
+ <wsrm-mgr:destinationPolicy>
+ <wsrm-mgr:acksPolicy intraMessageThreshold="0"/>
+ </wsrm-mgr:destinationPolicy>
+ <!--property name="store" ref="txStore"/-->
+ <property name="store">
+ <bean class="org.apache.cxf.ws.rm.RMManagerConfigurationTest$TestStore">
+ <property name="location" value="here"/>
+ </bean>
+ </property>
+ </wsrm-mgr:rmManager>
+
+</beans>
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/custom-rmmanager.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/custom-rmmanager.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/custom-rmmanager.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/PersistenceUtilsTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/PersistenceUtilsTest.java?view=auto&rev=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/PersistenceUtilsTest.java (added)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/PersistenceUtilsTest.java Thu May 17 02:38:18 2007
@@ -0,0 +1,50 @@
+/**
+ * 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.persistence;
+
+import java.io.InputStream;
+import java.math.BigInteger;
+
+import org.apache.cxf.ws.rm.SequenceAcknowledgement;
+import org.apache.cxf.ws.rm.SequenceAcknowledgement.AcknowledgementRange;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class PersistenceUtilsTest extends Assert {
+
+ @Test
+ public void testSerialiseDeserialiseAcknowledgement() {
+ SequenceAcknowledgement ack = new SequenceAcknowledgement();
+ AcknowledgementRange range = new AcknowledgementRange();
+ range.setLower(BigInteger.ONE);
+ range.setUpper(BigInteger.TEN);
+ ack.getAcknowledgementRange().add(range);
+ PersistenceUtils utils = PersistenceUtils.getInstance();
+ InputStream is = utils.serialiseAcknowledgment(ack);
+ SequenceAcknowledgement refAck = utils.deserialiseAcknowledgment(is);
+ assertEquals(refAck.getAcknowledgementRange().size(), refAck.getAcknowledgementRange().size());
+ AcknowledgementRange refRange = refAck.getAcknowledgementRange().get(0);
+ assertEquals(range.getLower(), refRange.getLower());
+ assertEquals(range.getUpper(), refRange.getUpper());
+ }
+}
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/PersistenceUtilsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/PersistenceUtilsTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStoreTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStoreTest.java?view=auto&rev=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStoreTest.java (added)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStoreTest.java Thu May 17 02:38:18 2007
@@ -0,0 +1,593 @@
+/**
+ * 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.persistence.jdbc;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+
+import org.apache.cxf.ws.addressing.v200408.EndpointReferenceType;
+import org.apache.cxf.ws.rm.DestinationSequence;
+import org.apache.cxf.ws.rm.Identifier;
+import org.apache.cxf.ws.rm.RMConstants;
+import org.apache.cxf.ws.rm.RMUtils;
+import org.apache.cxf.ws.rm.SequenceAcknowledgement;
+import org.apache.cxf.ws.rm.SourceSequence;
+import org.apache.cxf.ws.rm.persistence.RMMessage;
+import org.apache.cxf.ws.rm.persistence.RMStoreException;
+import org.easymock.classextension.EasyMock;
+import org.easymock.classextension.IMocksControl;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class RMTxStoreTest extends Assert {
+
+ private static final String CLIENT_ENDPOINT_ID =
+ "celtix.{http://celtix.objectweb.org/greeter_control}GreeterService/GreeterPort";
+ private static final String SERVER_ENDPOINT_ID =
+ "celtix.{http://celtix.objectweb.org/greeter_control}GreeterService";
+ private static final String NON_ANON_ACKS_TO =
+ "http://localhost:9999/decoupled_endpoint";
+
+ private static RMTxStore store;
+ private static SequenceAcknowledgement ack1;
+ private static SequenceAcknowledgement ack2;
+
+ private IMocksControl control;
+
+ @BeforeClass
+ public static void setUpOnce() {
+
+ RMTxStore.deleteDatabaseFiles();
+
+ store = new RMTxStore();
+ store.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
+ store.setUrl("jdbc:derby:rmdb;create=true");
+ store.init();
+
+ ack1 = new SequenceAcknowledgement();
+ SequenceAcknowledgement.AcknowledgementRange range =
+ new SequenceAcknowledgement.AcknowledgementRange();
+ range.setLower(BigInteger.ONE);
+ range.setUpper(BigInteger.ONE);
+ ack1.getAcknowledgementRange().add(range);
+
+ ack2 = new SequenceAcknowledgement();
+ range = new SequenceAcknowledgement.AcknowledgementRange();
+ range.setLower(BigInteger.ONE);
+ range.setUpper(BigInteger.ONE);
+ ack2.getAcknowledgementRange().add(range);
+ range = new SequenceAcknowledgement.AcknowledgementRange();
+ range.setLower(new BigInteger("3"));
+ range.setUpper(BigInteger.TEN);
+ ack2.getAcknowledgementRange().add(range);
+ }
+
+ @AfterClass
+ public static void tearDownOnce() {
+ /*
+ try {
+ store.getConnection().close();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+ */
+ RMTxStore.deleteDatabaseFiles(RMTxStore.DEFAULT_DATABASE_DIR, false);
+ }
+
+
+ @Before
+ public void setUp() {
+ control = EasyMock.createNiceControl();
+ }
+
+ @Test
+ public void testCreateTables() throws SQLException {
+ // tables should have been created during initialisation
+ // but verify the operation is idempotent
+ store.createTables();
+ }
+
+ @Test
+ public void testCreateDeleteSrcSequences() {
+ SourceSequence seq = control.createMock(SourceSequence.class);
+ Identifier sid1 = RMUtils.getWSRMFactory().createIdentifier();
+ sid1.setValue("sequence1");
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+ EasyMock.expect(seq.getExpires()).andReturn(null);
+ EasyMock.expect(seq.getOfferingSequenceIdentifier()).andReturn(null);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(CLIENT_ENDPOINT_ID);
+
+ control.replay();
+ store.createSourceSequence(seq);
+ control.verify();
+
+ control.reset();
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+ EasyMock.expect(seq.getExpires()).andReturn(null);
+ EasyMock.expect(seq.getOfferingSequenceIdentifier()).andReturn(null);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(CLIENT_ENDPOINT_ID);
+
+ control.replay();
+ try {
+ store.createSourceSequence(seq);
+ fail("Expected RMStoreException was not thrown.");
+ } catch (RMStoreException ex) {
+ SQLException se = (SQLException)ex.getCause();
+ // duplicate key value
+ assertEquals("23505", se.getSQLState());
+ }
+ control.verify();
+
+ control.reset();
+ Identifier sid2 = RMUtils.getWSRMFactory().createIdentifier();
+ sid2.setValue("sequence2");
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid2);
+ EasyMock.expect(seq.getExpires()).andReturn(new Date());
+ Identifier sid3 = RMUtils.getWSRMFactory().createIdentifier();
+ sid3.setValue("offeringSequence3");
+ EasyMock.expect(seq.getOfferingSequenceIdentifier()).andReturn(sid3);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(SERVER_ENDPOINT_ID);
+
+
+ control.replay();
+ store.createSourceSequence(seq);
+ control.verify();
+
+ store.removeSourceSequence(sid1);
+ store.removeSourceSequence(sid2);
+
+ // deleting once again is a no-op
+ store.removeSourceSequence(sid2);
+ }
+
+ @Test
+ public void testCreateDeleteDestSequences() {
+ DestinationSequence seq = control.createMock(DestinationSequence.class);
+ Identifier sid1 = RMUtils.getWSRMFactory().createIdentifier();
+ sid1.setValue("sequence1");
+ EndpointReferenceType epr = RMUtils.createAnonymousReference2004();
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+ EasyMock.expect(seq.getAcksTo()).andReturn(epr);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(SERVER_ENDPOINT_ID);
+
+ control.replay();
+ store.createDestinationSequence(seq);
+ control.verify();
+
+ control.reset();
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+ EasyMock.expect(seq.getAcksTo()).andReturn(epr);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(SERVER_ENDPOINT_ID);
+
+ control.replay();
+ try {
+ store.createDestinationSequence(seq);
+ fail("Expected RMStoreException was not thrown.");
+ } catch (RMStoreException ex) {
+ SQLException se = (SQLException)ex.getCause();
+ // duplicate key value
+ assertEquals("23505", se.getSQLState());
+ }
+ control.verify();
+
+ control.reset();
+ Identifier sid2 = RMUtils.getWSRMFactory().createIdentifier();
+ sid2.setValue("sequence2");
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid2);
+ epr = RMUtils.createReference2004(NON_ANON_ACKS_TO);
+ EasyMock.expect(seq.getAcksTo()).andReturn(epr);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(CLIENT_ENDPOINT_ID);
+
+ control.replay();
+ store.createDestinationSequence(seq);
+ control.verify();
+
+ store.removeDestinationSequence(sid1);
+ store.removeDestinationSequence(sid2);
+
+ // deleting once again is a no-op
+ store.removeDestinationSequence(sid2);
+ }
+
+ @Test
+ public void testCreateDeleteMessages() throws IOException, SQLException {
+ RMMessage msg = control.createMock(RMMessage.class);
+ Identifier sid1 = RMUtils.getWSRMFactory().createIdentifier();
+ sid1.setValue("sequence1");
+ EasyMock.expect(msg.getMessageNumber()).andReturn(BigInteger.ONE).times(2);
+ byte[] bytes = new byte[89];
+ EasyMock.expect(msg.getContent()).andReturn(bytes).times(2);
+
+ control.replay();
+ store.beginTransaction();
+ store.storeMessage(sid1, msg, true);
+ store.storeMessage(sid1, msg, false);
+ store.commit();
+ control.verify();
+
+ control.reset();
+ EasyMock.expect(msg.getMessageNumber()).andReturn(BigInteger.ONE);
+ EasyMock.expect(msg.getContent()).andReturn(bytes);
+
+ control.replay();
+ store.beginTransaction();
+ try {
+ store.storeMessage(sid1, msg, true);
+ } catch (SQLException ex) {
+ assertEquals("23505", ex.getSQLState());
+ }
+ store.abort();
+ control.verify();
+
+ control.reset();
+ EasyMock.expect(msg.getMessageNumber()).andReturn(BigInteger.TEN).times(2);
+ EasyMock.expect(msg.getContent()).andReturn(bytes).times(2);
+
+ control.replay();
+ store.beginTransaction();
+ store.storeMessage(sid1, msg, true);
+ store.storeMessage(sid1, msg, false);
+ store.commit();
+ control.verify();
+
+ Collection<BigInteger> messageNrs = new ArrayList<BigInteger>();
+ messageNrs.add(BigInteger.ZERO);
+ messageNrs.add(BigInteger.TEN);
+ messageNrs.add(BigInteger.ONE);
+ messageNrs.add(BigInteger.TEN);
+
+ store.removeMessages(sid1, messageNrs, true);
+ store.removeMessages(sid1, messageNrs, false);
+
+ Identifier sid2 = RMUtils.getWSRMFactory().createIdentifier();
+ sid1.setValue("sequence2");
+ store.removeMessages(sid2, messageNrs, true);
+ }
+
+ @Test
+ public void testUpdateDestinationSequence() throws SQLException, IOException {
+ DestinationSequence seq = control.createMock(DestinationSequence.class);
+ Identifier sid1 = RMUtils.getWSRMFactory().createIdentifier();
+ sid1.setValue("sequence1");
+ EndpointReferenceType epr = RMUtils.createAnonymousReference2004();
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+ EasyMock.expect(seq.getAcksTo()).andReturn(epr);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(SERVER_ENDPOINT_ID);
+
+ control.replay();
+ store.createDestinationSequence(seq);
+ control.verify();
+
+ control.reset();
+ EasyMock.expect(seq.getLastMessageNumber()).andReturn(null);
+ EasyMock.expect(seq.getAcknowledgment()).andReturn(ack1);
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+
+ control.replay();
+ store.beginTransaction();
+ store.updateDestinationSequence(seq);
+ store.abort();
+
+ control.reset();
+ EasyMock.expect(seq.getLastMessageNumber()).andReturn(BigInteger.TEN);
+ EasyMock.expect(seq.getAcknowledgment()).andReturn(ack1);
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+
+ control.replay();
+ store.beginTransaction();
+ store.updateDestinationSequence(seq);
+ store.abort();
+
+ store.removeDestinationSequence(sid1);
+ }
+
+ @Test
+ public void testUpdateSourceSequence() throws SQLException {
+ SourceSequence seq = control.createMock(SourceSequence.class);
+ Identifier sid1 = RMUtils.getWSRMFactory().createIdentifier();
+ sid1.setValue("sequence1");
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+ EasyMock.expect(seq.getExpires()).andReturn(null);
+ EasyMock.expect(seq.getOfferingSequenceIdentifier()).andReturn(null);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(CLIENT_ENDPOINT_ID);
+
+ control.replay();
+ store.createSourceSequence(seq);
+ control.verify();
+
+ control.reset();
+ EasyMock.expect(seq.getCurrentMessageNr()).andReturn(BigInteger.ONE);
+ EasyMock.expect(seq.isLastMessage()).andReturn(false);
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+
+ control.replay();
+ store.beginTransaction();
+ store.updateSourceSequence(seq);
+ store.abort();
+
+ control.reset();
+ EasyMock.expect(seq.getCurrentMessageNr()).andReturn(BigInteger.TEN);
+ EasyMock.expect(seq.isLastMessage()).andReturn(true);
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid1);
+
+ control.replay();
+ store.beginTransaction();
+ store.updateSourceSequence(seq);
+ store.abort();
+
+ store.removeSourceSequence(sid1);
+
+ }
+
+ @Test
+ public void testGetDestinationSequences() throws SQLException, IOException {
+
+ Identifier sid1 = null;
+ Identifier sid2 = null;
+
+ Collection<DestinationSequence> seqs = store.getDestinationSequences("unknown");
+ assertEquals(0, seqs.size());
+
+ try {
+ sid1 = setupDestinationSequence("sequence1");
+
+ seqs = store.getDestinationSequences(SERVER_ENDPOINT_ID);
+ assertEquals(1, seqs.size());
+ checkRecoveredDestinationSequences(seqs);
+
+ sid2 = setupDestinationSequence("sequence2");
+ seqs = store.getDestinationSequences(SERVER_ENDPOINT_ID);
+ assertEquals(2, seqs.size());
+ checkRecoveredDestinationSequences(seqs);
+ } finally {
+ if (null != sid1) {
+ store.removeDestinationSequence(sid1);
+ }
+ if (null != sid2) {
+ store.removeDestinationSequence(sid2);
+ }
+ }
+ }
+
+ @Test
+ public void testGetSourceSequences() throws SQLException, IOException {
+
+ Identifier sid1 = null;
+ Identifier sid2 = null;
+
+ Collection<SourceSequence> seqs = store.getSourceSequences("unknown");
+ assertEquals(0, seqs.size());
+
+ try {
+ sid1 = setupSourceSequence("sequence1");
+
+ seqs = store.getSourceSequences(CLIENT_ENDPOINT_ID);
+ assertEquals(1, seqs.size());
+ checkRecoveredSourceSequences(seqs);
+
+ sid2 = setupSourceSequence("sequence2");
+ seqs = store.getSourceSequences(CLIENT_ENDPOINT_ID);
+ assertEquals(2, seqs.size());
+ checkRecoveredSourceSequences(seqs);
+ } finally {
+ if (null != sid1) {
+ store.removeSourceSequence(sid1);
+ }
+ if (null != sid2) {
+ store.removeSourceSequence(sid2);
+ }
+ }
+ }
+
+ @Test
+ public void testGetMessages() throws SQLException, IOException {
+
+ Identifier sid1 = RMUtils.getWSRMFactory().createIdentifier();
+ sid1.setValue("sequence1");
+ Identifier sid2 = RMUtils.getWSRMFactory().createIdentifier();
+ sid2.setValue("sequence2");
+
+ Collection<RMMessage> out = store.getMessages(sid1, true);
+ assertEquals(0, out.size());
+ Collection<RMMessage> in = store.getMessages(sid1, false);
+ assertEquals(0, out.size());
+
+ try {
+ setupMessage(sid1, BigInteger.ONE, true);
+ setupMessage(sid1, BigInteger.ONE, false);
+
+ out = store.getMessages(sid1, true);
+ assertEquals(1, out.size());
+ checkRecoveredMessages(out);
+
+ in = store.getMessages(sid1, false);
+ assertEquals(1, in.size());
+ checkRecoveredMessages(in);
+
+ setupMessage(sid1, BigInteger.TEN, true);
+ setupMessage(sid1, BigInteger.TEN, false);
+
+ out = store.getMessages(sid1, true);
+ assertEquals(2, out.size());
+ checkRecoveredMessages(out);
+
+ in = store.getMessages(sid1, false);
+ assertEquals(2, in.size());
+ checkRecoveredMessages(in);
+ } finally {
+ Collection<BigInteger> msgNrs = new ArrayList<BigInteger>();
+ msgNrs.add(BigInteger.ONE);
+ msgNrs.add(BigInteger.TEN);
+
+ store.removeMessages(sid1, msgNrs, true);
+ store.removeMessages(sid1, msgNrs, false);
+ }
+ }
+
+ private Identifier setupDestinationSequence(String s) throws IOException, SQLException {
+ DestinationSequence seq = control.createMock(DestinationSequence.class);
+
+ Identifier sid = RMUtils.getWSRMFactory().createIdentifier();
+ sid.setValue(s);
+ EndpointReferenceType epr = RMUtils.createAnonymousReference2004();
+
+ SequenceAcknowledgement ack = ack1;
+ BigInteger lmn = null;
+
+ if ("sequence2".equals(s)) {
+ ack = ack2;
+ lmn = BigInteger.TEN;
+ }
+
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid);
+ EasyMock.expect(seq.getAcksTo()).andReturn(epr);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(SERVER_ENDPOINT_ID);
+ EasyMock.expect(seq.getLastMessageNumber()).andReturn(lmn);
+ EasyMock.expect(seq.getAcknowledgment()).andReturn(ack);
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid);
+
+ control.replay();
+ store.createDestinationSequence(seq);
+ store.beginTransaction();
+ store.updateDestinationSequence(seq);
+ store.commit();
+ control.reset();
+
+ return sid;
+ }
+
+ private Identifier setupSourceSequence(String s) throws IOException, SQLException {
+ SourceSequence seq = control.createMock(SourceSequence.class);
+ Identifier sid = RMUtils.getWSRMFactory().createIdentifier();
+ sid.setValue(s);
+
+ Date expiry = null;
+ Identifier osid = null;
+ BigInteger cmn = BigInteger.ONE;
+ boolean lm = false;
+
+ if ("sequence2".equals(s)) {
+ expiry = new Date(System.currentTimeMillis() + 3600 * 1000);
+ osid = RMUtils.getWSRMFactory().createIdentifier();
+ osid.setValue("offeringSequence");
+ cmn = BigInteger.TEN;
+ lm = true;
+ }
+
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid);
+ EasyMock.expect(seq.getExpires()).andReturn(expiry);
+ EasyMock.expect(seq.getOfferingSequenceIdentifier()).andReturn(osid);
+ EasyMock.expect(seq.getEndpointIdentifier()).andReturn(CLIENT_ENDPOINT_ID);
+ EasyMock.expect(seq.getCurrentMessageNr()).andReturn(cmn);
+ EasyMock.expect(seq.isLastMessage()).andReturn(lm);
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid);
+
+ control.replay();
+ store.createSourceSequence(seq);
+ store.beginTransaction();
+ store.updateSourceSequence(seq);
+ store.commit();
+ control.reset();
+
+ return sid;
+ }
+
+ private void setupMessage(Identifier sid, BigInteger mn, boolean outbound)
+ throws IOException, SQLException {
+ RMMessage msg = control.createMock(RMMessage.class);
+ EasyMock.expect(msg.getMessageNumber()).andReturn(mn);
+ String value = "Message " + mn.longValue();
+ EasyMock.expect(msg.getContent()).andReturn(value.getBytes());
+
+ control.replay();
+ store.beginTransaction();
+ store.storeMessage(sid, msg, outbound);
+ store.commit();
+ control.reset();
+ }
+
+ private void checkRecoveredDestinationSequences(Collection<DestinationSequence> seqs) {
+
+ for (DestinationSequence recovered : seqs) {
+ assertTrue("sequence1".equals(recovered.getIdentifier().getValue())
+ || "sequence2".equals(recovered.getIdentifier().getValue()));
+ assertEquals(RMConstants.getAnonymousAddress(), recovered.getAcksTo().getAddress().getValue());
+ if ("sequence1".equals(recovered.getIdentifier().getValue())) {
+ assertNull(recovered.getLastMessageNumber());
+ assertEquals(1, recovered.getAcknowledgment().getAcknowledgementRange().size());
+ SequenceAcknowledgement.AcknowledgementRange r =
+ recovered.getAcknowledgment().getAcknowledgementRange().get(0);
+ assertEquals(BigInteger.ONE, r.getLower());
+ assertEquals(BigInteger.ONE, r.getUpper());
+ } else {
+ assertEquals(BigInteger.TEN, recovered.getLastMessageNumber());
+ assertEquals(2, recovered.getAcknowledgment().getAcknowledgementRange().size());
+ SequenceAcknowledgement.AcknowledgementRange r =
+ recovered.getAcknowledgment().getAcknowledgementRange().get(0);
+ assertEquals(BigInteger.ONE, r.getLower());
+ assertEquals(BigInteger.ONE, r.getUpper());
+ r = recovered.getAcknowledgment().getAcknowledgementRange().get(1);
+ assertEquals(new BigInteger("3"), r.getLower());
+ assertEquals(BigInteger.TEN, r.getUpper());
+ }
+ }
+ }
+
+ private void checkRecoveredSourceSequences(Collection<SourceSequence> seqs) {
+
+ for (SourceSequence recovered : seqs) {
+ assertTrue("sequence1".equals(recovered.getIdentifier().getValue())
+ || "sequence2".equals(recovered.getIdentifier().getValue()));
+ if ("sequence1".equals(recovered.getIdentifier().getValue())) {
+ assertFalse(recovered.isLastMessage());
+ assertEquals(BigInteger.ONE, recovered.getCurrentMessageNr());
+ assertNull(recovered.getExpires());
+ assertNull(recovered.getOfferingSequenceIdentifier());
+ } else {
+ assertTrue(recovered.isLastMessage());
+ assertEquals(BigInteger.TEN, recovered.getCurrentMessageNr());
+ assertNotNull(recovered.getExpires());
+ assertEquals("offeringSequence", recovered.getOfferingSequenceIdentifier().getValue());
+ }
+ }
+ }
+
+ private void checkRecoveredMessages(Collection<RMMessage> msgs) {
+ for (RMMessage msg : msgs) {
+ BigInteger mn = msg.getMessageNumber();
+ assertTrue(BigInteger.ONE.equals(mn) || BigInteger.TEN.equals(mn));
+ byte[] actual = msg.getContent();
+ assertEquals(new String("Message " + mn.longValue()), new String(actual));
+ }
+ }
+
+
+
+}
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStoreTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/persistence/jdbc/RMTxStoreTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/rmmanager.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/rmmanager.xml?view=diff&rev=538850&r1=538849&r2=538850
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/rmmanager.xml (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/rmmanager.xml Thu May 17 02:38:18 2007
@@ -19,11 +19,7 @@
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:wsrm-mgmt="http://cxf.apache.org/ws/rm/manager"
- xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
- xmlns:http="http://cxf.apache.org/transports/http/configuration"
xsi:schemaLocation="
-http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schema/transports/http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl"/>
Modified: incubator/cxf/trunk/systests/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/pom.xml?view=diff&rev=538850&r1=538849&r2=538850
==============================================================================
--- incubator/cxf/trunk/systests/pom.xml (original)
+++ incubator/cxf/trunk/systests/pom.xml Thu May 17 02:38:18 2007
@@ -34,6 +34,7 @@
<properties>
<surefire.fork.mode>pertest</surefire.fork.mode>
+ <spring.validation.mode>VALIDATION_NONE</spring.validation.mode>
</properties>
<dependencies>
@@ -224,6 +225,13 @@
<dependency>
<groupId>xmlbeans</groupId>
<artifactId>xbean</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>${derby.version}</version>
<scope>test</scope>
</dependency>
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/PersistenceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/PersistenceTest.java?view=auto&rev=538850
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/PersistenceTest.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/PersistenceTest.java Thu May 17 02:38:18 2007
@@ -0,0 +1,193 @@
+/**
+ * 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.systest.ws.rm;
+
+import java.util.Collection;
+import java.util.logging.Logger;
+
+import javax.xml.ws.Endpoint;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.greeter_control.Greeter;
+import org.apache.cxf.greeter_control.GreeterService;
+import org.apache.cxf.systest.ws.policy.GreeterImpl;
+import org.apache.cxf.systest.ws.util.InMessageRecorder;
+import org.apache.cxf.systest.ws.util.MessageFlow;
+import org.apache.cxf.systest.ws.util.MessageRecorder;
+import org.apache.cxf.systest.ws.util.OutMessageRecorder;
+import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+import org.apache.cxf.ws.rm.DestinationSequence;
+import org.apache.cxf.ws.rm.RMConstants;
+import org.apache.cxf.ws.rm.RMManager;
+import org.apache.cxf.ws.rm.SourceSequence;
+import org.apache.cxf.ws.rm.persistence.RMMessage;
+import org.apache.cxf.ws.rm.persistence.RMStore;
+import org.apache.cxf.ws.rm.persistence.jdbc.RMTxStore;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * Tests the addition of WS-RM properties to application messages and the
+ * exchange of WS-RM protocol messages.
+ */
+public class PersistenceTest extends AbstractBusClientServerTestBase {
+
+ private static final Logger LOG = Logger.getLogger(PersistenceTest.class.getName());
+ private static final String GREETMEONEWAY_ACTION = null;
+
+ private Greeter greeter;
+ private OutMessageRecorder out;
+ private InMessageRecorder in;
+
+ public static class Server extends AbstractBusTestServerBase {
+
+ protected void run() {
+ SpringBusFactory bf = new SpringBusFactory();
+ Bus bus = bf.createBus("/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml");
+ BusFactory.setDefaultBus(bus);
+
+ GreeterImpl implementor = new GreeterImpl();
+ String address = "http://localhost:9020/SoapContext/GreeterPort";
+ Endpoint.publish(address, implementor);
+ LOG.info("Published greeter endpoint.");
+ }
+
+ public static void main(String[] args) {
+ try {
+ Server s = new Server();
+ s.start();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.exit(-1);
+ } finally {
+ System.out.println("done!");
+ }
+ }
+ }
+
+ @BeforeClass
+ public static void startServers() throws Exception {
+ RMTxStore.deleteDatabaseFiles("rmdb", true);
+ assertTrue("server did not launch correctly", launchServer(Server.class));
+ }
+
+ @Before
+ public void setUp() {
+ SpringBusFactory bf = new SpringBusFactory();
+ bus = bf.createBus("/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml");
+ BusFactory.setDefaultBus(bus);
+
+ GreeterService gs = new GreeterService();
+ greeter = gs.getGreeterPort();
+
+ out = new OutMessageRecorder();
+ in = new InMessageRecorder();
+
+ bus.getOutInterceptors().add(out);
+ bus.getInInterceptors().add(in);
+ }
+
+ // TODO: refactor into one test as we cannot rely on the order in which the tests are executed
+ // (especially on IBM)
+
+ @Test
+ public void testPopulateStore() throws Exception {
+ greeter.greetMeOneWay("one");
+ greeter.greetMeOneWay("two");
+ greeter.greetMeOneWay("three");
+
+ MessageFlow mf = new MessageFlow(out.getOutboundMessages(), in.getInboundMessages());
+
+ awaitMessages(4, 4);
+
+ mf.verifyMessages(4, true);
+ String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(),
+ GREETMEONEWAY_ACTION,
+ GREETMEONEWAY_ACTION,
+ GREETMEONEWAY_ACTION};
+ mf.verifyActions(expectedActions, true);
+ mf.verifyMessageNumbers(new String[] {null, "1", "2", "3"}, true);
+
+
+ mf.verifyMessages(4, false);
+ mf.verifyPartialResponses(3);
+ mf.verifyMessageNumbers(new String[4], false);
+ boolean[] expectedAcks = new boolean[4];
+ mf.verifyAcknowledgements(expectedAcks, false);
+ mf.purgePartialResponses();
+ expectedActions = new String[] {RMConstants.getCreateSequenceResponseAction()};
+ mf.verifyActions(expectedActions, false);
+
+ RMManager manager = bus.getExtension(RMManager.class);
+ assertNotNull(manager);
+
+ RMStore store = manager.getStore();
+ assertNotNull(store);
+
+ Client client = ClientProxy.getClient(greeter);
+ String id = client.getEndpoint().getEndpointInfo().getService().getName()
+ + "." + client.getEndpoint().getEndpointInfo().getName();
+
+ Collection<DestinationSequence> dss =
+ store.getDestinationSequences(id);
+ assertEquals(1, dss.size());
+
+ Collection<SourceSequence> sss =
+ store.getSourceSequences(id);
+ assertEquals(1, sss.size());
+
+ Collection<RMMessage> msgs =
+ store.getMessages(sss.iterator().next().getIdentifier(), true);
+ assertEquals(3, msgs.size());
+ }
+
+ @Ignore
+ @Test
+ public void testRecover() throws Exception {
+ // do nothing - resends should happen in the background
+
+ int expectedOut = 2;
+ awaitMessages(2, 0);
+
+ MessageFlow mf = new MessageFlow(out.getOutboundMessages(), in.getInboundMessages());
+ String[] expectedActions = new String[expectedOut];
+ for (int i = 0; i < expectedOut; i++) {
+ expectedActions[i] = GREETMEONEWAY_ACTION;
+ }
+ mf.verifyActions(expectedActions, true);
+ }
+
+ private void awaitMessages(int nExpectedOut, int nExpectedIn) {
+ awaitMessages(nExpectedOut, nExpectedIn, 10000);
+ }
+
+ private void awaitMessages(int nExpectedOut, int nExpectedIn, int timeout) {
+ MessageRecorder mr = new MessageRecorder(out, in);
+ mr.awaitMessages(nExpectedOut, nExpectedIn, timeout);
+ }
+
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/PersistenceTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/PersistenceTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml?view=auto&rev=538850
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml Thu May 17 02:38:18 2007
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager"
+ xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
+ xsi:schemaLocation="
+http://cxf.apache.org/ws/rm/manager http://cxf.apache.org/ws/rm/manager.xsd
+http://schemas.xmlsoap.org/ws/2005/02/rm/policy http://schemas.xmlsoap.org/ws/2005/02/rm/wsrm-policy.xsd
+http://cxf.apache.org/configuration/beans http://cxf.apache.org/schemas/configuration/cxf-beans.xsd
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+ <import resource="rminterceptors.xml"/>
+
+ <bean class="org.apache.cxf.ws.rm.persistence.jdbc.RMTxStore"/>
+
+
+ <wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager">
+ <wsrm-policy:RMAssertion>
+ <wsrm-policy:BaseRetransmissionInterval Milliseconds="10000"/>
+ <wsrm-policy:AcknowledgementInterval Milliseconds="2000"/>
+ </wsrm-policy:RMAssertion>
+ <wsrm-mgr:destinationPolicy>
+ <wsrm-mgr:acksPolicy intraMessageThreshold="0"/>
+ </wsrm-mgr:destinationPolicy>
+ <property name="store" ref="org.apache.cxf.ws.rm.persistence.jdbc.RMTxStore"/>
+
+ </wsrm-mgr:rmManager>
+
+</beans>
\ No newline at end of file
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/oneway-client-crash.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Modified: incubator/cxf/trunk/testutils/src/main/java/org/apache/cxf/testutil/common/ServerLauncher.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/java/org/apache/cxf/testutil/common/ServerLauncher.java?view=diff&rev=538850&r1=538849&r2=538850
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/java/org/apache/cxf/testutil/common/ServerLauncher.java (original)
+++ incubator/cxf/trunk/testutils/src/main/java/org/apache/cxf/testutil/common/ServerLauncher.java Thu May 17 02:38:18 2007
@@ -348,6 +348,10 @@
if (null != transformerProperty) {
cmd.add("-Djavax.xml.transform.TransformerFactory=" + transformerProperty);
}
+ String validationMode = System.getProperty("spring.validation.mode");
+ if (null != validationMode) {
+ cmd.add("-Dspring.validation.mode=" + validationMode);
+ }
cmd.add(className);