Skip to content

Commit 750ce46

Browse files
committed
debezium/dbz#1083: Add integration tests for Apache Pulsar connection validation using Testcontainers
Signed-off-by: Philippe Camus <pxcamus@pm.me>
1 parent 96720ee commit 750ce46

File tree

3 files changed

+89
-0
lines changed

3 files changed

+89
-0
lines changed

debezium-platform-conductor/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,12 @@
447447
<artifactId>testcontainers-mssqlserver</artifactId>
448448
<scope>test</scope>
449449
</dependency>
450+
<dependency>
451+
<groupId>org.testcontainers</groupId>
452+
<artifactId>testcontainers-pulsar</artifactId>
453+
<scope>test</scope>
454+
</dependency>
455+
450456

451457
<dependency>
452458
<groupId>ch.qos.logback</groupId>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package io.debezium.platform.environment.connection;
2+
3+
import static org.junit.jupiter.api.Assertions.assertTrue;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
import java.util.concurrent.TimeUnit;
8+
9+
import io.quarkus.test.common.QuarkusTestResource;
10+
import org.junit.jupiter.api.BeforeEach;
11+
import org.junit.jupiter.api.DisplayName;
12+
import org.junit.jupiter.api.Test;
13+
import org.testcontainers.pulsar.PulsarContainer;
14+
import org.testcontainers.shaded.org.awaitility.Awaitility;
15+
16+
import io.debezium.platform.data.dto.ConnectionValidationResult;
17+
import io.debezium.platform.data.model.ConnectionEntity;
18+
import io.debezium.platform.domain.views.Connection;
19+
import io.debezium.platform.environment.connection.destination.PulsarConnectionValidator;
20+
import io.debezium.platform.environment.destination.ApachePulsarTestResource;
21+
import io.quarkus.test.junit.QuarkusTest;
22+
23+
@QuarkusTest
24+
@QuarkusTestResource(value = ApachePulsarTestResource.class, restrictToAnnotatedClass = true)
25+
class PulsarConnectionValidatorIT {
26+
public static final int DEFAULT_30_SECONDS_TIMEOUT = 30;
27+
28+
private PulsarConnectionValidator validator;
29+
30+
@BeforeEach
31+
void setUp() {
32+
validator = new PulsarConnectionValidator(DEFAULT_30_SECONDS_TIMEOUT);
33+
}
34+
35+
@Test
36+
@DisplayName("Should successfully validate connection with valid Pulsar configuration")
37+
void shouldValidateSuccessfulConnection() {
38+
PulsarContainer container = ApachePulsarTestResource.getContainer();
39+
40+
Awaitility.await()
41+
.atMost(300, TimeUnit.SECONDS)
42+
.until(container::isRunning);
43+
44+
Map<String, Object> config = new HashMap<>();
45+
config.put("serviceHttpUrl", container.getHttpServiceUrl());
46+
Connection connection = new TestConnectionView(ConnectionEntity.Type.APACHE_PULSAR, config);
47+
48+
ConnectionValidationResult result = validator.validate(connection);
49+
50+
assertTrue(result.valid(), "Connection validation should succeed");
51+
}
52+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.debezium.platform.environment.destination;
2+
3+
import java.util.Map;
4+
5+
import org.testcontainers.pulsar.PulsarContainer;
6+
import org.testcontainers.utility.DockerImageName;
7+
8+
import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
9+
10+
public class ApachePulsarTestResource implements QuarkusTestResourceLifecycleManager {
11+
private static final PulsarContainer PULSAR = new PulsarContainer(DockerImageName.parse("apachepulsar/pulsar:4.1.3"));
12+
13+
static {
14+
PULSAR.withExposedPorts(8080);
15+
}
16+
17+
public static PulsarContainer getContainer() {
18+
return PULSAR;
19+
}
20+
21+
@Override
22+
public Map<String, String> start() {
23+
PULSAR.start();
24+
return Map.of();
25+
}
26+
27+
@Override
28+
public void stop() {
29+
PULSAR.stop();
30+
}
31+
}

0 commit comments

Comments
 (0)