Fix custom test PulsarProducerFactory

Spring Pulsar 1.1.x introduced a new method `getPulsarClient`
on `PulsarProducerFactory` and the PulsarBinderIntegrationTests
has a custom factory that must be updated in order to run
on both Pulsar 1.0.x and 1.1.x (i.e. Spring Boot 3.2.x and 3.3.x).
This commit is contained in:
Chris Bono
2024-04-15 08:44:38 -05:00
committed by GitHub
parent 3298d0d3c7
commit 3d679c491c

View File

@@ -26,6 +26,7 @@ import java.util.function.Consumer;
import java.util.function.Supplier;
import org.apache.pulsar.client.api.Producer;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.client.api.Schema;
import org.apache.pulsar.client.impl.schema.JSONSchema;
import org.apache.pulsar.common.schema.KeyValue;
@@ -637,8 +638,8 @@ class PulsarBinderIntegrationTests implements PulsarTestContainerSupport {
static class BinderAndBindingPropsTestConfig {
@Bean
TrackingProducerFactoryBeanPostProcessor trackingProducerFactory() {
return new TrackingProducerFactoryBeanPostProcessor();
TrackingProducerFactoryBeanPostProcessor trackingProducerFactory(PulsarClient pulsarClient) {
return new TrackingProducerFactoryBeanPostProcessor(pulsarClient);
}
@Bean
@@ -650,10 +651,16 @@ class PulsarBinderIntegrationTests implements PulsarTestContainerSupport {
static class TrackingProducerFactoryBeanPostProcessor implements BeanPostProcessor {
private final PulsarClient pulsarClient;
TrackingProducerFactoryBeanPostProcessor(PulsarClient pulsarClient) {
this.pulsarClient = pulsarClient;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof DefaultPulsarProducerFactory defaultFactory) {
return new TrackingProducerFactory(defaultFactory);
return new TrackingProducerFactory(defaultFactory, this.pulsarClient);
}
return bean;
}
@@ -664,10 +671,18 @@ class PulsarBinderIntegrationTests implements PulsarTestContainerSupport {
private final DefaultPulsarProducerFactory<String> trackedProducerFactory;
private final PulsarClient pulsarClient;
List<Producer<String>> producersCreated = new ArrayList<>();
TrackingProducerFactory(DefaultPulsarProducerFactory<String> trackedProducerFactory) {
TrackingProducerFactory(DefaultPulsarProducerFactory<String> trackedProducerFactory, PulsarClient pulsarClient) {
this.trackedProducerFactory = trackedProducerFactory;
this.pulsarClient = pulsarClient;
}
// This is required in PulsarProducerFactory in Spring Pulsar 1.1.x (i.e. Spring Boot 3.3.x)
public PulsarClient getPulsarClient() {
return this.pulsarClient;
}
@Override