/** * 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.camel.component.rabbitmq; import java.io.IOException; import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Connection; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.impl.DefaultMessage; import org.junit.Before; import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; public class RabbitMQProducerTest { private RabbitMQEndpoint endpoint = Mockito.mock(RabbitMQEndpoint.class); private Exchange exchange = Mockito.mock(Exchange.class); private Message message = new DefaultMessage(); private Connection conn = Mockito.mock(Connection.class); @Before public void before() throws IOException, TimeoutException { Mockito.when(exchange.getIn()).thenReturn(message); Mockito.when(endpoint.connect(Matchers.any(ExecutorService.class))).thenReturn(conn); Mockito.when(conn.createChannel()).thenReturn(null); Mockito.when(endpoint.getMessageConverter()).thenReturn(new RabbitMQMessageConverter()); } @Test public void testPropertiesUsesContentTypeHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.CONTENT_TYPE, "application/json"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("application/json", props.getContentType()); } @Test public void testPropertiesUsesCorrelationHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.CORRELATIONID, "124544"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("124544", props.getCorrelationId()); } @Test public void testPropertiesUsesUserIdHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.USERID, "abcd"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("abcd", props.getUserId()); } @Test public void testPropertiesUsesMessageIdHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.MESSAGE_ID, "abvasweaqQQ"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("abvasweaqQQ", props.getMessageId()); } @Test public void testPropertiesUsesDeliveryModeHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.DELIVERY_MODE, "444"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals(444, props.getDeliveryMode().intValue()); } @Test public void testPropertiesUsesClusterIdHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.CLUSTERID, "abtasg5r"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("abtasg5r", props.getClusterId()); } @Test public void testPropertiesUsesReplyToHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.REPLY_TO, "bbbbdfgdfg"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("bbbbdfgdfg", props.getReplyTo()); } @Test public void testPropertiesUsesPriorityHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.PRIORITY, "15"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals(15, props.getPriority().intValue()); } @Test public void testPropertiesUsesExpirationHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.EXPIRATION, "thursday"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("thursday", props.getExpiration()); } @Test public void testPropertiesUsesTypeHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.TYPE, "sometype"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("sometype", props.getType()); } @Test public void testPropertiesUsesContentEncodingHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.CONTENT_ENCODING, "qwergghdfdfgdfgg"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("qwergghdfdfgdfgg", props.getContentEncoding()); } @Test public void testPropertiesAppIdHeader() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.APP_ID, "qweeqwe"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("qweeqwe", props.getAppId()); } @Test public void testPropertiesUsesTimestampHeaderAsLongValue() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.TIMESTAMP, "12345123"); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals(12345123, props.getTimestamp().getTime()); } @Test public void testPropertiesUsesTimestampHeaderAsDateValue() throws IOException { Date timestamp = new Date(); RabbitMQProducer producer = new RabbitMQProducer(endpoint); message.setHeader(RabbitMQConstants.TIMESTAMP, timestamp); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals(timestamp, props.getTimestamp()); } @Test public void testPropertiesUsesCustomHeaders() throws IOException { RabbitMQProducer producer = new RabbitMQProducer(endpoint); Map<String, Object> customHeaders = new HashMap<String, Object>(); customHeaders.put("stringHeader", "A string"); customHeaders.put("bigDecimalHeader", new BigDecimal("12.34")); customHeaders.put("integerHeader", 42); customHeaders.put("doubleHeader", 42.24); customHeaders.put("booleanHeader", true); customHeaders.put("dateHeader", new Date(0)); customHeaders.put("byteArrayHeader", "foo".getBytes()); customHeaders.put("invalidHeader", new Something()); message.setHeaders(customHeaders); AMQP.BasicProperties props = producer.buildProperties(exchange).build(); assertEquals("A string", props.getHeaders().get("stringHeader")); assertEquals(new BigDecimal("12.34"), props.getHeaders().get("bigDecimalHeader")); assertEquals(42, props.getHeaders().get("integerHeader")); assertEquals(42.24, props.getHeaders().get("doubleHeader")); assertEquals(true, props.getHeaders().get("booleanHeader")); assertEquals(new Date(0), props.getHeaders().get("dateHeader")); assertArrayEquals("foo".getBytes(), (byte[]) props.getHeaders().get("byteArrayHeader")); assertNull(props.getHeaders().get("invalidHeader")); } private static class Something { } }