Setting correct svn:eol-style.

git-svn-id: https://svn.apache.org/repos/asf/axis/axis2/java/sandesha/trunk@1435837 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java b/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java
index a0bc97e..98d6118 100644
--- a/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java
+++ b/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java
@@ -1,313 +1,313 @@
-/*

- * Copyright 2007 The Apache Software Foundation.

- * Copyright 2007 International Business Machines Corp.

- *

- * 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;

-

-import java.io.File;

-import java.util.HashSet;

-import java.util.Iterator;

-import java.util.List;

-

-import junit.framework.AssertionFailedError;

-

-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.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.util.SandeshaUtil;

-

-public class RMScenariosTest extends SandeshaTestCase {

-

-	private boolean serverStarted = false;

-	protected ConfigurationContext configContext = null;

-

-	protected String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";

-

-	protected String repoPath = "target" + File.separator + "repos" + File.separator + "persistence-server";

-	protected String axis2_xml = "target" + File.separator + "repos" + File.separator + "persistence-server" + File.separator + "server_axis2.xml";

-

-	protected String repoPathClient = "target" + File.separator + "repos" + File.separator + "persistence-client";

-	protected String axis2_xmlClient = "target" + File.separator + "repos" + File.separator + "persistence-client" + File.separator + "client_axis2.xml";

-

-	public RMScenariosTest() {

-		super("RMScenariosTest");

-	}

-

-	public RMScenariosTest(String name) {

-		super(name);

-	}

-

-	public void setUp() throws Exception {

-		super.setUp();

-

-		if (!serverStarted) {

-			startServer(repoPath, axis2_xml);

-			configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPathClient, axis2_xmlClient);

-		}

-		serverStarted = true;

-	}

-

-	/**

-	 * Override the teardown processing

-	 */

-	public void tearDown() throws Exception {

-		super.tearDown();

-	}

-

-	public void testPing() throws Exception {

-		// Run a ping test with sync acks

-		runPing(false, false);

-

-		// Run a ping test with async acks

-		runPing(true, true);

-	}

-

-	public void testAsyncEchoWithSyncAck() throws Exception {

-		// Test async echo with sync acks

-		Options clientOptions = new Options();

-		runEcho(clientOptions, true, false, false,true,true);

-	}

-	

-	public void testAsyncEchoWithAsyncAck() throws Exception {

-		// Test async echo with async acks

-		Options clientOptions = new Options();

-		clientOptions = new Options();

-		runEcho(clientOptions, true, true, false,true,true);

-	}

-	

-	public void testAsyncEchoWithAyncAckAndOffer() throws Exception {

-		// Test async echo with async acks and offer

-		Options clientOptions = new Options();

-		clientOptions = new Options();

-		clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,SandeshaUtil.getUUID());

-		runEcho(clientOptions, true, true, false,true,true);

-	}

-		

-	public void testSyncEchoWithOffer() throws Exception {

-		// Test sync echo with an offer, and the 1.1 spec

-		Options clientOptions = new Options();

-		clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID, SandeshaUtil.getUUID());

-		clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION, Sandesha2Constants.SPEC_VERSIONS.v1_1);

-		runEcho(clientOptions, false, false, true, true, false);

-

-//		// Test sync echo with an offer, and the 1.0 spec. The offer is not automatic as this

-//		// is a client that hasn't been built from WSDL. If the user's operations had been

-//		// modelled properly then the offer would happen automatically.

-//		clientOptions = new Options();

-//		clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,SandeshaUtil.getUUID());

-//		clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_0);

-//		runEcho(clientOptions, false, false, true,false,false);

-	}

-

-	public void testSyncEcho() throws Exception {

-		// Test sync echo with no offer, and the 1.1 spec

-		Options clientOptions = new Options();

-		clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION, Sandesha2Constants.SPEC_VERSIONS.v1_1);

-		runEcho(clientOptions, false, false, true, true, true);

-	}

-

-	public void runPing(boolean asyncAcks, boolean stopListener) throws Exception {

-

-		Options clientOptions = new Options();

-

-		ServiceClient serviceClient = new ServiceClient(configContext, null);

-		serviceClient.setOptions(clientOptions);

-

-		String sequenceKey = SandeshaUtil.getUUID();

-

-		clientOptions.setAction(pingAction);

-		clientOptions.setTo(new EndpointReference(to));

-		clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY, sequenceKey);

-		clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, Constants.VALUE_TRUE);

-

-		if (asyncAcks) {

-			clientOptions.setUseSeparateListener(true);

-		}

-

-		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

-

-			try {

-				SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);

-				System.out.println("Checking Outbound Sequence: " + sequenceReport.getSequenceID());

-				assertTrue("Checking completed messages", sequenceReport.getCompletedMessages().contains(new Long(1)));

-				assertEquals("Checking sequence terminated", SequenceReport.SEQUENCE_STATUS_TERMINATED, sequenceReport.getSequenceStatus());

-				assertEquals("Checking sequence direction", SequenceReport.SEQUENCE_DIRECTION_OUT, sequenceReport.getSequenceDirection());

-

-				lastError = null;

-				break;

-			} catch (Error e) {

-				e.printStackTrace();

-				System.out.println("Possible error:" + e);

-				lastError = e;

-			}

-		}

-

-		if (lastError != null) throw lastError;

-

-		if (stopListener)

-			configContext.getListenerManager().stop();

-

-		serviceClient.cleanup();

-

-	}

-

-	public void runEcho(Options clientOptions, boolean asyncReply, boolean asyncAcks, boolean explicitTermination, boolean checkInboundTermination, boolean stopListener) throws Exception {

-

-		String sequenceKey = SandeshaUtil.getUUID();

-

-		ServiceClient serviceClient = new ServiceClient(configContext, null);

-		serviceClient.setOptions(clientOptions);

-

-		clientOptions.setAction(echoAction);

-		clientOptions.setTo(new EndpointReference(to));

-		clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY, sequenceKey);

-		clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);

-

-		if (asyncReply || asyncAcks) {

-			clientOptions.setUseSeparateListener(true);

-

-			if (asyncAcks) {

-				String acksTo = serviceClient.getMyEPR(Constants.TRANSPORT_HTTP).getAddress();

-				clientOptions.setProperty(SandeshaClientConstants.AcksTo, acksTo);

-			} else {

-				String acksTo = AddressingConstants.Final.WSA_ANONYMOUS_URL;

-				clientOptions.setProperty(SandeshaClientConstants.AcksTo, acksTo);

-			}

-		}

-

-		if (asyncAcks) {

-			String acksTo = serviceClient.getMyEPR(Constants.TRANSPORT_HTTP).getAddress();

-			clientOptions.setProperty(SandeshaClientConstants.AcksTo, acksTo);

-		} else {

-			String acksTo = AddressingConstants.Final.WSA_ANONYMOUS_URL;

-			clientOptions.setProperty(SandeshaClientConstants.AcksTo, acksTo);

-		}

-

-		// Establish a baseline count for inbound sequences

-		List<SequenceReport> oldIncomingReports = SandeshaClient.getIncomingSequenceReports(configContext);

-

-		TestCallback callback1 = new TestCallback("Callback 1");

-		serviceClient.sendReceiveNonBlocking(getEchoOMBlock("echo1", sequenceKey), callback1);

-

-		TestCallback callback2 = new TestCallback("Callback 2");

-		serviceClient.sendReceiveNonBlocking(getEchoOMBlock("echo2", sequenceKey), callback2);

-

-		if (!explicitTermination

-				&&

-				!Sandesha2Constants.SPEC_VERSIONS.v1_1.equals(clientOptions.getProperty(SandeshaClientConstants.RM_SPEC_VERSION)))

-		{

-

-			clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, Constants.VALUE_TRUE);

-		}

-

-		TestCallback callback3 = new TestCallback("Callback 3");

-		serviceClient.sendReceiveNonBlocking(getEchoOMBlock("echo3", sequenceKey), callback3);

-

-		if (explicitTermination) {

-			Thread.sleep(10000);

-			SandeshaClient.terminateSequence(serviceClient);

-		}

-

-		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 outgoingSequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);

-				System.out.println("Checking Outbound Sequence: " + outgoingSequenceReport.getSequenceID());

-				assertTrue("Outbound message #1", outgoingSequenceReport.getCompletedMessages().contains(new Long(1)));

-				assertTrue("Outbound message #2", outgoingSequenceReport.getCompletedMessages().contains(new Long(2)));

-				assertTrue("Outbound message #3", outgoingSequenceReport.getCompletedMessages().contains(new Long(3)));

-				assertEquals("Outbound sequence status: TERMINATED", SequenceReport.SEQUENCE_STATUS_TERMINATED, outgoingSequenceReport.getSequenceStatus());

-				assertEquals("Outbound sequence direction: OUT", SequenceReport.SEQUENCE_DIRECTION_OUT, outgoingSequenceReport.getSequenceDirection());

-

-				//assertions for the inbound sequence. The one we care about is a new sequence,

-				//so it will not exist in the oldSequences list.

-				List<SequenceReport> incomingSequences = SandeshaClient.getIncomingSequenceReports(configContext);

-				SequenceReport incomingSequenceReport = getNewReport(incomingSequences, oldIncomingReports);

-				System.out.println("Checking Inbound Sequence: " + incomingSequenceReport.getSequenceID());

-				String offer = (String) clientOptions.getProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID);

-				if (offer != null) assertEquals("Inbound seq id", offer, incomingSequenceReport.getSequenceID());

-				assertEquals("Inbound message count", 3, incomingSequenceReport.getCompletedMessages().size());

-				assertTrue("Inbound message #1", incomingSequenceReport.getCompletedMessages().contains(new Long(1)));

-				assertTrue("Inbound message #2", incomingSequenceReport.getCompletedMessages().contains(new Long(2)));

-				assertTrue("Inbound message #3", incomingSequenceReport.getCompletedMessages().contains(new Long(3)));

-

-				if (checkInboundTermination)

-					assertEquals("Inbound sequence status: TERMINATED", SequenceReport.SEQUENCE_STATUS_TERMINATED, incomingSequenceReport.getSequenceStatus());

-

-				assertEquals("Inbound sequence direction: IN", SequenceReport.SEQUENCE_DIRECTION_IN, incomingSequenceReport.getSequenceDirection());

-

-				assertTrue("Callback #1", callback1.isComplete());

-				assertEquals("Callback #1 data", "echo1", callback1.getResult());

-

-				assertTrue("Callback #2", callback2.isComplete());

-				assertEquals("Callback #2 data", "echo1echo2", callback2.getResult());

-

-				assertTrue("Callback #3", callback3.isComplete());

-				assertEquals("Callback #3 data", "echo1echo2echo3", callback3.getResult());

-

-				lastError = null;

-				break;

-			} catch (Error e) {

-				e.printStackTrace();

-				System.out.println("Possible error:" + e);

-				lastError = e;

-			}

-		}

-		if (lastError != null) throw lastError;

-

-		if (stopListener)

-			configContext.getListenerManager().stop();

-

-		serviceClient.cleanup();

-	}

-

-	// Scan through lists of old and new incoming sequences, to find the sequence that

-	// was established by this test. Note that some of the old sequences may have timed out.

-	private SequenceReport getNewReport(List<SequenceReport> incomingSequences, List<SequenceReport> oldIncomingReports) {

-		HashSet<String> sequenceIds = new HashSet<String>();

-		for (Iterator<SequenceReport> oldSequences = oldIncomingReports.iterator(); oldSequences.hasNext();) {

-			SequenceReport report = (SequenceReport) oldSequences.next();

-			sequenceIds.add(report.getSequenceID());

-		}

-		for (Iterator<SequenceReport> currentSequences = incomingSequences.iterator(); currentSequences.hasNext();) {

-			SequenceReport report = (SequenceReport) currentSequences.next();

-			if (!sequenceIds.contains(report.getSequenceID())) {

-				return report;

-			}

-		}

-		throw new AssertionFailedError("Failed to find a new reply sequence");

-	}

-

-

-}

+/*
+ * Copyright 2007 The Apache Software Foundation.
+ * Copyright 2007 International Business Machines Corp.
+ *
+ * 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;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.AssertionFailedError;
+
+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.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.util.SandeshaUtil;
+
+public class RMScenariosTest extends SandeshaTestCase {
+
+	private boolean serverStarted = false;
+	protected ConfigurationContext configContext = null;
+
+	protected String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
+
+	protected String repoPath = "target" + File.separator + "repos" + File.separator + "persistence-server";
+	protected String axis2_xml = "target" + File.separator + "repos" + File.separator + "persistence-server" + File.separator + "server_axis2.xml";
+
+	protected String repoPathClient = "target" + File.separator + "repos" + File.separator + "persistence-client";
+	protected String axis2_xmlClient = "target" + File.separator + "repos" + File.separator + "persistence-client" + File.separator + "client_axis2.xml";
+
+	public RMScenariosTest() {
+		super("RMScenariosTest");
+	}
+
+	public RMScenariosTest(String name) {
+		super(name);
+	}
+
+	public void setUp() throws Exception {
+		super.setUp();
+
+		if (!serverStarted) {
+			startServer(repoPath, axis2_xml);
+			configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPathClient, axis2_xmlClient);
+		}
+		serverStarted = true;
+	}
+
+	/**
+	 * Override the teardown processing
+	 */
+	public void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	public void testPing() throws Exception {
+		// Run a ping test with sync acks
+		runPing(false, false);
+
+		// Run a ping test with async acks
+		runPing(true, true);
+	}
+
+	public void testAsyncEchoWithSyncAck() throws Exception {
+		// Test async echo with sync acks
+		Options clientOptions = new Options();
+		runEcho(clientOptions, true, false, false,true,true);
+	}
+	
+	public void testAsyncEchoWithAsyncAck() throws Exception {
+		// Test async echo with async acks
+		Options clientOptions = new Options();
+		clientOptions = new Options();
+		runEcho(clientOptions, true, true, false,true,true);
+	}
+	
+	public void testAsyncEchoWithAyncAckAndOffer() throws Exception {
+		// Test async echo with async acks and offer
+		Options clientOptions = new Options();
+		clientOptions = new Options();
+		clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,SandeshaUtil.getUUID());
+		runEcho(clientOptions, true, true, false,true,true);
+	}
+		
+	public void testSyncEchoWithOffer() throws Exception {
+		// Test sync echo with an offer, and the 1.1 spec
+		Options clientOptions = new Options();
+		clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID, SandeshaUtil.getUUID());
+		clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION, Sandesha2Constants.SPEC_VERSIONS.v1_1);
+		runEcho(clientOptions, false, false, true, true, false);
+
+//		// Test sync echo with an offer, and the 1.0 spec. The offer is not automatic as this
+//		// is a client that hasn't been built from WSDL. If the user's operations had been
+//		// modelled properly then the offer would happen automatically.
+//		clientOptions = new Options();
+//		clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,SandeshaUtil.getUUID());
+//		clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_0);
+//		runEcho(clientOptions, false, false, true,false,false);
+	}
+
+	public void testSyncEcho() throws Exception {
+		// Test sync echo with no offer, and the 1.1 spec
+		Options clientOptions = new Options();
+		clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION, Sandesha2Constants.SPEC_VERSIONS.v1_1);
+		runEcho(clientOptions, false, false, true, true, true);
+	}
+
+	public void runPing(boolean asyncAcks, boolean stopListener) throws Exception {
+
+		Options clientOptions = new Options();
+
+		ServiceClient serviceClient = new ServiceClient(configContext, null);
+		serviceClient.setOptions(clientOptions);
+
+		String sequenceKey = SandeshaUtil.getUUID();
+
+		clientOptions.setAction(pingAction);
+		clientOptions.setTo(new EndpointReference(to));
+		clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY, sequenceKey);
+		clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, Constants.VALUE_TRUE);
+
+		if (asyncAcks) {
+			clientOptions.setUseSeparateListener(true);
+		}
+
+		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
+
+			try {
+				SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+				System.out.println("Checking Outbound Sequence: " + sequenceReport.getSequenceID());
+				assertTrue("Checking completed messages", sequenceReport.getCompletedMessages().contains(new Long(1)));
+				assertEquals("Checking sequence terminated", SequenceReport.SEQUENCE_STATUS_TERMINATED, sequenceReport.getSequenceStatus());
+				assertEquals("Checking sequence direction", SequenceReport.SEQUENCE_DIRECTION_OUT, sequenceReport.getSequenceDirection());
+
+				lastError = null;
+				break;
+			} catch (Error e) {
+				e.printStackTrace();
+				System.out.println("Possible error:" + e);
+				lastError = e;
+			}
+		}
+
+		if (lastError != null) throw lastError;
+
+		if (stopListener)
+			configContext.getListenerManager().stop();
+
+		serviceClient.cleanup();
+
+	}
+
+	public void runEcho(Options clientOptions, boolean asyncReply, boolean asyncAcks, boolean explicitTermination, boolean checkInboundTermination, boolean stopListener) throws Exception {
+
+		String sequenceKey = SandeshaUtil.getUUID();
+
+		ServiceClient serviceClient = new ServiceClient(configContext, null);
+		serviceClient.setOptions(clientOptions);
+
+		clientOptions.setAction(echoAction);
+		clientOptions.setTo(new EndpointReference(to));
+		clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY, sequenceKey);
+		clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+
+		if (asyncReply || asyncAcks) {
+			clientOptions.setUseSeparateListener(true);
+
+			if (asyncAcks) {
+				String acksTo = serviceClient.getMyEPR(Constants.TRANSPORT_HTTP).getAddress();
+				clientOptions.setProperty(SandeshaClientConstants.AcksTo, acksTo);
+			} else {
+				String acksTo = AddressingConstants.Final.WSA_ANONYMOUS_URL;
+				clientOptions.setProperty(SandeshaClientConstants.AcksTo, acksTo);
+			}
+		}
+
+		if (asyncAcks) {
+			String acksTo = serviceClient.getMyEPR(Constants.TRANSPORT_HTTP).getAddress();
+			clientOptions.setProperty(SandeshaClientConstants.AcksTo, acksTo);
+		} else {
+			String acksTo = AddressingConstants.Final.WSA_ANONYMOUS_URL;
+			clientOptions.setProperty(SandeshaClientConstants.AcksTo, acksTo);
+		}
+
+		// Establish a baseline count for inbound sequences
+		List<SequenceReport> oldIncomingReports = SandeshaClient.getIncomingSequenceReports(configContext);
+
+		TestCallback callback1 = new TestCallback("Callback 1");
+		serviceClient.sendReceiveNonBlocking(getEchoOMBlock("echo1", sequenceKey), callback1);
+
+		TestCallback callback2 = new TestCallback("Callback 2");
+		serviceClient.sendReceiveNonBlocking(getEchoOMBlock("echo2", sequenceKey), callback2);
+
+		if (!explicitTermination
+				&&
+				!Sandesha2Constants.SPEC_VERSIONS.v1_1.equals(clientOptions.getProperty(SandeshaClientConstants.RM_SPEC_VERSION)))
+		{
+
+			clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, Constants.VALUE_TRUE);
+		}
+
+		TestCallback callback3 = new TestCallback("Callback 3");
+		serviceClient.sendReceiveNonBlocking(getEchoOMBlock("echo3", sequenceKey), callback3);
+
+		if (explicitTermination) {
+			Thread.sleep(10000);
+			SandeshaClient.terminateSequence(serviceClient);
+		}
+
+		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 outgoingSequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+				System.out.println("Checking Outbound Sequence: " + outgoingSequenceReport.getSequenceID());
+				assertTrue("Outbound message #1", outgoingSequenceReport.getCompletedMessages().contains(new Long(1)));
+				assertTrue("Outbound message #2", outgoingSequenceReport.getCompletedMessages().contains(new Long(2)));
+				assertTrue("Outbound message #3", outgoingSequenceReport.getCompletedMessages().contains(new Long(3)));
+				assertEquals("Outbound sequence status: TERMINATED", SequenceReport.SEQUENCE_STATUS_TERMINATED, outgoingSequenceReport.getSequenceStatus());
+				assertEquals("Outbound sequence direction: OUT", SequenceReport.SEQUENCE_DIRECTION_OUT, outgoingSequenceReport.getSequenceDirection());
+
+				//assertions for the inbound sequence. The one we care about is a new sequence,
+				//so it will not exist in the oldSequences list.
+				List<SequenceReport> incomingSequences = SandeshaClient.getIncomingSequenceReports(configContext);
+				SequenceReport incomingSequenceReport = getNewReport(incomingSequences, oldIncomingReports);
+				System.out.println("Checking Inbound Sequence: " + incomingSequenceReport.getSequenceID());
+				String offer = (String) clientOptions.getProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID);
+				if (offer != null) assertEquals("Inbound seq id", offer, incomingSequenceReport.getSequenceID());
+				assertEquals("Inbound message count", 3, incomingSequenceReport.getCompletedMessages().size());
+				assertTrue("Inbound message #1", incomingSequenceReport.getCompletedMessages().contains(new Long(1)));
+				assertTrue("Inbound message #2", incomingSequenceReport.getCompletedMessages().contains(new Long(2)));
+				assertTrue("Inbound message #3", incomingSequenceReport.getCompletedMessages().contains(new Long(3)));
+
+				if (checkInboundTermination)
+					assertEquals("Inbound sequence status: TERMINATED", SequenceReport.SEQUENCE_STATUS_TERMINATED, incomingSequenceReport.getSequenceStatus());
+
+				assertEquals("Inbound sequence direction: IN", SequenceReport.SEQUENCE_DIRECTION_IN, incomingSequenceReport.getSequenceDirection());
+
+				assertTrue("Callback #1", callback1.isComplete());
+				assertEquals("Callback #1 data", "echo1", callback1.getResult());
+
+				assertTrue("Callback #2", callback2.isComplete());
+				assertEquals("Callback #2 data", "echo1echo2", callback2.getResult());
+
+				assertTrue("Callback #3", callback3.isComplete());
+				assertEquals("Callback #3 data", "echo1echo2echo3", callback3.getResult());
+
+				lastError = null;
+				break;
+			} catch (Error e) {
+				e.printStackTrace();
+				System.out.println("Possible error:" + e);
+				lastError = e;
+			}
+		}
+		if (lastError != null) throw lastError;
+
+		if (stopListener)
+			configContext.getListenerManager().stop();
+
+		serviceClient.cleanup();
+	}
+
+	// Scan through lists of old and new incoming sequences, to find the sequence that
+	// was established by this test. Note that some of the old sequences may have timed out.
+	private SequenceReport getNewReport(List<SequenceReport> incomingSequences, List<SequenceReport> oldIncomingReports) {
+		HashSet<String> sequenceIds = new HashSet<String>();
+		for (Iterator<SequenceReport> oldSequences = oldIncomingReports.iterator(); oldSequences.hasNext();) {
+			SequenceReport report = (SequenceReport) oldSequences.next();
+			sequenceIds.add(report.getSequenceID());
+		}
+		for (Iterator<SequenceReport> currentSequences = incomingSequences.iterator(); currentSequences.hasNext();) {
+			SequenceReport report = (SequenceReport) currentSequences.next();
+			if (!sequenceIds.contains(report.getSequenceID())) {
+				return report;
+			}
+		}
+		throw new AssertionFailedError("Failed to find a new reply sequence");
+	}
+
+
+}
diff --git a/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java b/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java
index 18bf9ab..42f35de 100644
--- a/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java
+++ b/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java
@@ -1,260 +1,260 @@
-/*

- * 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;

-

-import java.io.File;

-import java.io.FileInputStream;

-import java.io.FileNotFoundException;

-import java.io.IOException;

-import java.io.InputStream;

-import java.util.Properties;

-

-import javax.xml.namespace.QName;

-

-import junit.framework.TestCase;

-

-import org.apache.axiom.om.OMAbstractFactory;

-import org.apache.axiom.om.OMElement;

-import org.apache.axiom.om.OMFactory;

-import org.apache.axiom.om.OMNamespace;

-import org.apache.axiom.om.OMXMLBuilderFactory;

-import org.apache.axiom.om.OMXMLParserWrapper;

-import org.apache.axiom.soap.SOAPBody;

-import org.apache.axiom.soap.SOAPEnvelope;

-import org.apache.axis2.client.async.AxisCallback;

-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.axis2.description.AxisOperationFactory;

-import org.apache.axis2.description.AxisService;

-import org.apache.axis2.engine.MessageReceiver;

-import org.apache.axis2.transport.http.SimpleHTTPServer;

-import org.apache.commons.logging.Log;

-import org.apache.commons.logging.LogFactory;

-

-public class SandeshaTestCase extends TestCase {

-

-	String resourceDir = ""; //"test-resources";

-	Properties properties = null;

-	final String PROPERTY_FILE_NAME = "sandesha2-test.properties";

-	public final int DEFAULT_SERVER_TEST_PORT = 8060;

-	public ConfigurationContext serverConfigurationContext = null;

-	private final String RMServiceName = "RMSampleService";

-	private Log log = LogFactory.getLog(getClass());

-

-	private final static String applicationNamespaceName = "http://tempuri.org/";

-	private final static String echoString = "echoString";

-	private final static String ping = "ping";

-	private final static String Text = "Text";

-	private final static String Sequence = "Sequence";

-	private final static String echoStringResponse = "echoStringResponse";

-	private final static String EchoStringReturn = "EchoStringReturn";

-

-	protected SimpleHTTPServer httpServer = null;

-	protected int serverPort = DEFAULT_SERVER_TEST_PORT;

-	protected int waitTime = 70000; // Each test will wait up to 70 seconds, unless we override it here

-	protected int tickTime = 10000;  // Each wait will check the test assertions each second

-	protected String pingAction = "urn:wsrm:Ping";

-	protected String echoAction = "urn:wsrm:EchoString";

-

-	public SandeshaTestCase(String name) {

-		super(name);

-		String testRource = "target" + File.separator + "test-classes";

-		resourceDir = new File(testRource).getPath();

-

-		String propFileStr = resourceDir + File.separator + PROPERTY_FILE_NAME;

-		properties = new Properties();

-

-		try {

-			FileInputStream propertyFile = new FileInputStream(new File(propFileStr));

-			properties.load(propertyFile);

-		} catch (FileNotFoundException e) {

-			log.error(e);

-		} catch (IOException e) {

-			log.error(e);

-		}

-	}

-

-	public void setUp() throws Exception {

-		super.setUp();

-

-		String serverPortStr = getTestProperty("test.server.port");

-		if (serverPortStr != null) {

-			try {

-				serverPort = Integer.parseInt(serverPortStr);

-			} catch (NumberFormatException e) {

-				log.error(e);

-			}

-		}

-	}

-

-	public ConfigurationContext startServer(String repoPath, String axis2_xml)

-			throws Exception {

-

-		ConfigurationContext configContext =

-				ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath, axis2_xml);

-

-		httpServer = new SimpleHTTPServer(configContext, serverPort);

-		httpServer.start();

-		Thread.sleep(300);

-

-		return configContext;

-	}

-

-	public void tearDown() throws Exception {

-		if (httpServer != null) {

-			httpServer.stop();

-		}

-

-		Thread.sleep(300);

-	}

-

-	protected InputStream getResource(String relativePath, String resourceName) {

-		String resourceFile = resourceDir + relativePath + File.separator + resourceName;

-		try {

-			return new FileInputStream(resourceFile);

-		} catch (FileNotFoundException e) {

-			throw new RuntimeException("cannot load the test-resource", e);

-		}

-	}

-

-	protected SOAPEnvelope getSOAPEnvelope() {

-		return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();

-	}

-

-	protected SOAPEnvelope getSOAPEnvelope(String relativePath, String resourceName) {

-		OMXMLParserWrapper wrapper = OMXMLBuilderFactory.createSOAPModelBuilder(

-				getResource(relativePath, resourceName), null);

-		return (SOAPEnvelope) wrapper.getDocumentElement();

-	}

-

-	protected SOAPEnvelope getEmptySOAPEnvelope() {

-		return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();

-	}

-

-	protected static OMElement getEchoOMBlock(String text, String sequenceKey) {

-		OMFactory fac = OMAbstractFactory.getOMFactory();

-		OMNamespace applicationNamespace = fac.createOMNamespace(applicationNamespaceName, "ns1");

-		OMElement echoStringElement = fac.createOMElement(echoString, applicationNamespace);

-		OMElement textElem = fac.createOMElement(Text, applicationNamespace);

-		OMElement sequenceElem = fac.createOMElement(Sequence, applicationNamespace);

-

-		textElem.setText(text);

-		sequenceElem.setText(sequenceKey);

-		echoStringElement.addChild(textElem);

-		echoStringElement.addChild(sequenceElem);

-

-		return echoStringElement;

-	}

-

-	protected OMElement getPingOMBlock(String text) {

-		OMFactory fac = OMAbstractFactory.getOMFactory();

-		OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName, "ns1");

-		OMElement pingElem = fac.createOMElement(ping, namespace);

-		OMElement textElem = fac.createOMElement(Text, namespace);

-

-		textElem.setText(text);

-		pingElem.addChild(textElem);

-

-		return pingElem;

-	}

-

-	protected String checkEchoOMBlock(OMElement response) {

-		assertEquals("Response namespace", applicationNamespaceName, response.getNamespace().getNamespaceURI());

-		assertEquals("Response local name", echoStringResponse, response.getLocalName());

-

-		OMElement echoStringReturnElem = response.getFirstChildWithName(new QName(applicationNamespaceName, EchoStringReturn));

-		assertNotNull("Echo String Return", echoStringReturnElem);

-

-		String resultStr = echoStringReturnElem.getText();

-		return resultStr;

-	}

-

-	public String getTestProperty(String key) {

-		if (properties != null)

-			return properties.getProperty(key);

-

-		return null;

-	}

-

-	public void overrideConfigurationContext(ConfigurationContext context, MessageReceiver messageReceiver, String operationName, boolean newOperation, int mep) throws Exception {

-

-

-		AxisService rmService = context.getAxisConfiguration().getService(RMServiceName);

-

-		AxisOperation operation = null;

-

-		if (newOperation) {

-			operation = rmService.getOperation(new QName(operationName));

-			if (operation == null)

-				throw new Exception("Given operation not found");

-		} else {

-			operation = AxisOperationFactory.getAxisOperation(mep);

-			rmService.addOperation(operation);

-		}

-

-		operation.setMessageReceiver(messageReceiver);

-	}

-

-	protected class TestCallback implements AxisCallback {

-

-		String name = null;

-		boolean completed = false;

-		boolean errorReported = false;

-		String resultStr;

-

-		public boolean isComplete() {

-			return completed;

-		}

-

-		public boolean isErrorReported() {

-			return errorReported;

-		}

-

-		public String getResult() {

-			return resultStr;

-		}

-

-		public TestCallback(String name) {

-			this.name = name;

-		}

-

-		public void onComplete() {

-			completed = true;

-		}

-

-		public void onMessage(MessageContext result) {

-			SOAPBody body = result.getEnvelope().getBody();

-			OMElement contents = body.getFirstElement();

-			this.resultStr = checkEchoOMBlock(contents);

-			System.out.println("TestCallback got text: '" + resultStr + "'");

-		}

-

-		public void onFault(MessageContext result) {

-			errorReported = true;

-			System.out.println("TestCallback got fault: " + result.getEnvelope());

-		}

-

-		public void onError(Exception e) {

-			errorReported = true;

-			System.out.println("TestCallback got exception");

-			e.printStackTrace();

-		}

-	}

-

-}

+/*
+ * 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;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
+import org.apache.axiom.soap.SOAPBody;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axis2.client.async.AxisCallback;
+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.axis2.description.AxisOperationFactory;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.transport.http.SimpleHTTPServer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class SandeshaTestCase extends TestCase {
+
+	String resourceDir = ""; //"test-resources";
+	Properties properties = null;
+	final String PROPERTY_FILE_NAME = "sandesha2-test.properties";
+	public final int DEFAULT_SERVER_TEST_PORT = 8060;
+	public ConfigurationContext serverConfigurationContext = null;
+	private final String RMServiceName = "RMSampleService";
+	private Log log = LogFactory.getLog(getClass());
+
+	private final static String applicationNamespaceName = "http://tempuri.org/";
+	private final static String echoString = "echoString";
+	private final static String ping = "ping";
+	private final static String Text = "Text";
+	private final static String Sequence = "Sequence";
+	private final static String echoStringResponse = "echoStringResponse";
+	private final static String EchoStringReturn = "EchoStringReturn";
+
+	protected SimpleHTTPServer httpServer = null;
+	protected int serverPort = DEFAULT_SERVER_TEST_PORT;
+	protected int waitTime = 70000; // Each test will wait up to 70 seconds, unless we override it here
+	protected int tickTime = 10000;  // Each wait will check the test assertions each second
+	protected String pingAction = "urn:wsrm:Ping";
+	protected String echoAction = "urn:wsrm:EchoString";
+
+	public SandeshaTestCase(String name) {
+		super(name);
+		String testRource = "target" + File.separator + "test-classes";
+		resourceDir = new File(testRource).getPath();
+
+		String propFileStr = resourceDir + File.separator + PROPERTY_FILE_NAME;
+		properties = new Properties();
+
+		try {
+			FileInputStream propertyFile = new FileInputStream(new File(propFileStr));
+			properties.load(propertyFile);
+		} catch (FileNotFoundException e) {
+			log.error(e);
+		} catch (IOException e) {
+			log.error(e);
+		}
+	}
+
+	public void setUp() throws Exception {
+		super.setUp();
+
+		String serverPortStr = getTestProperty("test.server.port");
+		if (serverPortStr != null) {
+			try {
+				serverPort = Integer.parseInt(serverPortStr);
+			} catch (NumberFormatException e) {
+				log.error(e);
+			}
+		}
+	}
+
+	public ConfigurationContext startServer(String repoPath, String axis2_xml)
+			throws Exception {
+
+		ConfigurationContext configContext =
+				ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath, axis2_xml);
+
+		httpServer = new SimpleHTTPServer(configContext, serverPort);
+		httpServer.start();
+		Thread.sleep(300);
+
+		return configContext;
+	}
+
+	public void tearDown() throws Exception {
+		if (httpServer != null) {
+			httpServer.stop();
+		}
+
+		Thread.sleep(300);
+	}
+
+	protected InputStream getResource(String relativePath, String resourceName) {
+		String resourceFile = resourceDir + relativePath + File.separator + resourceName;
+		try {
+			return new FileInputStream(resourceFile);
+		} catch (FileNotFoundException e) {
+			throw new RuntimeException("cannot load the test-resource", e);
+		}
+	}
+
+	protected SOAPEnvelope getSOAPEnvelope() {
+		return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
+	}
+
+	protected SOAPEnvelope getSOAPEnvelope(String relativePath, String resourceName) {
+		OMXMLParserWrapper wrapper = OMXMLBuilderFactory.createSOAPModelBuilder(
+				getResource(relativePath, resourceName), null);
+		return (SOAPEnvelope) wrapper.getDocumentElement();
+	}
+
+	protected SOAPEnvelope getEmptySOAPEnvelope() {
+		return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
+	}
+
+	protected static OMElement getEchoOMBlock(String text, String sequenceKey) {
+		OMFactory fac = OMAbstractFactory.getOMFactory();
+		OMNamespace applicationNamespace = fac.createOMNamespace(applicationNamespaceName, "ns1");
+		OMElement echoStringElement = fac.createOMElement(echoString, applicationNamespace);
+		OMElement textElem = fac.createOMElement(Text, applicationNamespace);
+		OMElement sequenceElem = fac.createOMElement(Sequence, applicationNamespace);
+
+		textElem.setText(text);
+		sequenceElem.setText(sequenceKey);
+		echoStringElement.addChild(textElem);
+		echoStringElement.addChild(sequenceElem);
+
+		return echoStringElement;
+	}
+
+	protected OMElement getPingOMBlock(String text) {
+		OMFactory fac = OMAbstractFactory.getOMFactory();
+		OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName, "ns1");
+		OMElement pingElem = fac.createOMElement(ping, namespace);
+		OMElement textElem = fac.createOMElement(Text, namespace);
+
+		textElem.setText(text);
+		pingElem.addChild(textElem);
+
+		return pingElem;
+	}
+
+	protected String checkEchoOMBlock(OMElement response) {
+		assertEquals("Response namespace", applicationNamespaceName, response.getNamespace().getNamespaceURI());
+		assertEquals("Response local name", echoStringResponse, response.getLocalName());
+
+		OMElement echoStringReturnElem = response.getFirstChildWithName(new QName(applicationNamespaceName, EchoStringReturn));
+		assertNotNull("Echo String Return", echoStringReturnElem);
+
+		String resultStr = echoStringReturnElem.getText();
+		return resultStr;
+	}
+
+	public String getTestProperty(String key) {
+		if (properties != null)
+			return properties.getProperty(key);
+
+		return null;
+	}
+
+	public void overrideConfigurationContext(ConfigurationContext context, MessageReceiver messageReceiver, String operationName, boolean newOperation, int mep) throws Exception {
+
+
+		AxisService rmService = context.getAxisConfiguration().getService(RMServiceName);
+
+		AxisOperation operation = null;
+
+		if (newOperation) {
+			operation = rmService.getOperation(new QName(operationName));
+			if (operation == null)
+				throw new Exception("Given operation not found");
+		} else {
+			operation = AxisOperationFactory.getAxisOperation(mep);
+			rmService.addOperation(operation);
+		}
+
+		operation.setMessageReceiver(messageReceiver);
+	}
+
+	protected class TestCallback implements AxisCallback {
+
+		String name = null;
+		boolean completed = false;
+		boolean errorReported = false;
+		String resultStr;
+
+		public boolean isComplete() {
+			return completed;
+		}
+
+		public boolean isErrorReported() {
+			return errorReported;
+		}
+
+		public String getResult() {
+			return resultStr;
+		}
+
+		public TestCallback(String name) {
+			this.name = name;
+		}
+
+		public void onComplete() {
+			completed = true;
+		}
+
+		public void onMessage(MessageContext result) {
+			SOAPBody body = result.getEnvelope().getBody();
+			OMElement contents = body.getFirstElement();
+			this.resultStr = checkEchoOMBlock(contents);
+			System.out.println("TestCallback got text: '" + resultStr + "'");
+		}
+
+		public void onFault(MessageContext result) {
+			errorReported = true;
+			System.out.println("TestCallback got fault: " + result.getEnvelope());
+		}
+
+		public void onError(Exception e) {
+			errorReported = true;
+			System.out.println("TestCallback got exception");
+			e.printStackTrace();
+		}
+	}
+
+}