From cfafec87d8f79e80b2cda69fc7c385c78fb35f45 Mon Sep 17 00:00:00 2001 From: Benjamin Graf Date: Mon, 30 Dec 2024 10:18:23 +0100 Subject: [PATCH] Add DB2 to testcontainer suite --- narayana-spring-boot-starter-it/pom.xml | 10 ++++ .../testcontainers/DB2GenericRecoveryIT.java | 54 ++++++++++++++++++ .../testcontainers/DB2PooledRecoveryIT.java | 55 +++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 narayana-spring-boot-starter-it/src/test/java/dev/snowdrop/boot/narayana/testcontainers/DB2GenericRecoveryIT.java create mode 100644 narayana-spring-boot-starter-it/src/test/java/dev/snowdrop/boot/narayana/testcontainers/DB2PooledRecoveryIT.java diff --git a/narayana-spring-boot-starter-it/pom.xml b/narayana-spring-boot-starter-it/pom.xml index 532337be..fde57542 100644 --- a/narayana-spring-boot-starter-it/pom.xml +++ b/narayana-spring-boot-starter-it/pom.xml @@ -105,6 +105,16 @@ spring-boot-testcontainers test + + org.testcontainers + db2 + test + + + com.ibm.db2 + jcc + test + org.testcontainers mssqlserver diff --git a/narayana-spring-boot-starter-it/src/test/java/dev/snowdrop/boot/narayana/testcontainers/DB2GenericRecoveryIT.java b/narayana-spring-boot-starter-it/src/test/java/dev/snowdrop/boot/narayana/testcontainers/DB2GenericRecoveryIT.java new file mode 100644 index 00000000..d9986aa8 --- /dev/null +++ b/narayana-spring-boot-starter-it/src/test/java/dev/snowdrop/boot/narayana/testcontainers/DB2GenericRecoveryIT.java @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Red Hat, Inc, and individual contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package dev.snowdrop.boot.narayana.testcontainers; + +import java.util.List; + +import dev.snowdrop.boot.narayana.app.Entry; +import dev.snowdrop.boot.narayana.generic.GenericRecoveryIT; +import org.junit.jupiter.api.Tag; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.testcontainers.containers.Db2Container; +import org.testcontainers.containers.JdbcDatabaseContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +@Tag("testcontainers") +@Testcontainers +public class DB2GenericRecoveryIT extends GenericRecoveryIT { + + @Container + @ServiceConnection + static JdbcDatabaseContainer db2 = new Db2Container("icr.io/db2_community/db2") + .acceptLicense() + .withEnv("PERSISTENT_HOME", "false"); + + @DynamicPropertySource + static void setProperties(DynamicPropertyRegistry registry) { + registry.add("spring.datasource.xa.properties.driverType", () -> 4); + registry.add("spring.datasource.xa.properties.serverName", db2::getHost); + registry.add("spring.datasource.xa.properties.portNumber", () -> db2.getMappedPort(Db2Container.DB2_PORT)); + registry.add("spring.datasource.xa.properties.databaseName", db2::getDatabaseName); + } + + @Override + protected void assertEntriesAfterCrash(List entries) { + // Empty because server locks table until successfully recovered. + } +} diff --git a/narayana-spring-boot-starter-it/src/test/java/dev/snowdrop/boot/narayana/testcontainers/DB2PooledRecoveryIT.java b/narayana-spring-boot-starter-it/src/test/java/dev/snowdrop/boot/narayana/testcontainers/DB2PooledRecoveryIT.java new file mode 100644 index 00000000..9c8da654 --- /dev/null +++ b/narayana-spring-boot-starter-it/src/test/java/dev/snowdrop/boot/narayana/testcontainers/DB2PooledRecoveryIT.java @@ -0,0 +1,55 @@ +/* + * Copyright 2020 Red Hat, Inc, and individual contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package dev.snowdrop.boot.narayana.testcontainers; + +import dev.snowdrop.boot.narayana.app.TestApplication; +import dev.snowdrop.boot.narayana.pooled.PooledRecoveryIT; +import org.junit.jupiter.api.Tag; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.testcontainers.containers.Db2Container; +import org.testcontainers.containers.JdbcDatabaseContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +@Tag("testcontainers") +@Testcontainers +@SpringBootTest(classes = TestApplication.class, properties = { + "narayana.messaginghub.enabled=true", + "narayana.messaginghub.name=jms", + "spring.datasource.agroal.flushOnClose=true", + "spring.datasource.generateUniqueName=false", + "spring.datasource.name=jdbc", + "spring.datasource.xa.properties.driverType=4" +}) +public class DB2PooledRecoveryIT extends PooledRecoveryIT { + + @Container + @ServiceConnection + static JdbcDatabaseContainer db2 = new Db2Container("icr.io/db2_community/db2") + .acceptLicense() + .withEnv("PERSISTENT_HOME", "false"); + + @DynamicPropertySource + static void setProperties(DynamicPropertyRegistry registry) { + registry.add("spring.datasource.xa.properties.serverName", db2::getHost); + registry.add("spring.datasource.xa.properties.portNumber", () -> db2.getMappedPort(Db2Container.DB2_PORT)); + registry.add("spring.datasource.xa.properties.databaseName", db2::getDatabaseName); + } +}