QPIDJMS-207 Add additional test coverage, update ConnectionMetaData
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionMetaData.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionMetaData.java
index 1fc940d..7fa79f6 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionMetaData.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionMetaData.java
@@ -40,7 +40,7 @@
*/
@Override
public String getJMSVersion() {
- return "1.1";
+ return "2.0";
}
/**
@@ -50,7 +50,7 @@
*/
@Override
public int getJMSMajorVersion() {
- return 1;
+ return 2;
}
/**
@@ -60,7 +60,7 @@
*/
@Override
public int getJMSMinorVersion() {
- return 1;
+ return 0;
}
/**
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFactoryTest.java
index ea8c867..8184acb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFactoryTest.java
@@ -36,6 +36,7 @@
import javax.jms.Connection;
import javax.jms.ExceptionListener;
+import javax.jms.JMSContext;
import javax.jms.JMSException;
import org.apache.qpid.jms.policy.JmsDefaultDeserializationPolicy;
@@ -756,4 +757,40 @@
assertTrue(connection.getDeserializationPolicy() instanceof SerializationTestSupport.TestJmsDeserializationPolicy);
}
+
+ @Test
+ public void testCreateContext() {
+ JmsConnectionFactory factory = new JmsConnectionFactory("mock://127.0.0.1:5672");
+
+ JMSContext context = factory.createContext();
+ assertNotNull(context);
+ assertEquals(JMSContext.AUTO_ACKNOWLEDGE, context.getSessionMode());
+ }
+
+ @Test
+ public void testCreateContextWithUserAndPassword() {
+ JmsConnectionFactory factory = new JmsConnectionFactory("mock://127.0.0.1:5672");
+
+ JMSContext context = factory.createContext(USER, PASSWORD);
+ assertNotNull(context);
+ assertEquals(JMSContext.AUTO_ACKNOWLEDGE, context.getSessionMode());
+ }
+
+ @Test
+ public void testCreateContextWithUserAndPasswordAndSessionMode() {
+ JmsConnectionFactory factory = new JmsConnectionFactory("mock://127.0.0.1:5672");
+
+ JMSContext context = factory.createContext(USER, PASSWORD, JMSContext.CLIENT_ACKNOWLEDGE);
+ assertNotNull(context);
+ assertEquals(JMSContext.CLIENT_ACKNOWLEDGE, context.getSessionMode());
+ }
+
+ @Test
+ public void testCreateContextWithSessionMode() {
+ JmsConnectionFactory factory = new JmsConnectionFactory("mock://127.0.0.1:5672");
+
+ JMSContext context = factory.createContext(JMSContext.CLIENT_ACKNOWLEDGE);
+ assertNotNull(context);
+ assertEquals(JMSContext.CLIENT_ACKNOWLEDGE, context.getSessionMode());
+ }
}
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
index 329b541..412ee73 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
@@ -27,6 +27,7 @@
import java.io.IOException;
import java.net.URI;
+import javax.jms.ConnectionMetaData;
import javax.jms.ExceptionListener;
import javax.jms.IllegalStateException;
import javax.jms.InvalidClientIDException;
@@ -36,6 +37,7 @@
import javax.jms.TemporaryTopic;
import org.apache.qpid.jms.policy.JmsDefaultPrefetchPolicy;
+import org.apache.qpid.jms.provider.ProviderConstants.ACK_TYPE;
import org.apache.qpid.jms.provider.mock.MockProvider;
import org.apache.qpid.jms.provider.mock.MockProviderFactory;
import org.apache.qpid.jms.util.IdGenerator;
@@ -266,6 +268,35 @@
}
}
+ @Test(timeout=30000)
+ public void testConnectionCreatedSessionRespectsAcknowledgementMode() throws Exception {
+ connection = new JmsConnection("ID:TEST:1", provider, clientIdGenerator);
+ connection.start();
+
+ JmsSession session = (JmsSession) connection.createSession(Session.SESSION_TRANSACTED);
+ try {
+ session.acknowledge(ACK_TYPE.ACCEPTED);
+ fail("Should be in TX mode and not allow explicit ACK.");
+ } catch (IllegalStateException ise) {
+ }
+ }
+
+ @Test(timeout=30000)
+ public void testConnectionMetaData() throws Exception {
+ connection = new JmsConnection("ID:TEST:1", provider, clientIdGenerator);
+
+ ConnectionMetaData metaData = connection.getMetaData();
+
+ assertNotNull(metaData);
+ assertEquals(2, metaData.getJMSMajorVersion());
+ assertEquals(0, metaData.getJMSMinorVersion());
+ assertEquals("2.0", metaData.getJMSVersion());
+ assertNotNull(metaData.getJMSXPropertyNames());
+
+ assertNotNull(metaData.getProviderVersion());
+ assertNotNull(metaData.getJMSProviderName());
+ }
+
//----- Currently these are unimplemented, these will fail after that ----//
@Test(timeout=30000, expected=JMSException.class)
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java
index c16a0b7..9dee268 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java
@@ -17,8 +17,12 @@
package org.apache.qpid.jms.consumer;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
+import java.util.Enumeration;
+
+import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.Session;
@@ -59,4 +63,16 @@
browser.close();
browser.close(); // Should not throw on multiple close.
}
+
+ @Test(timeout = 30000)
+ public void testHasMoreElementsOnClosedBrowser() throws Exception {
+ browser = session.createBrowser(queue);
+
+ @SuppressWarnings("unchecked")
+ Enumeration<Message> browse = browser.getEnumeration();
+
+ assertFalse(browse.hasMoreElements());
+ browser.close();
+ assertFalse(browse.hasMoreElements());
+ }
}
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionTest.java
index c4f78d4..6cbc308 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionTest.java
@@ -284,7 +284,7 @@
} catch (InvalidDestinationException idex) {}
}
- @Test//(timeout = 10000)
+ @Test(timeout = 10000)
public void testCannotCreateConsumerOnDeletedTemporaryDestination() throws JMSException {
JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
TemporaryQueue tempQueue = session.createTemporaryQueue();
@@ -303,4 +303,59 @@
fail("Should not be able to send to this temporary destination");
} catch (IllegalStateException ise) {}
}
+
+ @Test(timeout = 10000)
+ public void testSessionRunFailsWhenSessionIsClosed() throws Exception {
+ JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ try {
+ session.run();
+ fail("Not implemented");
+ } catch (UnsupportedOperationException usoe) {}
+
+ session.close();
+
+ try {
+ session.run();
+ fail("Session is closed.");
+ } catch (RuntimeException re) {}
+ }
+
+ //----- Not yet implemented, should all be cleared on implementation -----//
+
+ @Test(timeout = 10000)
+ public void testCreateSharedConsumer() throws Exception {
+ JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ try {
+ session.createSharedConsumer(session.createTopic("test"), "subscription");
+ fail("Should fail until implemented.");
+ } catch (JMSException ex) {}
+ }
+
+ @Test(timeout = 10000)
+ public void testCreateSharedConsumerWithSelector() throws Exception {
+ JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ try {
+ session.createSharedConsumer(session.createTopic("test"), "subscription", "a = b");
+ fail("Should fail until implemented.");
+ } catch (JMSException ex) {}
+ }
+
+ @Test(timeout = 10000)
+ public void testCreateSharedDurableConsumer() throws Exception {
+ JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ try {
+ session.createSharedDurableConsumer(session.createTopic("test"), "subscription");
+ fail("Should fail until implemented.");
+ } catch (JMSException ex) {}
+ }
+
+ @Test(timeout = 10000)
+ public void testCreateSharedDurableConsumerWithSelector() throws Exception {
+ JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ try {
+ session.createSharedDurableConsumer(session.createTopic("test"), "subscription", "a = b");
+ fail("Should fail until implemented.");
+ } catch (JMSException ex) {}
+ }
}