Skip to content

Commit

Permalink
Merge branch '6.1.x'
Browse files Browse the repository at this point in the history
  • Loading branch information
bclozel committed Mar 18, 2024
2 parents 3e102e5 + 521d4f2 commit ae5cff1
Showing 1 changed file with 4 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,7 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Stream;

import io.micrometer.jakarta9.instrument.jms.JmsProcessObservationContext;
import io.micrometer.observation.Observation;
import io.micrometer.observation.ObservationHandler;
import io.micrometer.observation.tck.TestObservationRegistry;
import jakarta.jms.MessageListener;
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
Expand Down Expand Up @@ -65,15 +63,15 @@ void setupServer() {
@ParameterizedTest(name = "[{index}] {0}")
@MethodSource("listenerContainers")
void shouldRecordJmsProcessObservations(AbstractMessageListenerContainer listenerContainer) throws Exception {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.convertAndSend("spring.test.observation", "message content");
CountDownLatch latch = new CountDownLatch(1);
listenerContainer.setConnectionFactory(connectionFactory);
listenerContainer.setObservationRegistry(registry);
listenerContainer.setDestinationName("spring.test.observation");
listenerContainer.setMessageListener((MessageListener) message -> latch.countDown());
listenerContainer.afterPropertiesSet();
listenerContainer.start();
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.convertAndSend("spring.test.observation", "message content");
latch.await(2, TimeUnit.SECONDS);
assertThat(registry).hasObservationWithNameEqualTo("jms.message.process")
.that()
Expand All @@ -86,8 +84,6 @@ void shouldRecordJmsProcessObservations(AbstractMessageListenerContainer listene
@ParameterizedTest(name = "[{index}] {0}")
@MethodSource("listenerContainers")
void shouldHaveObservationScopeInErrorHandler(AbstractMessageListenerContainer listenerContainer) throws Exception {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.convertAndSend("spring.test.observation", "message content");
CountDownLatch latch = new CountDownLatch(1);
AtomicReference<Observation> observationInErrorHandler = new AtomicReference<>();
listenerContainer.setConnectionFactory(connectionFactory);
Expand All @@ -102,64 +98,19 @@ void shouldHaveObservationScopeInErrorHandler(AbstractMessageListenerContainer l
});
listenerContainer.afterPropertiesSet();
listenerContainer.start();
latch.await(2, TimeUnit.SECONDS);
Assertions.assertThat(observationInErrorHandler.get()).isNotNull();
assertThat(registry).hasObservationWithNameEqualTo("jms.message.process")
.that()
.hasHighCardinalityKeyValue("messaging.destination.name", "spring.test.observation")
.hasLowCardinalityKeyValue("exception", "none");
assertThat(registry).hasNumberOfObservationsEqualTo(1);
listenerContainer.stop();
listenerContainer.shutdown();
}

@ParameterizedTest(name = "[{index}] {0}")
@MethodSource("listenerContainers")
void shouldHaveObservationErrorWhenRethrown(AbstractMessageListenerContainer listenerContainer) throws Exception {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.convertAndSend("spring.test.observation", "message content");
CountDownLatch latch = new CountDownLatch(1);
registry.observationConfig().observationHandler(new ErrorHandlerObservationHandler(latch));
listenerContainer.setConnectionFactory(connectionFactory);
listenerContainer.setObservationRegistry(registry);
listenerContainer.setDestinationName("spring.test.observation");
listenerContainer.setMessageListener((MessageListener) message -> {
throw new IllegalStateException("error");
});
listenerContainer.setErrorHandler(error -> {
throw new IllegalStateException("not handled");
});
listenerContainer.afterPropertiesSet();
listenerContainer.start();
latch.await(2, TimeUnit.SECONDS);
Assertions.assertThat(observationInErrorHandler.get()).isNotNull();
assertThat(registry).hasObservationWithNameEqualTo("jms.message.process")
.that()
.hasHighCardinalityKeyValue("messaging.destination.name", "spring.test.observation")
.hasLowCardinalityKeyValue("exception", "IllegalStateException");
.hasLowCardinalityKeyValue("exception", "none");
assertThat(registry).hasNumberOfObservationsEqualTo(1);
listenerContainer.stop();
listenerContainer.shutdown();
}

static class ErrorHandlerObservationHandler implements ObservationHandler<JmsProcessObservationContext> {

private final CountDownLatch latch;

ErrorHandlerObservationHandler(CountDownLatch latch) {
this.latch = latch;
}

@Override
public boolean supportsContext(Observation.Context context) {
return context instanceof JmsProcessObservationContext;
}

@Override
public void onError(JmsProcessObservationContext context) {
this.latch.countDown();
}
}

static Stream<Arguments> listenerContainers() {
return Stream.of(
arguments(named(DefaultMessageListenerContainer.class.getSimpleName(), new DefaultMessageListenerContainer())),
Expand Down

0 comments on commit ae5cff1

Please sign in to comment.