package org.objectweb.jtests.jms.conform.session;
import org.objectweb.jtests.jms.framework.*;
import junit.framework.*;
import javax.jms.*;
import java.util.Hashtable;
public class TopicSessionTest extends PubSubTestCase {
public void testRollbackReceivedMessage() {
try {
publisherConnection.stop();
publisherSession = publisherConnection.createTopicSession(true,0);
assertEquals(true, publisherSession.getTransacted());
publisher = publisherSession.createPublisher(publisherTopic);
publisherConnection.start();
subscriberConnection.stop();
subscriberSession = subscriberConnection.createTopicSession(true,0);
assertEquals(true, subscriberSession.getTransacted());
subscriber = subscriberSession.createSubscriber(subscriberTopic);
subscriberConnection.start();
TextMessage message = publisherSession.createTextMessage();
message.setText("testRollbackReceivedMessage");
publisher.publish(message);
publisherSession.commit();
Message msg1 = subscriber.receive(1000);
assertTrue("no message received", msg1 != null);
assertTrue(msg1 instanceof TextMessage);
assertEquals("testRollbackReceivedMessage", ((TextMessage)msg1).getText());
subscriberSession.rollback();
Message msg2 = subscriber.receive(1000);
assertTrue("no message received after rollbacking subscriber session.", msg2 != null);
assertTrue(msg2 instanceof TextMessage);
assertEquals("testRollbackReceivedMessage", ((TextMessage)msg2).getText());
subscriberSession.commit();
} catch (Exception e) {
fail(e);
}
}
public void testDurableSubscriber() {
try {
subscriber = subscriberSession.createDurableSubscriber(subscriberTopic,"testTopic");
subscriberConnection.close();
subscriberConnection = null;
TextMessage message = publisherSession.createTextMessage();
message.setText("test");
publisher.publish(message);
subscriberConnection = subscriberTCF.createTopicConnection();
if (subscriberConnection.getClientID() == null) {
subscriberConnection.setClientID("subscriberConnection");
}
subscriberSession = subscriberConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
subscriber = subscriberSession.createDurableSubscriber(subscriberTopic, "testTopic");
subscriberConnection.start();
TextMessage m = (TextMessage)subscriber.receiveNoWait();
assertTrue(m != null);
assertEquals("test", m.getText());
} catch (JMSException e) {
fail(e);
}
finally
{
try
{
subscriberSession.unsubscribe("testTopic");
}
catch (JMSException e)
{
fail(e);
}
}
}
public void testUnsubscribe() {
try {
subscriber = subscriberSession.createDurableSubscriber(subscriberTopic,"topic");
subscriber.close();
subscriberSession.unsubscribe("topic");
} catch (JMSException e) {
fail(e);
}
}
public void testCreateDurableSubscriber_2() {
try {
subscriberSession.createDurableSubscriber(subscriberTopic,
"topic",
"definitely not a message selector!",
true);
fail("Should throw a javax.jms.InvalidSelectorException.\n");
} catch (InvalidSelectorException e) {
} catch (JMSException e) {
fail("Should throw a javax.jms.InvalidSelectorException, not a "+ e);
}
}
public void testCreateDurableSubscriber_1() {
try {
subscriberSession.createDurableSubscriber((Topic)null, "topic");
fail("Should throw a javax.jms.InvalidDestinationException.\n");
} catch (InvalidDestinationException e) {
} catch (JMSException e) {
fail("Should throw a javax.jms.InvalidDestinationException, not a "+ e);
}
}
public void testCreateSubscriber_2() {
try {
subscriberSession.createSubscriber(subscriberTopic,
"definitely not a message selector!",
true);
fail("Should throw a javax.jms.InvalidSelectorException.\n");
} catch (InvalidSelectorException e) {
} catch (JMSException e) {
fail("Should throw a javax.jms.InvalidSelectorException, not a "+ e);
}
}
public void testCreateSubscriber_1() {
try {
subscriberSession.createSubscriber((Topic)null);
fail("Should throw a javax.jms.InvalidDestinationException.\n");
} catch (InvalidDestinationException e) {
} catch (JMSException e) {
fail("Should throw a javax.jms.InvalidDestinationException, not a "+ e);
}
}
public static Test suite() {
return new TestSuite(TopicSessionTest.class);
}
public TopicSessionTest(String name) {
super(name);
}
}