/**
* 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.apache.cxf.transport.jms.uri;
import java.util.Map;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.jms.uri.JMSEndpoint.DeliveryModeType;
import org.junit.Assert;
import org.junit.Test;
public class JMSEndpointTest extends Assert {
private static final String TEST_VALUE = "testValue";
@Test
public void testBasicQueue() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?concurrentConsumers=21");
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
assertEquals("Foo.Bar", endpoint.getDestinationName());
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
assertEquals(21, endpoint.getConcurrentConsumers());
}
@Test
public void testQueueParameters() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?foo=bar&foo2=bar2&useConduitIdSelector=false");
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
assertEquals(endpoint.getDestinationName(), "Foo.Bar");
assertEquals(endpoint.getJmsVariant(), JMSEndpoint.QUEUE);
assertEquals(false, endpoint.isUseConduitIdSelector());
assertEquals(endpoint.getParameters().size(), 2);
assertEquals(endpoint.getParameter("foo"), "bar");
assertEquals(endpoint.getParameter("foo2"), "bar2");
}
@Test
public void testBasicTopic() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:topic:Foo.Bar");
assertEquals(JMSEndpoint.TOPIC, endpoint.getJmsVariant());
assertEquals(endpoint.getDestinationName(), "Foo.Bar");
assertEquals(endpoint.getJmsVariant(), JMSEndpoint.TOPIC);
}
@Test
public void testTopicParameters() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:topic:Foo.Bar?foo=bar&foo2=bar2");
assertEquals(JMSEndpoint.TOPIC, endpoint.getJmsVariant());
assertEquals(endpoint.getParameters().size(), 2);
assertEquals(endpoint.getParameter("foo"), "bar");
assertEquals(endpoint.getParameter("foo2"), "bar2");
}
@Test
public void testBasicJNDI() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:jndi:Foo.Bar");
assertEquals(JMSEndpoint.JNDI, endpoint.getJmsVariant());
assertEquals(endpoint.getDestinationName(), "Foo.Bar");
assertEquals(endpoint.getJmsVariant(), JMSEndpoint.JNDI);
}
@Test
public void testJNDIParameters() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
+ "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ "&jndiConnectionFactoryName=ConnectionFactory"
+ "&jndiURL=tcp://localhost:61616");
assertEquals(JMSEndpoint.JNDI, endpoint.getJmsVariant());
assertEquals(endpoint.getParameters().size(), 0);
assertEquals(endpoint.getDestinationName(), "Foo.Bar");
assertEquals(endpoint.getJndiInitialContextFactory(),
"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
assertEquals(endpoint.getJndiConnectionFactoryName(),
"ConnectionFactory");
assertEquals(endpoint.getJndiURL(), "tcp://localhost:61616");
}
@Test
public void testReplyToNameParameters() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?replyToName=FOO.Tar");
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
assertEquals("Foo.Bar", endpoint.getDestinationName());
assertNull(endpoint.getTopicReplyToName());
assertEquals("FOO.Tar", endpoint.getReplyToName());
try {
new JMSEndpoint("jms:queue:Foo.Bar?replyToName=FOO.Tar&topicReplyToName=FOO.Zar");
fail("Expecting exception here");
} catch (IllegalArgumentException ex) {
// expect the exception
}
endpoint = new JMSEndpoint("jms:queue:Foo.Bar?topicReplyToName=FOO.Zar");
assertEquals("Foo.Bar", endpoint.getDestinationName());
assertNull(endpoint.getReplyToName());
assertEquals("FOO.Zar", endpoint.getTopicReplyToName());
}
@Test
public void testJNDIWithAdditionalParameters() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
+ "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ "&jndiConnectionFactoryName=ConnectionFactory"
+ "&jndiURL=tcp://localhost:61616"
+ "&jndi-com.sun.jndi.someParameter=someValue"
+ "&durableSubscriptionName=dur");
assertEquals(JMSEndpoint.JNDI, endpoint.getJmsVariant());
assertEquals(endpoint.getParameters().size(), 0);
assertEquals("org.apache.activemq.jndi.ActiveMQInitialContextFactory",
endpoint.getJndiInitialContextFactory());
assertEquals("ConnectionFactory", endpoint.getJndiConnectionFactoryName());
assertEquals("tcp://localhost:61616", endpoint.getJndiURL());
assertEquals("dur", endpoint.getDurableSubscriptionName());
Map<String, String> addParas = endpoint.getJndiParameters();
assertEquals(1, addParas.size());
assertEquals("someValue", addParas.get("com.sun.jndi.someParameter"));
}
@Test
public void testSharedParameters() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?" + "deliveryMode=NON_PERSISTENT"
+ "&timeToLive=100" + "&priority=5" + "&replyToName=foo.bar2");
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
assertEquals(0, endpoint.getParameters().size());
assertEquals(DeliveryModeType.NON_PERSISTENT, endpoint.getDeliveryMode());
assertEquals(100, endpoint.getTimeToLive());
assertEquals(5, endpoint.getPriority());
assertEquals("foo.bar2", endpoint.getReplyToName());
}
@Test
public void testRequestUri() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:jndi:Foo.Bar"
+ "?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ "&targetService=greetMe"
+ "&replyToName=replyQueue"
+ "&timeToLive=1000"
+ "&priority=3"
+ "&foo=bar"
+ "&foo2=bar2");
assertEquals(JMSEndpoint.JNDI, endpoint.getJmsVariant());
assertEquals(2, endpoint.getParameters().size());
String requestUri = endpoint.getRequestURI();
// Checking what's the request uri should have
assertTrue(requestUri.startsWith("jms:jndi:Foo.Bar?"));
assertTrue(requestUri.contains("foo=bar"));
assertTrue(requestUri.contains("foo2=bar2"));
// Checking what's the request uri should not have
assertFalse(requestUri.contains("jndiInitialContextFactory"));
assertFalse(requestUri.contains("targetService"));
assertFalse(requestUri.contains("replyToName"));
assertFalse(requestUri.contains("priority=3"));
}
@Test
public void testRequestUriWithMessageType() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?messageType=text");
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
assertEquals("text", endpoint.getMessageType().value());
endpoint = new JMSEndpoint("jms:queue:Foo.Bar");
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
assertEquals("byte", endpoint.getMessageType().value());
endpoint = new JMSEndpoint("jms:queue:Foo.Bar?messageType=binary");
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
assertEquals("binary", endpoint.getMessageType().value());
}
@Test
public void nonSoapJMS() throws Exception {
JMSEndpoint endpoint = new JMSEndpoint("jms://");
assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
}
@Test
public void testTransactionManager() {
JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?jndiTransactionManagerName=test");
assertEquals("test", endpoint.getJndiTransactionManagerName());
}
@Test
public void testJaxWsProps() throws Exception {
EndpointInfo ei = new EndpointInfo();
ei.setProperty(JMSEndpoint.JAXWS_PROPERTY_PREFIX + "durableSubscriptionName", TEST_VALUE);
JMSEndpoint endpoint = new JMSEndpoint(ei, "jms:queue:Foo.Bar");
assertEquals(endpoint.getDurableSubscriptionName(), TEST_VALUE);
}
}