@Test public void testPubSub() { final Channel channel = mock(Channel.class); Connection connection = mock(Connection.class); doAnswer(invocation -> channel).when(connection).createChannel(anyBoolean()); ConnectionFactory connectionFactory = mock(ConnectionFactory.class); when(connectionFactory.createConnection()).thenReturn(connection); SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); container.setConnectionFactory(connectionFactory); AmqpTemplate amqpTemplate = mock(AmqpTemplate.class); PublishSubscribeAmqpChannel amqpChannel = new PublishSubscribeAmqpChannel("noSubscribersChannel", container, amqpTemplate); amqpChannel.setBeanName("noSubscribersChannel"); amqpChannel.setBeanFactory(mock(BeanFactory.class)); amqpChannel.afterPropertiesSet(); List<String> logList = insertMockLoggerInListener(amqpChannel); MessageListener listener = (MessageListener) container.getMessageListener(); listener.onMessage(new Message("Hello world!".getBytes(), null)); verifyLogReceived(logList); }
@Test // INT-2090 public void jsonTypeIdNotOverwritten() { DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.inboundMapper(); MessageConverter converter = new Jackson2JsonMessageConverter(); MessageProperties amqpProperties = new MessageProperties(); converter.toMessage("123", amqpProperties); Map<String, Object> headerMap = new HashMap<String, Object>(); headerMap.put("__TypeId__", "java.lang.Integer"); MessageHeaders integrationHeaders = new MessageHeaders(headerMap); headerMapper.fromHeadersToRequest(integrationHeaders, amqpProperties); assertEquals("java.lang.String", amqpProperties.getHeaders().get("__TypeId__")); Object result = converter.fromMessage(new Message("123".getBytes(), amqpProperties)); assertEquals(String.class, result.getClass()); }
@SuppressWarnings("unchecked") @Test public void testPtP() throws Exception { final Channel channel = mock(Channel.class); DeclareOk declareOk = mock(DeclareOk.class); when(declareOk.getQueue()).thenReturn("noSubscribersChannel"); when(channel.queueDeclare(anyString(), anyBoolean(), anyBoolean(), anyBoolean(), isNull())) .thenReturn(declareOk); Connection connection = mock(Connection.class); doAnswer(invocation -> channel).when(connection).createChannel(anyBoolean()); ConnectionFactory connectionFactory = mock(ConnectionFactory.class); when(connectionFactory.createConnection()).thenReturn(connection); SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); container.setConnectionFactory(connectionFactory); AmqpTemplate amqpTemplate = mock(AmqpTemplate.class); PointToPointSubscribableAmqpChannel amqpChannel = new PointToPointSubscribableAmqpChannel("noSubscribersChannel", container, amqpTemplate); amqpChannel.setBeanName("noSubscribersChannel"); amqpChannel.setBeanFactory(mock(BeanFactory.class)); amqpChannel.afterPropertiesSet(); MessageListener listener = (MessageListener) container.getMessageListener(); try { listener.onMessage(new Message("Hello world!".getBytes(), null)); fail("Exception expected"); } catch (MessageDeliveryException e) { assertThat(e.getMessage(), containsString("Dispatcher has no subscribers for amqp-channel 'noSubscribersChannel'.")); } }
amqpProperties.setHeader("foobar", "foobar"); amqpProperties.setHeader("bar", "bar"); return new org.springframework.amqp.core.Message("hello".getBytes(), amqpProperties); }) .when(amqpTemplate).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class),
amqpProperties.setHeader("foobar", "foobar"); amqpProperties.setHeader("bar", "bar"); return new org.springframework.amqp.core.Message("hello".getBytes(), amqpProperties); }) .when(amqpTemplate).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class),
amqpProperties.setHeader("foo", "foo"); amqpProperties.setHeader("bar", "bar"); Message amqpMessage = new Message("hello".getBytes(), amqpProperties); listener.onMessage(amqpMessage, null);
assertEquals(MessageDeliveryMode.PERSISTENT, properties.getDeliveryMode()); amqpProperties.setReceivedDeliveryMode(properties.getDeliveryMode()); return new org.springframework.amqp.core.Message("hello".getBytes(), amqpProperties); }) .when(amqpTemplate).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class),
amqpProperties.setHeader("foobar", "foobar"); amqpProperties.setHeader("bar", "bar"); return new org.springframework.amqp.core.Message("hello".getBytes(), amqpProperties); }) .when(amqpTemplate).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class),
@Test public void withHeaderMapperNothingToMap() throws Exception { AmqpInboundChannelAdapter adapter = context.getBean("withHeaderMapperNothingToMap", AmqpInboundChannelAdapter.class); AbstractMessageListenerContainer mlc = TestUtils.getPropertyValue(adapter, "messageListenerContainer", AbstractMessageListenerContainer.class); ChannelAwareMessageListener listener = TestUtils.getPropertyValue(mlc, "messageListener", ChannelAwareMessageListener.class); MessageProperties amqpProperties = new MessageProperties(); amqpProperties.setAppId("test.appId"); amqpProperties.setClusterId("test.clusterId"); amqpProperties.setContentEncoding("test.contentEncoding"); amqpProperties.setContentLength(99L); amqpProperties.setContentType("test.contentType"); amqpProperties.setHeader("foo", "foo"); amqpProperties.setHeader("bar", "bar"); Message amqpMessage = new Message("hello".getBytes(), amqpProperties); listener.onMessage(amqpMessage, null); QueueChannel requestChannel = context.getBean("requestChannel", QueueChannel.class); org.springframework.messaging.Message<?> siMessage = requestChannel.receive(0); assertNull(siMessage.getHeaders().get("foo")); assertNull(siMessage.getHeaders().get("bar")); assertNull(siMessage.getHeaders().get(AmqpHeaders.CONTENT_ENCODING)); assertNull(siMessage.getHeaders().get(AmqpHeaders.CLUSTER_ID)); assertNull(siMessage.getHeaders().get(AmqpHeaders.APP_ID)); assertNull(siMessage.getHeaders().get(AmqpHeaders.CONTENT_TYPE)); }
@Test public void withHeaderMapperDefaultMapping() throws Exception { AmqpInboundChannelAdapter adapter = context.getBean("withHeaderMapperDefaultMapping", AmqpInboundChannelAdapter.class); AbstractMessageListenerContainer mlc = TestUtils.getPropertyValue(adapter, "messageListenerContainer", AbstractMessageListenerContainer.class); ChannelAwareMessageListener listener = TestUtils.getPropertyValue(mlc, "messageListener", ChannelAwareMessageListener.class); MessageProperties amqpProperties = new MessageProperties(); amqpProperties.setAppId("test.appId"); amqpProperties.setClusterId("test.clusterId"); amqpProperties.setContentEncoding("test.contentEncoding"); amqpProperties.setContentLength(99L); amqpProperties.setContentType("test.contentType"); amqpProperties.setHeader("foo", "foo"); amqpProperties.setHeader("bar", "bar"); Message amqpMessage = new Message("hello".getBytes(), amqpProperties); listener.onMessage(amqpMessage, null); QueueChannel requestChannel = context.getBean("requestChannel", QueueChannel.class); org.springframework.messaging.Message<?> siMessage = requestChannel.receive(0); assertNotNull(siMessage.getHeaders().get("bar")); assertNotNull(siMessage.getHeaders().get("foo")); assertNotNull(siMessage.getHeaders().get(AmqpHeaders.CONTENT_ENCODING)); assertNotNull(siMessage.getHeaders().get(AmqpHeaders.CLUSTER_ID)); assertNotNull(siMessage.getHeaders().get(AmqpHeaders.APP_ID)); assertNotNull(siMessage.getHeaders().get(AmqpHeaders.CONTENT_TYPE)); }
@Test public void withHeaderMapperOnlyCustomHeaders() throws Exception { AmqpInboundChannelAdapter adapter = context.getBean("withHeaderMapperOnlyCustomHeaders", AmqpInboundChannelAdapter.class); AbstractMessageListenerContainer mlc = TestUtils.getPropertyValue(adapter, "messageListenerContainer", AbstractMessageListenerContainer.class); ChannelAwareMessageListener listener = TestUtils.getPropertyValue(mlc, "messageListener", ChannelAwareMessageListener.class); MessageProperties amqpProperties = new MessageProperties(); amqpProperties.setAppId("test.appId"); amqpProperties.setClusterId("test.clusterId"); amqpProperties.setContentEncoding("test.contentEncoding"); amqpProperties.setContentLength(99L); amqpProperties.setContentType("test.contentType"); amqpProperties.setHeader("foo", "foo"); amqpProperties.setHeader("bar", "bar"); Message amqpMessage = new Message("hello".getBytes(), amqpProperties); listener.onMessage(amqpMessage, null); QueueChannel requestChannel = context.getBean("requestChannel", QueueChannel.class); org.springframework.messaging.Message<?> siMessage = requestChannel.receive(0); assertEquals("foo", siMessage.getHeaders().get("foo")); assertNull(siMessage.getHeaders().get("bar")); assertNull(siMessage.getHeaders().get(AmqpHeaders.CONTENT_ENCODING)); assertNull(siMessage.getHeaders().get(AmqpHeaders.CLUSTER_ID)); assertNull(siMessage.getHeaders().get(AmqpHeaders.APP_ID)); assertNull(siMessage.getHeaders().get(AmqpHeaders.CONTENT_TYPE)); }
@Test public void withHeaderMapperStandardAndCustomHeaders() throws Exception { AmqpInboundChannelAdapter adapter = context.getBean("withHeaderMapperStandardAndCustomHeaders", AmqpInboundChannelAdapter.class); AbstractMessageListenerContainer mlc = TestUtils.getPropertyValue(adapter, "messageListenerContainer", AbstractMessageListenerContainer.class); ChannelAwareMessageListener listener = TestUtils.getPropertyValue(mlc, "messageListener", ChannelAwareMessageListener.class); MessageProperties amqpProperties = new MessageProperties(); amqpProperties.setAppId("test.appId"); amqpProperties.setClusterId("test.clusterId"); amqpProperties.setContentEncoding("test.contentEncoding"); amqpProperties.setContentLength(99L); amqpProperties.setContentType("test.contentType"); amqpProperties.setHeader("foo", "foo"); amqpProperties.setHeader("bar", "bar"); Message amqpMessage = new Message("hello".getBytes(), amqpProperties); listener.onMessage(amqpMessage, null); QueueChannel requestChannel = context.getBean("requestChannel", QueueChannel.class); org.springframework.messaging.Message<?> siMessage = requestChannel.receive(0); assertEquals("foo", siMessage.getHeaders().get("foo")); assertNull(siMessage.getHeaders().get("bar")); assertNotNull(siMessage.getHeaders().get(AmqpHeaders.CONTENT_ENCODING)); assertNotNull(siMessage.getHeaders().get(AmqpHeaders.CLUSTER_ID)); assertNotNull(siMessage.getHeaders().get(AmqpHeaders.APP_ID)); assertNotNull(siMessage.getHeaders().get(AmqpHeaders.CONTENT_TYPE)); }
messageProperties.setConsumerQueue(this.queue); Map<String, Object> headers = this.headerMapper.toHeadersFromRequest(messageProperties); org.springframework.amqp.core.Message amqpMessage = new org.springframework.amqp.core.Message(resp.getBody(), messageProperties); Object payload = this.messageConverter.fromMessage(amqpMessage); AbstractIntegrationMessageBuilder<Object> builder = getMessageBuilderFactory().withPayload(payload)
@SuppressWarnings("unused") public Message handleMessage(Message message) { replyToWas.set(message.getMessageProperties().getReplyTo()); return new Message(new String(message.getBody()).toUpperCase().getBytes(), message.getMessageProperties()); } });
@Test public void testNoTypeInfo() { byte[] bytes = "{\"name\" : { \"foo\" : \"bar\" } }".getBytes(); MessageProperties messageProperties = new MessageProperties(); messageProperties.setContentType("application/json"); Message message = new Message(bytes, messageProperties); Object foo = this.converter.fromMessage(message); assertThat(foo, instanceOf(LinkedHashMap.class)); @SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>) foo; assertThat(map.get("name"), instanceOf(LinkedHashMap.class)); }
@Test public void testInferredTypeInfo() { byte[] bytes = "{\"name\" : \"foo\" }".getBytes(); MessageProperties messageProperties = new MessageProperties(); messageProperties.setContentType("application/json"); messageProperties.setInferredArgumentType(Foo.class); Message message = new Message(bytes, messageProperties); Object foo = this.converter.fromMessage(message); assertThat(foo, instanceOf(Foo.class)); }
@Test public void testConvert4Args() throws Exception { ListenableFuture<String> future = this.asyncTemplate.convertSendAndReceive("", this.requests.getName(), "foo", message -> { String body = new String(message.getBody()); return new Message((body + "bar").getBytes(), message.getMessageProperties()); }); checkConverterResult(future, "FOOBAR"); }
@Test public void toStringForNonSerializableMessageBody() { MessageProperties messageProperties = new MessageProperties(); messageProperties.setContentType(MessageProperties.CONTENT_TYPE_SERIALIZED_OBJECT); Message message = new Message("foo".getBytes(), messageProperties); assertNotNull(message.toString()); }
@Test public void testMPPsAppliedDirectReplyToTests() { this.template.setUseDirectReplyToContainer(false); this.template.sendAndReceive(new Message("foo".getBytes(), new MessageProperties())); assertTrue("before MPP not called", this.config.beforeMppCalled); assertTrue("after MPP not called", this.config.afterMppCalled); }
@Test public void testSimpleBatchTimeoutMultiple() throws Exception { BatchingStrategy batchingStrategy = new SimpleBatchingStrategy(2, Integer.MAX_VALUE, 50); BatchingRabbitTemplate template = new BatchingRabbitTemplate(batchingStrategy, this.scheduler); template.setConnectionFactory(this.connectionFactory); MessageProperties props = new MessageProperties(); Message message = new Message("foo".getBytes(), props); template.send("", ROUTE, message); template.send("", ROUTE, message); message = receive(template); assertEquals("\u0000\u0000\u0000\u0003foo\u0000\u0000\u0000\u0003foo", new String(message.getBody())); }