@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 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 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
  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());
  }