Guest User

Untitled

a guest
Sep 30th, 2025
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.78 KB | Source Code | 0 0
  1. import org.jooq.impl.DSL
  2. import org.postgresql.ds.PGSimpleDataSource
  3. import org.testcontainers.containers.PostgreSQLContainer
  4. import org.apache.commons.lang3.RandomStringUtils
  5.  
  6.  
  7. class PostgresContainer : JooqProvider {
  8.     companion object {
  9.         private val MIGRATED_DB_NAME = "migrated-db-name"
  10.  
  11.         val container: PostgreSQLContainer<Nothing> by lazy {
  12.             PostgreSQLContainer<Nothing>("postgres:17").apply {
  13.                 withDatabaseName(MIGRATED_DB_NAME)
  14.                 withUsername("migrated-db-username")
  15.                 start()
  16.  
  17.                 // migrate so template DB will be populated
  18.                 val ds = PGSimpleDataSource().also { pg ->
  19.                     pg.serverNames = arrayOf(host)
  20.                     pg.databaseName = MIGRATED_DB_NAME
  21.                     pg.portNumbers = intArrayOf(firstMappedPort)
  22.                     pg.password = password
  23.                     pg.user = username
  24.                 }
  25.                 migrateDatabase(ds, true, false)
  26.             }
  27.         }
  28.     }
  29.  
  30.     private fun databaseRandomName() = RandomStringUtils.randomAlphabetic(10).lowercase()
  31.  
  32.     private fun postgres(randomDbName: String) = container.apply {
  33.         println("Creating Postgres database $randomDbName available at port ${container.firstMappedPort} (password = 'test'): psql -h localhost -p ${container.firstMappedPort} -U ${container.username} $randomDbName")
  34.         val result = execInContainer("createdb", "-U", username, "-T", MIGRATED_DB_NAME, randomDbName)
  35.         check(result.exitCode == 0) { "Error creating database in Postgres container" }
  36.     }
  37.  
  38.     override val jooq = databaseRandomName().let { dbName ->
  39.         DSL.using(postgres(dbName).apply {
  40.             withDatabaseName(dbName)
  41.         }.createConnection(""))
  42.     }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment