@Test public void testWithMessageHistory() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); store.getMessageGroup(1); Message<?> message = new GenericMessage<String>("Hello"); DirectChannel fooChannel = new DirectChannel(); fooChannel.setBeanName("fooChannel"); DirectChannel barChannel = new DirectChannel(); barChannel.setBeanName("barChannel"); message = MessageHistory.write(message, fooChannel); message = MessageHistory.write(message, barChannel); store.addMessageToGroup(1, message); message = store.getMessageGroup(1).getMessages().iterator().next(); MessageHistory messageHistory = MessageHistory.read(message); assertNotNull(messageHistory); assertEquals(2, messageHistory.size()); Properties fooChannelHistory = messageHistory.get(0); assertEquals("fooChannel", fooChannelHistory.get("name")); assertEquals("channel", fooChannelHistory.get("type")); }
@Test public void testRemoveNonExistingMessageFromTheGroup() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); MessageGroup messageGroup = store.getMessageGroup(1); store.addMessageToGroup(messageGroup.getGroupId(), new GenericMessage<String>("1")); store.removeMessageFromGroup(1, new GenericMessage<String>("2")); }
@Test public void testNonExistingEmptyMessageGroup() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); MessageGroup messageGroup = store.getMessageGroup(1); assertNotNull(messageGroup); assertTrue(messageGroup instanceof SimpleMessageGroup); assertEquals(0, messageGroup.size()); }
@Test @Ignore public void testConcurrentModifications() throws Exception { final GemfireMessageStore store1 = new GemfireMessageStore(this.cache); store1.afterPropertiesSet(); final GemfireMessageStore store2 = new GemfireMessageStore(this.cache); store2.afterPropertiesSet(); final Message<?> message = new GenericMessage<String>("1"); ExecutorService executor = null; final List<Object> failures = new ArrayList<Object>(); for (int i = 0; i < 100; i++) { executor = Executors.newCachedThreadPool(); executor.execute( new Runnable() { @Override public void run() { MessageGroup group = store1.addMessageToGroup(1, message); if (group.getMessages().size() != 1) { failures.add("ADD"); throw new AssertionFailedError("Failed on ADD"); } } }); executor.execute( new Runnable() { @Override public void run() { MessageGroup group = store2.removeMessageFromGroup(1, message); if (group.getMessages().size() != 0) { failures.add("REMOVE"); throw new AssertionFailedError("Failed on Remove"); } } }); executor.shutdown(); executor.awaitTermination(10, TimeUnit.SECONDS); store2.removeMessageFromGroup( 1, message); // ensures that if ADD thread executed after REMOVE, the store is empty for the // next cycle } assertTrue(failures.size() == 0); }
@Test public void testMultipleInstancesOfGroupStore() throws Exception { GemfireMessageStore store1 = new GemfireMessageStore(this.cache); store1.afterPropertiesSet(); GemfireMessageStore store2 = new GemfireMessageStore(this.cache); store2.afterPropertiesSet(); Message<?> message = new GenericMessage<String>("1"); store1.addMessageToGroup(1, message); MessageGroup messageGroup = store2.addMessageToGroup(1, new GenericMessage<String>("2")); assertEquals(2, messageGroup.getMessages().size()); GemfireMessageStore store3 = new GemfireMessageStore(this.cache); store3.afterPropertiesSet(); messageGroup = store3.removeMessageFromGroup(1, message); assertEquals(1, messageGroup.getMessages().size()); }
@Test public void testLastReleasedSequenceNumber() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); MessageGroup messageGroup = store.getMessageGroup(1); Message<?> messageToMark = new GenericMessage<String>("1"); store.addMessageToGroup(messageGroup.getGroupId(), messageToMark); store.setLastReleasedSequenceNumberForGroup(messageGroup.getGroupId(), 5); messageGroup = store.getMessageGroup(1); assertEquals(5, messageGroup.getLastReleasedMessageSequenceNumber()); }
@Test public void testCompleteMessageGroup() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); MessageGroup messageGroup = store.getMessageGroup(1); Message<?> messageToMark = new GenericMessage<String>("1"); store.addMessageToGroup(messageGroup.getGroupId(), messageToMark); store.completeGroup(messageGroup.getGroupId()); messageGroup = store.getMessageGroup(1); assertTrue(messageGroup.isComplete()); }
@Test public void testMessageGroupWithAddedMessage() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); MessageGroup messageGroup = store.getMessageGroup(1); Message<?> message = new GenericMessage<String>("Hello"); messageGroup = store.addMessageToGroup(1, message); assertEquals(1, messageGroup.size()); // make sure the store is properly rebuild from Gemfire store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); messageGroup = store.getMessageGroup(1); assertEquals(1, messageGroup.size()); }
@Test public void testRemoveMessageGroup() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); MessageGroup messageGroup = store.getMessageGroup(1); Message<?> message = new GenericMessage<String>("Hello"); messageGroup = store.addMessageToGroup(messageGroup.getGroupId(), message); assertEquals(1, messageGroup.size()); store.removeMessageGroup(1); MessageGroup messageGroupA = store.getMessageGroup(1); assertNotSame(messageGroup, messageGroupA); assertEquals(0, messageGroupA.getMessages().size()); assertEquals(0, messageGroupA.size()); // make sure the store is properly rebuild from Gemfire store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); messageGroup = store.getMessageGroup(1); assertEquals(0, messageGroup.getMessages().size()); assertEquals(0, messageGroup.size()); }
@Test public void testRemoveMessageFromTheGroup() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); MessageGroup messageGroup = store.getMessageGroup(1); Message<?> message = new GenericMessage<String>("2"); messageGroup = store.addMessageToGroup(messageGroup.getGroupId(), new GenericMessage<String>("1")); messageGroup = store.getMessageGroup(1); assertEquals(1, messageGroup.size()); Thread.sleep( 1); // since it adds to a local region some times CREATED_DATE ends up to be the same // Unrealistic in a real scenario messageGroup = store.addMessageToGroup(messageGroup.getGroupId(), message); messageGroup = store.getMessageGroup(1); assertEquals(2, messageGroup.size()); Thread.sleep(1); messageGroup = store.addMessageToGroup(messageGroup.getGroupId(), new GenericMessage<String>("3")); messageGroup = store.getMessageGroup(1); assertEquals(3, messageGroup.size()); messageGroup = store.removeMessageFromGroup(messageGroup.getGroupId(), message); messageGroup = store.getMessageGroup(1); assertEquals(2, messageGroup.size()); // make sure the store is properly rebuild from Gemfire store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); messageGroup = store.getMessageGroup(1); assertEquals(2, messageGroup.size()); }
@Test public void testIteratorOfMessageGroups() throws Exception { GemfireMessageStore store1 = new GemfireMessageStore(this.cache); store1.afterPropertiesSet(); GemfireMessageStore store2 = new GemfireMessageStore(this.cache); store2.afterPropertiesSet(); store1.addMessageToGroup(1, new GenericMessage<String>("1")); store2.addMessageToGroup(2, new GenericMessage<String>("2")); store1.addMessageToGroup(3, new GenericMessage<String>("3")); store2.addMessageToGroup(3, new GenericMessage<String>("3A")); Iterator<MessageGroup> messageGroups = store1.iterator(); int counter = 0; while (messageGroups.hasNext()) { messageGroups.next(); counter++; } assertEquals(3, counter); store2.removeMessageGroup(3); messageGroups = store1.iterator(); counter = 0; while (messageGroups.hasNext()) { messageGroups.next(); counter++; } assertEquals(2, counter); }
@Test public void testRemoveNonExistingMessageFromNonExistingTheGroup() throws Exception { GemfireMessageStore store = new GemfireMessageStore(this.cache); store.afterPropertiesSet(); store.removeMessageFromGroup(1, new GenericMessage<String>("2")); }