From 1c83ebeceb890f80063df0f23178df4e409b0864 Mon Sep 17 00:00:00 2001 From: davidfrigolet Date: Fri, 30 Jan 2026 15:43:24 +0000 Subject: [PATCH 1/2] refactor: mongodb and dynamodb test kit modules --- .github/workflows/release.yml | 28 +++++++++++++++++++ .../build.gradle.kts | 1 + .../store/dynamodb/DynamoDBTestContainer.java | 2 ++ .../build.gradle.kts | 1 + .../DynamoDBCloudTargetSystemTest.java | 2 ++ .../build.gradle.kts | 2 ++ .../dynamodb/DynamoDBImporterTest.java | 2 ++ .../mongock-importer-mongodb/build.gradle.kts | 2 +- settings.gradle.kts | 7 +++++ utils/dynamodb-test-kit/build.gradle.kts | 21 ++++++++++++++ .../dynamodb/kit/DynamoDBAuditStorage.java | 0 .../dynamodb/kit/DynamoDBLockEntity.java | 0 .../dynamodb/kit/DynamoDBLockStorage.java | 0 .../dynamodb/kit/DynamoDBTableFactory.java | 0 .../dynamodb/kit/DynamoDBTestContainer.java | 2 ++ .../dynamodb/kit/DynamoDBTestKit.java | 0 utils/dynamodb-util/build.gradle.kts | 21 +++----------- utils/mongodb-test-kit/build.gradle.kts | 15 ++++++++++ .../mongodb/kit/MongoDBSyncAuditStorage.java | 0 .../mongodb/kit/MongoDBSyncLockStorage.java | 0 .../mongodb/kit/MongoDBSyncTestKit.java | 0 .../kit/SimpleMongoDocumentHelper.java | 0 utils/mongodb-util/build.gradle.kts | 10 +++++-- 23 files changed, 95 insertions(+), 21 deletions(-) create mode 100644 utils/dynamodb-test-kit/build.gradle.kts rename utils/{dynamodb-util => dynamodb-test-kit}/src/main/java/io/flamingock/dynamodb/kit/DynamoDBAuditStorage.java (100%) rename utils/{dynamodb-util => dynamodb-test-kit}/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockEntity.java (100%) rename utils/{dynamodb-util => dynamodb-test-kit}/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockStorage.java (100%) rename utils/{dynamodb-util => dynamodb-test-kit}/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTableFactory.java (100%) rename utils/{dynamodb-util => dynamodb-test-kit}/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestContainer.java (96%) rename utils/{dynamodb-util => dynamodb-test-kit}/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestKit.java (100%) create mode 100644 utils/mongodb-test-kit/build.gradle.kts rename utils/{mongodb-util => mongodb-test-kit}/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncAuditStorage.java (100%) rename utils/{mongodb-util => mongodb-test-kit}/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncLockStorage.java (100%) rename utils/{mongodb-util => mongodb-test-kit}/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncTestKit.java (100%) rename utils/{mongodb-util => mongodb-test-kit}/src/main/java/io/flamingock/mongodb/kit/SimpleMongoDocumentHelper.java (100%) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0f0a55ed8..82964d856 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -435,6 +435,19 @@ jobs: FLAMINGOCK_JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }} FLAMINGOCK_JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }} + mongodb-test-kit: + needs: [ build ] + uses: ./.github/workflows/module-release-graalvm.yml + with: + module: mongodb-test-kit + secrets: + FLAMINGOCK_JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }} + FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }} + FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }} + FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }} + FLAMINGOCK_JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }} + FLAMINGOCK_JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }} + dynamodb-util: needs: [ build ] uses: ./.github/workflows/module-release-graalvm.yml @@ -448,6 +461,19 @@ jobs: FLAMINGOCK_JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }} FLAMINGOCK_JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }} + dynamodb-test-kit: + needs: [ build ] + uses: ./.github/workflows/module-release-graalvm.yml + with: + module: dynamodb-test-kit + secrets: + FLAMINGOCK_JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }} + FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }} + FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }} + FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }} + FLAMINGOCK_JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }} + FLAMINGOCK_JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }} + couchbase-util: needs: [ build ] uses: ./.github/workflows/module-release-graalvm.yml @@ -556,7 +582,9 @@ jobs: general-util, test-util, mongodb-util, + mongodb-test-kit, dynamodb-util, + dynamodb-test-kit, couchbase-util, sql-util, mongock-support, diff --git a/community/flamingock-auditstore-dynamodb/build.gradle.kts b/community/flamingock-auditstore-dynamodb/build.gradle.kts index ae7f396f3..192313741 100644 --- a/community/flamingock-auditstore-dynamodb/build.gradle.kts +++ b/community/flamingock-auditstore-dynamodb/build.gradle.kts @@ -9,6 +9,7 @@ dependencies { testImplementation(project(":utils:test-util")) + testImplementation(project(":utils:dynamodb-test-kit")) testImplementation(project(":core:target-systems:dynamodb-target-system")) testImplementation(project(":core:target-systems:nontransactional-target-system")) diff --git a/community/flamingock-auditstore-dynamodb/src/test/java/io/flamingock/store/dynamodb/DynamoDBTestContainer.java b/community/flamingock-auditstore-dynamodb/src/test/java/io/flamingock/store/dynamodb/DynamoDBTestContainer.java index ae3dea3da..41be8abbd 100644 --- a/community/flamingock-auditstore-dynamodb/src/test/java/io/flamingock/store/dynamodb/DynamoDBTestContainer.java +++ b/community/flamingock-auditstore-dynamodb/src/test/java/io/flamingock/store/dynamodb/DynamoDBTestContainer.java @@ -19,6 +19,7 @@ import org.testcontainers.utility.DockerImageName; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; @@ -59,6 +60,7 @@ public static DynamoDbClient createClient(GenericContainer container) { return DynamoDbClient.builder() .region(Region.US_EAST_1) .endpointOverride(URI.create(endpoint)) + .httpClient(UrlConnectionHttpClient.builder().build()) .credentialsProvider( StaticCredentialsProvider.create( AwsBasicCredentials.create(DUMMY_ACCESS_KEY, DUMMY_SECRET_KEY) diff --git a/community/flamingock-auditstore-mongodb-sync/build.gradle.kts b/community/flamingock-auditstore-mongodb-sync/build.gradle.kts index 5d2ff1887..7ccfcd240 100644 --- a/community/flamingock-auditstore-mongodb-sync/build.gradle.kts +++ b/community/flamingock-auditstore-mongodb-sync/build.gradle.kts @@ -11,6 +11,7 @@ dependencies { testImplementation(project(":utils:test-util")) + testImplementation(project(":utils:mongodb-test-kit")) testImplementation(project(":core:target-systems:nontransactional-target-system")) testImplementation(project(":core:target-systems:mongodb-sync-target-system")) diff --git a/core/target-systems/dynamodb-target-system/src/test/java/io/flamingock/targetsystem/dynamodb/DynamoDBCloudTargetSystemTest.java b/core/target-systems/dynamodb-target-system/src/test/java/io/flamingock/targetsystem/dynamodb/DynamoDBCloudTargetSystemTest.java index a5bac0d34..fdcf2591f 100644 --- a/core/target-systems/dynamodb-target-system/src/test/java/io/flamingock/targetsystem/dynamodb/DynamoDBCloudTargetSystemTest.java +++ b/core/target-systems/dynamodb-target-system/src/test/java/io/flamingock/targetsystem/dynamodb/DynamoDBCloudTargetSystemTest.java @@ -46,6 +46,7 @@ import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.TableSchema; import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import java.net.URI; @@ -312,6 +313,7 @@ private static DynamoDbClient getDynamoDBClient() { return DynamoDbClient.builder() .region(Region.EU_WEST_1) .endpointOverride(new URI("http://localhost:8000")) + .httpClient(UrlConnectionHttpClient.builder().build()) .credentialsProvider( StaticCredentialsProvider.create( AwsBasicCredentials.create("dummye", "dummye") diff --git a/legacy/mongock-importer-dynamodb/build.gradle.kts b/legacy/mongock-importer-dynamodb/build.gradle.kts index bf08a314b..29f3e6338 100644 --- a/legacy/mongock-importer-dynamodb/build.gradle.kts +++ b/legacy/mongock-importer-dynamodb/build.gradle.kts @@ -13,11 +13,13 @@ dependencies { testImplementation(project(":utils:test-util")) + testImplementation(project(":utils:dynamodb-test-kit")) testImplementation("org.testcontainers:testcontainers-junit-jupiter:2.0.2") testImplementation("org.mockito:mockito-inline:4.11.0") testImplementation("org.testcontainers:testcontainers-localstack:2.0.2") testImplementation("software.amazon.awssdk:dynamodb:2.25.61") + testImplementation("software.amazon.awssdk:url-connection-client:2.24.11") testImplementation("org.mockito:mockito-inline:4.11.0") } diff --git a/legacy/mongock-importer-dynamodb/src/test/java/io/flamingock/importer/mongock/dynamodb/DynamoDBImporterTest.java b/legacy/mongock-importer-dynamodb/src/test/java/io/flamingock/importer/mongock/dynamodb/DynamoDBImporterTest.java index e316b9b1b..e299839ac 100644 --- a/legacy/mongock-importer-dynamodb/src/test/java/io/flamingock/importer/mongock/dynamodb/DynamoDBImporterTest.java +++ b/legacy/mongock-importer-dynamodb/src/test/java/io/flamingock/importer/mongock/dynamodb/DynamoDBImporterTest.java @@ -35,6 +35,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.DescribeTableRequest; @@ -72,6 +73,7 @@ void setUp() { client = DynamoDbClient.builder() .endpointOverride(URI.create(endpoint)) .region(Region.US_EAST_1) + .httpClient(UrlConnectionHttpClient.builder().build()) .credentialsProvider( StaticCredentialsProvider.create( AwsBasicCredentials.create("dummy", "dummy") diff --git a/legacy/mongock-importer-mongodb/build.gradle.kts b/legacy/mongock-importer-mongodb/build.gradle.kts index fe1fca141..87b48fe73 100644 --- a/legacy/mongock-importer-mongodb/build.gradle.kts +++ b/legacy/mongock-importer-mongodb/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { testImplementation(project(":community:flamingock-auditstore-mongodb-sync")) testImplementation(project(":templates:flamingock-mongodb-sync-template")) testImplementation(project(":utils:test-util")) - testImplementation(project(":utils:mongodb-util")) + testImplementation(project(":utils:mongodb-test-kit")) testImplementation("org.testcontainers:testcontainers-mongodb:2.0.2") diff --git a/settings.gradle.kts b/settings.gradle.kts index 825a7457a..e6efa2081 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -164,11 +164,18 @@ include("utils:mongodb-util") project(":utils:mongodb-util").name = "mongodb-util" project(":utils:mongodb-util").projectDir = file("utils/mongodb-util") +include("utils:mongodb-test-kit") +project(":utils:mongodb-test-kit").name = "mongodb-test-kit" +project(":utils:mongodb-test-kit").projectDir = file("utils/mongodb-test-kit") include("utils:dynamodb-util") project(":utils:dynamodb-util").name = "dynamodb-util" project(":utils:dynamodb-util").projectDir = file("utils/dynamodb-util") +include("utils:dynamodb-test-kit") +project(":utils:dynamodb-test-kit").name = "dynamodb-test-kit" +project(":utils:dynamodb-test-kit").projectDir = file("utils/dynamodb-test-kit") + include("utils:couchbase-util") project(":utils:couchbase-util").name = "couchbase-util" project(":utils:couchbase-util").projectDir = file("utils/couchbase-util") diff --git a/utils/dynamodb-test-kit/build.gradle.kts b/utils/dynamodb-test-kit/build.gradle.kts new file mode 100644 index 000000000..cb78b5954 --- /dev/null +++ b/utils/dynamodb-test-kit/build.gradle.kts @@ -0,0 +1,21 @@ +dependencies { + implementation(project(":core:flamingock-core")) + implementation(project(":utils:dynamodb-util")) + implementation(project(":utils:general-util")) + implementation(project(":utils:test-util")) + + compileOnly("software.amazon.awssdk:dynamodb-enhanced:2.25.29") + + compileOnly("software.amazon.awssdk:url-connection-client:2.24.11") + + compileOnly("org.testcontainers:testcontainers:2.0.2") + compileOnly("org.testcontainers:testcontainers-junit-jupiter:2.0.2") +} + +description = "DynamoDB TestKit for Flamingock testing" + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} diff --git a/utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBAuditStorage.java b/utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBAuditStorage.java similarity index 100% rename from utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBAuditStorage.java rename to utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBAuditStorage.java diff --git a/utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockEntity.java b/utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockEntity.java similarity index 100% rename from utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockEntity.java rename to utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockEntity.java diff --git a/utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockStorage.java b/utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockStorage.java similarity index 100% rename from utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockStorage.java rename to utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBLockStorage.java diff --git a/utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTableFactory.java b/utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTableFactory.java similarity index 100% rename from utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTableFactory.java rename to utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTableFactory.java diff --git a/utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestContainer.java b/utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestContainer.java similarity index 96% rename from utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestContainer.java rename to utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestContainer.java index aa944550e..05121a96d 100644 --- a/utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestContainer.java +++ b/utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestContainer.java @@ -19,6 +19,7 @@ import org.testcontainers.utility.DockerImageName; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; @@ -88,6 +89,7 @@ public static DynamoDbClient createClient(GenericContainer container) { return DynamoDbClient.builder() .region(Region.US_EAST_1) .endpointOverride(URI.create(endpoint)) + .httpClient(UrlConnectionHttpClient.builder().build()) .credentialsProvider( StaticCredentialsProvider.create( AwsBasicCredentials.create(DUMMY_ACCESS_KEY, DUMMY_SECRET_KEY) diff --git a/utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestKit.java b/utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestKit.java similarity index 100% rename from utils/dynamodb-util/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestKit.java rename to utils/dynamodb-test-kit/src/main/java/io/flamingock/dynamodb/kit/DynamoDBTestKit.java diff --git a/utils/dynamodb-util/build.gradle.kts b/utils/dynamodb-util/build.gradle.kts index 0696b4e75..352c2acbc 100644 --- a/utils/dynamodb-util/build.gradle.kts +++ b/utils/dynamodb-util/build.gradle.kts @@ -1,24 +1,11 @@ -plugins { - id("java") -} - - -val jacksonVersion = "2.16.0" dependencies { + implementation(project(":core:flamingock-core")) + implementation(project(":utils:general-util")) - api("software.amazon.awssdk:dynamodb-enhanced:2.25.29") - - // TestKit dependencies - api(project(":utils:test-util")) - api(project(":utils:general-util")) - - // TestContainers for DynamoDB testing - api("org.testcontainers:testcontainers:2.0.2") - api("org.testcontainers:testcontainers-junit-jupiter:2.0.2") - + compileOnly("software.amazon.awssdk:dynamodb-enhanced:2.25.29") } -description = "Amazon DynamoDB utilities and TestContainers support for NoSQL testing and development" +description = "Amazon DynamoDB utilities and helpers for database operations" java { toolchain { diff --git a/utils/mongodb-test-kit/build.gradle.kts b/utils/mongodb-test-kit/build.gradle.kts new file mode 100644 index 000000000..8fce37eac --- /dev/null +++ b/utils/mongodb-test-kit/build.gradle.kts @@ -0,0 +1,15 @@ +dependencies { + implementation(project(":core:flamingock-core")) + implementation(project(":utils:mongodb-util")) + implementation(project(":utils:test-util")) + + compileOnly("org.mongodb:mongodb-driver-sync:4.0.0") +} + +description = "MongoDB TestKit for Flamingock testing" + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} diff --git a/utils/mongodb-util/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncAuditStorage.java b/utils/mongodb-test-kit/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncAuditStorage.java similarity index 100% rename from utils/mongodb-util/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncAuditStorage.java rename to utils/mongodb-test-kit/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncAuditStorage.java diff --git a/utils/mongodb-util/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncLockStorage.java b/utils/mongodb-test-kit/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncLockStorage.java similarity index 100% rename from utils/mongodb-util/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncLockStorage.java rename to utils/mongodb-test-kit/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncLockStorage.java diff --git a/utils/mongodb-util/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncTestKit.java b/utils/mongodb-test-kit/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncTestKit.java similarity index 100% rename from utils/mongodb-util/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncTestKit.java rename to utils/mongodb-test-kit/src/main/java/io/flamingock/mongodb/kit/MongoDBSyncTestKit.java diff --git a/utils/mongodb-util/src/main/java/io/flamingock/mongodb/kit/SimpleMongoDocumentHelper.java b/utils/mongodb-test-kit/src/main/java/io/flamingock/mongodb/kit/SimpleMongoDocumentHelper.java similarity index 100% rename from utils/mongodb-util/src/main/java/io/flamingock/mongodb/kit/SimpleMongoDocumentHelper.java rename to utils/mongodb-test-kit/src/main/java/io/flamingock/mongodb/kit/SimpleMongoDocumentHelper.java diff --git a/utils/mongodb-util/build.gradle.kts b/utils/mongodb-util/build.gradle.kts index 948c0b987..dc40279d3 100644 --- a/utils/mongodb-util/build.gradle.kts +++ b/utils/mongodb-util/build.gradle.kts @@ -1,9 +1,13 @@ dependencies { implementation(project(":core:flamingock-core")) - implementation(project(":utils:test-util")) - - // MongoDB driver for storage implementations + compileOnly("org.mongodb:mongodb-driver-sync:4.0.0") + + testImplementation(project(":utils:test-util")) +} + +configurations.testImplementation { + extendsFrom(configurations.compileOnly.get()) } description = "MongoDB-specific utilities and helpers for connection management and document operations" From d63b244aab712b094dd6bd4e000733d86714c3ac Mon Sep 17 00:00:00 2001 From: davidfrigolet Date: Sat, 31 Jan 2026 11:38:12 +0000 Subject: [PATCH 2/2] refactor: mongodb and dynamodb test kit modules --- .../dynamodb-target-system/build.gradle.kts | 8 ++- .../DynamoDBCloudTargetSystemTest.java | 53 ++++--------------- 2 files changed, 17 insertions(+), 44 deletions(-) diff --git a/core/target-systems/dynamodb-target-system/build.gradle.kts b/core/target-systems/dynamodb-target-system/build.gradle.kts index 00d47959c..6addab059 100644 --- a/core/target-systems/dynamodb-target-system/build.gradle.kts +++ b/core/target-systems/dynamodb-target-system/build.gradle.kts @@ -7,11 +7,15 @@ dependencies { compileOnly("software.amazon.awssdk:dynamodb-enhanced:2.25.29") - testImplementation("software.amazon.awssdk:url-connection-client:2.24.11") - testImplementation("com.amazonaws:DynamoDBLocal:1.25.0") + testImplementation("software.amazon.awssdk:dynamodb:2.25.29") + testImplementation("software.amazon.awssdk:dynamodb-enhanced:2.25.29") + testImplementation("software.amazon.awssdk:url-connection-client:2.25.29") testImplementation(project(":cloud:flamingock-cloud")) testImplementation(project(":utils:test-util")) + testImplementation(project(":utils:dynamodb-test-kit")) + testImplementation("org.testcontainers:testcontainers:2.0.2") + testImplementation("org.testcontainers:testcontainers-junit-jupiter:2.0.2") } description = "Amazon DynamoDB target system for NoSQL change operations" diff --git a/core/target-systems/dynamodb-target-system/src/test/java/io/flamingock/targetsystem/dynamodb/DynamoDBCloudTargetSystemTest.java b/core/target-systems/dynamodb-target-system/src/test/java/io/flamingock/targetsystem/dynamodb/DynamoDBCloudTargetSystemTest.java index fdcf2591f..964f9922c 100644 --- a/core/target-systems/dynamodb-target-system/src/test/java/io/flamingock/targetsystem/dynamodb/DynamoDBCloudTargetSystemTest.java +++ b/core/target-systems/dynamodb-target-system/src/test/java/io/flamingock/targetsystem/dynamodb/DynamoDBCloudTargetSystemTest.java @@ -15,8 +15,7 @@ */ package io.flamingock.targetsystem.dynamodb; -import com.amazonaws.services.dynamodbv2.local.main.ServerRunner; -import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer; +import io.flamingock.dynamodb.kit.DynamoDBTestContainer; import io.flamingock.targetsystem.dynamodb.changes.common.UserEntity; import io.flamingock.targetsystem.dynamodb.changes.happypath._001__HappyCreateTableClientsChange; import io.flamingock.targetsystem.dynamodb.changes.happypath._002__HappyInsertClientsChange; @@ -41,16 +40,13 @@ import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; -import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.TableSchema; -import software.amazon.awssdk.regions.Region; -import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; -import java.net.URI; -import java.net.URISyntaxException; import java.util.Collections; import java.util.UUID; @@ -58,11 +54,14 @@ import static io.flamingock.internal.common.cloud.audit.AuditEntryRequest.Status.FAILED; import static io.flamingock.internal.common.cloud.audit.AuditEntryRequest.Status.ROLLED_BACK; +@Testcontainers public class DynamoDBCloudTargetSystemTest { private static final Logger logger = LoggerFactory.getLogger(DynamoDBCloudTargetSystemTest.class); - private static DynamoDBProxyServer dynamoDBLocal; + @Container + static GenericContainer dynamoContainer = DynamoDBTestContainer.createContainer(); + private static DynamoDbClient client; private static DynamoDBTestHelper dynamoDBTestHelper; @@ -84,20 +83,11 @@ public class DynamoDBCloudTargetSystemTest { @BeforeEach void beforeEach() throws Exception { - logger.info("Starting DynamoDB Local..."); - dynamoDBLocal = ServerRunner.createServerFromCommandLineArgs( - new String[]{ - "-inMemory", - "-port", - "8000" - } - ); - dynamoDBLocal.start(); - - client = getDynamoDBClient(); + logger.info("Creating DynamoDB client from TestContainer..."); + client = DynamoDBTestContainer.createClient(dynamoContainer); //We use different client, as the transactioner will close it - dynamoDBTestHelper = new DynamoDBTestHelper(getDynamoDBClient()); + dynamoDBTestHelper = new DynamoDBTestHelper(DynamoDBTestContainer.createClient(dynamoContainer)); logger.info("Starting Mock Server..."); mockRunnerServer = new MockRunnerServer() @@ -126,11 +116,6 @@ void afterEach() throws Exception { //tear down logger.info("Stopping Mock Server..."); mockRunnerServer.stop(); - - logger.info("Stopping DynamoDB Local..."); - if(dynamoDBLocal != null) { - dynamoDBLocal.stop(); - } } @Test @@ -308,20 +293,4 @@ void shouldSendOngoingTaskInExecutionPlan() { } } - private static DynamoDbClient getDynamoDBClient() { - try { - return DynamoDbClient.builder() - .region(Region.EU_WEST_1) - .endpointOverride(new URI("http://localhost:8000")) - .httpClient(UrlConnectionHttpClient.builder().build()) - .credentialsProvider( - StaticCredentialsProvider.create( - AwsBasicCredentials.create("dummye", "dummye") - ) - ) - .build(); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - } }