Skip to content

Commit 682c2ec

Browse files
authored
feature: add migration order to the migrations (#184)
* feature: add migration order to the migrations * fix: make state and sqloperations protected on ReleationalDatabaseSystem * fix: exposedConfiguration made protected * add compatible substitute for elastic
1 parent aa2ab16 commit 682c2ec

File tree

8 files changed

+27
-7
lines changed

8 files changed

+27
-7
lines changed

lib/stove-testing-e2e-couchbase/src/test/kotlin/com/trendyol/stove/testing/e2e/couchbase/CouchbaseTestSystemTests.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.couchbase.client.java.ReactiveCluster
44
import com.couchbase.client.java.manager.collection.CollectionSpec
55
import com.trendyol.stove.testing.e2e.couchbase.CouchbaseSystem.Companion.shouldGet
66
import com.trendyol.stove.testing.e2e.database.migrations.DatabaseMigration
7+
import com.trendyol.stove.testing.e2e.database.migrations.MigrationPriority
78
import com.trendyol.stove.testing.e2e.system.TestSystem
89
import com.trendyol.stove.testing.e2e.system.TestSystem.Companion.validate
910
import com.trendyol.stove.testing.e2e.system.abstractions.ApplicationUnderTest
@@ -16,7 +17,7 @@ import org.junit.jupiter.api.assertThrows
1617
import org.slf4j.Logger
1718
import org.slf4j.LoggerFactory
1819
import java.time.Duration
19-
import java.util.UUID
20+
import java.util.*
2021

2122
const val testBucket = "test-couchbase-bucket"
2223

@@ -47,6 +48,8 @@ class NoOpApplication : ApplicationUnderTest<Unit> {
4748

4849
class DefaultMigration : DatabaseMigration<ReactiveCluster> {
4950
private val logger: Logger = LoggerFactory.getLogger(javaClass)
51+
52+
override val order: Int = MigrationPriority.HIGHEST.value
5053
override suspend fun execute(connection: ReactiveCluster) {
5154
connection
5255
.bucket(testBucket)

lib/stove-testing-e2e-elasticsearch/src/main/kotlin/com/trendyol/stove/testing/e2e/elasticsearch/DefaultIndexMigrator.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.trendyol.stove.testing.e2e.elasticsearch
33
import co.elastic.clients.elasticsearch.ElasticsearchClient
44
import co.elastic.clients.elasticsearch.indices.CreateIndexRequest
55
import com.trendyol.stove.testing.e2e.database.migrations.DatabaseMigration
6+
import com.trendyol.stove.testing.e2e.database.migrations.MigrationPriority
67
import org.slf4j.Logger
78
import org.slf4j.LoggerFactory
89

@@ -18,6 +19,8 @@ data class DefaultIndex(
1819

1920
class DefaultIndexMigrator(private val index: String) : DatabaseMigration<ElasticsearchClient> {
2021
private val logger: Logger = LoggerFactory.getLogger(javaClass)
22+
23+
override val order: Int = MigrationPriority.HIGHEST.value
2124
override suspend fun execute(connection: ElasticsearchClient) {
2225
val createIndexRequest: CreateIndexRequest = CreateIndexRequest.Builder()
2326
.index(index)

lib/stove-testing-e2e-elasticsearch/src/main/kotlin/com/trendyol/stove/testing/e2e/elasticsearch/Extensions.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ fun TestSystem.withElasticsearch(
2222
}
2323

2424
return withProvidedRegistry(
25-
"elasticsearch/elasticsearch:${options.containerOptions.imageVersion}",
26-
options.containerOptions.registry
25+
imageName = "elasticsearch/elasticsearch:${options.containerOptions.imageVersion}",
26+
registry = options.containerOptions.registry,
27+
compatibleSubstitute = options.containerOptions.compatibleSubstitute.getOrNull()
2728
) { ElasticsearchContainer(it) }
2829
.apply {
2930
addExposedPorts(*options.containerOptions.exposedPorts.toIntArray())

lib/stove-testing-e2e-elasticsearch/src/main/kotlin/com/trendyol/stove/testing/e2e/elasticsearch/Options.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.trendyol.stove.testing.e2e.elasticsearch
22

3+
import arrow.core.None
34
import arrow.core.Option
45
import arrow.core.none
56
import co.elastic.clients.elasticsearch.ElasticsearchClient
@@ -61,6 +62,7 @@ data class ElasticsearchContext(
6162
data class ContainerOptions(
6263
val registry: String = "docker.elastic.co/",
6364
val imageVersion: String = "8.6.1",
65+
val compatibleSubstitute: Option<String> = None,
6466
val exposedPorts: List<Int> = listOf(9200),
6567
val password: String = "password",
6668
val disableSecurity: Boolean = true,

lib/stove-testing-e2e-elasticsearch/src/test/kotlin/com/trendyol/stove/testing/e2e/elasticsearch/ElasticsearchTestSystemTests.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders
66
import co.elastic.clients.elasticsearch.indices.CreateIndexRequest
77
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
88
import com.trendyol.stove.testing.e2e.database.migrations.DatabaseMigration
9+
import com.trendyol.stove.testing.e2e.database.migrations.MigrationPriority
910
import com.trendyol.stove.testing.e2e.elasticsearch.ElasticsearchSystem.Companion.shouldGet
1011
import com.trendyol.stove.testing.e2e.elasticsearch.ElasticsearchSystem.Companion.shouldQuery
1112
import com.trendyol.stove.testing.e2e.system.TestSystem
@@ -25,6 +26,7 @@ const val testIndex = "stove-test-index"
2526
const val anotherIndex = "stove-another-index"
2627

2728
class TestIndexMigrator : DatabaseMigration<ElasticsearchClient> {
29+
override val order: Int = MigrationPriority.HIGHEST.value
2830
private val logger: Logger = LoggerFactory.getLogger(javaClass)
2931
override suspend fun execute(connection: ElasticsearchClient) {
3032
val createIndexRequest: CreateIndexRequest = CreateIndexRequest.Builder()
@@ -36,6 +38,7 @@ class TestIndexMigrator : DatabaseMigration<ElasticsearchClient> {
3638
}
3739

3840
class AnotherIndexMigrator : DatabaseMigration<ElasticsearchClient> {
41+
override val order: Int = MigrationPriority.HIGHEST.value + 1
3942
private val logger: Logger = LoggerFactory.getLogger(javaClass)
4043
override suspend fun execute(connection: ElasticsearchClient) {
4144
val createIndexRequest: CreateIndexRequest = CreateIndexRequest.Builder()

lib/stove-testing-e2e-rdbms/src/main/kotlin/com/trendyol/stove/testing/e2e/rdbms/RelationalDatabaseSystem.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ abstract class RelationalDatabaseSystem<SELF : RelationalDatabaseSystem<SELF>> p
2020
final override val testSystem: TestSystem,
2121
protected val context: RelationalDatabaseContext<*>
2222
) : PluggedSystem, RunAware, ExposesConfiguration {
23-
private lateinit var sqlOperations: SqlOperations
24-
private lateinit var exposedConfiguration: RelationalDatabaseExposedConfiguration
2523
private val logger: Logger = LoggerFactory.getLogger(javaClass)
26-
private val state: StateOfSystem<RelationalDatabaseSystem<SELF>, RelationalDatabaseExposedConfiguration> =
24+
25+
protected lateinit var exposedConfiguration: RelationalDatabaseExposedConfiguration
26+
protected lateinit var sqlOperations: SqlOperations
27+
protected val state: StateOfSystem<RelationalDatabaseSystem<SELF>, RelationalDatabaseExposedConfiguration> =
2728
StateOfSystem(testSystem.options, javaClass.kotlin, RelationalDatabaseExposedConfiguration::class)
2829

2930
protected abstract fun connectionFactory(exposedConfiguration: RelationalDatabaseExposedConfiguration): ConnectionFactory

lib/stove-testing-e2e/src/main/kotlin/com/trendyol/stove/testing/e2e/database/migrations/DatabaseMigration.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,11 @@ interface DatabaseMigration<in TConnection> {
1717
* [connection] is ready for executing operations
1818
*/
1919
suspend fun execute(connection: TConnection)
20+
21+
val order: Int
22+
}
23+
24+
enum class MigrationPriority(val value: Int) {
25+
LOWEST(Int.MAX_VALUE),
26+
HIGHEST(Int.MIN_VALUE)
2027
}

lib/stove-testing-e2e/src/main/kotlin/com/trendyol/stove/testing/e2e/database/migrations/MigrationCollection.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,5 @@ class MigrationCollection<TConnection> {
8080
* @param connection The connection of the database
8181
* @return Unit
8282
*/
83-
suspend fun run(connection: TConnection): Unit = types.map { it.value }.forEach { it.execute(connection) }
83+
suspend fun run(connection: TConnection): Unit = types.map { it.value }.sortedBy { it.order }.forEach { it.execute(connection) }
8484
}

0 commit comments

Comments
 (0)