You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2007/03/20 18:23:48 UTC
svn commit: r520487 - in /incubator/qpid/trunk/qpid/java/integrationtests:
./ src/main/java/org/apache/qpid/interop/coordinator/
src/main/java/org/apache/qpid/interop/testclient/
src/main/java/org/apache/qpid/interop/testclient/testcases/ src/main/java...
Author: rgreig
Date: Tue Mar 20 10:23:47 2007
New Revision: 520487
URL: http://svn.apache.org/viewvc?view=rev&rev=520487
Log:
Merged revisions 520415 via svnmerge from
https://svn.apache.org/repos/asf/incubator/qpid/branches/M2
........
r520415 | rgreig | 2007-03-20 14:59:07 +0000 (Tue, 20 Mar 2007) | 1 line
Improvements made to interop tests.
........
Added:
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/InvitingTestDecorator.java
- copied unchanged from r520415, incubator/qpid/branches/M2/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/InvitingTestDecorator.java
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/OptOutTestCase.java
- copied unchanged from r520415, incubator/qpid/branches/M2/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/OptOutTestCase.java
incubator/qpid/trunk/qpid/java/integrationtests/src/resources/
- copied from r520415, incubator/qpid/branches/M2/java/integrationtests/src/resources/
incubator/qpid/trunk/qpid/java/integrationtests/src/resources/org/
- copied from r520415, incubator/qpid/branches/M2/java/integrationtests/src/resources/org/
incubator/qpid/trunk/qpid/java/integrationtests/src/resources/org/apache/
- copied from r520415, incubator/qpid/branches/M2/java/integrationtests/src/resources/org/apache/
incubator/qpid/trunk/qpid/java/integrationtests/src/resources/org/apache/qpid/
- copied from r520415, incubator/qpid/branches/M2/java/integrationtests/src/resources/org/apache/qpid/
incubator/qpid/trunk/qpid/java/integrationtests/src/resources/org/apache/qpid/interop/
- copied from r520415, incubator/qpid/branches/M2/java/integrationtests/src/resources/org/apache/qpid/interop/
incubator/qpid/trunk/qpid/java/integrationtests/src/resources/org/apache/qpid/interop/connection.properties
- copied unchanged from r520415, incubator/qpid/branches/M2/java/integrationtests/src/resources/org/apache/qpid/interop/connection.properties
Modified:
incubator/qpid/trunk/qpid/java/integrationtests/pom.xml
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/CoordinatingTestCase.java
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/Coordinator.java
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/TestClientDetails.java
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/TestClient.java
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/testcases/TestCase1DummyRun.java
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ClasspathScanner.java
incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ConversationHelper.java
Modified: incubator/qpid/trunk/qpid/java/integrationtests/pom.xml
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/integrationtests/pom.xml?view=diff&rev=520487&r1=520486&r2=520487
==============================================================================
--- incubator/qpid/trunk/qpid/java/integrationtests/pom.xml (original)
+++ incubator/qpid/trunk/qpid/java/integrationtests/pom.xml Tue Mar 20 10:23:47 2007
@@ -107,6 +107,15 @@
</plugins>
<resources>
+ <!-- Ensure all resources defined in the resources directory are copied into the build jar. -->
+ <resource>
+ <targetPath></targetPath>
+ <filtering>false</filtering>
+ <directory>src/resources</directory>
+ <includes>
+ <include>**/*</include>
+ </includes>
+ </resource>
</resources>
</build>
Modified: incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/CoordinatingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/CoordinatingTestCase.java?view=diff&rev=520487&r1=520486&r2=520487
==============================================================================
--- incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/CoordinatingTestCase.java (original)
+++ incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/CoordinatingTestCase.java Tue Mar 20 10:23:47 2007
@@ -23,6 +23,9 @@
import java.util.Collection;
import java.util.Properties;
+import javax.jms.JMSException;
+import javax.jms.Message;
+
import junit.framework.TestCase;
import org.apache.qpid.util.ConversationHelper;
@@ -55,61 +58,120 @@
*
* <p><table id="crc"><caption>CRC Card</caption>
* <tr><th> Responsibilities <th> Collaborations
+ * <tr><td> Accept notification of test case participants. <td> {@link InvitingTestDecorator}
* <tr><td> Coordinate the test sequence amongst participants. <td> {@link ConversationHelper}
+ * <tr><td> Supply test properties
* </table>
*/
public abstract class CoordinatingTestCase extends TestCase
{
+ /** Holds the contact details for the sending test client. */
+ TestClientDetails sender;
+
+ /** Holds the contact details for the receving test client. */
+ TestClientDetails receiver;
+
+ ConversationHelper conversation;
+
/**
+ * Creates a new coordinating test case with the specified name.
*
- * @param sender The contact details of the sending client in the test.
- * @param receiver The contact details of the sending client in the test.
- * @param allClients The list of all possible test clients that may accept the invitation.
- * @param testProperties The test case definition.
+ * @param name The test case name.
+ */
+ public CoordinatingTestCase(String name)
+ {
+ super(name);
+ }
+
+ /**
+ * Sets the sender test client to coordinate the test with.
+ *
+ * @param sender The contact details of the sending client in the test.
+ */
+ public void setSender(TestClientDetails sender)
+ {
+ this.sender = sender;
+ }
+
+ /**
+ * Sets the receiving test client to coordinate the test with.
+ *
+ * @param receiver The contact details of the sending client in the test.
+ */
+ public void setReceiver(TestClientDetails receiver)
+ {
+ this.receiver = receiver;
+ }
+
+ /**
+ * Supplies the sending test client.
+ *
+ * @return The sending test client.
+ */
+ public TestClientDetails getSender()
+ {
+ return sender;
+ }
+
+ /**
+ * Supplies the receiving test client.
+ *
+ * @return The receiving test client.
*/
- public void TestCase(TestClientDetails sender, TestClientDetails receiver, Collection<TestClientDetails> allClients,
- Properties testProperties)
- { }
+ public TestClientDetails getReceiver()
+ {
+ return receiver;
+ }
/**
* Holds a test coordinating conversation with the test clients. This is the basic implementation of the inner
* loop of Use Case 5. It consists of assign the test roles, begining the test and gathering the test reports
* from the participants.
*
- * @param sender The contact details of the sending client in the test.
- * @param receiver The contact details of the receiving client in the test.
- * @param allParticipatingClients The list of all clients accepted the invitation.
- * @param testProperties The test case definition.
+ * @param testProperties The test case definition.
*
* @return The test results from the senders and receivers.
+ *
+ * @throws JMSException All underlying JMSExceptions are allowed to fall through.
*/
- protected Object[] sequenceTest(TestClientDetails sender, TestClientDetails receiver, Properties testProperties)
+ protected Object[] sequenceTest(Properties testProperties) throws JMSException
{
- // Check if the sender and recevier did not accept the invite to this test.
- {
- // Automatically fail this combination of sender and receiver.
- }
-
// Assign the sender role to the sending test client.
+ Message assignSender = conversation.getSession().createMessage();
+ assignSender.setStringProperty("CONTROL_TYPE", "ASSIGN_ROLE");
+ assignSender.setStringProperty("ROLE", "SENDER");
+
+ conversation.send(assignSender);
// Assign the receiver role the receiving client.
+ Message assignReceiver = conversation.getSession().createMessage();
+ assignReceiver.setStringProperty("CONTROL_TYPE", "ASSIGN_ROLE");
+ assignReceiver.setStringProperty("ROLE", "RECEIVER");
+
+ conversation.send(assignReceiver);
// Wait for the senders and receivers to confirm their roles.
+ conversation.receive();
+ conversation.receive();
// Start the test.
+ Message start = conversation.getSession().createMessage();
+ start.setStringProperty("CONTROL_TYPE", "START");
+
+ conversation.send(start);
// Wait for the test sender to return its report.
+ Message senderReport = conversation.receive();
+
+ // Ask the receiver for its report.
+ Message statusRequest = conversation.getSession().createMessage();
+ statusRequest.setStringProperty("CONTROL_TYPE", "STATUS_REQUEST");
- // As the receiver for its report.
+ conversation.send(statusRequest);
// Wait for the receiver to send its report.
+ Message receiverReport = conversation.receive();
- return null;
+ return new Message[] { senderReport, receiverReport };
}
-
- /*protected void setUp()
- { }*/
-
- /*protected void tearDown()
- { }*/
}
Modified: incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/Coordinator.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/Coordinator.java?view=diff&rev=520487&r1=520486&r2=520487
==============================================================================
--- incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/Coordinator.java (original)
+++ incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/Coordinator.java Tue Mar 20 10:23:47 2007
@@ -20,14 +20,26 @@
*/
package org.apache.qpid.interop.coordinator;
-import java.util.Properties;
+import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import javax.jms.*;
import junit.framework.Test;
import junit.framework.TestResult;
+import junit.framework.TestSuite;
+
+import org.apache.log4j.Logger;
+import org.apache.qpid.interop.testclient.InteropClientTestCase;
+import org.apache.qpid.interop.testclient.TestClient;
+import org.apache.qpid.util.ClasspathScanner;
import org.apache.qpid.util.CommandLineParser;
+import org.apache.qpid.util.ConversationHelper;
+import org.apache.qpid.util.PrettyPrintingUtils;
import uk.co.thebadgerset.junit.extensions.TestRunnerImprovedErrorHandling;
+import uk.co.thebadgerset.junit.extensions.WrappedSuiteTestDecorator;
/**
* <p/>Implements the coordinator client described in the interop testing specification
@@ -36,20 +48,27 @@
*
* <p><table id="crc"><caption>CRC Card</caption>
* <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Find out what test clients are available.
- * <tr><td> Decorate available tests to run all available clients.
+ * <tr><td> Find out what test clients are available. <td> {@link ConversationHelper}
+ * <tr><td> Decorate available tests to run all available clients. <td> {@link InvitingTestDecorator}
* <tr><td> Attach XML test result logger.
* <tr><td> Terminate the interop testing framework.
* </table>
*/
public class Coordinator extends TestRunnerImprovedErrorHandling
{
+ private static final Logger log = Logger.getLogger(Coordinator.class);
+
+ public static final String DEFAULT_CONNECTION_PROPS_RESOURCE = "org/apache/qpid/interop/connection.properties";
+
/** Holds the URL of the broker to coordinate the tests on. */
String brokerUrl;
/** Holds the virtual host to coordinate the tests on. If <tt>null</tt>, then the default virtual host is used. */
String virtualHost;
+ /** Holds the list of all clients that enlisted, when the compulsory invite was issued. */
+ Set<TestClientDetails> enlistedClients = new HashSet<TestClientDetails>();
+
/**
* Creates an interop test coordinator on the specified broker and virtual host.
*
@@ -58,6 +77,8 @@
*/
Coordinator(String brokerUrl, String virtualHost)
{
+ log.debug("Coordinator(String brokerUrl = " + brokerUrl + ", String virtualHost = " + virtualHost + "): called");
+
// Retain the connection parameters.
this.brokerUrl = brokerUrl;
this.virtualHost = virtualHost;
@@ -76,42 +97,51 @@
*/
public static void main(String[] args)
{
- // Use the command line parser to evaluate the command line.
- CommandLineParser commandLine =
- new CommandLineParser(new String[][]
- {
- { "b", "The broker URL.", "broker", "true" },
- { "h", "The virtual host to use.", "virtual host", "false" }
- });
-
- // Capture the command line arguments or display errors and correct usage and then exit.
- Properties options = null;
-
try
{
- options = commandLine.parseCommandLine(args);
- }
- catch (IllegalArgumentException e)
- {
- System.out.println(commandLine.getErrors());
- System.out.println(commandLine.getUsage());
- System.exit(1);
- }
+ // Use the command line parser to evaluate the command line.
+ CommandLineParser commandLine =
+ new CommandLineParser(new String[][]
+ {
+ { "b", "The broker URL.", "broker", "false" },
+ { "h", "The virtual host to use.", "virtual host", "false" }
+ });
+
+ // Capture the command line arguments or display errors and correct usage and then exit.
+ Properties options = null;
+
+ try
+ {
+ options = commandLine.parseCommandLine(args);
+ }
+ catch (IllegalArgumentException e)
+ {
+ System.out.println(commandLine.getErrors());
+ System.out.println(commandLine.getUsage());
+ System.exit(1);
+ }
- // Extract the command line options.
- String brokerUrl = options.getProperty("b");
- String virtualHost = options.getProperty("h");
-
- // Add all the trailing command line options (name=value pairs) to system properties. Tests may pick up
- // overridden values from there.
- commandLine.addCommandLineToSysProperties();
+ // Extract the command line options.
+ String brokerUrl = options.getProperty("b");
+ String virtualHost = options.getProperty("h");
+
+ // Add all the trailing command line options (name=value pairs) to system properties. Tests may pick up
+ // overridden values from there.
+ commandLine.addCommandLineToSysProperties();
+
+ // Scan for available test cases using a classpath scanner.
+ Collection<Class<? extends CoordinatingTestCase>> testCaseClasses =
+ ClasspathScanner.getMatches(CoordinatingTestCase.class, "^Test.*", true);
- // Scan for available test cases using a classpath scanner.
- String[] testClassNames = null;
+ int i = 0;
+ String[] testClassNames = new String[testCaseClasses.size()];
- // Create a coordinator and begin its test procedure.
- try
- {
+ for (Class testClass : testCaseClasses)
+ {
+ testClassNames[i++] = testClass.getName();
+ }
+
+ // Create a coordinator and begin its test procedure.
Coordinator coordinator = new Coordinator(brokerUrl, virtualHost);
TestResult testResult = coordinator.start(testClassNames);
@@ -127,31 +157,92 @@
catch (Exception e)
{
System.err.println(e.getMessage());
+ log.error("Top level handler caught execption.", e);
System.exit(EXCEPTION_EXIT);
}
}
+ /**
+ * Starts all of the test classes to be run by this coordinator running.
+ *
+ * @param testClassNames An array of all the coordinating test case implementations.
+ *
+ * @return A JUnit TestResult to run the tests with.
+ *
+ * @throws Exception Any underlying exceptions are allowed to fall through, and fail the test process.
+ */
public TestResult start(String[] testClassNames) throws Exception
{
+ log.debug("public TestResult start(String[] testClassNames = " + PrettyPrintingUtils.printArray(testClassNames)
+ + "): called");
+
// Connect to the broker.
+ Connection connection = TestClient.createConnection(DEFAULT_CONNECTION_PROPS_RESOURCE, brokerUrl, virtualHost);
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ Destination controlTopic = session.createTopic("iop.control");
+ Destination responseQueue = session.createQueue("coordinator");
+
+ ConversationHelper conversation =
+ new ConversationHelper(connection, controlTopic, responseQueue, LinkedBlockingQueue.class);
// Broadcast the compulsory invitation to find out what clients are available to test.
+ Message invite = session.createMessage();
+ invite.setStringProperty("CONTROL_TYPE", "INVITE");
+ invite.setJMSReplyTo(responseQueue);
+
+ conversation.send(invite);
// Wait for a short time, to give test clients an opportunity to reply to the invitation.
+ Collection<Message> enlists = conversation.receiveAll(0, 10000);
- // Retain the list of all available clients.
+ enlistedClients = extractEnlists(enlists);
// Run all of the tests in the suite using JUnit.
TestResult result = super.start(testClassNames);
// At this point in time, all tests have completed. Broadcast the shutdown message.
+ Message terminate = session.createMessage();
+ terminate.setStringProperty("CONTROL_TYPE", "TERMINATE");
+
+ conversation.send(terminate);
return result;
}
/**
+ * For a collection of enlist messages, this method pulls out of the client details for the enlisting clients.
+ *
+ * @param enlists The enlist messages.
+ *
+ * @return A set of enlisting clients, extracted from the enlist messages.
+ *
+ * @throws JMSException Any underlying JMSException is allowed to fall through.
+ */
+ public static Set<TestClientDetails> extractEnlists(Collection<Message> enlists) throws JMSException
+ {
+ log.debug("public static Set<TestClientDetails> extractEnlists(Collection<Message> enlists = " + enlists
+ + "): called");
+
+ Set<TestClientDetails> enlistedClients = new HashSet<TestClientDetails>();
+
+ // Retain the list of all available clients.
+ for (Message enlist : enlists)
+ {
+ TestClientDetails clientDetails = new TestClientDetails();
+ clientDetails.clientName = enlist.getStringProperty("CLIENT_NAME");
+ clientDetails.privateControlKey = enlist.getStringProperty("CLIENT_PRIVATE_CONTROL_KEY");
+
+ enlistedClients.add(clientDetails);
+ }
+
+ return enlistedClients;
+ }
+
+ /**
* Runs a test or suite of tests, using the super class implemenation. This method wraps the test to be run
- * in any test decorators needed to add in the configured toolkits enhanced junit functionality.
+ * in any test decorators needed to add in the coordinators ability to invite test clients to participate in
+ * tests.
*
* @param test The test to run.
* @param wait Undocumented. Nothing in the JUnit javadocs to say what this is for.
@@ -160,9 +251,39 @@
*/
public TestResult doRun(Test test, boolean wait)
{
- // Combine together the available test cases and test clients to produce a complete list of test case instances
- // to run as a JUnit test suite.
+ log.debug("public TestResult doRun(Test \"" + test + "\", boolean " + wait + "): called");
+
+ // Wrap all tests in the test suite with WrappedSuiteTestDecorators. This is quite ugly and a bit baffling,
+ // but the reason it is done is because the JUnit implementation of TestDecorator has some bugs in it.
+ WrappedSuiteTestDecorator targetTest = null;
+
+ if (test instanceof TestSuite)
+ {
+ log.debug("targetTest is a TestSuite");
+
+ TestSuite suite = (TestSuite) test;
+
+ int numTests = suite.countTestCases();
+ log.debug("There are " + numTests + " in the suite.");
+
+ for (int i = 0; i < numTests; i++)
+ {
+ Test nextTest = suite.testAt(i);
+ log.debug("suite.testAt(" + i + ") = " + nextTest);
+
+ if (nextTest instanceof CoordinatingTestCase)
+ {
+ log.debug("nextTest is a CoordinatingTestCase");
+ }
+ }
+
+ targetTest = new WrappedSuiteTestDecorator(suite);
+ log.debug("Wrapped with a WrappedSuiteTestDecorator.");
+ }
+
+ // Wrap the tests in an inviting test decorator, to perform the invite/test cycle.
+ targetTest = new InvitingTestDecorator(targetTest, enlistedClients);
- return null;
+ return super.doRun(targetTest, wait);
}
}
Modified: incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/TestClientDetails.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/TestClientDetails.java?view=diff&rev=520487&r1=520486&r2=520487
==============================================================================
--- incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/TestClientDetails.java (original)
+++ incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/coordinator/TestClientDetails.java Tue Mar 20 10:23:47 2007
@@ -30,8 +30,58 @@
/** The test clients name. */
public String clientName;
- /* The test clients unqiue sequence number. Not currently used. */
+ /* The test clients unique sequence number. Not currently used. */
/** The routing key of the test clients control topic. */
public String privateControlKey;
+
+ /**
+ * Two TestClientDetails are considered to be equal, iff they have the same client name.
+ *
+ * @param o The object to compare to.
+ *
+ * @return <tt>If the object to compare to is a TestClientDetails equal to this one, <tt>false</tt> otherwise.
+ */
+ public boolean equals(Object o)
+ {
+ if (this == o)
+ {
+ return true;
+ }
+
+ if (!(o instanceof TestClientDetails))
+ {
+ return false;
+ }
+
+ final TestClientDetails testClientDetails = (TestClientDetails) o;
+
+ if ((clientName != null) ? (!clientName.equals(testClientDetails.clientName))
+ : (testClientDetails.clientName != null))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Computes a hash code compatible with the equals method; based on the client name alone.
+ *
+ * @return A hash code for this.
+ */
+ public int hashCode()
+ {
+ return ((clientName != null) ? clientName.hashCode() : 0);
+ }
+
+ /**
+ * Outputs the client name and address details. Mostly used for debugging purposes.
+ *
+ * @return The client name and address.
+ */
+ public String toString()
+ {
+ return "clientName = " + clientName + ", privateControlKey = " + privateControlKey;
+ }
}
Modified: incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/TestClient.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/TestClient.java?view=diff&rev=520487&r1=520486&r2=520487
==============================================================================
--- incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/TestClient.java (original)
+++ incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/TestClient.java Tue Mar 20 10:23:47 2007
@@ -75,13 +75,16 @@
public static final String CONNECTION_PROPERTY = "connectionfactory.broker";
public static final String CONNECTION_NAME = "broker";
public static final String CLIENT_NAME = "java";
- public static final String DEFAULT_CONNECTION_PROPS_RESOURCE = "org/apache/qpid/interop/client/connection.properties";
+ public static final String DEFAULT_CONNECTION_PROPS_RESOURCE = "org/apache/qpid/interop/connection.properties";
private MessageProducer producer;
private Session session;
public TestClient(String brokerUrl, String virtualHost)
{
+ log.debug("public TestClient(String brokerUrl = " + brokerUrl + ", String virtualHost = " + virtualHost
+ + "): called");
+
// Retain the connection parameters.
this.brokerUrl = brokerUrl;
this.virtualHost = virtualHost;
@@ -104,7 +107,7 @@
CommandLineParser commandLine =
new CommandLineParser(new String[][]
{
- { "b", "The broker URL.", "broker", "true" },
+ { "b", "The broker URL.", "broker", "false" },
{ "h", "The virtual host to use.", "virtual host", "false" }
});
@@ -146,6 +149,8 @@
private void start() throws JMSException
{
+ log.debug("private void start(): called");
+
// Use a class path scanner to find all the interop test case implementations.
Collection<Class<? extends InteropClientTestCase>> testCaseClasses =
ClasspathScanner.getMatches(InteropClientTestCase.class, "^TestCase.*", true);
@@ -201,17 +206,23 @@
*
* @return A JMS conneciton.
*/
- private static Connection createConnection(String connectionPropsResource, String brokerUrl, String virtualHost)
+ public static Connection createConnection(String connectionPropsResource, String brokerUrl, String virtualHost)
{
+ log.debug("public static Connection createConnection(String connectionPropsResource = " + connectionPropsResource
+ + ", String brokerUrl = " + brokerUrl + ", String virtualHost = " + virtualHost + "): called");
+
try
{
Properties connectionProps =
PropertiesUtils.getProperties(TestClient.class.getClassLoader().getResourceAsStream(
connectionPropsResource));
- String connectionString =
- "amqp://guest:guest/" + ((virtualHost != null) ? virtualHost : "") + "?brokerlist='" + brokerUrl + "'";
- connectionProps.setProperty(CONNECTION_PROPERTY, connectionString);
+ if (brokerUrl != null)
+ {
+ String connectionString =
+ "amqp://guest:guest/" + ((virtualHost != null) ? virtualHost : "") + "?brokerlist='" + brokerUrl + "'";
+ connectionProps.setProperty(CONNECTION_PROPERTY, connectionString);
+ }
Context ctx = new InitialContext(connectionProps);
@@ -241,6 +252,8 @@
*/
public void onMessage(Message message)
{
+ log.debug("public void onMessage(Message message = " + message + "): called");
+
try
{
String controlType = message.getStringProperty("CONTROL_TYPE");
Modified: incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/testcases/TestCase1DummyRun.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/testcases/TestCase1DummyRun.java?view=diff&rev=520487&r1=520486&r2=520487
==============================================================================
--- incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/testcases/TestCase1DummyRun.java (original)
+++ incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/interop/testclient/testcases/TestCase1DummyRun.java Tue Mar 20 10:23:47 2007
@@ -24,6 +24,8 @@
import javax.jms.Message;
import javax.jms.Session;
+import org.apache.log4j.Logger;
+
import org.apache.qpid.interop.testclient.InteropClientTestCase;
/**
@@ -41,29 +43,41 @@
*/
public class TestCase1DummyRun implements InteropClientTestCase
{
+ private static final Logger log = Logger.getLogger(TestCase1DummyRun.class);
+
public String getName()
{
+ log.debug("public String getName(): called");
+
return "TC1_DummyRun";
}
public boolean acceptInvite(Message inviteMessage) throws JMSException
{
+ log.debug("public boolean acceptInvite(Message inviteMessage): called");
+
// Test parameters don't matter, accept all invites.
return true;
}
public void assignRole(Roles role, Message assignRoleMessage) throws JMSException
{
+ log.debug("public void assignRole(Roles role, Message assignRoleMessage): called");
+
// Do nothing, both roles are the same.
}
public void start()
{
+ log.debug("public void start(): called");
+
// Do nothing.
}
public Message getReport(Session session) throws JMSException
{
+ log.debug("public Message getReport(Session session): called");
+
// Generate a dummy report, the coordinator expects a report but doesn't care what it is.
return session.createTextMessage("Dummy Run, Ok.");
}
Modified: incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ClasspathScanner.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ClasspathScanner.java?view=diff&rev=520487&r1=520486&r2=520487
==============================================================================
--- incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ClasspathScanner.java (original)
+++ incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ClasspathScanner.java Tue Mar 20 10:23:47 2007
@@ -63,12 +63,17 @@
public static <T> Collection<Class<? extends T>> getMatches(Class<T> matchingClass, String matchingRegexp,
boolean beanOnly)
{
+ log.debug("public static <T> Collection<Class<? extends T>> getMatches(Class<T> matchingClass = " + matchingClass
+ + ", String matchingRegexp = " + matchingRegexp + ", boolean beanOnly = " + beanOnly + "): called");
+
// Build a compiled regular expression from the pattern to match.
Pattern matchPattern = Pattern.compile(matchingRegexp);
String classPath = System.getProperty("java.class.path");
Map<String, Class<? extends T>> result = new HashMap<String, Class<? extends T>>();
+ log.debug("classPath = " + classPath);
+
// Find matching classes starting from all roots in the classpath.
for (String path : splitClassPath(classPath))
{
@@ -92,15 +97,19 @@
private static <T> void gatherFiles(File classRoot, String classFileName, Map<String, Class<? extends T>> result,
Pattern matchPattern, Class<? extends T> matchClass)
{
+ log.debug("private static <T> void gatherFiles(File classRoot = " + classRoot + ", String classFileName = "
+ + classFileName + ", Map<String, Class<? extends T>> result, Pattern matchPattern = " + matchPattern
+ + ", Class<? extends T> matchClass = " + matchClass + "): called");
+
File thisRoot = new File(classRoot, classFileName);
// If the current location is a file, check if it is a matching class.
if (thisRoot.isFile())
{
// Check that the file has a matching name.
- if (matchesName(classFileName, matchPattern))
+ if (matchesName(thisRoot.getName(), matchPattern))
{
- String className = classNameFromFile(classFileName);
+ String className = classNameFromFile(thisRoot.getName());
// Check that the class has matching type.
try
@@ -206,6 +215,8 @@
*/
private static String classNameFromFile(String classFileName)
{
+ log.debug("private static String classNameFromFile(String classFileName = " + classFileName + "): called");
+
// Remove the .class ending.
String s = classFileName.substring(0, classFileName.length() - ".class".length());
Modified: incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ConversationHelper.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ConversationHelper.java?view=diff&rev=520487&r1=520486&r2=520487
==============================================================================
--- incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ConversationHelper.java (original)
+++ incubator/qpid/trunk/qpid/java/integrationtests/src/main/java/org/apache/qpid/util/ConversationHelper.java Tue Mar 20 10:23:47 2007
@@ -21,7 +21,6 @@
package org.apache.qpid.util;
import java.util.*;
-import java.util.Queue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicLong;
@@ -109,7 +108,7 @@
private MessageProducer producer;
private MessageConsumer consumer;
- Class<? extends BlockingQueue<Message>> queueClass;
+ Class<? extends BlockingQueue> queueClass;
BlockingQueue<Message> deadLetterBox = new LinkedBlockingQueue<Message>();
@@ -140,7 +139,7 @@
* @throws JMSException All undelying JMSExceptions are allowed to fall through.
*/
public ConversationHelper(Connection connection, Destination sendDestination, Destination receiveDestination,
- Class<? extends BlockingQueue<Message>> queueClass) throws JMSException
+ Class<? extends BlockingQueue> queueClass) throws JMSException
{
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
producer = session.createProducer(sendDestination);
@@ -180,7 +179,7 @@
{
if (!idsToQueues.containsKey(conversationId))
{
- idsToQueues.put(conversationId, ReflectionUtils.<BlockingQueue<Message>>newInstance(queueClass));
+ idsToQueues.put(conversationId, ReflectionUtils.<BlockingQueue>newInstance(queueClass));
}
}
@@ -210,6 +209,28 @@
}
/**
+ * Gets many messages in an ongoing conversation. If a limit is specified, then once that many messages are
+ * received they will be returned. If a timeout is specified, then all messages up to the limit, received within
+ * that timespan will be returned.
+ *
+ * @param num The number of messages to receive, or all if this is less than 1.
+ * @param timeout The timeout in milliseconds to receive the messages in, or forever if this is less than 1.
+ *
+ * @return All messages received within the count limit and the timeout.
+ */
+ public Collection<Message> receiveAll(int num, long timeout)
+ {
+ Collection<Message> result = new ArrayList<Message>();
+
+ for (int i = 0; i < num; i++)
+ {
+ result.add(receive());
+ }
+
+ return result;
+ }
+
+ /**
* Completes the conversation. Any open transactions are committed. Any correlation id's pertaining to the
* conversation are no longer valid, and any incoming messages using them will go to the dead letter box.
*/
@@ -234,7 +255,7 @@
*/
public Collection<Message> emptyDeadLetterBox()
{
- Collection<Message> result = new LinkedList<Message>();
+ Collection<Message> result = new ArrayList<Message>();
deadLetterBox.drainTo(result);
return result;
@@ -279,5 +300,10 @@
{
/** Holds the correlation id for the current threads conversation. */
long conversationId;
+ }
+
+ public Session getSession()
+ {
+ return session;
}
}