diff --git a/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/junit/MongoDbDatabaseProvider.java b/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/junit/MongoDbDatabaseProvider.java index 6c117c30d..f121a3273 100644 --- a/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/junit/MongoDbDatabaseProvider.java +++ b/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/junit/MongoDbDatabaseProvider.java @@ -5,8 +5,6 @@ */ package io.debezium.connector.mongodb.junit; -import org.testcontainers.containers.Network; - import io.debezium.testing.testcontainers.MongoDbDeployment; import io.debezium.testing.testcontainers.MongoDbReplicaSet; import io.debezium.testing.testcontainers.MongoDbShardedCluster; @@ -22,8 +20,6 @@ public final class MongoDbDatabaseProvider { // Should be aligned with definition in pom.xml public static final String MONGO_DOCKER_DESKTOP_PORT_DEFAULT = "27017:27117"; - private static Network NETWORK = null; - private static MongoDbReplicaSet.Builder dockerReplicaSetBuilder() { // will be used only in environment with docker desktop var portResolver = ParsingPortResolver.parseProperty(MONGO_DOCKER_DESKTOP_PORT_PROPERTY, MONGO_DOCKER_DESKTOP_PORT_DEFAULT); @@ -40,13 +36,7 @@ private static MongoDbReplicaSet.Builder dockerReplicaSetBuilder() { * @return MongoDb Replica set */ public static MongoDbReplicaSet dockerReplicaSet() { - var replicaSetBuilder = dockerReplicaSetBuilder(); - if (NETWORK != null) { - replicaSetBuilder.network(NETWORK); - } - var replicaSet = replicaSetBuilder.build(); - NETWORK = null; - return replicaSet; + return dockerReplicaSetBuilder().build(); } /** @@ -55,13 +45,7 @@ public static MongoDbReplicaSet dockerReplicaSet() { * @return MongoDb Replica set */ public static MongoDbReplicaSet dockerAuthReplicaSet() { - var replicaSetBuilder = dockerReplicaSetBuilder().authEnabled(true); - if (NETWORK != null) { - replicaSetBuilder.network(NETWORK); - } - var replicaSet = replicaSetBuilder.build(); - NETWORK = null; - return replicaSet; + return dockerReplicaSetBuilder().authEnabled(true).build(); } /** @@ -69,7 +53,7 @@ public static MongoDbReplicaSet dockerAuthReplicaSet() { * * @return MongoDb Replica set */ - private static MongoDbShardedCluster.Builder mongoDbShardedClusterBuilder() { + public static MongoDbShardedCluster mongoDbShardedCluster() { // will be used only in environment with docker desktop var portResolver = ParsingPortResolver.parseProperty(MONGO_DOCKER_DESKTOP_PORT_PROPERTY, MONGO_DOCKER_DESKTOP_PORT_DEFAULT); var shardSize = Integer.parseInt(System.getProperty(MONGO_SHARD_SIZE, "2")); @@ -79,22 +63,7 @@ private static MongoDbShardedCluster.Builder mongoDbShardedClusterBuilder() { .shardCount(shardSize) .replicaCount(replicaSize) .routerCount(1) - .portResolver(portResolver); - } - - public static MongoDbShardedCluster mongoDbShardedCluster() { - var clusterBuilder = mongoDbShardedClusterBuilder(); - if (NETWORK != null) { - clusterBuilder.network(NETWORK); - } - var shardedCluster = clusterBuilder.build(); - NETWORK = null; - return shardedCluster; - } - - public static MongoDbShardedCluster mongoDbShardedCluster(Network network) { - return mongoDbShardedClusterBuilder() - .network(network) + .portResolver(portResolver) .build(); } @@ -109,17 +78,6 @@ public static MongoDbDeployment externalOrDockerReplicaSet() { return platform.provider.get(); } - /** - * Creates MongoDB replica-set abstraction either for external database or a local MongoDB replica-set container with the provided container Network. - * - * @return MongoDb replica-set deployment - */ - public static MongoDbDeployment externalOrDockerReplicaSet(Network network) { - NETWORK = network; - var platform = MongoDbDatabaseVersionResolver.getPlatform(); - return platform.provider.get(); - } - private MongoDbDatabaseProvider() { } } diff --git a/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/SinkConnectorReplicaSetIT.java b/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/SinkConnectorReplicaSetIT.java index 86b66a8cb..d3741b33a 100644 --- a/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/SinkConnectorReplicaSetIT.java +++ b/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/SinkConnectorReplicaSetIT.java @@ -6,17 +6,15 @@ package io.debezium.connector.mongodb.sink; import static io.debezium.connector.mongodb.TestHelper.cleanDatabase; -import static org.hamcrest.CoreMatchers.is; import org.junit.After; import org.junit.AfterClass; -import org.junit.Assume; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import io.debezium.connector.mongodb.AbstractMongoConnectorIT; -import io.debezium.connector.mongodb.junit.MongoDbDatabaseProvider; +import io.debezium.connector.mongodb.sink.junit.NetworkIsolatedMongoDbDatabaseProvider; import io.debezium.testing.testcontainers.MongoDbDeployment; import io.debezium.testing.testcontainers.testhelper.TestInfrastructureHelper; import io.debezium.testing.testcontainers.util.DockerUtils; @@ -32,11 +30,8 @@ public MongoDbDeployment getMongoDbDeployment() { @BeforeClass public static void beforeAll() { - Assume.assumeThat("Skipping DebeziumMongoDbConnectorResourceIT tests when assembly profile is not active!", - System.getProperty("isAssemblyProfileActive", "false"), - is("true")); DockerUtils.enableFakeDnsIfRequired(); - mongo = MongoDbDatabaseProvider.externalOrDockerReplicaSet(TestInfrastructureHelper.getNetwork()); + mongo = new NetworkIsolatedMongoDbDatabaseProvider(TestInfrastructureHelper.getNetwork()).dockerReplicaSet(); mongo.start(); } diff --git a/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/SinkConnectorShardedClusterIT.java b/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/SinkConnectorShardedClusterIT.java index a8642c5b7..8eed6c424 100644 --- a/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/SinkConnectorShardedClusterIT.java +++ b/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/SinkConnectorShardedClusterIT.java @@ -6,19 +6,15 @@ package io.debezium.connector.mongodb.sink; import static io.debezium.connector.mongodb.TestHelper.cleanDatabase; -import static org.hamcrest.CoreMatchers.is; import org.junit.After; import org.junit.AfterClass; -import org.junit.Assume; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import io.debezium.connector.mongodb.AbstractShardedMongoConnectorIT; -import io.debezium.connector.mongodb.junit.MongoDbDatabaseProvider; -import io.debezium.connector.mongodb.junit.MongoDbDatabaseVersionResolver; -import io.debezium.connector.mongodb.junit.MongoDbPlatform; +import io.debezium.connector.mongodb.sink.junit.NetworkIsolatedMongoDbDatabaseProvider; import io.debezium.testing.testcontainers.MongoDbDeployment; import io.debezium.testing.testcontainers.MongoDbShardedCluster; import io.debezium.testing.testcontainers.testhelper.TestInfrastructureHelper; @@ -35,12 +31,8 @@ public MongoDbDeployment getMongoDbDeployment() { @BeforeClass public static void beforeAll() { - Assume.assumeThat("Skipping DebeziumMongoDbConnectorResourceIT tests when assembly profile is not active!", - System.getProperty("isAssemblyProfileActive", "false"), - is("true")); - Assume.assumeTrue(MongoDbDatabaseVersionResolver.getPlatform().equals(MongoDbPlatform.MONGODB_DOCKER)); DockerUtils.enableFakeDnsIfRequired(); - mongo = MongoDbDatabaseProvider.mongoDbShardedCluster(TestInfrastructureHelper.getNetwork()); + mongo = new NetworkIsolatedMongoDbDatabaseProvider(TestInfrastructureHelper.getNetwork()).mongoDbShardedCluster(); mongo.start(); } diff --git a/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/junit/NetworkIsolatedMongoDbDatabaseProvider.java b/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/junit/NetworkIsolatedMongoDbDatabaseProvider.java new file mode 100644 index 000000000..96dc474df --- /dev/null +++ b/debezium-connector-mongodb/src/test/java/io/debezium/connector/mongodb/sink/junit/NetworkIsolatedMongoDbDatabaseProvider.java @@ -0,0 +1,93 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.connector.mongodb.sink.junit; + +import org.testcontainers.containers.Network; + +import io.debezium.testing.testcontainers.MongoDbReplicaSet; +import io.debezium.testing.testcontainers.MongoDbShardedCluster; +import io.debezium.testing.testcontainers.util.ParsingPortResolver; + +public final class NetworkIsolatedMongoDbDatabaseProvider { + + public static final String MONGO_REPLICA_SIZE = "mongodb.replica.size"; + public static final String MONGO_SHARD_SIZE = "mongodb.shard.size"; + public static final String MONGO_SHARD_REPLICA_SIZE = "mongodb.shard.replica.size"; + public static final String MONGO_DOCKER_DESKTOP_PORT_PROPERTY = "mongodb.docker.desktop.ports"; + + // Should be aligned with definition in pom.xml + public static final String MONGO_DOCKER_DESKTOP_PORT_DEFAULT = "27017:27117"; + + private final Network network; + + public NetworkIsolatedMongoDbDatabaseProvider(Network network) { + this.network = network; + } + + public NetworkIsolatedMongoDbDatabaseProvider() { + this(null); + } + + private MongoDbReplicaSet.Builder dockerReplicaSetBuilder() { + // will be used only in environment with docker desktop + var portResolver = ParsingPortResolver.parseProperty(MONGO_DOCKER_DESKTOP_PORT_PROPERTY, MONGO_DOCKER_DESKTOP_PORT_DEFAULT); + var replicaSize = Integer.parseInt(System.getProperty(MONGO_REPLICA_SIZE, "1")); + + var builder = MongoDbReplicaSet.replicaSet() + .memberCount(replicaSize) + .portResolver(portResolver); + if (network != null) { + builder.network(network); + } + return builder; + } + + /** + * Constructs the default testing MongoDB replica set + * + * @return MongoDb Replica set + */ + public MongoDbReplicaSet dockerReplicaSet() { + return dockerReplicaSetBuilder().build(); + } + + /** + * Constructs testing MongoDB replica set with enabled authentication + * + * @return MongoDb Replica set + */ + public MongoDbReplicaSet dockerAuthReplicaSet() { + return dockerReplicaSetBuilder().authEnabled(true).build(); + } + + /** + * Constructs the default testing MongoDB sharded cluster + * + * @return MongoDb Replica set + */ + private MongoDbShardedCluster.Builder mongoDbShardedClusterBuilder() { + // will be used only in environment with docker desktop + var portResolver = ParsingPortResolver.parseProperty(MONGO_DOCKER_DESKTOP_PORT_PROPERTY, MONGO_DOCKER_DESKTOP_PORT_DEFAULT); + var shardSize = Integer.parseInt(System.getProperty(MONGO_SHARD_SIZE, "2")); + var replicaSize = Integer.parseInt(System.getProperty(MONGO_SHARD_REPLICA_SIZE, "1")); + + var builder = MongoDbShardedCluster.shardedCluster() + .shardCount(shardSize) + .replicaCount(replicaSize) + .routerCount(1) + .portResolver(portResolver); + + if (network != null) { + builder.network(network); + } + + return builder; + } + + public MongoDbShardedCluster mongoDbShardedCluster() { + return mongoDbShardedClusterBuilder().build(); + } +}