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=536543&r1=536542&r2=536543 ============================================================================== --- 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 Wed May 9 07:27:10 2007 @@ -22,17 +22,26 @@ import java.lang.reflect.Method; import java.math.BigInteger; import java.util.Date; +import java.util.HashMap; import java.util.TimerTask; +import javax.xml.namespace.QName; + import org.apache.cxf.Bus; +import org.apache.cxf.binding.soap.SoapBinding; import org.apache.cxf.bus.spring.SpringBusFactory; import org.apache.cxf.endpoint.Endpoint; +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.endpoint.ServerLifeCycleListener; import org.apache.cxf.message.Exchange; import org.apache.cxf.message.Message; +import org.apache.cxf.service.model.EndpointInfo; import org.apache.cxf.transport.Conduit; import org.apache.cxf.ws.addressing.AddressingProperties; +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.RelatesToType; import org.apache.cxf.ws.rm.manager.SequenceTerminationPolicyType; import org.apache.cxf.ws.rm.manager.SourcePolicyType; @@ -42,7 +51,6 @@ import org.easymock.classextension.IMocksControl; import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; public class RMManagerTest extends Assert { @@ -57,15 +65,20 @@ @Test public void testAccessors() { RMManager manager = new RMManager(); + assertNull(manager.getBus()); assertNull(manager.getStore()); assertNull(manager.getRetransmissionQueue()); assertNotNull(manager.getTimer()); + assertNotNull(manager.getServerLifeCycleListener()); + Bus bus = control.createMock(Bus.class); RMStore store = control.createMock(RMStore.class); RetransmissionQueue queue = control.createMock(RetransmissionQueue.class); + manager.setBus(bus); manager.setStore(store); manager.setRetransmissionQueue(queue); + assertSame(bus, manager.getBus()); assertSame(store, manager.getStore()); assertSame(queue, manager.getRetransmissionQueue()); control.replay(); @@ -103,27 +116,143 @@ assertEquals(0, stp.getMaxRanges()); assertEquals(0, stp.getMaxUnacknowledged()); assertTrue(!stp.isTerminateOnShutdown()); - assertEquals(BigInteger.ZERO, stp.getMaxLength()); - - } + assertEquals(BigInteger.ZERO, stp.getMaxLength()); + } - @Ignore @Test - public void testGetReliableEndpoint() { + public void testServerLifecycleLister() { RMManager manager = new RMManager(); - Bus bus = control.createMock(Bus.class); - manager.setBus(bus); + Server s = control.createMock(Server.class); + Endpoint e = control.createMock(Endpoint.class); + EasyMock.expect(s.getEndpoint()).andReturn(e); + control.replay(); + ServerLifeCycleListener sl = manager.getServerLifeCycleListener(); + sl.startServer(s); + sl.stopServer(s); + control.verify(); + + control.reset(); + EasyMock.expect(s.getEndpoint()).andReturn(e); + RMEndpoint rme = control.createMock(RMEndpoint.class); + manager.getReliableEndpointsMap().put(e, rme); + rme.shutdown(); + EasyMock.expectLastCall(); + control.replay(); + sl.stopServer(s); + control.verify(); + } + + @Test + public void testGetBindingFaultFactory() { + SoapBinding binding = control.createMock(SoapBinding.class); + assertNotNull(new RMManager().getBindingFaultFactory(binding)); + } + + @Test + public void testGetReliableEndpointServerSideCreate() throws NoSuchMethodException { + Method m = RMManager.class.getDeclaredMethod("createReliableEndpoint", + new Class[] {RMManager.class, Endpoint.class}); + RMManager manager = control.createMock(RMManager.class, new Method[] {m}); + manager.setReliableEndpointsMap(new HashMap<Endpoint, RMEndpoint>()); + Message message = control.createMock(Message.class); + Exchange exchange = control.createMock(Exchange.class); + EasyMock.expect(message.getExchange()).andReturn(exchange).times(3); + WrappedEndpoint wre = control.createMock(WrappedEndpoint.class); + EasyMock.expect(exchange.get(Endpoint.class)).andReturn(wre); + EndpointInfo ei = control.createMock(EndpointInfo.class); + EasyMock.expect(wre.getEndpointInfo()).andReturn(ei); + QName name = RMConstants.getPortName(); + EasyMock.expect(ei.getName()).andReturn(name); + Endpoint e = control.createMock(Endpoint.class); + EasyMock.expect(wre.getWrappedEndpoint()).andReturn(e); + RMEndpoint rme = control.createMock(RMEndpoint.class); + EasyMock.expect(manager.createReliableEndpoint(manager, e)).andReturn(rme); + org.apache.cxf.transport.Destination destination = control + .createMock(org.apache.cxf.transport.Destination.class); + EasyMock.expect(exchange.getDestination()).andReturn(destination); + AddressingPropertiesImpl maps = control.createMock(AddressingPropertiesImpl.class); + EasyMock.expect(message.get(Message.REQUESTOR_ROLE)).andReturn(null); + EasyMock.expect(message.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND)).andReturn(maps); + EndpointReferenceType replyTo = RMUtils.createAnonymousReference(); + EasyMock.expect(maps.getReplyTo()).andReturn(replyTo); + EasyMock.expect(exchange.getConduit(message)).andReturn(null); + rme.initialise(null, replyTo); + EasyMock.expectLastCall(); + + control.replay(); + assertSame(rme, manager.getReliableEndpoint(message)); + control.verify(); + + control.reset(); + EasyMock.expect(message.getExchange()).andReturn(exchange); + EasyMock.expect(exchange.get(Endpoint.class)).andReturn(wre); + EasyMock.expect(wre.getEndpointInfo()).andReturn(ei); + EasyMock.expect(ei.getName()).andReturn(name); + EasyMock.expect(wre.getWrappedEndpoint()).andReturn(e); + + control.replay(); + assertSame(rme, manager.getReliableEndpoint(message)); + control.verify(); + } + + @Test + public void testGetReliableEndpointClientSideCreate() throws NoSuchMethodException { + Method m = RMManager.class.getDeclaredMethod("createReliableEndpoint", + new Class[] {RMManager.class, Endpoint.class}); + RMManager manager = control.createMock(RMManager.class, new Method[] {m}); + manager.setReliableEndpointsMap(new HashMap<Endpoint, RMEndpoint>()); Message message = control.createMock(Message.class); - EasyMock.expect(message.get(Message.REQUESTOR_ROLE)).andReturn(Boolean.TRUE).times(2); Exchange exchange = control.createMock(Exchange.class); - EasyMock.expect(message.getExchange()).andReturn(exchange).times(2); - // Endpoint endpoint = control.createMock(Endpoint.class); - EasyMock.expect(exchange.get(Endpoint.class)).andReturn(null).times(2); - control.replay(); - RMEndpoint reliableEndpoint = manager.getReliableEndpoint(message); - // assertSame(endpoint, reliableEndpoint.getEndpoint()); - RMEndpoint rme = manager.getReliableEndpoint(message); - assertSame(reliableEndpoint, rme); + EasyMock.expect(message.getExchange()).andReturn(exchange).times(3); + Endpoint endpoint = control.createMock(Endpoint.class); + EasyMock.expect(exchange.get(Endpoint.class)).andReturn(endpoint); + EndpointInfo ei = control.createMock(EndpointInfo.class); + EasyMock.expect(endpoint.getEndpointInfo()).andReturn(ei); + QName name = new QName("http://x.y.z/a", "GreeterPort"); + EasyMock.expect(ei.getName()).andReturn(name); + RMEndpoint rme = control.createMock(RMEndpoint.class); + EasyMock.expect(manager.createReliableEndpoint(manager, endpoint)).andReturn(rme); + EasyMock.expect(exchange.getDestination()).andReturn(null); + Conduit conduit = control.createMock(Conduit.class); + EasyMock.expect(exchange.getConduit(message)).andReturn(conduit); + rme.initialise(conduit, null); + EasyMock.expectLastCall(); + + control.replay(); + assertSame(rme, manager.getReliableEndpoint(message)); + control.verify(); + + control.reset(); + EasyMock.expect(message.getExchange()).andReturn(exchange); + EasyMock.expect(exchange.get(Endpoint.class)).andReturn(endpoint); + EasyMock.expect(endpoint.getEndpointInfo()).andReturn(ei); + EasyMock.expect(ei.getName()).andReturn(name); + + control.replay(); + assertSame(rme, manager.getReliableEndpoint(message)); + control.verify(); + } + + @Test + public void testGetReliableEndpointExisting() throws NoSuchMethodException { + Method m = RMManager.class.getDeclaredMethod("createReliableEndpoint", + new Class[] {RMManager.class, Endpoint.class}); + RMManager manager = control.createMock(RMManager.class, new Method[] {m}); + manager.setReliableEndpointsMap(new HashMap<Endpoint, RMEndpoint>()); + Message message = control.createMock(Message.class); + Exchange exchange = control.createMock(Exchange.class); + EasyMock.expect(message.getExchange()).andReturn(exchange); + Endpoint endpoint = control.createMock(Endpoint.class); + EasyMock.expect(exchange.get(Endpoint.class)).andReturn(endpoint); + EndpointInfo ei = control.createMock(EndpointInfo.class); + EasyMock.expect(endpoint.getEndpointInfo()).andReturn(ei); + QName name = new QName("http://x.y.z/a", "GreeterPort"); + EasyMock.expect(ei.getName()).andReturn(name); + RMEndpoint rme = control.createMock(RMEndpoint.class); + manager.getReliableEndpointsMap().put(endpoint, rme); + + control.replay(); + assertSame(rme, manager.getReliableEndpoint(message)); control.verify(); } @@ -233,17 +362,22 @@ assertSame(sseq, manager.getSequence(inSid, message, maps)); control.verify(); } - + @Test public void testShutdown() { - Bus bus = new SpringBusFactory().createBus("org/apache/cxf/ws/rm/rmmanager.xml", false); - RMManager manager = bus.getExtension(RMManager.class); + RMManager manager = bus.getExtension(RMManager.class); + Endpoint e = control.createMock(Endpoint.class); + RMEndpoint rme = control.createMock(RMEndpoint.class); + manager.getReliableEndpointsMap().put(e, rme); + rme.shutdown(); + EasyMock.expectLastCall(); assertNotNull(manager); class TestTask extends TimerTask { public void run() { } } + control.replay(); bus.shutdown(true); try { manager.getTimer().schedule(new TestTask(), 5000); @@ -251,6 +385,24 @@ } catch (IllegalStateException ex) { // expected } + } + + @Test + public void testShutdownReliableEndpoint() { + RMManager manager = new RMManager(); + Endpoint e = control.createMock(Endpoint.class); + RMEndpoint rme = control.createMock(RMEndpoint.class); + control.replay(); + manager.shutdownReliableEndpoint(e); + control.verify(); + + control.reset(); + manager.getReliableEndpointsMap().put(e, rme); + rme.shutdown(); + EasyMock.expectLastCall(); + control.replay(); + manager.shutdownReliableEndpoint(e); + assertNull(manager.getReliableEndpointsMap().get(e)); } @Test
Modified: 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=diff&rev=536543&r1=536542&r2=536543 ============================================================================== --- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java (original) +++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java Wed May 9 07:27:10 2007 @@ -135,7 +135,7 @@ 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); + (BigInteger)EasyMock.isNull(), EasyMock.eq(false))).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)); 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=536543&r1=536542&r2=536543 ============================================================================== --- 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 Wed May 9 07:27:10 2007 @@ -311,7 +311,7 @@ seq = new SourceSequence(id, null, did); seq.setSource(source); - seq.nextMessageNumber(did, BigInteger.ONE); + seq.nextMessageNumber(did, BigInteger.ONE, false); assertTrue(seq.isLastMessage()); control.verify(); Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java?view=diff&rev=536543&r1=536542&r2=536543 ============================================================================== --- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java (original) +++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java Wed May 9 07:27:10 2007 @@ -81,7 +81,6 @@ @After public void tearDown() { control.verify(); - queue.stop(); messages.clear(); properties.clear(); sequences.clear(); @@ -292,7 +291,6 @@ public void testStartStop() { control.replay(); queue.start(); - queue.stop(); } private Message setUpMessage(String sid) { Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java?view=diff&rev=536543&r1=536542&r2=536543 ============================================================================== --- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java (original) +++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java Wed May 9 07:27:10 2007 @@ -30,7 +30,6 @@ import org.apache.cxf.interceptor.Interceptor; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; -import org.apache.cxf.ws.rm.RMManager; @WebService(serviceName = "ControlService", portName = "ControlPort", @@ -39,24 +38,6 @@ public class ControlImpl extends org.apache.cxf.greeter_control.ControlImpl { private static final Logger LOG = Logger.getLogger(ControlImpl.class.getName()); - - @Override - public boolean stopGreeter(String requestType) { - - if (null != endpoint) { - LOG.info("Stopping Greeter endpoint"); - endpoint.stop(); - } else { - LOG.info("No endpoint active."); - } - endpoint = null; - if (null != greeterBus) { - RMManager manager = greeterBus.getExtension(RMManager.class); - manager.shutdown(); - greeterBus.shutdown(true); - } - return true; - } @Override public boolean startGreeter(String cfgResource) { Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java?view=diff&rev=536543&r1=536542&r2=536543 ============================================================================== --- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java (original) +++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java Wed May 9 07:27:10 2007 @@ -114,6 +114,7 @@ private boolean doTestMultiClientOneway = testAll; private boolean doTestMultiClientTwoway = testAll; private boolean doTestServerSideMessageLoss = testAll; + private boolean doTestTerminateOnShutdown = testAll; @BeforeClass public static void startServers() throws Exception { @@ -1220,6 +1221,47 @@ } + @Test + public void testTerminateOnShutdown() throws Exception { + if (!doTestTerminateOnShutdown) { + return; + } + init("org/apache/cxf/systest/ws/rm/terminate-on-shutdown.xml", true); + + greeter.greetMeOneWay("neutrophil"); + greeter.greetMeOneWay("basophil"); + greeter.greetMeOneWay("eosinophil"); + stopGreeter(); + + awaitMessages(6, 8); + MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages()); + + mf.verifyMessages(6, true); + String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(), + GREETMEONEWAY_ACTION, + GREETMEONEWAY_ACTION, + GREETMEONEWAY_ACTION, + RMConstants.getLastMessageAction(), + RMConstants.getTerminateSequenceAction()}; + mf.verifyActions(expectedActions, true); + mf.verifyMessageNumbers(new String[] {null, "1", "2", "3", "4", null}, true); + + // inbound: CreateSequenceResponse, out-of-band SequenceAcknowledgement + // plus 6 partial responses + + mf.verifyMessages(8, false); + mf.verifyMessageNumbers(new String[8], false); + + mf.verifyPartialResponses(6); + mf.purgePartialResponses(); + + + expectedActions = new String[] {RMConstants.getCreateSequenceResponseAction(), + RMConstants.getSequenceAckAction()}; + mf.verifyActions(expectedActions, false); + mf.verifyAcknowledgements(new boolean[] {false, true}, false); + + } // --- test utilities --- @@ -1287,10 +1329,9 @@ } private void stopGreeter() { - if (null != greeter) { - RMManager manager = greeterBus.getExtension(RMManager.class); - manager.shutdown(); + if (null != greeterBus) { greeterBus.shutdown(true); + greeter = null; greeterBus = null; } } Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/terminate-on-shutdown.xml URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/terminate-on-shutdown.xml?view=auto&rev=536543 ============================================================================== --- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/terminate-on-shutdown.xml (added) +++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/terminate-on-shutdown.xml Wed May 9 07:27:10 2007 @@ -0,0 +1,43 @@ +<?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-mgmt="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://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> + + <import resource="rminterceptors.xml"/> + + <wsrm-mgmt:rmManager id="org.apache.cxf.ws.rm.RMManager"> + <wsrm-mgmt:destinationPolicy> + <wsrm-mgmt:acksPolicy intraMessageThreshold="0"/> + </wsrm-mgmt:destinationPolicy> + <wsrm-mgmt:sourcePolicy> + <wsrm-mgmt:sequenceTerminationPolicy terminateOnShutdown="true"/> + </wsrm-mgmt:sourcePolicy> + <wsrm-policy:RMAssertion> + <wsrm-policy:BaseRetransmissionInterval Milliseconds="10000"/> + <wsrm-policy:AcknowledgementInterval Milliseconds="10000"/> + </wsrm-policy:RMAssertion> + </wsrm-mgmt:rmManager> + +</beans> \ No newline at end of file Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/terminate-on-shutdown.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/terminate-on-shutdown.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/terminate-on-shutdown.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml
