Skip to content

Commit

Permalink
Unngår å køyre exitProcess frå testane, sånn at testane gir ut ei tyd… (
Browse files Browse the repository at this point in the history
#5097)

* Køyrer ktlint

* I testane mistar vi stacktrace viss vi køyrer exitProcess, så unngår det via litt overstyring. Endrar ikkje i prod for no, der funkar det greitt som det er
  • Loading branch information
madsop-nav authored Jun 11, 2024
1 parent a35235b commit 796d5c1
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 31 deletions.
27 changes: 16 additions & 11 deletions libs/etterlatte-database/src/main/kotlin/DataSourceBuilder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,12 @@ object DataSourceBuilder {
}
}

fun DataSource.migrate(): MigrateResult {
fun DataSource.migrate(processExiter: () -> Unit = { exitProcess(1) }): MigrateResult {
val logger = LoggerFactory.getLogger(this::class.java)
try {
validateUniqueMigrationVersions(logger)
return Flyway.configure()
return Flyway
.configure()
.dataSource(this)
.apply {
val dblocationsMiljoe = mutableListOf("db/migration")
Expand All @@ -69,12 +70,12 @@ fun DataSource.migrate(): MigrateResult {
dblocationsMiljoe.add("db/prod")
}
locations(*dblocationsMiljoe.toTypedArray())
}
.load()
}.load()
.migrate()
} catch (e: InvalidMigrationScriptVersion) {
logger.error("Ugyldig versjon på migreringsscript", e)
exitProcess(1)
processExiter()
throw e // Vil berre slå til under test, i prod-kode vil processExiter-kallet gjera exitProcess
} catch (e: Exception) {
logger.error("Fikk feil under Flyway-migrering", e)
throw e
Expand Down Expand Up @@ -138,9 +139,10 @@ private fun readResources(logger: Logger): List<String> {
val files =
File(resourceFolderURL.file).listFiles()
?: throw RuntimeException("Fant ingen filer i $resourceFolderURL listfiles er null")
files.map { dir ->
dir.listFiles()?.toList()?.map { it.path } ?: emptyList()
}.flatten()
files
.map { dir ->
dir.listFiles()?.toList()?.map { it.path } ?: emptyList()
}.flatten()
}
}

Expand Down Expand Up @@ -171,6 +173,9 @@ fun jdbcUrl(
databaseName: String,
): String = "jdbc:postgresql://$host:$port/$databaseName"

class InvalidMigrationScriptVersion(versjon: String, antall: Int) : RuntimeException(
"Kan ikke ha flere migreringer med samme versjon! Sjekk alle mapper under /resources/db. Versjon: $versjon, Antall: $antall",
)
class InvalidMigrationScriptVersion(
versjon: String,
antall: Int,
) : RuntimeException(
"Kan ikke ha flere migreringer med samme versjon! Sjekk alle mapper under /resources/db. Versjon: $versjon, Antall: $antall",
)
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ import javax.sql.DataSource
* <p>
* Benytt @ResetDatabaseStatement i en subklasse for å angi SQL for å tømme databasen.
*/
open class GenerellDatabaseExtension : AfterAllCallback, ExtensionContext.Store.CloseableResource, ParameterResolver {
open class GenerellDatabaseExtension :
AfterAllCallback,
ExtensionContext.Store.CloseableResource,
ParameterResolver {
companion object {
val logger: org.slf4j.Logger = LoggerFactory.getLogger(this::class.java)
private val postgreSQLContainer =
Expand All @@ -30,11 +33,12 @@ open class GenerellDatabaseExtension : AfterAllCallback, ExtensionContext.Store.
.also { it.start() }

private val ds: DataSource =
DataSourceBuilder.createDataSource(
jdbcUrl = postgreSQLContainer.jdbcUrl,
username = postgreSQLContainer.username,
password = postgreSQLContainer.password,
).apply { migrate() }
DataSourceBuilder
.createDataSource(
jdbcUrl = postgreSQLContainer.jdbcUrl,
username = postgreSQLContainer.username,
password = postgreSQLContainer.password,
).apply { migrate(processExiter = { }) }
}

private val connections = mutableListOf<Connection>()
Expand Down Expand Up @@ -69,13 +73,12 @@ open class GenerellDatabaseExtension : AfterAllCallback, ExtensionContext.Store.
(
this::class.java.annotations
.find { it.annotationClass == ResetDatabaseStatement::class } as? ResetDatabaseStatement
)
?.let { annotation ->
ds.connection.use {
logger.info("Resetting database...")
it.createStatement().execute(annotation.statement)
}
)?.let { annotation ->
ds.connection.use {
logger.info("Resetting database...")
it.createStatement().execute(annotation.statement)
}
}
?: {
logger.info("Skipper reset av database, @ResetDatabaseStatement ikke funnet.")
}
Expand All @@ -93,7 +96,10 @@ open class GenerellDatabaseExtension : AfterAllCallback, ExtensionContext.Store.
/**
* Wrappe slik at når konsument ber om ny connection så kan den tas vare på mtp eviction
*/
private class DataSourceWrapper(val datasource: DataSource, val collector: (Connection) -> Unit) : DataSource {
private class DataSourceWrapper(
val datasource: DataSource,
val collector: (Connection) -> Unit,
) : DataSource {
override fun getLogWriter(): PrintWriter = datasource.logWriter

override fun setLogWriter(out: PrintWriter?) {
Expand Down Expand Up @@ -123,22 +129,21 @@ open class GenerellDatabaseExtension : AfterAllCallback, ExtensionContext.Store.
override fun supportsParameter(
parameterContext: ParameterContext,
extensionContext: ExtensionContext,
): Boolean {
return parameterContext.parameter?.type == DataSource::class.java
}
): Boolean = parameterContext.parameter?.type == DataSource::class.java

override fun resolveParameter(
parameterContext: ParameterContext,
extensionContext: ExtensionContext,
): Any {
return if (parameterContext.parameter?.type == DataSource::class.java) {
): Any =
if (parameterContext.parameter?.type == DataSource::class.java) {
dataSource
} else {
throw IllegalArgumentException("Kan ikke resolve parameter av type ${parameterContext.parameter?.type}")
}
}
}

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.CLASS)
annotation class ResetDatabaseStatement(val statement: String)
annotation class ResetDatabaseStatement(
val statement: String,
)

0 comments on commit 796d5c1

Please sign in to comment.