From 4c193a217c1c6424aea1371689f89322c6d99bd5 Mon Sep 17 00:00:00 2001 From: Iwein Fuld Date: Fri, 10 Sep 2010 20:32:27 +0200 Subject: [PATCH] INT-1339: Added testcases enforcing the desired behavior --- .../SequenceSizeReleaseStrategyTests.java | 75 ++++++++++++++++++- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/SequenceSizeReleaseStrategyTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/SequenceSizeReleaseStrategyTests.java index 4a8a5a9cbc..939fb20a0e 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/SequenceSizeReleaseStrategyTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/SequenceSizeReleaseStrategyTests.java @@ -16,16 +16,18 @@ package org.springframework.integration.aggregator; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - import org.junit.Test; import org.springframework.integration.Message; +import org.springframework.integration.store.MessageGroup; import org.springframework.integration.store.SimpleMessageGroup; import org.springframework.integration.support.MessageBuilder; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + /** * @author Mark Fisher + * @author Iwein Fuld */ public class SequenceSizeReleaseStrategyTests { @@ -58,4 +60,71 @@ public class SequenceSizeReleaseStrategyTests { assertTrue(releaseStrategy.canRelease(new SimpleMessageGroup("FOO"))); } + @Test + public void shouldReleaseHeadOfSequenceDeliveredInOrder() { + SequenceSizeReleaseStrategy releaseStrategy = new SequenceSizeReleaseStrategy(); + releaseStrategy.setReleasePartialSequences(true); + + SimpleMessageGroup messages = new SimpleMessageGroup("FOO"); + + assertTrue(releaseStrategy.canRelease(groupWithFirstMessagesOfIncompleteSequence(messages))); + } + + private SimpleMessageGroup groupWithFirstMessagesOfIncompleteSequence(SimpleMessageGroup messages) { + Message message1 = MessageBuilder.withPayload("test1") + .setSequenceSize(3).setSequenceNumber(1).build(); + Message message2 = MessageBuilder.withPayload("test2") + .setSequenceSize(3).setSequenceNumber(2).build(); + + messages.add(message1); + messages.add(message2); + return messages; + } + + @Test + public void shouldReleaseHeadOfSequenceDeliveredOutOfOrder() { + SequenceSizeReleaseStrategy releaseStrategy = new SequenceSizeReleaseStrategy(); + releaseStrategy.setReleasePartialSequences(true); + + assertTrue(releaseStrategy.canRelease(groupWithLastAndFirstMessagesOfIncompleteSequence())); + } + + private MessageGroup groupWithLastAndFirstMessagesOfIncompleteSequence() { + SimpleMessageGroup messages = new SimpleMessageGroup("FOO"); + + Message message1 = MessageBuilder.withPayload("test1") + .setSequenceSize(3).setSequenceNumber(3).build(); + Message message2 = MessageBuilder.withPayload("test2") + .setSequenceSize(3).setSequenceNumber(1).build(); + + messages.add(message1); + messages.add(message2); + return messages; + } + + @Test + public void shouldPartiallyReleaseAsEarlyAsPossible() { + SequenceSizeReleaseStrategy releaseStrategy = new SequenceSizeReleaseStrategy(); + releaseStrategy.setReleasePartialSequences(true); + + SimpleMessageGroup messages = new SimpleMessageGroup("FOO"); + + Message message1 = MessageBuilder.withPayload("test1").setSequenceSize(5).setSequenceNumber(1).build(); + Message message2 = MessageBuilder.withPayload("test2").setSequenceSize(5).setSequenceNumber(2).build(); + Message message3 = MessageBuilder.withPayload("test3").setSequenceSize(5).setSequenceNumber(3).build(); + Message message4 = MessageBuilder.withPayload("test4").setSequenceSize(5).setSequenceNumber(4).build(); + Message message5 = MessageBuilder.withPayload("test5").setSequenceSize(5).setSequenceNumber(5).build(); + + messages.add(message5); + assertFalse(releaseStrategy.canRelease(messages)); + messages.add(message1); + assertTrue(releaseStrategy.canRelease(messages)); + messages.add(message2); + assertTrue(releaseStrategy.canRelease(messages)); + messages.add(message3); + assertTrue(releaseStrategy.canRelease(messages)); + messages.add(message4); + assertTrue(releaseStrategy.canRelease(messages)); + } + }