You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by di...@apache.org on 2007/08/09 02:51:42 UTC
svn commit: r564061 [13/15] - in
/webservices/sandesha/branches/sandesha2/java/1_3: ./ modules/client/
modules/core/ modules/core/src/main/java/org/apache/sandesha2/
modules/core/src/main/java/org/apache/sandesha2/client/
modules/core/src/main/java/org...
Modified: webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceClosedFaultTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceClosedFaultTest.java?view=diff&rev=564061&r1=564060&r2=564061
==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceClosedFaultTest.java (original)
+++ webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceClosedFaultTest.java Wed Aug 8 17:51:29 2007
@@ -1,182 +1,182 @@
-/*
- * Copyright 2007 The Apache Software Foundation.
- *
- * Licensed 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.sandesha2.faulttests;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
-import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.description.AxisOperation;
-import org.apache.sandesha2.RMMsgContext;
-import org.apache.sandesha2.Sandesha2Constants;
-import org.apache.sandesha2.SandeshaTestCase;
-import org.apache.sandesha2.msgreceivers.RMMessageReceiver;
-import org.apache.sandesha2.storage.StorageManager;
-import org.apache.sandesha2.storage.Transaction;
-import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
-import org.apache.sandesha2.storage.beans.RMDBean;
-import org.apache.sandesha2.util.RangeString;
-import org.apache.sandesha2.util.SandeshaUtil;
-import org.apache.sandesha2.util.SpecSpecificConstants;
-import org.apache.sandesha2.wsrm.Identifier;
-import org.apache.sandesha2.wsrm.MessageNumber;
-import org.apache.sandesha2.wsrm.Sequence;
-
-
-public class SequenceClosedFaultTest extends SandeshaTestCase {
-
- private static final String server_repoPath = "target" + File.separator
- + "repos" + File.separator + "server";
-
- private static final String server_axis2_xml = "target" + File.separator
- + "repos" + File.separator + "server" + File.separator
- + "server_axis2.xml";
-
- private ConfigurationContext serverConfigContext;
-
- public SequenceClosedFaultTest() {
- super("SequenceClosedFaultTest");
- }
-
- public void setUp() throws Exception {
- super.setUp();
- serverConfigContext = startServer(server_repoPath, server_axis2_xml);
- }
-
- /**
- * Sends an application message to the RMD.
- * The RMD should reject the message with a sequence closed fault
- *
- * @throws Exception
- */
- public void testSequenceClosedFault() throws Exception {
- // Open a connection to the endpoint
- HttpURLConnection connection =
- FaultTestUtils.getHttpURLConnection("http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService",
- pingAction);
-
- StorageManager storageManager =
- SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
-
- RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
-
- String seqID = SandeshaUtil.getUUID();
-
- // Mockup an RMDBean
- RMDBean rmdBean = new RMDBean();
- rmdBean.setSequenceID(seqID);
- rmdBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
- rmdBean.setServerCompletedMessages(new RangeString());
- // Flag that the sequence is closed.
- rmdBean.setClosed(true);
-
- // Create a transaction and insert the RMSBean
- Transaction tran = storageManager.getTransaction();
-
- rmdBeanMgr.insert(rmdBean);
-
- tran.commit();
-
-
- OutputStream tmpOut2 = connection.getOutputStream();
-
- byte ar[] = getAppMessageAsBytes(seqID);
- // Send the message to the socket.
- tmpOut2.write(ar);
- tmpOut2.flush();
-
- // Get the response message from the connection
- String message = FaultTestUtils.retrieveResponseMessage(connection);
-
- // Check that the fault message isn't null
- assertNotNull(message);
-
- // Check that the response contains the MessageNumberRollover tag
- assertTrue(message.indexOf("wsrm:SequenceClosed") > -1);
-
- // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the sequence ID specified
- String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 17, message.indexOf("</wsrm:Identifier>"));
- assertEquals(seqID, faultID);
-
- // Disconnect at the end of the test
- connection.disconnect();
- }
-
- /**
- * Get an application message as bytes
- *
- * This sets the message number to "Long.maxValue"
- *
- * @return
- */
- private byte[] getAppMessageAsBytes(String uuid) throws Exception
- {
- SOAPFactory factory = new SOAP11Factory();
- SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
-
- // Create a "new" application message
- MessageContext messageContext = new MessageContext();
- messageContext.setConfigurationContext(serverConfigContext);
- messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
- messageContext.setEnvelope(dummyEnvelope);
-
- RMMsgContext applicationRMMsg = new RMMsgContext(messageContext);
-
- // Generate the Sequence field.
- // -------------------------------
- String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
-
- Sequence sequence = new Sequence(rmNamespaceValue);
- MessageNumber msgNumber = new MessageNumber(rmNamespaceValue);
- msgNumber.setMessageNumber(1);
- sequence.setMessageNumber(msgNumber);
- Identifier id1 = new Identifier(rmNamespaceValue);
- id1.setIndentifer(uuid);
- sequence.setIdentifier(id1);
- applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE, sequence);
- applicationRMMsg.addSOAPEnvelope();
-
- // --------------------------------------------
- // Finished generating Sequence part
-
- // Create an RMSBean so the create sequence message can be created
- messageContext.setWSAAction(pingAction);
-
- // Set the AxisOperation to be InOut
- AxisOperation operation = messageContext.getAxisService().getOperation(Sandesha2Constants.RM_IN_OUT_OPERATION);
- operation.setMessageReceiver(new RMMessageReceiver());
- messageContext.setAxisOperation(operation);
-
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-
- // Serialize the application message
- applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
-
- return outputStream.toByteArray();
- }
-}
-
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ *
+ * Licensed 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.sandesha2.faulttests;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.sandesha2.RMMsgContext;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.msgreceivers.RMMessageReceiver;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
+import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
+import org.apache.sandesha2.storage.beans.RMDBean;
+import org.apache.sandesha2.util.RangeString;
+import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.wsrm.Identifier;
+import org.apache.sandesha2.wsrm.MessageNumber;
+import org.apache.sandesha2.wsrm.Sequence;
+
+
+public class SequenceClosedFaultTest extends SandeshaTestCase {
+
+ private static final String server_repoPath = "target" + File.separator
+ + "repos" + File.separator + "server";
+
+ private static final String server_axis2_xml = "target" + File.separator
+ + "repos" + File.separator + "server" + File.separator
+ + "server_axis2.xml";
+
+ private ConfigurationContext serverConfigContext;
+
+ public SequenceClosedFaultTest() {
+ super("SequenceClosedFaultTest");
+ }
+
+ public void setUp() throws Exception {
+ super.setUp();
+ serverConfigContext = startServer(server_repoPath, server_axis2_xml);
+ }
+
+ /**
+ * Sends an application message to the RMD.
+ * The RMD should reject the message with a sequence closed fault
+ *
+ * @throws Exception
+ */
+ public void testSequenceClosedFault() throws Exception {
+ // Open a connection to the endpoint
+ HttpURLConnection connection =
+ FaultTestUtils.getHttpURLConnection("http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService",
+ pingAction);
+
+ StorageManager storageManager =
+ SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
+
+ RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
+
+ String seqID = SandeshaUtil.getUUID();
+
+ // Mockup an RMDBean
+ RMDBean rmdBean = new RMDBean();
+ rmdBean.setSequenceID(seqID);
+ rmdBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ rmdBean.setServerCompletedMessages(new RangeString());
+ // Flag that the sequence is closed.
+ rmdBean.setClosed(true);
+
+ // Create a transaction and insert the RMSBean
+ Transaction tran = storageManager.getTransaction();
+
+ rmdBeanMgr.insert(rmdBean);
+
+ tran.commit();
+
+
+ OutputStream tmpOut2 = connection.getOutputStream();
+
+ byte ar[] = getAppMessageAsBytes(seqID);
+ // Send the message to the socket.
+ tmpOut2.write(ar);
+ tmpOut2.flush();
+
+ // Get the response message from the connection
+ String message = FaultTestUtils.retrieveResponseMessage(connection);
+
+ // Check that the fault message isn't null
+ assertNotNull(message);
+
+ // Check that the response contains the MessageNumberRollover tag
+ assertTrue(message.indexOf("wsrm:SequenceClosed") > -1);
+
+ // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the sequence ID specified
+ String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 17, message.indexOf("</wsrm:Identifier>"));
+ assertEquals(seqID, faultID);
+
+ // Disconnect at the end of the test
+ connection.disconnect();
+ }
+
+ /**
+ * Get an application message as bytes
+ *
+ * This sets the message number to "Long.maxValue"
+ *
+ * @return
+ */
+ private byte[] getAppMessageAsBytes(String uuid) throws Exception
+ {
+ SOAPFactory factory = new SOAP11Factory();
+ SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
+
+ // Create a "new" application message
+ MessageContext messageContext = new MessageContext();
+ messageContext.setConfigurationContext(serverConfigContext);
+ messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
+ messageContext.setEnvelope(dummyEnvelope);
+
+ RMMsgContext applicationRMMsg = new RMMsgContext(messageContext);
+
+ // Generate the Sequence field.
+ // -------------------------------
+ String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+
+ Sequence sequence = new Sequence(rmNamespaceValue);
+ MessageNumber msgNumber = new MessageNumber(rmNamespaceValue);
+ msgNumber.setMessageNumber(1);
+ sequence.setMessageNumber(msgNumber);
+ Identifier id1 = new Identifier(rmNamespaceValue);
+ id1.setIndentifer(uuid);
+ sequence.setIdentifier(id1);
+ applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE, sequence);
+ applicationRMMsg.addSOAPEnvelope();
+
+ // --------------------------------------------
+ // Finished generating Sequence part
+
+ // Create an RMSBean so the create sequence message can be created
+ messageContext.setWSAAction(pingAction);
+
+ // Set the AxisOperation to be InOut
+ AxisOperation operation = messageContext.getAxisService().getOperation(Sandesha2Constants.RM_IN_OUT_OPERATION);
+ operation.setMessageReceiver(new RMMessageReceiver());
+ messageContext.setAxisOperation(operation);
+
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+ // Serialize the application message
+ applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
+
+ return outputStream.toByteArray();
+ }
+}
+
Propchange: webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceClosedFaultTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java?view=diff&rev=564061&r1=564060&r2=564061
==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java (original)
+++ webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java Wed Aug 8 17:51:29 2007
@@ -1,551 +1,551 @@
-/*
- * Copyright 2007 The Apache Software Foundation.
- *
- * Licensed 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.sandesha2.faulttests;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.util.List;
-
-import org.apache.axiom.soap.SOAP12Constants;
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
-import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.description.AxisOperation;
-import org.apache.sandesha2.RMMsgContext;
-import org.apache.sandesha2.Sandesha2Constants;
-import org.apache.sandesha2.SandeshaTestCase;
-import org.apache.sandesha2.client.SandeshaClient;
-import org.apache.sandesha2.client.SandeshaClientConstants;
-import org.apache.sandesha2.client.SequenceReport;
-import org.apache.sandesha2.msgreceivers.RMMessageReceiver;
-import org.apache.sandesha2.storage.StorageManager;
-import org.apache.sandesha2.storage.Transaction;
-import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
-import org.apache.sandesha2.storage.beans.RMDBean;
-import org.apache.sandesha2.util.RangeString;
-import org.apache.sandesha2.util.SandeshaUtil;
-import org.apache.sandesha2.util.SpecSpecificConstants;
-import org.apache.sandesha2.wsrm.AckRequested;
-import org.apache.sandesha2.wsrm.CloseSequence;
-import org.apache.sandesha2.wsrm.Identifier;
-import org.apache.sandesha2.wsrm.MessageNumber;
-import org.apache.sandesha2.wsrm.Sequence;
-
-
-public class SequenceTerminatedFaultTest extends SandeshaTestCase {
-
- private static final String server_repoPath = "target" + File.separator
- + "repos" + File.separator + "server";
-
- private static final String server_axis2_xml = "target" + File.separator
- + "repos" + File.separator + "server" + File.separator
- + "server_axis2.xml";
-
- private static ConfigurationContext serverConfigContext;
-
- private boolean serverStarted = false;
-
- public SequenceTerminatedFaultTest() {
- super("SequenceTerminatedFaultTest");
- }
-
- public void setUp() throws Exception {
- super.setUp();
- if (!serverStarted) {
- serverConfigContext = startServer(server_repoPath, server_axis2_xml);
- }
- serverStarted = true;
- }
-
- public void tearDown () throws Exception {
- super.tearDown();
- }
-
- /**
- * Sends an application message to the RMD.
- * The RMD should reject the message with a sequence terminated fault
- *
- * @throws Exception
- */
- public void testSequenceTerminatedFault() throws Exception {
- // Open a connection to the endpoint
- HttpURLConnection connection =
- FaultTestUtils.getHttpURLConnection("http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService",
- pingAction);
-
- StorageManager storageManager =
- SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
-
- RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
-
- String seqID = SandeshaUtil.getUUID();
-
- // Mockup an RMDBean
- RMDBean rmdBean = new RMDBean();
- rmdBean.setSequenceID(seqID);
- rmdBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
- rmdBean.setServerCompletedMessages(new RangeString());
- // Flag that the sequence is terminated.
- rmdBean.setTerminated(true);
-
- // Create a transaction and insert the RMSBean
- Transaction tran = storageManager.getTransaction();
-
- rmdBeanMgr.insert(rmdBean);
-
- tran.commit();
-
-
- OutputStream tmpOut2 = connection.getOutputStream();
-
- byte ar[] = getAppMessageAsBytes(seqID);
- // Send the message to the socket.
- tmpOut2.write(ar);
- tmpOut2.flush();
-
- // Get the response message from the connection
- String message = FaultTestUtils.retrieveResponseMessage(connection);
-
- // Check that the fault message isn't null
- assertNotNull(message);
-
- // Check that the response contains the Sequence Terminated tag
- assertTrue(message.indexOf("wsrm:SequenceTerminated") > -1);
-
- // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the sequence ID specified
- String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 17, message.indexOf("</wsrm:Identifier>"));
- assertEquals(seqID, faultID);
-
- // Disconnect at the end of the test
- connection.disconnect();
- }
-
- /**
- * Sends a Close message to the RMD.
- * The RMD should reject the message with a sequence terminated fault
- *
- * @throws Exception
- */
- public void testSequenceTerminatedOnCloseFault() throws Exception {
- // Open a connection to the endpoint
- HttpURLConnection connection =
- FaultTestUtils.getHttpURLConnection("http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService",
- Sandesha2Constants.SPEC_2007_02.Actions.ACTION_CLOSE_SEQUENCE);
-
- StorageManager storageManager =
- SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
-
- RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
-
- String seqID = SandeshaUtil.getUUID();
-
- // Mockup an RMDBean
- RMDBean rmdBean = new RMDBean();
- rmdBean.setSequenceID(seqID);
- rmdBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
- rmdBean.setServerCompletedMessages(new RangeString());
- // Flag that the sequence is terminated.
- rmdBean.setTerminated(true);
-
- // Create a transaction and insert the RMSBean
- Transaction tran = storageManager.getTransaction();
-
- rmdBeanMgr.insert(rmdBean);
-
- tran.commit();
-
-
- OutputStream tmpOut2 = connection.getOutputStream();
-
- byte ar[] = getCloseMessageAsBytes(seqID);
- // Send the message to the socket.
- tmpOut2.write(ar);
- tmpOut2.flush();
-
- // Get the response message from the connection
- String message = FaultTestUtils.retrieveResponseMessage(connection);
-
- // Check that the fault message isn't null
- assertNotNull(message);
-
- // Check that the response contains the Sequence Terminated tag
- assertTrue(message.indexOf("wsrm:SequenceTerminated") > -1);
-
- // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the sequence ID specified
- String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 17, message.indexOf("</wsrm:Identifier>"));
- assertEquals(seqID, faultID);
-
- // Disconnect at the end of the test
- connection.disconnect();
- }
-
- /**
- * Sends a AckRequest message to the RMD.
- * The RMD should reject the message with a sequence terminated fault
- *
- * @throws Exception
- */
- public void testSequenceTerminatedOnAckRequestFault() throws Exception {
- // Open a connection to the endpoint
- HttpURLConnection connection =
- FaultTestUtils.getHttpURLConnection("http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService",
- Sandesha2Constants.SPEC_2007_02.Actions.ACTION_ACK_REQUEST);
-
- StorageManager storageManager =
- SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
-
- RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
-
- String seqID = SandeshaUtil.getUUID();
-
- // Mockup an RMDBean
- RMDBean rmdBean = new RMDBean();
- rmdBean.setSequenceID(seqID);
- rmdBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
- rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
- rmdBean.setServerCompletedMessages(new RangeString());
- // Flag that the sequence is terminated.
- rmdBean.setTerminated(true);
-
- // Create a transaction and insert the RMSBean
- Transaction tran = storageManager.getTransaction();
-
- rmdBeanMgr.insert(rmdBean);
-
- tran.commit();
-
-
- OutputStream tmpOut2 = connection.getOutputStream();
-
- byte ar[] = getAckRequestMessageAsBytes(seqID);
- // Send the message to the socket.
- tmpOut2.write(ar);
- tmpOut2.flush();
-
- // Get the response message from the connection
- String message = FaultTestUtils.retrieveResponseMessage(connection);
-
- // Check that the fault message isn't null
- assertNotNull(message);
-
- // Check that the response contains the Sequence Terminated tag
- assertTrue(message.indexOf("wsrm:SequenceTerminated") > -1);
-
- // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the sequence ID specified
- String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 17, message.indexOf("</wsrm:Identifier>"));
- assertEquals(seqID, faultID);
-
- // Disconnect at the end of the test
- connection.disconnect();
- }
-
- /**
- * When sending application messages, if the RMD sequence returns a sequence terminated
- * fault, then the RMS Sequence should be terminated
- */
- public void testRMSSequenceTerminatedOnSequenceTerminatedFault() throws Exception {
- runSequenceTerminated(false, false);
- }
-
- /**
- * When sending application messages, if the RMD sequence returns a sequence terminated
- * fault, then the RMS Sequence should be terminated.
- *
- * Runs at SOAP12 level
- */
- public void testRMSSequenceTerminatedOnSequenceTerminatedFaultSOAP12() throws Exception {
- runSequenceTerminated(false, true);
- }
-
- /**
- * When sending application messages, if the RMD sequence returns a sequence terminated
- * fault, then the RMS Sequence should be terminated
- */
- public void testRMSSequenceTerminatedOnSequenceUnknownFault() throws Exception {
- runSequenceTerminated(true, false);
- }
-
- /**
- * When sending application messages, if the RMD sequence returns a sequence terminated
- * fault, then the RMS Sequence should be terminated
- *
- * Runs at SOAP12 level
- */
- public void testRMSSequenceTerminatedOnSequenceUnknownFaultSOAP12() throws Exception {
- runSequenceTerminated(true, true);
- }
-
- private void runSequenceTerminated(boolean deleteRMSBean, boolean soap12) throws Exception {
- String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
-
- String repoPath = "target" + File.separator + "repos" + File.separator + "client";
- String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
-
- ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
-
- Options clientOptions = new Options ();
- clientOptions.setAction(pingAction);
- clientOptions.setTo(new EndpointReference (to));
- clientOptions.setFaultTo(new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
-
- String sequenceKey = SandeshaUtil.getUUID();
- clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
- clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_1);
-
- if (soap12)
- clientOptions.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-
- ServiceClient serviceClient = new ServiceClient (configContext,null);
- serviceClient.setOptions(clientOptions);
-
- // Send a single ping message
- serviceClient.fireAndForget(getPingOMBlock("ping1"));
-
- long limit = System.currentTimeMillis() + waitTime;
- Error lastError = null;
- while(System.currentTimeMillis() < limit) {
- Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
-
- // Check that the sequence has been deleted.
- StorageManager storageManager =
- SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
-
- Transaction tran = storageManager.getTransaction();
-
- RMDBean finderBean = new RMDBean();
- finderBean.setTerminated(false);
- List rmdBeans = storageManager.getRMDBeanMgr().find(finderBean);
-
- tran.commit();
-
- lastError = null;
-
- if (rmdBeans.isEmpty())
- lastError = new Error("rmdBeans empty " + rmdBeans);
- else {
- RMDBean bean = (RMDBean)rmdBeans.get(0);
- if (!bean.getServerCompletedMessages().getContainedElementsAsNumbersList().contains(new Integer(1))) {
- tran = storageManager.getTransaction();
- if (deleteRMSBean) {
- storageManager.getRMDBeanMgr().delete(bean.getSequenceID());
- } else {
- bean.setTerminated(true);
- storageManager.getRMDBeanMgr().update(bean);
- }
- tran.commit();
- break;
- }
-
- lastError = new Error("App message has not arrived");
- }
- }
-
- if(lastError != null) throw lastError;
-
- // Send a second application message.
- serviceClient.fireAndForget(getPingOMBlock("ping2"));
-
- while(System.currentTimeMillis() < limit) {
- Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
-
- try {
- //Check that the outgoing sequence is terminated
- SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
- assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TERMINATED);
- assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
-
- lastError = null;
- break;
- } catch(Error e) {
- lastError = e;
- }
- }
-
- if(lastError != null) throw lastError;
-
- configContext.getListenerManager().stop();
- serviceClient.cleanup();
-
- }
-
- /**
- * Get an application message as bytes
- *
- * @return
- */
- private byte[] getAppMessageAsBytes(String uuid) throws Exception
- {
- SOAPFactory factory = new SOAP11Factory();
- SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
-
- // Create a "new" application message
- MessageContext messageContext = new MessageContext();
- messageContext.setConfigurationContext(serverConfigContext);
- messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
- messageContext.setEnvelope(dummyEnvelope);
-
- RMMsgContext applicationRMMsg = new RMMsgContext(messageContext);
-
- // Generate the Sequence field.
- // -------------------------------
- String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
-
- Sequence sequence = new Sequence(rmNamespaceValue);
- MessageNumber msgNumber = new MessageNumber(rmNamespaceValue);
- msgNumber.setMessageNumber(1);
- sequence.setMessageNumber(msgNumber);
- Identifier id1 = new Identifier(rmNamespaceValue);
- id1.setIndentifer(uuid);
- sequence.setIdentifier(id1);
- applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE, sequence);
- applicationRMMsg.addSOAPEnvelope();
-
- // --------------------------------------------
- // Finished generating Sequence part
-
- // Create an RMSBean so the create sequence message can be created
- messageContext.setWSAAction(pingAction);
-
- // Set the AxisOperation to be InOut
- AxisOperation operation = messageContext.getAxisService().getOperation(Sandesha2Constants.RM_IN_OUT_OPERATION);
- operation.setMessageReceiver(new RMMessageReceiver());
- messageContext.setAxisOperation(operation);
-
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-
- // Serialize the application message
- applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
-
- return outputStream.toByteArray();
- }
-
- /**
- * Get a close message as bytes
- *
- * @return
- */
- private byte[] getCloseMessageAsBytes(String uuid) throws Exception
- {
- SOAPFactory factory = new SOAP11Factory();
- SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
-
- // Create a "new" application message
- MessageContext messageContext = new MessageContext();
- messageContext.setConfigurationContext(serverConfigContext);
- messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
- messageContext.setEnvelope(dummyEnvelope);
-
- RMMsgContext applicationRMMsg = new RMMsgContext(messageContext);
-
- // Generate the Close field.
- // -------------------------------
- String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
-
- CloseSequence sequence = new CloseSequence(rmNamespaceValue);
- Identifier id1 = new Identifier(rmNamespaceValue);
- id1.setIndentifer(uuid);
- sequence.setIdentifier(id1);
- applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE, sequence);
- applicationRMMsg.addSOAPEnvelope();
-
- // --------------------------------------------
- // Finished generating Close part
-
- // Create an RMSBean so the create sequence message can be created
- messageContext.setWSAAction(pingAction);
-
- // Set the AxisOperation to be InOut
- AxisOperation operation = messageContext.getAxisService().getOperation(Sandesha2Constants.RM_IN_OUT_OPERATION);
- operation.setMessageReceiver(new RMMessageReceiver());
- messageContext.setAxisOperation(operation);
-
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-
- // Serialize the application message
- applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
-
- return outputStream.toByteArray();
- }
-
- /**
- * Get a close message as bytes
- *
- * @return
- */
- private byte[] getAckRequestMessageAsBytes(String uuid) throws Exception
- {
- SOAPFactory factory = new SOAP11Factory();
- SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
-
- // Create a "new" application message
- MessageContext messageContext = new MessageContext();
- messageContext.setConfigurationContext(serverConfigContext);
- messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
- messageContext.setEnvelope(dummyEnvelope);
-
- RMMsgContext applicationRMMsg = new RMMsgContext(messageContext);
-
- // Generate the Close field.
- // -------------------------------
- String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
-
- AckRequested sequence = new AckRequested(rmNamespaceValue);
- Identifier id1 = new Identifier(rmNamespaceValue);
- id1.setIndentifer(uuid);
- sequence.setIdentifier(id1);
- applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE, sequence);
- applicationRMMsg.addSOAPEnvelope();
-
- // --------------------------------------------
- // Finished generating Close part
-
- // Create an RMSBean so the create sequence message can be created
- messageContext.setWSAAction(pingAction);
-
- // Set the AxisOperation to be InOut
- AxisOperation operation = messageContext.getAxisService().getOperation(Sandesha2Constants.RM_IN_OUT_OPERATION);
- operation.setMessageReceiver(new RMMessageReceiver());
- messageContext.setAxisOperation(operation);
-
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-
- // Serialize the application message
- applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
-
- return outputStream.toByteArray();
- }
-
-}
-
-
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ *
+ * Licensed 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.sandesha2.faulttests;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.util.List;
+
+import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.sandesha2.RMMsgContext;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.client.SandeshaClient;
+import org.apache.sandesha2.client.SandeshaClientConstants;
+import org.apache.sandesha2.client.SequenceReport;
+import org.apache.sandesha2.msgreceivers.RMMessageReceiver;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
+import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
+import org.apache.sandesha2.storage.beans.RMDBean;
+import org.apache.sandesha2.util.RangeString;
+import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.wsrm.AckRequested;
+import org.apache.sandesha2.wsrm.CloseSequence;
+import org.apache.sandesha2.wsrm.Identifier;
+import org.apache.sandesha2.wsrm.MessageNumber;
+import org.apache.sandesha2.wsrm.Sequence;
+
+
+public class SequenceTerminatedFaultTest extends SandeshaTestCase {
+
+ private static final String server_repoPath = "target" + File.separator
+ + "repos" + File.separator + "server";
+
+ private static final String server_axis2_xml = "target" + File.separator
+ + "repos" + File.separator + "server" + File.separator
+ + "server_axis2.xml";
+
+ private static ConfigurationContext serverConfigContext;
+
+ private boolean serverStarted = false;
+
+ public SequenceTerminatedFaultTest() {
+ super("SequenceTerminatedFaultTest");
+ }
+
+ public void setUp() throws Exception {
+ super.setUp();
+ if (!serverStarted) {
+ serverConfigContext = startServer(server_repoPath, server_axis2_xml);
+ }
+ serverStarted = true;
+ }
+
+ public void tearDown () throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Sends an application message to the RMD.
+ * The RMD should reject the message with a sequence terminated fault
+ *
+ * @throws Exception
+ */
+ public void testSequenceTerminatedFault() throws Exception {
+ // Open a connection to the endpoint
+ HttpURLConnection connection =
+ FaultTestUtils.getHttpURLConnection("http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService",
+ pingAction);
+
+ StorageManager storageManager =
+ SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
+
+ RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
+
+ String seqID = SandeshaUtil.getUUID();
+
+ // Mockup an RMDBean
+ RMDBean rmdBean = new RMDBean();
+ rmdBean.setSequenceID(seqID);
+ rmdBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ rmdBean.setServerCompletedMessages(new RangeString());
+ // Flag that the sequence is terminated.
+ rmdBean.setTerminated(true);
+
+ // Create a transaction and insert the RMSBean
+ Transaction tran = storageManager.getTransaction();
+
+ rmdBeanMgr.insert(rmdBean);
+
+ tran.commit();
+
+
+ OutputStream tmpOut2 = connection.getOutputStream();
+
+ byte ar[] = getAppMessageAsBytes(seqID);
+ // Send the message to the socket.
+ tmpOut2.write(ar);
+ tmpOut2.flush();
+
+ // Get the response message from the connection
+ String message = FaultTestUtils.retrieveResponseMessage(connection);
+
+ // Check that the fault message isn't null
+ assertNotNull(message);
+
+ // Check that the response contains the Sequence Terminated tag
+ assertTrue(message.indexOf("wsrm:SequenceTerminated") > -1);
+
+ // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the sequence ID specified
+ String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 17, message.indexOf("</wsrm:Identifier>"));
+ assertEquals(seqID, faultID);
+
+ // Disconnect at the end of the test
+ connection.disconnect();
+ }
+
+ /**
+ * Sends a Close message to the RMD.
+ * The RMD should reject the message with a sequence terminated fault
+ *
+ * @throws Exception
+ */
+ public void testSequenceTerminatedOnCloseFault() throws Exception {
+ // Open a connection to the endpoint
+ HttpURLConnection connection =
+ FaultTestUtils.getHttpURLConnection("http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService",
+ Sandesha2Constants.SPEC_2007_02.Actions.ACTION_CLOSE_SEQUENCE);
+
+ StorageManager storageManager =
+ SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
+
+ RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
+
+ String seqID = SandeshaUtil.getUUID();
+
+ // Mockup an RMDBean
+ RMDBean rmdBean = new RMDBean();
+ rmdBean.setSequenceID(seqID);
+ rmdBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ rmdBean.setServerCompletedMessages(new RangeString());
+ // Flag that the sequence is terminated.
+ rmdBean.setTerminated(true);
+
+ // Create a transaction and insert the RMSBean
+ Transaction tran = storageManager.getTransaction();
+
+ rmdBeanMgr.insert(rmdBean);
+
+ tran.commit();
+
+
+ OutputStream tmpOut2 = connection.getOutputStream();
+
+ byte ar[] = getCloseMessageAsBytes(seqID);
+ // Send the message to the socket.
+ tmpOut2.write(ar);
+ tmpOut2.flush();
+
+ // Get the response message from the connection
+ String message = FaultTestUtils.retrieveResponseMessage(connection);
+
+ // Check that the fault message isn't null
+ assertNotNull(message);
+
+ // Check that the response contains the Sequence Terminated tag
+ assertTrue(message.indexOf("wsrm:SequenceTerminated") > -1);
+
+ // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the sequence ID specified
+ String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 17, message.indexOf("</wsrm:Identifier>"));
+ assertEquals(seqID, faultID);
+
+ // Disconnect at the end of the test
+ connection.disconnect();
+ }
+
+ /**
+ * Sends a AckRequest message to the RMD.
+ * The RMD should reject the message with a sequence terminated fault
+ *
+ * @throws Exception
+ */
+ public void testSequenceTerminatedOnAckRequestFault() throws Exception {
+ // Open a connection to the endpoint
+ HttpURLConnection connection =
+ FaultTestUtils.getHttpURLConnection("http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService",
+ Sandesha2Constants.SPEC_2007_02.Actions.ACTION_ACK_REQUEST);
+
+ StorageManager storageManager =
+ SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
+
+ RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
+
+ String seqID = SandeshaUtil.getUUID();
+
+ // Mockup an RMDBean
+ RMDBean rmdBean = new RMDBean();
+ rmdBean.setSequenceID(seqID);
+ rmdBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmdBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ rmdBean.setServerCompletedMessages(new RangeString());
+ // Flag that the sequence is terminated.
+ rmdBean.setTerminated(true);
+
+ // Create a transaction and insert the RMSBean
+ Transaction tran = storageManager.getTransaction();
+
+ rmdBeanMgr.insert(rmdBean);
+
+ tran.commit();
+
+
+ OutputStream tmpOut2 = connection.getOutputStream();
+
+ byte ar[] = getAckRequestMessageAsBytes(seqID);
+ // Send the message to the socket.
+ tmpOut2.write(ar);
+ tmpOut2.flush();
+
+ // Get the response message from the connection
+ String message = FaultTestUtils.retrieveResponseMessage(connection);
+
+ // Check that the fault message isn't null
+ assertNotNull(message);
+
+ // Check that the response contains the Sequence Terminated tag
+ assertTrue(message.indexOf("wsrm:SequenceTerminated") > -1);
+
+ // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the sequence ID specified
+ String faultID = message.substring(message.indexOf("<wsrm:Identifier>") + 17, message.indexOf("</wsrm:Identifier>"));
+ assertEquals(seqID, faultID);
+
+ // Disconnect at the end of the test
+ connection.disconnect();
+ }
+
+ /**
+ * When sending application messages, if the RMD sequence returns a sequence terminated
+ * fault, then the RMS Sequence should be terminated
+ */
+ public void testRMSSequenceTerminatedOnSequenceTerminatedFault() throws Exception {
+ runSequenceTerminated(false, false);
+ }
+
+ /**
+ * When sending application messages, if the RMD sequence returns a sequence terminated
+ * fault, then the RMS Sequence should be terminated.
+ *
+ * Runs at SOAP12 level
+ */
+ public void testRMSSequenceTerminatedOnSequenceTerminatedFaultSOAP12() throws Exception {
+ runSequenceTerminated(false, true);
+ }
+
+ /**
+ * When sending application messages, if the RMD sequence returns a sequence terminated
+ * fault, then the RMS Sequence should be terminated
+ */
+ public void testRMSSequenceTerminatedOnSequenceUnknownFault() throws Exception {
+ runSequenceTerminated(true, false);
+ }
+
+ /**
+ * When sending application messages, if the RMD sequence returns a sequence terminated
+ * fault, then the RMS Sequence should be terminated
+ *
+ * Runs at SOAP12 level
+ */
+ public void testRMSSequenceTerminatedOnSequenceUnknownFaultSOAP12() throws Exception {
+ runSequenceTerminated(true, true);
+ }
+
+ private void runSequenceTerminated(boolean deleteRMSBean, boolean soap12) throws Exception {
+ String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
+
+ String repoPath = "target" + File.separator + "repos" + File.separator + "client";
+ String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
+
+ ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+ Options clientOptions = new Options ();
+ clientOptions.setAction(pingAction);
+ clientOptions.setTo(new EndpointReference (to));
+ clientOptions.setFaultTo(new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
+
+ String sequenceKey = SandeshaUtil.getUUID();
+ clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+ clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_1);
+
+ if (soap12)
+ clientOptions.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+
+ ServiceClient serviceClient = new ServiceClient (configContext,null);
+ serviceClient.setOptions(clientOptions);
+
+ // Send a single ping message
+ serviceClient.fireAndForget(getPingOMBlock("ping1"));
+
+ long limit = System.currentTimeMillis() + waitTime;
+ Error lastError = null;
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ // Check that the sequence has been deleted.
+ StorageManager storageManager =
+ SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
+
+ Transaction tran = storageManager.getTransaction();
+
+ RMDBean finderBean = new RMDBean();
+ finderBean.setTerminated(false);
+ List rmdBeans = storageManager.getRMDBeanMgr().find(finderBean);
+
+ tran.commit();
+
+ lastError = null;
+
+ if (rmdBeans.isEmpty())
+ lastError = new Error("rmdBeans empty " + rmdBeans);
+ else {
+ RMDBean bean = (RMDBean)rmdBeans.get(0);
+ if (!bean.getServerCompletedMessages().getContainedElementsAsNumbersList().contains(new Integer(1))) {
+ tran = storageManager.getTransaction();
+ if (deleteRMSBean) {
+ storageManager.getRMDBeanMgr().delete(bean.getSequenceID());
+ } else {
+ bean.setTerminated(true);
+ storageManager.getRMDBeanMgr().update(bean);
+ }
+ tran.commit();
+ break;
+ }
+
+ lastError = new Error("App message has not arrived");
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ // Send a second application message.
+ serviceClient.fireAndForget(getPingOMBlock("ping2"));
+
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ try {
+ //Check that the outgoing sequence is terminated
+ SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+ assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TERMINATED);
+ assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
+
+ lastError = null;
+ break;
+ } catch(Error e) {
+ lastError = e;
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ configContext.getListenerManager().stop();
+ serviceClient.cleanup();
+
+ }
+
+ /**
+ * Get an application message as bytes
+ *
+ * @return
+ */
+ private byte[] getAppMessageAsBytes(String uuid) throws Exception
+ {
+ SOAPFactory factory = new SOAP11Factory();
+ SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
+
+ // Create a "new" application message
+ MessageContext messageContext = new MessageContext();
+ messageContext.setConfigurationContext(serverConfigContext);
+ messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
+ messageContext.setEnvelope(dummyEnvelope);
+
+ RMMsgContext applicationRMMsg = new RMMsgContext(messageContext);
+
+ // Generate the Sequence field.
+ // -------------------------------
+ String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+
+ Sequence sequence = new Sequence(rmNamespaceValue);
+ MessageNumber msgNumber = new MessageNumber(rmNamespaceValue);
+ msgNumber.setMessageNumber(1);
+ sequence.setMessageNumber(msgNumber);
+ Identifier id1 = new Identifier(rmNamespaceValue);
+ id1.setIndentifer(uuid);
+ sequence.setIdentifier(id1);
+ applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE, sequence);
+ applicationRMMsg.addSOAPEnvelope();
+
+ // --------------------------------------------
+ // Finished generating Sequence part
+
+ // Create an RMSBean so the create sequence message can be created
+ messageContext.setWSAAction(pingAction);
+
+ // Set the AxisOperation to be InOut
+ AxisOperation operation = messageContext.getAxisService().getOperation(Sandesha2Constants.RM_IN_OUT_OPERATION);
+ operation.setMessageReceiver(new RMMessageReceiver());
+ messageContext.setAxisOperation(operation);
+
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+ // Serialize the application message
+ applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
+
+ return outputStream.toByteArray();
+ }
+
+ /**
+ * Get a close message as bytes
+ *
+ * @return
+ */
+ private byte[] getCloseMessageAsBytes(String uuid) throws Exception
+ {
+ SOAPFactory factory = new SOAP11Factory();
+ SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
+
+ // Create a "new" application message
+ MessageContext messageContext = new MessageContext();
+ messageContext.setConfigurationContext(serverConfigContext);
+ messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
+ messageContext.setEnvelope(dummyEnvelope);
+
+ RMMsgContext applicationRMMsg = new RMMsgContext(messageContext);
+
+ // Generate the Close field.
+ // -------------------------------
+ String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+
+ CloseSequence sequence = new CloseSequence(rmNamespaceValue);
+ Identifier id1 = new Identifier(rmNamespaceValue);
+ id1.setIndentifer(uuid);
+ sequence.setIdentifier(id1);
+ applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE, sequence);
+ applicationRMMsg.addSOAPEnvelope();
+
+ // --------------------------------------------
+ // Finished generating Close part
+
+ // Create an RMSBean so the create sequence message can be created
+ messageContext.setWSAAction(pingAction);
+
+ // Set the AxisOperation to be InOut
+ AxisOperation operation = messageContext.getAxisService().getOperation(Sandesha2Constants.RM_IN_OUT_OPERATION);
+ operation.setMessageReceiver(new RMMessageReceiver());
+ messageContext.setAxisOperation(operation);
+
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+ // Serialize the application message
+ applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
+
+ return outputStream.toByteArray();
+ }
+
+ /**
+ * Get a close message as bytes
+ *
+ * @return
+ */
+ private byte[] getAckRequestMessageAsBytes(String uuid) throws Exception
+ {
+ SOAPFactory factory = new SOAP11Factory();
+ SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
+
+ // Create a "new" application message
+ MessageContext messageContext = new MessageContext();
+ messageContext.setConfigurationContext(serverConfigContext);
+ messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
+ messageContext.setEnvelope(dummyEnvelope);
+
+ RMMsgContext applicationRMMsg = new RMMsgContext(messageContext);
+
+ // Generate the Close field.
+ // -------------------------------
+ String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+
+ AckRequested sequence = new AckRequested(rmNamespaceValue);
+ Identifier id1 = new Identifier(rmNamespaceValue);
+ id1.setIndentifer(uuid);
+ sequence.setIdentifier(id1);
+ applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE, sequence);
+ applicationRMMsg.addSOAPEnvelope();
+
+ // --------------------------------------------
+ // Finished generating Close part
+
+ // Create an RMSBean so the create sequence message can be created
+ messageContext.setWSAAction(pingAction);
+
+ // Set the AxisOperation to be InOut
+ AxisOperation operation = messageContext.getAxisService().getOperation(Sandesha2Constants.RM_IN_OUT_OPERATION);
+ operation.setMessageReceiver(new RMMessageReceiver());
+ messageContext.setAxisOperation(operation);
+
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+ // Serialize the application message
+ applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
+
+ return outputStream.toByteArray();
+ }
+
+}
+
+
Propchange: webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTerminatedFaultTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTimedOutTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTimedOutTest.java?view=diff&rev=564061&r1=564060&r2=564061
==============================================================================
--- webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTimedOutTest.java (original)
+++ webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTimedOutTest.java Wed Aug 8 17:51:29 2007
@@ -1,372 +1,372 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.sandesha2.faulttests;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.axis2.Constants;
-import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.axis2.description.AxisOperation;
-import org.apache.axis2.description.AxisService;
-import org.apache.sandesha2.SandeshaTestCase;
-import org.apache.sandesha2.client.SandeshaClient;
-import org.apache.sandesha2.client.SandeshaClientConstants;
-import org.apache.sandesha2.client.SequenceReport;
-import org.apache.sandesha2.policy.SandeshaPolicyBean;
-import org.apache.sandesha2.storage.StorageManager;
-import org.apache.sandesha2.storage.Transaction;
-import org.apache.sandesha2.storage.beans.RMDBean;
-import org.apache.sandesha2.storage.beans.RMSBean;
-import org.apache.sandesha2.util.SandeshaUtil;
-
-public class SequenceTimedOutTest extends SandeshaTestCase {
-
- public SequenceTimedOutTest() {
- super("SequenceTimedOutTest");
- }
-
- public void setUp() throws Exception {
- super.setUp();
- }
-
- public void tearDown() throws Exception {
- super.tearDown();
- }
-
- /**
- * Test to check that when a sequence times out - that we alert the client to the
- * fact that the sequence has now gone.
- *
- * @throws Exception
- */
- public void testSOAP11CreateSequenceRefusedInboundFault () throws Exception {
-
- String to = "http://127.0.0.1:" + 9999 + "/axis2/services/RMSampleService";
-
- String repoPath = "target" + File.separator + "repos" + File.separator + "client";
- String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
-
- ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
-
- Options clientOptions = new Options ();
- clientOptions.setAction(echoAction);
- clientOptions.setTo(new EndpointReference (to));
-
- String sequenceKey = SandeshaUtil.getUUID();
- clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
-
- ServiceClient serviceClient = new ServiceClient (configContext,null);
-
-
- HashMap axisServices = configContext.getAxisConfiguration().getServices();
-
- AxisService service = null;
- Iterator values = axisServices.values().iterator();
- while(values.hasNext())
- service = (AxisService)values.next();
-
- // Set the Sequence timout property to 1 second.
- Iterator operations = service.getOperations();
-
- while (operations.hasNext())
- {
- AxisOperation op = (AxisOperation) operations.next();
- SandeshaPolicyBean propertyBean =
- SandeshaUtil.getPropertyBean(op);
-
- // Indicate that the sequence should timeout after 1 second
- if (propertyBean != null)
- propertyBean.setInactiveTimeoutInterval(1, "seconds");
- }
-
- // Set a bad acks to so the CreateSequence will be refused.
- String acksTo = AddressingConstants.Final.WSA_NONE_URI;
- clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
-
- clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
- clientOptions.setUseSeparateListener(true);
- clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, "true");
- serviceClient.setOptions(clientOptions);
-
- TestCallback callback1 = new TestCallback ("Callback 1");
- serviceClient.sendReceiveNonBlocking (getEchoOMBlock("echo1",sequenceKey),callback1);
-
- long limit = System.currentTimeMillis() + waitTime;
- Error lastError = null;
- while(System.currentTimeMillis() < limit) {
- Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
-
- try {
- //assertions for the out sequence.
- SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
- assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TIMED_OUT);
- assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
-
- assertTrue(callback1.isErrorReported());
- assertEquals(callback1.getResult(),null);
-
- lastError = null;
- break;
- } catch(Error e) {
- lastError = e;
- }
- }
-
- if(lastError != null) throw lastError;
-
- configContext.getListenerManager().stop();
- serviceClient.cleanup();
-
- }
-
- /**
- * Test to check that when a sequence times out - it gets deleted after the timeout interval.
- *
- * @throws Exception
- */
- public void testRMSSequenceTimeoutSequenceDeleted () throws Exception {
-
- String to = "http://127.0.0.1:" + 9999 + "/axis2/services/RMSampleService";
-
- String repoPath = "target" + File.separator + "repos" + File.separator + "client";
- String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
-
- ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
-
- Options clientOptions = new Options ();
- clientOptions.setAction(echoAction);
- clientOptions.setTo(new EndpointReference (to));
-
- String sequenceKey = SandeshaUtil.getUUID();
- clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
-
- ServiceClient serviceClient = new ServiceClient (configContext,null);
-
- HashMap axisServices = configContext.getAxisConfiguration().getServices();
-
- AxisService service = null;
- Iterator values = axisServices.values().iterator();
- while(values.hasNext())
- service = (AxisService)values.next();
-
- // Set the Sequence timout property to 1 second.
- Iterator operations = service.getOperations();
-
- while (operations.hasNext())
- {
- AxisOperation op = (AxisOperation) operations.next();
- SandeshaPolicyBean propertyBean =
- SandeshaUtil.getPropertyBean(op);
-
- // Indicate that the sequence should timeout after 1 second
- // And that it should be deleted after 2 seconds
- if (propertyBean != null) {
- propertyBean.setInactiveTimeoutInterval(1, "seconds");
- propertyBean.setSequenceRemovalTimeoutInterval(2, "seconds");
- }
- }
-
- // Set a bad acks to so the CreateSequence will be refused.
- String acksTo = AddressingConstants.Final.WSA_NONE_URI;
- clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
-
- clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
- clientOptions.setUseSeparateListener(true);
- clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, "true");
- serviceClient.setOptions(clientOptions);
-
- TestCallback callback1 = new TestCallback ("Callback 1");
- serviceClient.sendReceiveNonBlocking (getEchoOMBlock("echo1",sequenceKey),callback1);
-
- long limit = System.currentTimeMillis() + waitTime;
- Error lastError = null;
- while(System.currentTimeMillis() < limit) {
- Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
-
- try {
- //assertions for the out sequence.
- SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
- assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TIMED_OUT);
- assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
-
- assertTrue(callback1.isErrorReported());
- assertEquals(callback1.getResult(),null);
-
- lastError = null;
- break;
- } catch(Error e) {
- lastError = e;
- }
- }
-
- if(lastError != null) throw lastError;
-
- while(System.currentTimeMillis() < limit) {
- Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
-
- // Check that the sequence has been deleted.
- StorageManager storageManager =
- SandeshaUtil.getSandeshaStorageManager(configContext, configContext.getAxisConfiguration());
-
- Transaction tran = storageManager.getTransaction();
-
- RMSBean finderBean = new RMSBean();
- List rmsBeans = storageManager.getRMSBeanMgr().find(finderBean);
-
- tran.commit();
-
- lastError = null;
-
- if (!rmsBeans.isEmpty())
- lastError = new Error("rmsBeans not empty " + rmsBeans);
- else
- break;
-
- }
-
- if(lastError != null) throw lastError;
-
- configContext.getListenerManager().stop();
- serviceClient.cleanup();
-
- }
-
- private static final String server_repoPath = "target" + File.separator + "repos" + File.separator + "server";
- private static final String server_axis2_xml = "target" + File.separator + "repos" + File.separator + "server" + File.separator + "server_axis2.xml";
-
- /**
- * Checks that an RMDSequence is terminated once the timeout interval arrives.
- * Also that the RMDBean is deleted once the SequenceRemovalTimeout arrives.
- */
- public void testRMDSequenceTerminatedDeleted() throws Exception{
- ConfigurationContext serverConfigContext = startServer(server_repoPath, server_axis2_xml);
-
- String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
-
- String repoPath = "target" + File.separator + "repos" + File.separator + "client";
- String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
-
- ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
-
- Options clientOptions = new Options ();
- clientOptions.setAction(pingAction);
- clientOptions.setTo(new EndpointReference (to));
-
- String sequenceKey = SandeshaUtil.getUUID();
- clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
-
- ServiceClient serviceClient = new ServiceClient (configContext,null);
- serviceClient.setOptions(clientOptions);
-
- HashMap axisServices = serverConfigContext.getAxisConfiguration().getServices();
-
- AxisService service = null;
- Iterator values = axisServices.values().iterator();
- while(values.hasNext())
- service = (AxisService)values.next();
-
- // Set the Sequence timout property to 1 second.
- Iterator operations = service.getOperations();
-
- while (operations.hasNext())
- {
- AxisOperation op = (AxisOperation) operations.next();
- SandeshaPolicyBean propertyBean =
- SandeshaUtil.getPropertyBean(op);
-
- // Indicate that the sequence should timeout after 2 second
- // And that it should be deleted after 2 seconds
- if (propertyBean != null) {
- propertyBean.setInactiveTimeoutInterval(2, "seconds");
- propertyBean.setSequenceRemovalTimeoutInterval(2, "seconds");
- }
- }
-
- // Send a single ping message
- serviceClient.fireAndForget(getPingOMBlock("ping1"));
-
- long limit = System.currentTimeMillis() + waitTime;
- Error lastError = null;
- while(System.currentTimeMillis() < limit) {
- Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
-
- // Check that the sequence has been deleted.
- StorageManager storageManager =
- SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
-
- Transaction tran = storageManager.getTransaction();
-
- RMDBean finderBean = new RMDBean();
- List rmdBeans = storageManager.getRMDBeanMgr().find(finderBean);
-
- tran.commit();
-
- lastError = null;
-
- if (rmdBeans.isEmpty())
- lastError = new Error("rmdBeans empty " + rmdBeans);
- else {
- RMDBean bean = (RMDBean)rmdBeans.get(0);
- if (bean.isTerminated())
- break;
-
- lastError = new Error("RMDBean not deleted " + bean);
- }
- }
-
- if(lastError != null) throw lastError;
-
- while(System.currentTimeMillis() < limit) {
- Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
-
- // Check that the sequence has been deleted.
- StorageManager storageManager =
- SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
-
- Transaction tran = storageManager.getTransaction();
-
- RMDBean finderBean = new RMDBean();
- List rmdBeans = storageManager.getRMDBeanMgr().find(finderBean);
-
- tran.commit();
-
- lastError = null;
-
- if (!rmdBeans.isEmpty())
- lastError = new Error("rmdBeans not empty " + rmdBeans);
- else
- break;
- }
-
- if(lastError != null) throw lastError;
-
- configContext.getListenerManager().stop();
- serviceClient.cleanup();
-
- }
-
-}
-
-
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.sandesha2.faulttests;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.client.SandeshaClient;
+import org.apache.sandesha2.client.SandeshaClientConstants;
+import org.apache.sandesha2.client.SequenceReport;
+import org.apache.sandesha2.policy.SandeshaPolicyBean;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
+import org.apache.sandesha2.storage.beans.RMDBean;
+import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.util.SandeshaUtil;
+
+public class SequenceTimedOutTest extends SandeshaTestCase {
+
+ public SequenceTimedOutTest() {
+ super("SequenceTimedOutTest");
+ }
+
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Test to check that when a sequence times out - that we alert the client to the
+ * fact that the sequence has now gone.
+ *
+ * @throws Exception
+ */
+ public void testSOAP11CreateSequenceRefusedInboundFault () throws Exception {
+
+ String to = "http://127.0.0.1:" + 9999 + "/axis2/services/RMSampleService";
+
+ String repoPath = "target" + File.separator + "repos" + File.separator + "client";
+ String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
+
+ ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+ Options clientOptions = new Options ();
+ clientOptions.setAction(echoAction);
+ clientOptions.setTo(new EndpointReference (to));
+
+ String sequenceKey = SandeshaUtil.getUUID();
+ clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+
+ ServiceClient serviceClient = new ServiceClient (configContext,null);
+
+
+ HashMap axisServices = configContext.getAxisConfiguration().getServices();
+
+ AxisService service = null;
+ Iterator values = axisServices.values().iterator();
+ while(values.hasNext())
+ service = (AxisService)values.next();
+
+ // Set the Sequence timout property to 1 second.
+ Iterator operations = service.getOperations();
+
+ while (operations.hasNext())
+ {
+ AxisOperation op = (AxisOperation) operations.next();
+ SandeshaPolicyBean propertyBean =
+ SandeshaUtil.getPropertyBean(op);
+
+ // Indicate that the sequence should timeout after 1 second
+ if (propertyBean != null)
+ propertyBean.setInactiveTimeoutInterval(1, "seconds");
+ }
+
+ // Set a bad acks to so the CreateSequence will be refused.
+ String acksTo = AddressingConstants.Final.WSA_NONE_URI;
+ clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
+
+ clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+ clientOptions.setUseSeparateListener(true);
+ clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, "true");
+ serviceClient.setOptions(clientOptions);
+
+ TestCallback callback1 = new TestCallback ("Callback 1");
+ serviceClient.sendReceiveNonBlocking (getEchoOMBlock("echo1",sequenceKey),callback1);
+
+ long limit = System.currentTimeMillis() + waitTime;
+ Error lastError = null;
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ try {
+ //assertions for the out sequence.
+ SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+ assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TIMED_OUT);
+ assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
+
+ assertTrue(callback1.isErrorReported());
+ assertEquals(callback1.getResult(),null);
+
+ lastError = null;
+ break;
+ } catch(Error e) {
+ lastError = e;
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ configContext.getListenerManager().stop();
+ serviceClient.cleanup();
+
+ }
+
+ /**
+ * Test to check that when a sequence times out - it gets deleted after the timeout interval.
+ *
+ * @throws Exception
+ */
+ public void testRMSSequenceTimeoutSequenceDeleted () throws Exception {
+
+ String to = "http://127.0.0.1:" + 9999 + "/axis2/services/RMSampleService";
+
+ String repoPath = "target" + File.separator + "repos" + File.separator + "client";
+ String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
+
+ ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+ Options clientOptions = new Options ();
+ clientOptions.setAction(echoAction);
+ clientOptions.setTo(new EndpointReference (to));
+
+ String sequenceKey = SandeshaUtil.getUUID();
+ clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+
+ ServiceClient serviceClient = new ServiceClient (configContext,null);
+
+ HashMap axisServices = configContext.getAxisConfiguration().getServices();
+
+ AxisService service = null;
+ Iterator values = axisServices.values().iterator();
+ while(values.hasNext())
+ service = (AxisService)values.next();
+
+ // Set the Sequence timout property to 1 second.
+ Iterator operations = service.getOperations();
+
+ while (operations.hasNext())
+ {
+ AxisOperation op = (AxisOperation) operations.next();
+ SandeshaPolicyBean propertyBean =
+ SandeshaUtil.getPropertyBean(op);
+
+ // Indicate that the sequence should timeout after 1 second
+ // And that it should be deleted after 2 seconds
+ if (propertyBean != null) {
+ propertyBean.setInactiveTimeoutInterval(1, "seconds");
+ propertyBean.setSequenceRemovalTimeoutInterval(2, "seconds");
+ }
+ }
+
+ // Set a bad acks to so the CreateSequence will be refused.
+ String acksTo = AddressingConstants.Final.WSA_NONE_URI;
+ clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
+
+ clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+ clientOptions.setUseSeparateListener(true);
+ clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, "true");
+ serviceClient.setOptions(clientOptions);
+
+ TestCallback callback1 = new TestCallback ("Callback 1");
+ serviceClient.sendReceiveNonBlocking (getEchoOMBlock("echo1",sequenceKey),callback1);
+
+ long limit = System.currentTimeMillis() + waitTime;
+ Error lastError = null;
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ try {
+ //assertions for the out sequence.
+ SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+ assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TIMED_OUT);
+ assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
+
+ assertTrue(callback1.isErrorReported());
+ assertEquals(callback1.getResult(),null);
+
+ lastError = null;
+ break;
+ } catch(Error e) {
+ lastError = e;
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ // Check that the sequence has been deleted.
+ StorageManager storageManager =
+ SandeshaUtil.getSandeshaStorageManager(configContext, configContext.getAxisConfiguration());
+
+ Transaction tran = storageManager.getTransaction();
+
+ RMSBean finderBean = new RMSBean();
+ List rmsBeans = storageManager.getRMSBeanMgr().find(finderBean);
+
+ tran.commit();
+
+ lastError = null;
+
+ if (!rmsBeans.isEmpty())
+ lastError = new Error("rmsBeans not empty " + rmsBeans);
+ else
+ break;
+
+ }
+
+ if(lastError != null) throw lastError;
+
+ configContext.getListenerManager().stop();
+ serviceClient.cleanup();
+
+ }
+
+ private static final String server_repoPath = "target" + File.separator + "repos" + File.separator + "server";
+ private static final String server_axis2_xml = "target" + File.separator + "repos" + File.separator + "server" + File.separator + "server_axis2.xml";
+
+ /**
+ * Checks that an RMDSequence is terminated once the timeout interval arrives.
+ * Also that the RMDBean is deleted once the SequenceRemovalTimeout arrives.
+ */
+ public void testRMDSequenceTerminatedDeleted() throws Exception{
+ ConfigurationContext serverConfigContext = startServer(server_repoPath, server_axis2_xml);
+
+ String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
+
+ String repoPath = "target" + File.separator + "repos" + File.separator + "client";
+ String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
+
+ ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+ Options clientOptions = new Options ();
+ clientOptions.setAction(pingAction);
+ clientOptions.setTo(new EndpointReference (to));
+
+ String sequenceKey = SandeshaUtil.getUUID();
+ clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+
+ ServiceClient serviceClient = new ServiceClient (configContext,null);
+ serviceClient.setOptions(clientOptions);
+
+ HashMap axisServices = serverConfigContext.getAxisConfiguration().getServices();
+
+ AxisService service = null;
+ Iterator values = axisServices.values().iterator();
+ while(values.hasNext())
+ service = (AxisService)values.next();
+
+ // Set the Sequence timout property to 1 second.
+ Iterator operations = service.getOperations();
+
+ while (operations.hasNext())
+ {
+ AxisOperation op = (AxisOperation) operations.next();
+ SandeshaPolicyBean propertyBean =
+ SandeshaUtil.getPropertyBean(op);
+
+ // Indicate that the sequence should timeout after 2 second
+ // And that it should be deleted after 2 seconds
+ if (propertyBean != null) {
+ propertyBean.setInactiveTimeoutInterval(2, "seconds");
+ propertyBean.setSequenceRemovalTimeoutInterval(2, "seconds");
+ }
+ }
+
+ // Send a single ping message
+ serviceClient.fireAndForget(getPingOMBlock("ping1"));
+
+ long limit = System.currentTimeMillis() + waitTime;
+ Error lastError = null;
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ // Check that the sequence has been deleted.
+ StorageManager storageManager =
+ SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
+
+ Transaction tran = storageManager.getTransaction();
+
+ RMDBean finderBean = new RMDBean();
+ List rmdBeans = storageManager.getRMDBeanMgr().find(finderBean);
+
+ tran.commit();
+
+ lastError = null;
+
+ if (rmdBeans.isEmpty())
+ lastError = new Error("rmdBeans empty " + rmdBeans);
+ else {
+ RMDBean bean = (RMDBean)rmdBeans.get(0);
+ if (bean.isTerminated())
+ break;
+
+ lastError = new Error("RMDBean not deleted " + bean);
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ // Check that the sequence has been deleted.
+ StorageManager storageManager =
+ SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
+
+ Transaction tran = storageManager.getTransaction();
+
+ RMDBean finderBean = new RMDBean();
+ List rmdBeans = storageManager.getRMDBeanMgr().find(finderBean);
+
+ tran.commit();
+
+ lastError = null;
+
+ if (!rmdBeans.isEmpty())
+ lastError = new Error("rmdBeans not empty " + rmdBeans);
+ else
+ break;
+ }
+
+ if(lastError != null) throw lastError;
+
+ configContext.getListenerManager().stop();
+ serviceClient.cleanup();
+
+ }
+
+}
+
+
Propchange: webservices/sandesha/branches/sandesha2/java/1_3/modules/tests/src/test/java/org/apache/sandesha2/faulttests/SequenceTimedOutTest.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org