Fix flaky test in JMS observability

See gh-32458
This commit is contained in:
Brian Clozel 2024-03-18 12:17:57 +01:00
parent 36d1bc57d7
commit c1424acb94
1 changed files with 22 additions and 1 deletions

View File

@ -21,7 +21,9 @@ import java.util.concurrent.TimeUnit;
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;
@ -117,6 +119,7 @@ class MessageListenerContainerObservationTests {
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");
@ -124,7 +127,6 @@ class MessageListenerContainerObservationTests {
throw new IllegalStateException("error");
});
listenerContainer.setErrorHandler(error -> {
latch.countDown();
throw new IllegalStateException("not handled");
});
listenerContainer.afterPropertiesSet();
@ -139,6 +141,25 @@ class MessageListenerContainerObservationTests {
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())),