DBZ-7223 Use separate test support classes

This commit is contained in:
Jiri Pechanec 2024-07-04 08:03:07 +02:00
parent 1f245b9c87
commit c78a8d40ad
4 changed files with 101 additions and 63 deletions

View File

@ -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() {
}
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}
}