/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.objectweb.jtests.jms.conform.connection; import javax.jms.JMSException; import org.junit.Assert; import org.junit.Test; import org.objectweb.jtests.jms.framework.PubSubTestCase; // FIXME include in TestSuite @RunWith(Suite.class)@Suite.SuiteClasses(...) /** * Test topic-specific connection features. * * Test setting of client ID which is relevant only for Durable Subscription */ public class TopicConnectionTest extends PubSubTestCase { /** * Test that a call to <code>setClientID</code> will throw an * <code>IllegalStateException</code> if a client ID has already been set * see JMS javadoc * http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/jms/Connection.html#setClientID(java.lang.String) */ @Test public void testSetClientID_1() { try { // we start from a clean state for the connection subscriberConnection.close(); subscriberConnection = null; subscriberConnection = subscriberTCF.createTopicConnection(); // if the JMS provider does not set a client ID, we do. if (subscriberConnection.getClientID() == null) { subscriberConnection.setClientID("testSetClientID_1"); Assert.assertEquals("testSetClientID_1", subscriberConnection.getClientID()); } // now the connection has a client ID (either "testSetClientID_1" or one set by the provider Assert.assertTrue(subscriberConnection.getClientID() != null); // an attempt to set a client ID should now throw an IllegalStateException subscriberConnection.setClientID("another client ID"); Assert.fail("Should raise a javax.jms.IllegalStateException"); } catch (javax.jms.IllegalStateException e) { } catch (JMSException e) { Assert.fail("Should raise a javax.jms.IllegalStateException, not a " + e); } catch (java.lang.IllegalStateException e) { Assert.fail("Should raise a javax.jms.IllegalStateException, not a java.lang.IllegalStateException"); } } /** * Test that a call to <code>setClientID</code> can occur only after connection creation * and before any other action on the connection. * <em>This test is relevant only if the ID is set by the JMS client</em> * see JMS javadoc * http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/jms/Connection.html#setClientID(java.lang.String) */ @Test public void testSetClientID_2() { try { // we start from a clean state for the first connection subscriberConnection.close(); subscriberConnection = null; subscriberConnection = subscriberTCF.createTopicConnection(); // if the JMS provider has set a client ID, this test is not relevant if (subscriberConnection.getClientID() != null) { return; } // we start the connection subscriberConnection.start(); // an attempt to set the client ID now should throw an IllegalStateException subscriberConnection.setClientID("testSetClientID_2"); Assert.fail("Should throw a javax.jms.IllegalStateException"); } catch (javax.jms.IllegalStateException e) { } catch (JMSException e) { Assert.fail("Should raise a javax.jms.IllegalStateException, not a " + e); } catch (java.lang.IllegalStateException e) { Assert.fail("Should raise a javax.jms.IllegalStateException, not a java.lang.IllegalStateException"); } } /** * Test that if another connection with the same clientID is already running when * <code>setClientID</code> is called, the JMS provider should detect the duplicate * ID and throw an <code>InvalidClientIDException</code> * <em>This test is relevant only if the ID is set by the JMS client</em> * see JMS javadoc * http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/jms/Connection.html#setClientID(java.lang.String) * *... This test is not valid... as getClientID is caleld before setClientID */ /*public void testSetClientID_3() { try { // we start from a clean state for the first connection subscriberConnection.close(); subscriberConnection = null; subscriberConnection = subscriberTCF.createTopicConnection(); // if the JMS provider has set a client ID, this test is not relevant if (subscriberConnection.getClientID() != null) { return; } // the JMS provider has not set a client ID, so we do subscriberConnection.setClientID("testSetClientID_3"); assertEquals("testSetClientID_3", subscriberConnection.getClientID()); // we create a new connection and try to set the same ID than for subscriberConnection TopicConnection connection_2 = subscriberTCF.createTopicConnection(); assertTrue(connection_2.getClientID() == null); connection_2.setClientID("testSetClientID_3"); fail("Should throw a javax.jms.InvalidClientIDException"); } catch (InvalidClientIDException e) { } catch (JMSException e) { fail(e); } }*/ }