/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ package amqp.spring.camel.component; import org.apache.camel.*; import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.Assert; import org.junit.Test; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.test.util.ReflectionTestUtils; public class SpringAMQPEndpointTest extends CamelTestSupport { @Test public void testCreateContext() throws Exception { Component component = context().getComponent("spring-amqp", SpringAMQPComponent.class); Assert.assertNotNull(component); Endpoint endpoint = component.createEndpoint("spring-amqp:test.a"); Assert.assertNotNull(endpoint); } @Test public void testUriParsingOfDefaultExchangeWithQueueAndRoutingKeyForConsumer() { Component component = context().getComponent("spring-amqp", SpringAMQPComponent.class); String remaining = ":queue1:routingKey1"; String uri = "spring-amqp:"+remaining; SpringAMQPEndpoint endpoint = new SpringAMQPEndpoint(component, uri, remaining, null, null); Assert.assertEquals("", endpoint.exchangeName); Assert.assertEquals("queue1", endpoint.queueName); Assert.assertEquals("routingKey1", endpoint.routingKey); } @Test public void testUriParsingOfDefaultExchangeWithRoutingKeyForProducer() { Component component = context().getComponent("spring-amqp", SpringAMQPComponent.class); String remaining = ":routingKey1"; String uri = "spring-amqp:"+remaining; SpringAMQPEndpoint endpoint = new SpringAMQPEndpoint(component, uri, remaining, null, null); Assert.assertEquals("", endpoint.exchangeName); Assert.assertEquals("routingKey1", ReflectionTestUtils.getField(endpoint, "tempQueueOrKey")); } @Test public void testIsUsingDefaultExchangeTrue() { Component component = context().getComponent("spring-amqp", SpringAMQPComponent.class); String remaining = ":routingKey1"; String uri = "spring-amqp:"+remaining; SpringAMQPEndpoint endpoint = new SpringAMQPEndpoint(component, uri, remaining, null, null); Assert.assertTrue(endpoint.isUsingDefaultExchange()); } @Test public void testIsNotUsingDefaultExchangeFalse() { Component component = context().getComponent("spring-amqp", SpringAMQPComponent.class); String remaining = "exchange1:routingKey1"; String uri = "spring-amqp:"+remaining; SpringAMQPEndpoint endpoint = new SpringAMQPEndpoint(component, uri, remaining, null, null); Assert.assertFalse(endpoint.isUsingDefaultExchange()); } @Test public void testDefaultFanoutConsumer() throws Exception { Processor defaultProcessor = new Processor() { @Override public void process(Exchange exchange) throws Exception { } }; Component component = context().getComponent("spring-amqp", SpringAMQPComponent.class); String remaining = "exchange2:queue2"; String uri = "spring-amqp:"+remaining; SpringAMQPEndpoint endpoint = new SpringAMQPEndpoint(component, uri, remaining, null, null); endpoint.createConsumer(defaultProcessor); //If you specify an exchange and queue but nothing else, this should be a fanout exchange Assert.assertEquals("queue2", endpoint.getQueueName()); Assert.assertEquals("exchange2", endpoint.getExchangeName()); Assert.assertEquals("fanout", endpoint.getType()); } @Test public void testHashDelimiters() { Component component = context().getComponent("spring-amqp", SpringAMQPComponent.class); String remaining = "exchange1:#.routingKey1.#"; String uri = "spring-amqp:"+remaining; SpringAMQPEndpoint endpoint = new SpringAMQPEndpoint(component, uri, remaining, null, null); //Ensure things can be printed correctly; setEndpoint(String) has had issues previously Assert.assertNotNull(endpoint.toString()); } @Override protected CamelContext createCamelContext() throws Exception { ConnectionFactory factory = new CachingConnectionFactory(); CamelContext camelContext = super.createCamelContext(); camelContext.addComponent("spring-amqp", new SpringAMQPComponent(factory)); return camelContext; } }