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; package io.debezium.connector.mongodb.junit;
import org.testcontainers.containers.Network;
import io.debezium.testing.testcontainers.MongoDbDeployment; import io.debezium.testing.testcontainers.MongoDbDeployment;
import io.debezium.testing.testcontainers.MongoDbReplicaSet; import io.debezium.testing.testcontainers.MongoDbReplicaSet;
import io.debezium.testing.testcontainers.MongoDbShardedCluster; import io.debezium.testing.testcontainers.MongoDbShardedCluster;
@ -22,8 +20,6 @@ public final class MongoDbDatabaseProvider {
// Should be aligned with definition in pom.xml // Should be aligned with definition in pom.xml
public static final String MONGO_DOCKER_DESKTOP_PORT_DEFAULT = "27017:27117"; public static final String MONGO_DOCKER_DESKTOP_PORT_DEFAULT = "27017:27117";
private static Network NETWORK = null;
private static MongoDbReplicaSet.Builder dockerReplicaSetBuilder() { private static MongoDbReplicaSet.Builder dockerReplicaSetBuilder() {
// will be used only in environment with docker desktop // will be used only in environment with docker desktop
var portResolver = ParsingPortResolver.parseProperty(MONGO_DOCKER_DESKTOP_PORT_PROPERTY, MONGO_DOCKER_DESKTOP_PORT_DEFAULT); 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 * @return MongoDb Replica set
*/ */
public static MongoDbReplicaSet dockerReplicaSet() { public static MongoDbReplicaSet dockerReplicaSet() {
var replicaSetBuilder = dockerReplicaSetBuilder(); return dockerReplicaSetBuilder().build();
if (NETWORK != null) {
replicaSetBuilder.network(NETWORK);
}
var replicaSet = replicaSetBuilder.build();
NETWORK = null;
return replicaSet;
} }
/** /**
@ -55,13 +45,7 @@ public static MongoDbReplicaSet dockerReplicaSet() {
* @return MongoDb Replica set * @return MongoDb Replica set
*/ */
public static MongoDbReplicaSet dockerAuthReplicaSet() { public static MongoDbReplicaSet dockerAuthReplicaSet() {
var replicaSetBuilder = dockerReplicaSetBuilder().authEnabled(true); return dockerReplicaSetBuilder().authEnabled(true).build();
if (NETWORK != null) {
replicaSetBuilder.network(NETWORK);
}
var replicaSet = replicaSetBuilder.build();
NETWORK = null;
return replicaSet;
} }
/** /**
@ -69,7 +53,7 @@ public static MongoDbReplicaSet dockerAuthReplicaSet() {
* *
* @return MongoDb Replica set * @return MongoDb Replica set
*/ */
private static MongoDbShardedCluster.Builder mongoDbShardedClusterBuilder() { public static MongoDbShardedCluster mongoDbShardedCluster() {
// will be used only in environment with docker desktop // will be used only in environment with docker desktop
var portResolver = ParsingPortResolver.parseProperty(MONGO_DOCKER_DESKTOP_PORT_PROPERTY, MONGO_DOCKER_DESKTOP_PORT_DEFAULT); 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 shardSize = Integer.parseInt(System.getProperty(MONGO_SHARD_SIZE, "2"));
@ -79,22 +63,7 @@ private static MongoDbShardedCluster.Builder mongoDbShardedClusterBuilder() {
.shardCount(shardSize) .shardCount(shardSize)
.replicaCount(replicaSize) .replicaCount(replicaSize)
.routerCount(1) .routerCount(1)
.portResolver(portResolver); .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)
.build(); .build();
} }
@ -109,17 +78,6 @@ public static MongoDbDeployment externalOrDockerReplicaSet() {
return platform.provider.get(); 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() { private MongoDbDatabaseProvider() {
} }
} }

View File

@ -6,17 +6,15 @@
package io.debezium.connector.mongodb.sink; package io.debezium.connector.mongodb.sink;
import static io.debezium.connector.mongodb.TestHelper.cleanDatabase; import static io.debezium.connector.mongodb.TestHelper.cleanDatabase;
import static org.hamcrest.CoreMatchers.is;
import org.junit.After; import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assume;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import io.debezium.connector.mongodb.AbstractMongoConnectorIT; 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.MongoDbDeployment;
import io.debezium.testing.testcontainers.testhelper.TestInfrastructureHelper; import io.debezium.testing.testcontainers.testhelper.TestInfrastructureHelper;
import io.debezium.testing.testcontainers.util.DockerUtils; import io.debezium.testing.testcontainers.util.DockerUtils;
@ -32,11 +30,8 @@ public MongoDbDeployment getMongoDbDeployment() {
@BeforeClass @BeforeClass
public static void beforeAll() { public static void beforeAll() {
Assume.assumeThat("Skipping DebeziumMongoDbConnectorResourceIT tests when assembly profile is not active!",
System.getProperty("isAssemblyProfileActive", "false"),
is("true"));
DockerUtils.enableFakeDnsIfRequired(); DockerUtils.enableFakeDnsIfRequired();
mongo = MongoDbDatabaseProvider.externalOrDockerReplicaSet(TestInfrastructureHelper.getNetwork()); mongo = new NetworkIsolatedMongoDbDatabaseProvider(TestInfrastructureHelper.getNetwork()).dockerReplicaSet();
mongo.start(); mongo.start();
} }

View File

@ -6,19 +6,15 @@
package io.debezium.connector.mongodb.sink; package io.debezium.connector.mongodb.sink;
import static io.debezium.connector.mongodb.TestHelper.cleanDatabase; import static io.debezium.connector.mongodb.TestHelper.cleanDatabase;
import static org.hamcrest.CoreMatchers.is;
import org.junit.After; import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assume;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import io.debezium.connector.mongodb.AbstractShardedMongoConnectorIT; import io.debezium.connector.mongodb.AbstractShardedMongoConnectorIT;
import io.debezium.connector.mongodb.junit.MongoDbDatabaseProvider; import io.debezium.connector.mongodb.sink.junit.NetworkIsolatedMongoDbDatabaseProvider;
import io.debezium.connector.mongodb.junit.MongoDbDatabaseVersionResolver;
import io.debezium.connector.mongodb.junit.MongoDbPlatform;
import io.debezium.testing.testcontainers.MongoDbDeployment; import io.debezium.testing.testcontainers.MongoDbDeployment;
import io.debezium.testing.testcontainers.MongoDbShardedCluster; import io.debezium.testing.testcontainers.MongoDbShardedCluster;
import io.debezium.testing.testcontainers.testhelper.TestInfrastructureHelper; import io.debezium.testing.testcontainers.testhelper.TestInfrastructureHelper;
@ -35,12 +31,8 @@ public MongoDbDeployment getMongoDbDeployment() {
@BeforeClass @BeforeClass
public static void beforeAll() { 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(); DockerUtils.enableFakeDnsIfRequired();
mongo = MongoDbDatabaseProvider.mongoDbShardedCluster(TestInfrastructureHelper.getNetwork()); mongo = new NetworkIsolatedMongoDbDatabaseProvider(TestInfrastructureHelper.getNetwork()).mongoDbShardedCluster();
mongo.start(); 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();
}
}