use of org.springframework.data.redis.connection.RedisConnectionFactory in project spring-integration by spring-projects.
the class RedisMessageGroupStoreTests method testConcurrentModifications.
@Test
@RedisAvailable
@Ignore
public void testConcurrentModifications() throws Exception {
RedisConnectionFactory jcf = getConnectionFactoryForTest();
final RedisMessageStore store1 = new RedisMessageStore(jcf);
final RedisMessageStore store2 = new RedisMessageStore(jcf);
store1.removeMessageGroup(this.groupId);
final Message<?> message = new GenericMessage<>("1");
ExecutorService executor = null;
final List<Object> failures = new ArrayList<>();
for (int i = 0; i < 100; i++) {
executor = Executors.newCachedThreadPool();
executor.execute(() -> {
MessageGroup group = store1.addMessageToGroup(this.groupId, message);
if (group.getMessages().size() != 1) {
failures.add("ADD");
throw new AssertionFailedError("Failed on ADD");
}
});
executor.execute(() -> {
store2.removeMessagesFromGroup(this.groupId, message);
MessageGroup group = store2.getMessageGroup(this.groupId);
if (group.getMessages().size() != 0) {
failures.add("REMOVE");
throw new AssertionFailedError("Failed on Remove");
}
});
executor.shutdown();
executor.awaitTermination(10, TimeUnit.SECONDS);
// ensures that if ADD thread executed after REMOVE, the store is empty for the next cycle
store2.removeMessagesFromGroup(1, message);
}
assertTrue(failures.size() == 0);
}
use of org.springframework.data.redis.connection.RedisConnectionFactory in project spring-integration by spring-projects.
the class RedisMessageGroupStoreTests method testLastReleasedSequenceNumber.
@Test
@RedisAvailable
public void testLastReleasedSequenceNumber() {
RedisConnectionFactory jcf = getConnectionFactoryForTest();
RedisMessageStore store = new RedisMessageStore(jcf);
MessageGroup messageGroup = store.getMessageGroup(this.groupId);
Message<?> message = new GenericMessage<>("Hello");
messageGroup = store.addMessageToGroup(messageGroup.getGroupId(), message);
store.setLastReleasedSequenceNumberForGroup(messageGroup.getGroupId(), 5);
messageGroup = store.getMessageGroup(this.groupId);
assertEquals(5, messageGroup.getLastReleasedMessageSequenceNumber());
}
use of org.springframework.data.redis.connection.RedisConnectionFactory in project spring-integration by spring-projects.
the class RedisMessageGroupStoreTests method testMessageGroupWithAddedMessage.
@Test
@RedisAvailable
public void testMessageGroupWithAddedMessage() {
RedisConnectionFactory jcf = getConnectionFactoryForTest();
RedisMessageStore store = new RedisMessageStore(jcf);
Message<?> message = new GenericMessage<>("Hello");
MessageGroup messageGroup = store.addMessageToGroup(this.groupId, message);
assertEquals(1, messageGroup.size());
// make sure the store is properly rebuild from Redis
store = new RedisMessageStore(jcf);
messageGroup = store.getMessageGroup(this.groupId);
assertEquals(1, messageGroup.size());
}
use of org.springframework.data.redis.connection.RedisConnectionFactory in project spring-integration by spring-projects.
the class RedisMessageGroupStoreTests method testRemoveMessageFromTheGroup.
@Test
@RedisAvailable
public void testRemoveMessageFromTheGroup() {
RedisConnectionFactory jcf = getConnectionFactoryForTest();
RedisMessageStore store = new RedisMessageStore(jcf);
MessageGroup messageGroup = store.getMessageGroup(this.groupId);
Message<?> message = new GenericMessage<>("2");
store.addMessagesToGroup(messageGroup.getGroupId(), new GenericMessage<>("1"), message);
messageGroup = store.addMessageToGroup(messageGroup.getGroupId(), new GenericMessage<>("3"));
assertEquals(3, messageGroup.size());
store.removeMessagesFromGroup(this.groupId, message);
messageGroup = store.getMessageGroup(this.groupId);
assertEquals(2, messageGroup.size());
// make sure the store is properly rebuild from Redis
store = new RedisMessageStore(jcf);
messageGroup = store.getMessageGroup(this.groupId);
assertEquals(2, messageGroup.size());
}
use of org.springframework.data.redis.connection.RedisConnectionFactory in project spring-integration by spring-projects.
the class RedisMessageGroupStoreTests method testIteratorOfMessageGroups.
@Test
@RedisAvailable
public void testIteratorOfMessageGroups() {
RedisConnectionFactory jcf = getConnectionFactoryForTest();
RedisMessageStore store1 = new RedisMessageStore(jcf);
RedisMessageStore store2 = new RedisMessageStore(jcf);
store1.removeMessageGroup(this.groupId);
UUID group2 = UUID.randomUUID();
store1.removeMessageGroup(group2);
UUID group3 = UUID.randomUUID();
store1.removeMessageGroup(group3);
store1.addMessagesToGroup(this.groupId, new GenericMessage<>("1"));
store2.addMessagesToGroup(group2, new GenericMessage<>("2"));
store1.addMessagesToGroup(group3, new GenericMessage<>("3"), new GenericMessage<>("3A"));
Iterator<MessageGroup> messageGroups = store1.iterator();
int counter = 0;
while (messageGroups.hasNext()) {
MessageGroup group = messageGroups.next();
String groupId = (String) group.getGroupId();
if (groupId.equals("1")) {
assertEquals(1, group.getMessages().size());
} else if (groupId.equals("2")) {
assertEquals(1, group.getMessages().size());
} else if (groupId.equals("3")) {
assertEquals(2, group.getMessages().size());
}
counter++;
}
assertEquals(3, counter);
store2.removeMessageGroup(group3);
messageGroups = store1.iterator();
counter = 0;
while (messageGroups.hasNext()) {
messageGroups.next();
counter++;
}
assertEquals(2, counter);
}
Aggregations