Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import org.jooq.impl.DSL
- import org.postgresql.ds.PGSimpleDataSource
- import org.testcontainers.containers.PostgreSQLContainer
- import org.apache.commons.lang3.RandomStringUtils
- class PostgresContainer : JooqProvider {
- companion object {
- private val MIGRATED_DB_NAME = "migrated-db-name"
- val container: PostgreSQLContainer<Nothing> by lazy {
- PostgreSQLContainer<Nothing>("postgres:17").apply {
- withDatabaseName(MIGRATED_DB_NAME)
- withUsername("migrated-db-username")
- start()
- // migrate so template DB will be populated
- val ds = PGSimpleDataSource().also { pg ->
- pg.serverNames = arrayOf(host)
- pg.databaseName = MIGRATED_DB_NAME
- pg.portNumbers = intArrayOf(firstMappedPort)
- pg.password = password
- pg.user = username
- }
- migrateDatabase(ds, true, false)
- }
- }
- }
- private fun databaseRandomName() = RandomStringUtils.randomAlphabetic(10).lowercase()
- private fun postgres(randomDbName: String) = container.apply {
- println("Creating Postgres database $randomDbName available at port ${container.firstMappedPort} (password = 'test'): psql -h localhost -p ${container.firstMappedPort} -U ${container.username} $randomDbName")
- val result = execInContainer("createdb", "-U", username, "-T", MIGRATED_DB_NAME, randomDbName)
- check(result.exitCode == 0) { "Error creating database in Postgres container" }
- }
- override val jooq = databaseRandomName().let { dbName ->
- DSL.using(postgres(dbName).apply {
- withDatabaseName(dbName)
- }.createConnection(""))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment