List of usage examples for org.springframework.beans DirectFieldAccessor DirectFieldAccessor
public DirectFieldAccessor(Object object)
From source file:org.springframework.integration.mail.ImapMailReceiverTests.java
@SuppressWarnings("resource") @Test// ww w. j a v a2 s . c om public void testNoInitialIdleDelayWhenRecentNotSupported() throws Exception { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( "ImapIdleChannelAdapterParserTests-context.xml", ImapIdleChannelAdapterParserTests.class); ImapIdleChannelAdapter adapter = context.getBean("simpleAdapter", ImapIdleChannelAdapter.class); QueueChannel channel = new QueueChannel(); adapter.setOutputChannel(channel); ImapMailReceiver receiver = new ImapMailReceiver("imap:foo"); receiver = spy(receiver); receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); final 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); DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter); adapterAccessor.setPropertyValue("mailReceiver", receiver); Field storeField = AbstractMailReceiver.class.getDeclaredField("store"); storeField.setAccessible(true); Store store = mock(Store.class); given(store.isConnected()).willReturn(true); given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder); storeField.set(receiver, store); willAnswer(invocation -> folder).given(receiver).getFolder(); MimeMessage mailMessage = mock(MimeMessage.class); Flags flags = mock(Flags.class); given(mailMessage.getFlags()).willReturn(flags); final Message[] messages = new Message[] { mailMessage }; final AtomicInteger shouldFindMessagesCounter = new AtomicInteger(2); willAnswer(invocation -> { /* * Return the message from first invocation of waitForMessages() * and in receive(); then return false in the next call to * waitForMessages() so we enter idle(); counter will be reset * to 1 in the mocked idle(). */ if (shouldFindMessagesCounter.decrementAndGet() >= 0) { return messages; } else { return new Message[0]; } }).given(receiver).searchForNewMessages(); willAnswer(invocation -> null).given(receiver).fetchMessages(messages); willAnswer(invocation -> { Thread.sleep(5000); shouldFindMessagesCounter.set(1); return null; }).given(folder).idle(); adapter.start(); /* * Idle takes 5 seconds; if all is well, we should receive the first message * before then. */ assertNotNull(channel.receive(3000)); // We should not receive any more until the next idle elapses assertNull(channel.receive(3000)); assertNotNull(channel.receive(6000)); adapter.stop(); context.close(); }
From source file:org.springframework.integration.mail.ImapMailReceiverTests.java
@SuppressWarnings("resource") @Test// www . j a va2 s. c om public void testInitialIdleDelayWhenRecentIsSupported() throws Exception { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( "ImapIdleChannelAdapterParserTests-context.xml", ImapIdleChannelAdapterParserTests.class); ImapIdleChannelAdapter adapter = context.getBean("simpleAdapter", ImapIdleChannelAdapter.class); QueueChannel channel = new QueueChannel(); adapter.setOutputChannel(channel); ImapMailReceiver receiver = new ImapMailReceiver("imap:foo"); receiver = spy(receiver); receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); final IMAPFolder folder = mock(IMAPFolder.class); given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.RECENT)); given(folder.isOpen()).willReturn(false).willReturn(true); given(folder.exists()).willReturn(true); DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter); adapterAccessor.setPropertyValue("mailReceiver", receiver); Field storeField = AbstractMailReceiver.class.getDeclaredField("store"); storeField.setAccessible(true); Store store = mock(Store.class); given(store.isConnected()).willReturn(true); given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder); storeField.set(receiver, store); willAnswer(invocation -> folder).given(receiver).getFolder(); MimeMessage mailMessage = mock(MimeMessage.class); Flags flags = mock(Flags.class); given(mailMessage.getFlags()).willReturn(flags); final Message[] messages = new Message[] { mailMessage }; willAnswer(invocation -> messages).given(receiver).searchForNewMessages(); willAnswer(invocation -> null).given(receiver).fetchMessages(messages); final CountDownLatch idles = new CountDownLatch(2); willAnswer(invocation -> { idles.countDown(); Thread.sleep(5000); return null; }).given(folder).idle(); adapter.start(); /* * Idle takes 5 seconds; since this server supports RECENT, we should * not receive any early messages. */ assertNull(channel.receive(3000)); assertNotNull(channel.receive(5000)); assertTrue(idles.await(5, TimeUnit.SECONDS)); adapter.stop(); context.close(); }
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();/*from w w w .j av a2s .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
private Folder testAttachmentsGuts(final ImapMailReceiver receiver) throws MessagingException, IOException { Store store = mock(Store.class); Folder folder = mock(Folder.class); given(folder.exists()).willReturn(true); given(folder.isOpen()).willReturn(true); Message message = new MimeMessage(null, new ClassPathResource("test.mail").getInputStream()); given(folder.search((SearchTerm) Mockito.any())).willReturn(new Message[] { 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();/*from w w w. j av a 2 s . c o m*/ return folder; }
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 a va 2 s . com*/ 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(); }
From source file:org.springframework.integration.mqtt.DownstreamExceptionTests.java
@Test public void testNoErrorChannel() throws Exception { service.n = 0;/*w ww .j a va 2s. com*/ Log logger = spy(TestUtils.getPropertyValue(noErrorChannel, "logger", Log.class)); final CountDownLatch latch = new CountDownLatch(1); doAnswer(invocation -> { if (((String) invocation.getArgument(0)).contains("Unhandled")) { latch.countDown(); } return null; }).when(logger).error(anyString(), any(Throwable.class)); new DirectFieldAccessor(noErrorChannel).setPropertyValue("logger", logger); MqttPahoMessageHandler adapter = new MqttPahoMessageHandler("tcp://localhost:1883", "si-test-out"); adapter.setDefaultTopic("mqtt-fooEx1"); adapter.setBeanFactory(mock(BeanFactory.class)); adapter.afterPropertiesSet(); adapter.start(); adapter.handleMessage(new GenericMessage<String>("foo")); service.barrier.await(10, TimeUnit.SECONDS); service.barrier.reset(); adapter.handleMessage(new GenericMessage<String>("foo")); service.barrier.await(10, TimeUnit.SECONDS); assertTrue(latch.await(10, TimeUnit.SECONDS)); verify(logger).error(contains("Unhandled exception for"), any(Throwable.class)); service.barrier.reset(); adapter.stop(); }
From source file:org.springframework.integration.mqtt.MqttAdapterTests.java
@Test public void testReconnect() throws Exception { final IMqttClient client = mock(IMqttClient.class); MqttPahoMessageDrivenChannelAdapter adapter = buildAdapter(client, null, ConsumerStopAction.UNSUBSCRIBE_NEVER); adapter.setRecoveryInterval(10);/*from w w w . j ava 2s.c o m*/ Log logger = spy(TestUtils.getPropertyValue(adapter, "logger", Log.class)); new DirectFieldAccessor(adapter).setPropertyValue("logger", logger); given(logger.isDebugEnabled()).willReturn(true); final AtomicInteger attemptingReconnectCount = new AtomicInteger(); willAnswer(i -> { if (attemptingReconnectCount.getAndIncrement() == 0) { adapter.connectionLost(new RuntimeException("while schedule running")); } i.callRealMethod(); return null; }).given(logger).debug("Attempting reconnect"); ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.initialize(); adapter.setTaskScheduler(taskScheduler); adapter.start(); adapter.connectionLost(new RuntimeException("initial")); Thread.sleep(1000); // the following assertion should be equalTo, but leq to protect against a slow CI server assertThat(attemptingReconnectCount.get(), lessThanOrEqualTo(2)); adapter.stop(); taskScheduler.destroy(); }
From source file:org.springframework.integration.mqtt.MqttAdapterTests.java
@Test public void testSubscribeFailure() throws Exception { DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); factory.setCleanSession(false);/*from www . jav a 2s . co m*/ factory.setConnectionTimeout(23); factory.setKeepAliveInterval(45); factory.setPassword("pass"); MemoryPersistence persistence = new MemoryPersistence(); factory.setPersistence(persistence); final SocketFactory socketFactory = mock(SocketFactory.class); factory.setSocketFactory(socketFactory); final Properties props = new Properties(); factory.setSslProperties(props); factory.setUserName("user"); Will will = new Will("foo", "bar".getBytes(), 2, true); factory.setWill(will); factory = spy(factory); MqttAsyncClient aClient = mock(MqttAsyncClient.class); final MqttClient client = mock(MqttClient.class); willAnswer(invocation -> client).given(factory).getClientInstance(anyString(), anyString()); given(client.isConnected()).willReturn(true); new DirectFieldAccessor(client).setPropertyValue("aClient", aClient); willAnswer(new CallsRealMethods()).given(client).connect(any(MqttConnectOptions.class)); willAnswer(new CallsRealMethods()).given(client).subscribe(any(String[].class), any(int[].class)); willReturn(alwaysComplete).given(aClient).connect(any(MqttConnectOptions.class), any(), any()); IMqttToken token = mock(IMqttToken.class); given(token.getGrantedQos()).willReturn(new int[] { 0x80 }); willReturn(token).given(aClient).subscribe(any(String[].class), any(int[].class), any(), any()); MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("foo", "bar", factory, "baz", "fix"); AtomicReference<Method> method = new AtomicReference<>(); ReflectionUtils.doWithMethods(MqttPahoMessageDrivenChannelAdapter.class, m -> { m.setAccessible(true); method.set(m); }, m -> m.getName().equals("connectAndSubscribe")); assertNotNull(method.get()); try { method.get().invoke(adapter); fail("Expected InvocationTargetException"); } catch (InvocationTargetException e) { assertThat(e.getCause(), instanceOf(MqttException.class)); assertThat(((MqttException) e.getCause()).getReasonCode(), equalTo((int) MqttException.REASON_CODE_SUBSCRIBE_FAILED)); } }
From source file:org.springframework.integration.mqtt.MqttAdapterTests.java
@Test public void testDifferentQos() throws Exception { DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); factory.setCleanSession(false);// ww w . j a v a 2 s.c o m factory.setConnectionTimeout(23); factory.setKeepAliveInterval(45); factory.setPassword("pass"); MemoryPersistence persistence = new MemoryPersistence(); factory.setPersistence(persistence); final SocketFactory socketFactory = mock(SocketFactory.class); factory.setSocketFactory(socketFactory); final Properties props = new Properties(); factory.setSslProperties(props); factory.setUserName("user"); Will will = new Will("foo", "bar".getBytes(), 2, true); factory.setWill(will); factory = spy(factory); MqttAsyncClient aClient = mock(MqttAsyncClient.class); final MqttClient client = mock(MqttClient.class); willAnswer(invocation -> client).given(factory).getClientInstance(anyString(), anyString()); given(client.isConnected()).willReturn(true); new DirectFieldAccessor(client).setPropertyValue("aClient", aClient); willAnswer(new CallsRealMethods()).given(client).connect(any(MqttConnectOptions.class)); willAnswer(new CallsRealMethods()).given(client).subscribe(any(String[].class), any(int[].class)); willReturn(alwaysComplete).given(aClient).connect(any(MqttConnectOptions.class), any(), any()); IMqttToken token = mock(IMqttToken.class); given(token.getGrantedQos()).willReturn(new int[] { 2, 0 }); willReturn(token).given(aClient).subscribe(any(String[].class), any(int[].class), any(), any()); MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("foo", "bar", factory, "baz", "fix"); AtomicReference<Method> method = new AtomicReference<>(); ReflectionUtils.doWithMethods(MqttPahoMessageDrivenChannelAdapter.class, m -> { m.setAccessible(true); method.set(m); }, m -> m.getName().equals("connectAndSubscribe")); assertNotNull(method.get()); Log logger = spy(TestUtils.getPropertyValue(adapter, "logger", Log.class)); new DirectFieldAccessor(adapter).setPropertyValue("logger", logger); given(logger.isWarnEnabled()).willReturn(true); method.get().invoke(adapter); verify(logger, atLeastOnce()).warn( "Granted QOS different to Requested QOS; topics: [baz, fix] requested: [1, 1] granted: [2, 0]"); verify(client).setTimeToWait(30_000L); }
From source file:org.springframework.integration.samples.zip.SpringIntegrationUtils.java
/** * Helper Method to dynamically determine and display input and output * directories as defined in the Spring Integration context. * * @param context Spring Application Context *//*from ww w. j a va 2 s . co m*/ public static void displayDirectories(final ApplicationContext context) { final Map<String, FileReadingMessageSource> fileReadingMessageSources = context .getBeansOfType(FileReadingMessageSource.class); final List<String> inputDirectories = new ArrayList<String>(); for (FileReadingMessageSource source : fileReadingMessageSources.values()) { final File inDir = (File) new DirectFieldAccessor(source).getPropertyValue("directory"); inputDirectories.add(inDir.getAbsolutePath()); } final Map<String, FileWritingMessageHandler> fileWritingMessageHandlers = context .getBeansOfType(FileWritingMessageHandler.class); final List<String> outputDirectories = new ArrayList<String>(); for (final FileWritingMessageHandler messageHandler : fileWritingMessageHandlers.values()) { final Expression outDir = (Expression) new DirectFieldAccessor(messageHandler) .getPropertyValue("destinationDirectoryExpression"); outputDirectories.add(outDir.getExpressionString()); } final StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("\n========================================================="); stringBuilder.append("\n"); for (final String inputDirectory : inputDirectories) { stringBuilder.append("\n Intput directory is: '" + inputDirectory + "'"); } for (final String outputDirectory : outputDirectories) { stringBuilder.append("\n Output directory is: '" + outputDirectory + "'"); } stringBuilder.append("\n\n========================================================="); logger.info(stringBuilder.toString()); }