@Test public void splitToIterator_sequenceSizeInLastMessageHeader() { int messageQuantity = 5; MethodInvokingSplitter splitter = new MethodInvokingSplitter(new IteratorTestBean(messageQuantity)); splitter.setBeanFactory(mock(BeanFactory.class)); QueueChannel replyChannel = new QueueChannel(); splitter.setOutputChannel(replyChannel); splitter.afterPropertiesSet(); splitter.handleMessage(this.message); List<Message<?>> receivedMessages = replyChannel.clear(); receivedMessages.sort(Comparator.comparing(o -> o.getHeaders().get(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, Integer.class))); assertThat(receivedMessages.get(4) .getHeaders() .get(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, Integer.class), is(messageQuantity)); }
@Test public void splitToIterator_sourceMessageHeadersIncluded() { String anyHeaderKey = "anyProperty1"; String anyHeaderValue = "anyValue1"; this.message = MessageBuilder.fromMessage(this.message) .setHeader(anyHeaderKey, anyHeaderValue) .build(); int messageQuantity = 5; MethodInvokingSplitter splitter = new MethodInvokingSplitter(new IteratorTestBean(messageQuantity)); splitter.setBeanFactory(mock(BeanFactory.class)); QueueChannel replyChannel = new QueueChannel(); splitter.setOutputChannel(replyChannel); splitter.afterPropertiesSet(); splitter.handleMessage(this.message); List<Message<?>> receivedMessages = replyChannel.clear(); assertThat(receivedMessages.size(), is(messageQuantity)); for (Message<?> receivedMessage : receivedMessages) { MessageHeaders headers = receivedMessage.getHeaders(); assertTrue("Unexpected result with: " + headers, headers.containsKey(anyHeaderKey)); assertThat("Unexpected result with: " + headers, headers.get(anyHeaderKey, String.class), is(anyHeaderValue)); assertThat("Unexpected result with: " + headers, headers.get(IntegrationMessageHeaderAccessor.CORRELATION_ID, UUID.class), is(message.getHeaders().getId())); } }
@Test public void splitWithMassiveReplyMessages_allMessagesSent() { final int messageQuantity = 100000; MethodInvokingSplitter splitter = new MethodInvokingSplitter(new IteratorTestBean(messageQuantity)); splitter.setBeanFactory(mock(BeanFactory.class)); DirectChannel replyChannel = new DirectChannel(); splitter.setOutputChannel(replyChannel); splitter.afterPropertiesSet(); final AtomicInteger receivedMessageCounter = new AtomicInteger(0); new EventDrivenConsumer(replyChannel, message -> { assertThat("Failure with msg: " + message, message.getPayload(), is(notNullValue())); receivedMessageCounter.incrementAndGet(); }).start(); splitter.handleMessage(this.message); assertThat(receivedMessageCounter.get(), is(messageQuantity)); }
@Test public void splitToIterator_allMessagesContainSequenceNumber() { final int messageQuantity = 5; MethodInvokingSplitter splitter = new MethodInvokingSplitter(new IteratorTestBean(messageQuantity)); splitter.setBeanFactory(mock(BeanFactory.class)); DirectChannel replyChannel = new DirectChannel(); splitter.setOutputChannel(replyChannel); splitter.afterPropertiesSet(); new EventDrivenConsumer(replyChannel, message -> assertThat("Failure with msg: " + message, message.getHeaders().get(IntegrationMessageHeaderAccessor.SEQUENCE_NUMBER, Integer.class), is(Integer.valueOf((String) message.getPayload())))).start(); splitter.handleMessage(this.message); }
@Test public void splitToIterator_allMessagesSent() { int messageQuantity = 5; MethodInvokingSplitter splitter = new MethodInvokingSplitter(new IteratorTestBean(messageQuantity)); splitter.setBeanFactory(mock(BeanFactory.class)); QueueChannel replyChannel = new QueueChannel(); splitter.setOutputChannel(replyChannel); splitter.afterPropertiesSet(); splitter.handleMessage(this.message); assertThat(replyChannel.getQueueSize(), is(messageQuantity)); }