@Test
 public void testProduceConsumeMultiMessage() {
   PersistentQueue<Message> queue = new PersistentQueue<Message>("jk.store");
   queue.init();
   for (int i = 0; i < 10; i++) {
     assertTrue(queue.produce(new Message(i)), "always success");
   }
   for (int i = 0; i < 10; i++) {
     Message expected = queue.consume();
     Assert.assertEquals(i, expected.index(), "Comparing index value");
     Assert.assertEquals(
         "My name is JK and I am a crap living in Singapore !@#$$%^^&&",
         expected.value(), "Comparing message value");
   }
   Assert.assertNull(queue.consume(), "Already Popped, so it should not be available");
   queue = new PersistentQueue<Message>("jk.store");
   queue.init();
   Assert.assertNull(queue.consume(), "Already Popped, so it should not be available");
   ////////////////
   queue = new PersistentQueue<Message>("jk.store");
   queue.init();
   for (int i = 11; i <= 20; i++) {
     assertTrue(queue.produce(new Message(i)), "always success");
   }
   for (int i = 11; i <= 20; i++) {
     Message expected = queue.consume();
     Assert.assertEquals(i, expected.index(), "Comparing index value");
     Assert.assertEquals(
         "My name is JK and I am a crap living in Singapore !@#$$%^^&&",
         expected.value(), "Comparing message value");
   }
 }
  @Test
  public void testProduceConsumeMultiMessageTwoFileOpens() {
    PersistentQueue<Message> queue = new PersistentQueue<Message>("jk.store");
    queue.init();
    for (int i = 0; i < 10; i++) {
      assertTrue(queue.produce(new Message(i)), "always success");
    }
    queue.close();

    queue = new PersistentQueue<Message>("jk.store");
    queue.init();
    for (int i = 0; i < 10; i++) {
      Message expected = queue.consume();
      Assert.assertEquals(i, expected.index(), "Comparing index value");
      Assert.assertEquals(
          "My name is JK and I am a crap living in Singapore !@#$$%^^&&",
          expected.value(), "Comparing message value");
    }
    for (int i = 11; i <= 20; i++) {
      assertTrue(queue.produce(new Message(i)), "always success");
    }
    for (int i = 11; i <= 20; i++) {
      Message expected = queue.consume();
      Assert.assertEquals(i, expected.index(), "Comparing index value");
      Assert.assertEquals(
          "My name is JK and I am a crap living in Singapore !@#$$%^^&&",
          expected.value(), "Comparing message value");
    }
  }
 @Test
 public void testProduceConsumeSingleMessage() {
   PersistentQueue<Message> queue = new PersistentQueue<Message>("jk.store");
   queue.init();
   final Message actual = new Message(1);
   queue.produce(actual);
   Message expected = queue.consume();
   Assert.assertEquals(actual.index(), expected.index(), "Comparing index value");
   Assert.assertEquals(actual.value(), expected.value(), "Comparing message value");
   Assert.assertNull(queue.consume(), "Already Popped, so it should not be available");
   queue = new PersistentQueue<Message>("jk.store");
   queue.init();
   Assert.assertNull(queue.consume(), "Already Popped, so it should not be available");
 }