/* * This file is part of ETL-Processor * * Copyright (c) 2023 Comprehensive Cancer Center Mainfranken * Copyright (c) 2023-2026 Paul-Christian Volkmer, Datenintegrationszentrum Philipps-Universität Marburg and Contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package dev.dnpm.etl.processor import org.springframework.test.context.DynamicPropertyRegistry import org.springframework.test.context.DynamicPropertySource import org.testcontainers.containers.PostgreSQLContainer import org.testcontainers.junit.jupiter.Container abstract class AbstractTestcontainerTest { companion object { @Container val dbContainer = CustomPostgreSQLContainer("postgres:10-alpine") .withDatabaseName("test") .withUsername("test") .withPassword("test") ?: throw RuntimeException("Failed to create testcontainer!") @DynamicPropertySource @JvmStatic fun registerDynamicProperties(registry: DynamicPropertyRegistry) { registry.add("spring.datasource.url", dbContainer::getJdbcUrl) registry.add("spring.datasource.username", dbContainer::getUsername) registry.add("spring.datasource.password", dbContainer::getPassword) } } } class CustomPostgreSQLContainer( dockerImageName: String, ) : PostgreSQLContainer(dockerImageName) { override fun stop() { // Keep Testcontainer alive until JVM destroys it } }