Search in sources :

Example 11 with LogAccessor

use of org.springframework.core.log.LogAccessor in project spring-integration by spring-projects.

the class AsyncHandlerTests method setup.

@BeforeEach
public void setup() {
    this.executor = Executors.newSingleThreadExecutor();
    this.handler = new AbstractReplyProducingMessageHandler() {

        @Override
        protected Object handleRequestMessage(Message<?> requestMessage) {
            final SettableListenableFuture<String> future = new SettableListenableFuture<>();
            AsyncHandlerTests.this.executor.execute(() -> {
                try {
                    latch.await(10, TimeUnit.SECONDS);
                    switch(whichTest) {
                        case 0:
                            future.set("reply");
                            break;
                        case 1:
                            future.setException(new RuntimeException("foo"));
                            break;
                        case 2:
                            future.setException(new MessagingException(requestMessage));
                    }
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            });
            return future;
        }
    };
    this.handler.setAsync(true);
    this.handler.setOutputChannel(this.output);
    this.handler.setBeanFactory(mock(BeanFactory.class));
    this.latch = new CountDownLatch(1);
    LogAccessor logAccessor = TestUtils.getPropertyValue(this.handler, "logger", LogAccessor.class);
    Log log = spy(logAccessor.getLog());
    new DirectFieldAccessor(logAccessor).setPropertyValue("log", log);
    doAnswer(invocation -> {
        failedCallbackMessage = invocation.getArgument(0).toString();
        failedCallbackException = invocation.getArgument(1);
        exceptionLatch.countDown();
        return null;
    }).when(log).error(any(), any(Throwable.class));
}
Also used : SettableListenableFuture(org.springframework.util.concurrent.SettableListenableFuture) MessagingException(org.springframework.messaging.MessagingException) Log(org.apache.commons.logging.Log) CountDownLatch(java.util.concurrent.CountDownLatch) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) LogAccessor(org.springframework.core.log.LogAccessor) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 12 with LogAccessor

use of org.springframework.core.log.LogAccessor in project spring-integration by spring-projects.

the class ConnectionEventTests method testServerExceptionGuts.

private void testServerExceptionGuts(AbstractServerConnectionFactory factory) throws Exception {
    ServerSocket ss = ServerSocketFactory.getDefault().createServerSocket(0);
    factory.setPort(ss.getLocalPort());
    final AtomicReference<TcpConnectionServerExceptionEvent> theEvent = new AtomicReference<>();
    final CountDownLatch latch = new CountDownLatch(1);
    factory.setApplicationEventPublisher(new ApplicationEventPublisher() {

        @Override
        public void publishEvent(ApplicationEvent event) {
            theEvent.set((TcpConnectionServerExceptionEvent) event);
            latch.countDown();
        }

        @Override
        public void publishEvent(Object event) {
        }
    });
    factory.setBeanName("sf");
    factory.registerListener(message -> false);
    LogAccessor logger = spy(TestUtils.getPropertyValue(factory, "logger", LogAccessor.class));
    doNothing().when(logger).error(any(Throwable.class), anyString());
    new DirectFieldAccessor(factory).setPropertyValue("logger", logger);
    factory.start();
    assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue();
    String actual = theEvent.toString();
    assertThat(actual).contains("cause=java.net.BindException");
    assertThat(actual).contains("source=" + "bean 'sf', port=" + factory.getPort());
    ArgumentCaptor<String> reasonCaptor = ArgumentCaptor.forClass(String.class);
    ArgumentCaptor<Throwable> throwableCaptor = ArgumentCaptor.forClass(Throwable.class);
    verify(logger).error(throwableCaptor.capture(), reasonCaptor.capture());
    assertThat(reasonCaptor.getValue()).startsWith("Error on Server");
    assertThat(reasonCaptor.getValue()).endsWith("; port = " + factory.getPort());
    assertThat(throwableCaptor.getValue()).isInstanceOf(BindException.class);
    ss.close();
}
Also used : ApplicationEvent(org.springframework.context.ApplicationEvent) ServerSocket(java.net.ServerSocket) AtomicReference(java.util.concurrent.atomic.AtomicReference) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) CountDownLatch(java.util.concurrent.CountDownLatch) ApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) LogAccessor(org.springframework.core.log.LogAccessor)

Example 13 with LogAccessor

use of org.springframework.core.log.LogAccessor in project spring-integration by spring-projects.

the class ImapMailReceiverTests method receiveExpungedAndNotExpungedLogFiltered.

@Test
public void receiveExpungedAndNotExpungedLogFiltered() throws Exception {
    AbstractMailReceiver receiver = new ImapMailReceiver();
    LogAccessor logger = spy(TestUtils.getPropertyValue(receiver, "logger", LogAccessor.class));
    new DirectFieldAccessor(receiver).setPropertyValue("logger", logger);
    when(logger.isDebugEnabled()).thenReturn(true);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    given(msg1.isExpunged()).willReturn(true);
    given(msg1.getSubject()).willReturn("msg1");
    given(msg2.getSubject()).willReturn("msg2");
    Expression selectorExpression = new SpelExpressionParser().parseExpression("false");
    receiver.setSelectorExpression(selectorExpression);
    receiveAndMarkAsReadDontDeleteGuts(receiver, msg1, msg2);
    verify(logger, times(2)).isDebugEnabled();
    verify(msg1).isExpunged();
    verify(msg2).isExpunged();
    verify(msg1, never()).getSubject();
    verify(msg2).getSubject();
    verify(logger).debug(Mockito.startsWith("Expunged message discarded"));
    verify(logger).debug(org.mockito.ArgumentMatchers.contains("'msg2' will be discarded by the matching filter"));
}
Also used : SpelExpressionParser(org.springframework.expression.spel.standard.SpelExpressionParser) MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) Expression(org.springframework.expression.Expression) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) LogAccessor(org.springframework.core.log.LogAccessor) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 14 with LogAccessor

use of org.springframework.core.log.LogAccessor in project spring-integration by spring-projects.

the class LoggingHandler method setLoggerName.

public void setLoggerName(String loggerName) {
    Assert.hasText(loggerName, "loggerName must not be empty");
    this.messageLogger = new LogAccessor(loggerName);
}
Also used : LogAccessor(org.springframework.core.log.LogAccessor)

Example 15 with LogAccessor

use of org.springframework.core.log.LogAccessor in project spring-integration by spring-projects.

the class P2pChannelTests method verifySubscriptions.

/**
 * @param channel
 */
private void verifySubscriptions(final AbstractSubscribableChannel channel) {
    final LogAccessor logger = mock(LogAccessor.class);
    when(logger.isInfoEnabled()).thenReturn(true);
    final List<String> logs = new ArrayList<>();
    doAnswer(invocation -> {
        logs.add(invocation.getArgument(0));
        return null;
    }).when(logger).info(Mockito.anyString());
    ReflectionUtils.doWithFields(AbstractMessageChannel.class, field -> {
        if ("logger".equals(field.getName())) {
            field.setAccessible(true);
            field.set(channel, logger);
        }
    });
    String log = "Channel '" + channel.getComponentName() + "' has " + "%d subscriber(s).";
    MessageHandler handler1 = mock(MessageHandler.class);
    channel.subscribe(handler1);
    assertThat(channel.getSubscriberCount()).isEqualTo(1);
    assertThat(logs.remove(0)).isEqualTo(String.format(log, 1));
    MessageHandler handler2 = mock(MessageHandler.class);
    channel.subscribe(handler2);
    assertThat(channel.getSubscriberCount()).isEqualTo(2);
    assertThat(logs.remove(0)).isEqualTo(String.format(log, 2));
    channel.unsubscribe(handler1);
    assertThat(channel.getSubscriberCount()).isEqualTo(1);
    assertThat(logs.remove(0)).isEqualTo(String.format(log, 1));
    channel.unsubscribe(handler1);
    assertThat(channel.getSubscriberCount()).isEqualTo(1);
    assertThat(logs.size()).isEqualTo(0);
    channel.unsubscribe(handler2);
    assertThat(channel.getSubscriberCount()).isEqualTo(0);
    assertThat(logs.remove(0)).isEqualTo(String.format(log, 0));
    verify(logger, times(4)).info(Mockito.anyString());
}
Also used : MessageHandler(org.springframework.messaging.MessageHandler) ArrayList(java.util.ArrayList) LogAccessor(org.springframework.core.log.LogAccessor)

Aggregations

LogAccessor (org.springframework.core.log.LogAccessor)38 Test (org.junit.jupiter.api.Test)34 DirectFieldAccessor (org.springframework.beans.DirectFieldAccessor)34 BeanFactory (org.springframework.beans.factory.BeanFactory)19 CountDownLatch (java.util.concurrent.CountDownLatch)16 QueueChannel (org.springframework.integration.channel.QueueChannel)15 Supplier (java.util.function.Supplier)11 Message (org.springframework.messaging.Message)11 GenericMessage (org.springframework.messaging.support.GenericMessage)11 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)9 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)9 Mockito.spy (org.mockito.Mockito.spy)9 TestUtils (org.springframework.integration.test.util.TestUtils)8 ThreadPoolTaskScheduler (org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler)8 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)7 AtomicReference (java.util.concurrent.atomic.AtomicReference)7 Mockito.mock (org.mockito.Mockito.mock)7 Mockito.verify (org.mockito.Mockito.verify)7 TimeUnit (java.util.concurrent.TimeUnit)6 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)6