Example usage for org.springframework.integration.mail ImapMailReceiver ImapMailReceiver

List of usage examples for org.springframework.integration.mail ImapMailReceiver ImapMailReceiver

Introduction

In this page you can find the example usage for org.springframework.integration.mail ImapMailReceiver ImapMailReceiver.

Prototype

public ImapMailReceiver(String url) 

Source Link

Usage

From source file:org.springframework.integration.mail.ImapMailReceiverTests.java

@Test
public void testConnectionException() throws Exception {
    ImapMailReceiver mailReceiver = new ImapMailReceiver("imap:foo");
    ImapIdleChannelAdapter adapter = new ImapIdleChannelAdapter(mailReceiver);
    final AtomicReference<ImapIdleExceptionEvent> theEvent = new AtomicReference<ImapIdleExceptionEvent>();
    final CountDownLatch latch = new CountDownLatch(1);
    adapter.setApplicationEventPublisher(event -> {
        assertNull("only one event expected", theEvent.get());
        theEvent.set((ImapIdleExceptionEvent) event);
        latch.countDown();/*from   ww  w  .  j  ava 2 s  .c om*/
    });
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.initialize();
    adapter.setTaskScheduler(taskScheduler);
    adapter.start();
    assertTrue(latch.await(10, TimeUnit.SECONDS));
    assertTrue(theEvent.get().toString()
            .endsWith("cause=java.lang.IllegalStateException: Failure in 'idle' task. Will resubmit.]"));
}

From source file:org.springframework.integration.mail.ImapMailReceiverTests.java

@Test // see INT-1801
public void testImapLifecycleForRaceCondition() throws Exception {

    for (int i = 0; i < 1000; i++) {
        final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
        Store store = mock(Store.class);
        Folder folder = mock(Folder.class);
        given(folder.exists()).willReturn(true);
        given(folder.isOpen()).willReturn(true);
        given(folder.search((SearchTerm) Mockito.any())).willReturn(new Message[] {});
        given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
        given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));

        DirectFieldAccessor df = new DirectFieldAccessor(receiver);
        df.setPropertyValue("store", store);
        receiver.setBeanFactory(mock(BeanFactory.class));
        receiver.afterPropertiesSet();/*  w  w w. jav a  2  s .  c o  m*/

        new Thread(() -> {
            try {
                receiver.receive();
            } catch (javax.mail.MessagingException e) {
                if (e.getCause() instanceof NullPointerException) {
                    failed.getAndIncrement();
                }
            }

        }).start();

        new Thread(() -> {
            try {
                receiver.destroy();
            } catch (Exception ignore) {
                // ignore
            }
        }).start();
    }
    assertEquals(0, failed.get());
}

From source file:org.springframework.integration.mail.ImapMailReceiverTests.java

@Test
public void testAttachments() throws Exception {
    final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
    Folder folder = testAttachmentsGuts(receiver);
    Message[] messages = (Message[]) receiver.receive();
    Object content = messages[0].getContent();
    assertEquals("bar", ((Multipart) content).getBodyPart(0).getContent().toString().trim());
    assertEquals("foo", ((Multipart) content).getBodyPart(1).getContent().toString().trim());

    assertSame(folder, messages[0].getFolder());
}

From source file:org.springframework.integration.mail.ImapMailReceiverTests.java

@Test
public void testAttachmentsWithMappingMultiAsBytes() throws Exception {
    final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
    receiver.setHeaderMapper(new DefaultMailHeaderMapper());
    testAttachmentsGuts(receiver);//w w  w. j  ava 2s  . com
    org.springframework.messaging.Message<?>[] messages = (org.springframework.messaging.Message<?>[]) receiver
            .receive();
    org.springframework.messaging.Message<?> received = messages[0];
    Object content = received.getPayload();
    assertThat(content, instanceOf(byte[].class));
    assertThat((String) received.getHeaders().get(MailHeaders.CONTENT_TYPE),
            equalTo("multipart/mixed;\r\n boundary=\"------------040903000701040401040200\""));
    assertThat((String) received.getHeaders().get(MessageHeaders.CONTENT_TYPE),
            equalTo("application/octet-stream"));
}

From source file:org.springframework.integration.mail.ImapMailReceiverTests.java

@Test
public void testAttachmentsWithMapping() throws Exception {
    final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
    receiver.setHeaderMapper(new DefaultMailHeaderMapper());
    receiver.setEmbeddedPartsAsBytes(false);
    testAttachmentsGuts(receiver);/* w  w w  . j a v  a 2s .  c o m*/
    org.springframework.messaging.Message<?>[] messages = (org.springframework.messaging.Message<?>[]) receiver
            .receive();
    Object content = messages[0].getPayload();
    assertThat(content, instanceOf(Multipart.class));
    assertEquals("bar", ((Multipart) content).getBodyPart(0).getContent().toString().trim());
    assertEquals("foo", ((Multipart) content).getBodyPart(1).getContent().toString().trim());
}

From source file:org.springframework.integration.mail.ImapMailReceiverTests.java

@Test
public void testIdleReconnects() throws Exception {
    ImapMailReceiver receiver = spy(new ImapMailReceiver("imap:foo"));
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();//from   w  w w .  ja  va 2 s.c  o  m
    IMAPFolder folder = mock(IMAPFolder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    given(folder.isOpen()).willReturn(false).willReturn(true);
    given(folder.exists()).willReturn(true);
    given(folder.hasNewMessages()).willReturn(true);
    Field storeField = AbstractMailReceiver.class.getDeclaredField("store");
    storeField.setAccessible(true);
    Store store = mock(Store.class);
    given(store.isConnected()).willReturn(false);
    given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
    storeField.set(receiver, store);

    ImapIdleChannelAdapter adapter = new ImapIdleChannelAdapter(receiver);
    Log logger = spy(TestUtils.getPropertyValue(adapter, "logger", Log.class));
    new DirectFieldAccessor(adapter).setPropertyValue("logger", logger);
    willDoNothing().given(logger).warn(anyString(), any(Throwable.class));
    willAnswer(i -> {
        i.callRealMethod();
        throw new FolderClosedException(folder, "test");
    }).given(receiver).waitForNewMessages();
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.initialize();
    adapter.setTaskScheduler(taskScheduler);
    adapter.setReconnectDelay(50);
    adapter.afterPropertiesSet();
    final CountDownLatch latch = new CountDownLatch(3);
    adapter.setApplicationEventPublisher(e -> {
        latch.countDown();
    });
    adapter.start();
    assertTrue(latch.await(60, TimeUnit.SECONDS));
    verify(store, atLeast(3)).connect();
    taskScheduler.shutdown();
}