@Test
  public void testEmptyList() throws Exception {

    Folder folder = mock(Folder.class);
    when(folder.search(any(SearchTerm.class))).thenThrow(new MessagingException());

    MessageExtractor extractor = new MessageExtractor(folder);
    List<NamedPeriod> periods = extractor.list(new DateTime(), new DateTime());

    assertEquals(0, periods.size());
  }
 protected synchronized Message receiveMessage() throws IOException {
   if (messageBuffer.size() > 0) {
     Message m = (Message) messageBuffer.get(0);
     messageBuffer.remove(0);
     return m;
   }
   try {
     InetSocketAddress remoteAddress = (InetSocketAddress) channel.receive(receiveBuffer);
     if (remoteAddress != null) {
       int len = receiveBuffer.position();
       receiveBuffer.rewind();
       receiveBuffer.get(buf, 0, len);
       try {
         IP address = IP.fromInetAddress(remoteAddress.getAddress());
         int port = remoteAddress.getPort();
         extractor.appendData(buf, 0, len, new SocketDescriptor(address, port));
         receiveBuffer.clear();
         extractor.updateAvailableMessages();
         return extractor.nextMessage();
       } catch (EOFException exc) {
         exc.printStackTrace();
         System.err.println(buf.length + ", " + len);
       } catch (InvocationTargetException exc) {
         exc.printStackTrace();
       } catch (IllegalAccessException exc) {
         exc.printStackTrace();
       } catch (InstantiationException exc) {
         exc.printStackTrace();
       } catch (IllegalArgumentException e) {
         e.printStackTrace();
       } catch (InvalidCompressionMethodException e) {
         e.printStackTrace();
       }
     }
   } catch (ClosedChannelException exc) {
     if (isKeepAlive()) {
       throw exc;
     }
   }
   return null;
 }
  @Test
  public void testValidList() throws Exception {

    Message message1 = mockMessage(DATE_1, SUBJECT_1);
    Message message2 = mockMessage(DATE_2, SUBJECT_2);

    Folder folder = mock(Folder.class);
    when(folder.search(any(SearchTerm.class))).thenReturn(new Message[] {message1, message2});

    MessageExtractor extractor = new MessageExtractor(folder);
    List<NamedPeriod> periods = extractor.list(new DateTime(), new DateTime());

    assertEquals(2, periods.size());

    assertEquals(DATE_1, periods.get(0).getFrom().toDate());
    assertEquals(DATE_1, periods.get(0).getTo().toDate());
    assertEquals(SUBJECT_1, periods.get(0).getName());

    assertEquals(DATE_2, periods.get(1).getFrom().toDate());
    assertEquals(DATE_2, periods.get(1).getTo().toDate());
    assertEquals(SUBJECT_2, periods.get(1).getName());
  }
  public void resendMessage(Message message, IP remoteAddress, int remotePort) throws IOException {
    if (remoteAddress == null) remoteAddress = IP.getLocalHost();

    message.setSentStamp(getConvertedTime(remoteAddress, remotePort));
    message.setMessageServer(this);
    try {
      sendBuffer.clear();
      sendBuffer.put(extractor.convertMessage(message));
      sendBuffer.flip();
      channel.send(sendBuffer, new InetSocketAddress(remoteAddress.toString(), remotePort));
      message.setRemoteAddress(remoteAddress);
      message.setRemotePort(remotePort);
      messageSent(message);
    } catch (IllegalAccessException exc) {
      throw new RuntimeException(exc);
    } catch (IllegalArgumentException exc) {
      throw new RuntimeException(exc);
    } catch (InvocationTargetException exc) {
      throw new RuntimeException(exc);
    }
  }