//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.collectionreaders; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.HashMap; import java.util.Map; import javax.mail.Message.RecipientType; import javax.mail.internet.MimeMessage; import org.apache.commons.io.FileUtils; import org.apache.pdfbox.io.IOUtils; import org.apache.uima.UIMAException; import org.apache.uima.fit.factory.CollectionReaderFactory; import org.apache.uima.fit.util.JCasUtil; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import com.google.common.io.Files; import com.icegreen.greenmail.junit.GreenMailRule; import com.icegreen.greenmail.util.GreenMailUtil; import com.icegreen.greenmail.util.ServerSetupTest; import uk.gov.dstl.baleen.collectionreaders.testing.AbstractReaderTest; import uk.gov.dstl.baleen.types.metadata.Metadata; import uk.gov.dstl.baleen.uima.BaleenCollectionReader; public class EmailReaderTest extends AbstractReaderTest{ @Rule public final GreenMailRule greenMail = new GreenMailRule(ServerSetupTest.SMTP_POP3_IMAP); private static final String FIRST_LINE = "This is the first line"; public EmailReaderTest(){ super(EmailReader.class); } //TODO: Improve test coverage (e.g. duplicate attachments) @Before public void before() throws UIMAException{ greenMail.setUser("to@localhost.com", "to@localhost.com", "password"); } @Test public void testPopNoMessages() throws Exception{ BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password"); bcr.initialize(); assertFalse(bcr.doHasNext()); bcr.close(); } @Test public void testPopContent() throws Exception{ String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "content"); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body1)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body2)); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); } @Test public void testPopAttachments() throws Exception{ File folder = Files.createTempDir(); String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "attachments", EmailReader.PARAM_FOLDER, folder.getPath()); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(FIRST_LINE)); assertEquals(1, folder.list().length); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); FileUtils.deleteDirectory(folder); } @Test public void testPopBoth() throws Exception{ File folder = Files.createTempDir(); String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "both", EmailReader.PARAM_FOLDER, folder.getPath()); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body1)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body2)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(FIRST_LINE)); assertEquals(1, folder.list().length); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); FileUtils.deleteDirectory(folder); } @Test public void testPopDeleteMessages() throws Exception{ String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "content", EmailReader.PARAM_DELETE_EMAIL, true); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body1)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body2)); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); //Check that there are no messages on the server bcr = (BaleenCollectionReader) CollectionReaderFactory.createReader(EmailReader.class, EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password"); bcr.initialize(); assertFalse(bcr.doHasNext()); bcr.close(); } @Test public void testPopDeleteAttachments() throws Exception{ File folder = Files.createTempDir(); String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "attachments", EmailReader.PARAM_FOLDER, folder.getPath(), EmailReader.PARAM_DELETE_ATTACHMENT, true); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(FIRST_LINE)); assertEquals(0, folder.list().length); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); FileUtils.deleteDirectory(folder); } @Test public void testPopLongWait() throws Exception{ String subject = GreenMailUtil.random(); String body = GreenMailUtil.random(); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject, body); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject2, body2); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 15, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "content"); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); jCas.reset(); Thread.sleep(20000); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); } @Test public void testPopWait() throws Exception{ BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "content"); bcr.initialize(); assertFalse(bcr.doHasNext()); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", GreenMailUtil.random(), GreenMailUtil.random()); assertFalse(bcr.doHasNext()); //Should be a 5 second delay before it returns true Thread.sleep(5000); assertTrue(bcr.doHasNext()); bcr.close(); } @Test public void testPopMetadata() throws Exception{ String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject1, body1, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); MimeMessage ccMessage = GreenMailUtil.createTextEmail("to@localhost.com", "from@localhost.com", subject2, body2, ServerSetupTest.SMTP); ccMessage.addRecipients(RecipientType.CC, "cc@localhost.com"); GreenMailUtil.sendMimeMessage(ccMessage); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "content"); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); Map<String, String> metadata = new HashMap<>(); for(Metadata md : JCasUtil.select(jCas, Metadata.class)){ metadata.put(md.getKey(), md.getValue()); } assertEquals(subject1, metadata.get("subject")); assertEquals("lineReader.txt", metadata.get("attachment")); assertEquals("from@localhost.com", metadata.get("sender")); assertEquals("to@localhost.com", metadata.get("toRecipient")); assertNotNull(metadata.get("Content-Type")); assertNull(metadata.get("attachmentSaveLocation")); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); metadata = new HashMap<>(); for(Metadata md : JCasUtil.select(jCas, Metadata.class)){ metadata.put(md.getKey(), md.getValue()); } assertEquals(subject2, metadata.get("subject")); assertEquals("from@localhost.com", metadata.get("sender")); assertEquals("to@localhost.com", metadata.get("toRecipient")); assertEquals("cc@localhost.com", metadata.get("ccRecipient")); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); } @Test public void testPopBadProcessConfig() throws Exception{ File folder = Files.createTempDir(); String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "pop3", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getPop3().getBindTo(), EmailReader.PARAM_PORT, greenMail.getPop3().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "NotARealProcess", EmailReader.PARAM_FOLDER, folder.getPath()); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body1)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body2)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(FIRST_LINE)); assertEquals(1, folder.list().length); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); FileUtils.deleteDirectory(folder); } @Test public void testImapNoMessages() throws Exception{ BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "imap", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getImap().getBindTo(), EmailReader.PARAM_PORT, greenMail.getImap().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password"); bcr.initialize(); assertFalse(bcr.doHasNext()); bcr.close(); } @Test public void testImapContent() throws Exception{ String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "imap", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getImap().getBindTo(), EmailReader.PARAM_PORT, greenMail.getImap().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "content"); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body1)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body2)); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); } @Test public void testImapAttachments() throws Exception{ File folder = Files.createTempDir(); String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "imap", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getImap().getBindTo(), EmailReader.PARAM_PORT, greenMail.getImap().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "attachments", EmailReader.PARAM_FOLDER, folder.getPath()); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(FIRST_LINE)); assertEquals(1, folder.list().length); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); FileUtils.deleteDirectory(folder); } @Test public void testImapBoth() throws Exception{ File folder = Files.createTempDir(); String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "imap", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getImap().getBindTo(), EmailReader.PARAM_PORT, greenMail.getImap().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "both", EmailReader.PARAM_FOLDER, folder.getPath()); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body1)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body2)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(FIRST_LINE)); assertEquals(1, folder.list().length); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); FileUtils.deleteDirectory(folder); } @Test public void testImapDeleteMessages() throws Exception{ String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "imap", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getImap().getBindTo(), EmailReader.PARAM_PORT, greenMail.getImap().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "content", EmailReader.PARAM_DELETE_EMAIL, true); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body1)); jCas.reset(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(body2)); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); //Check that there are no messages on the server bcr = (BaleenCollectionReader) CollectionReaderFactory.createReader(EmailReader.class, EmailReader.PARAM_PROTOCOL, "imap", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getImap().getBindTo(), EmailReader.PARAM_PORT, greenMail.getImap().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password"); bcr.initialize(); assertFalse(bcr.doHasNext()); bcr.close(); } @Test public void testImapDeleteAttachments() throws Exception{ File folder = Files.createTempDir(); String subject1 = GreenMailUtil.random(); String body1 = GreenMailUtil.random(); GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", subject1, body1); String subject2 = GreenMailUtil.random(); String body2 = GreenMailUtil.random(); GreenMailUtil.sendAttachmentEmail("to@localhost.com", "from@localhost.com", subject2, body2, IOUtils.toByteArray(getClass().getResourceAsStream("lineReader.txt")), "text/plain", "lineReader.txt", "Test File", ServerSetupTest.SMTP); BaleenCollectionReader bcr = getCollectionReader( EmailReader.PARAM_PROTOCOL, "imap", EmailReader.PARAM_WAIT, 5, EmailReader.PARAM_SERVER, greenMail.getImap().getBindTo(), EmailReader.PARAM_PORT, greenMail.getImap().getPort(), EmailReader.PARAM_USER, "to@localhost.com", EmailReader.PARAM_PASS, "password", EmailReader.PARAM_PROCESS, "attachments", EmailReader.PARAM_FOLDER, folder.getPath(), EmailReader.PARAM_DELETE_ATTACHMENT, true); bcr.initialize(); assertTrue(bcr.doHasNext()); bcr.getNext(jCas); assertTrue(jCas.getDocumentText().startsWith(FIRST_LINE)); assertEquals(0, folder.list().length); jCas.reset(); assertFalse(bcr.doHasNext()); bcr.close(); FileUtils.deleteDirectory(folder); } }