Example usage for org.springframework.integration.mail ImapIdleChannelAdapter setApplicationEventPublisher

List of usage examples for org.springframework.integration.mail ImapIdleChannelAdapter setApplicationEventPublisher

Introduction

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

Prototype

@Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) 

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();/*w  w  w .j  av a2 s  .  co m*/
    });
    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
public void testIdleReconnects() throws Exception {
    ImapMailReceiver receiver = spy(new ImapMailReceiver("imap:foo"));
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();/*w w  w  .j av  a2  s  . co 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();
}