Skip to content

Commit c602ee8

Browse files
authored
align container options for whole project (#341)
* align container options for whole project * fix test
1 parent cab5328 commit c602ee8

File tree

16 files changed

+97
-61
lines changed

16 files changed

+97
-61
lines changed

lib/stove-testing-e2e-couchbase/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
dependencies {
22
api(projects.lib.stoveTestingE2e)
33
api(libs.couchbase.kotlin)
4-
implementation(libs.testcontainers.couchbase)
4+
api(libs.testcontainers.couchbase)
55
}
66

77
dependencies {

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.trendyol.stove.testing.e2e.system.*
1010
import com.trendyol.stove.testing.e2e.system.abstractions.*
1111
import com.trendyol.stove.testing.e2e.system.annotations.StoveDsl
1212
import org.testcontainers.couchbase.*
13+
import org.testcontainers.utility.DockerImageName
1314

1415
data class CouchbaseExposedConfiguration(
1516
val connectionString: String,
@@ -21,7 +22,7 @@ data class CouchbaseExposedConfiguration(
2122
@StoveDsl
2223
data class CouchbaseSystemOptions(
2324
val defaultBucket: String,
24-
val containerOptions: ContainerOptions = ContainerOptions(),
25+
val containerOptions: CouchbaseContainerOptions = CouchbaseContainerOptions(),
2526
override val configureExposedConfiguration: (CouchbaseExposedConfiguration) -> List<String> = { _ -> listOf() },
2627
val objectMapper: ObjectMapper = StoveObjectMapper.Default
2728
) : SystemOptions, ConfiguresExposedConfiguration<CouchbaseExposedConfiguration> {
@@ -47,20 +48,26 @@ data class CouchbaseContext(
4748
)
4849

4950
@StoveDsl
50-
data class ContainerOptions(
51-
val registry: String = DEFAULT_REGISTRY,
52-
val imageVersion: String = "latest"
53-
)
51+
data class CouchbaseContainerOptions(
52+
override val registry: String = DEFAULT_REGISTRY,
53+
override val image: String = "couchbase/server",
54+
override val tag: String = "latest",
55+
override val compatibleSubstitute: String? = null,
56+
val containerImageFn: DockerImageName.() -> DockerImageName = { this },
57+
val containerFn: CouchbaseContainer.() -> CouchbaseContainer = { this }
58+
) : ContainerOptions
5459

5560
internal fun TestSystem.withCouchbase(options: CouchbaseSystemOptions): TestSystem {
5661
val bucketDefinition = BucketDefinition(options.defaultBucket)
5762
val couchbaseContainer = withProvidedRegistry(
58-
imageName = "couchbase/server:${options.containerOptions.imageVersion}",
59-
registry = options.containerOptions.registry
63+
imageName = options.containerOptions.imageWithTag,
64+
registry = options.containerOptions.registry,
65+
compatibleSubstitute = options.containerOptions.compatibleSubstitute
6066
) {
61-
CouchbaseContainer(it)
67+
CouchbaseContainer(it.let(options.containerOptions.containerImageFn))
6268
.withBucket(bucketDefinition)
6369
.withReuse(this.options.keepDependenciesRunning)
70+
.let(options.containerOptions.containerFn)
6471
}
6572
this.getOrRegister(
6673
CouchbaseSystem(this, CouchbaseContext(bucketDefinition, couchbaseContainer, options))

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class Setup : AbstractProjectConfig() {
2424
couchbase {
2525
CouchbaseSystemOptions(
2626
defaultBucket = TEST_BUCKET,
27-
containerOptions = ContainerOptions(
28-
imageVersion = "latest"
27+
containerOptions = CouchbaseContainerOptions(
28+
tag = "latest"
2929
)
3030
)
3131
.migrations {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ class ElasticsearchSystem internal constructor(
4141
ElasticSearchExposedConfiguration(
4242
context.container.host,
4343
context.container.firstMappedPort,
44-
context.options.containerOptions.password,
44+
context.options.container.password,
4545
determineCertificate()
4646
)
4747
}
4848
}
4949

5050
private fun determineCertificate(): Option<ElasticsearchExposedCertificate> =
51-
when (context.options.containerOptions.disableSecurity) {
51+
when (context.options.container.disableSecurity) {
5252
true -> None
5353
false ->
5454
ElasticsearchExposedCertificate(
@@ -164,7 +164,7 @@ class ElasticsearchSystem internal constructor(
164164
.let { ElasticsearchClient(it) }
165165

166166
private fun restClient(cfg: ElasticSearchExposedConfiguration): RestClient =
167-
when (context.options.containerOptions.disableSecurity) {
167+
when (context.options.container.disableSecurity) {
168168
true ->
169169
RestClient.builder(HttpHost(exposedConfiguration.host, exposedConfiguration.port)).apply {
170170
setHttpClientConfigCallback { http -> http.also(context.options.clientConfigurer.httpClientBuilder) }

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@ internal fun TestSystem.withElasticsearch(options: ElasticsearchSystemOptions):
2121
options.objectMapper.registerArrowModule()
2222

2323
return withProvidedRegistry(
24-
imageName = "elasticsearch/elasticsearch:${options.containerOptions.imageVersion}",
25-
registry = options.containerOptions.registry,
26-
compatibleSubstitute = options.containerOptions.compatibleSubstitute.getOrNull()
24+
imageName = options.container.imageWithTag,
25+
registry = options.container.registry,
26+
compatibleSubstitute = options.container.compatibleSubstitute
2727
) { ElasticsearchContainer(it) }
2828
.apply {
29-
addExposedPorts(*options.containerOptions.exposedPorts.toIntArray())
30-
withPassword(options.containerOptions.password)
31-
if (options.containerOptions.disableSecurity) {
29+
addExposedPorts(*options.container.exposedPorts.toIntArray())
30+
withPassword(options.container.password)
31+
if (options.container.disableSecurity) {
3232
withEnv("xpack.security.enabled", "false")
3333
}
3434
withReuse(this@withElasticsearch.options.keepDependenciesRunning)
35-
options.containerOptions.configureContainer(this)
35+
options.container.configureContainer(this)
3636
}
3737
.let { getOrRegister(ElasticsearchSystem(this, ElasticsearchContext(options.defaultIndex.index, it, options))) }
3838
.let { this }

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

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
package com.trendyol.stove.testing.e2e.elasticsearch
22

3-
import arrow.core.None
4-
import arrow.core.Option
5-
import arrow.core.none
3+
import arrow.core.*
64
import co.elastic.clients.elasticsearch.ElasticsearchClient
75
import com.fasterxml.jackson.databind.ObjectMapper
8-
import com.trendyol.stove.testing.e2e.database.migrations.DatabaseMigration
9-
import com.trendyol.stove.testing.e2e.database.migrations.MigrationCollection
6+
import com.trendyol.stove.testing.e2e.containers.ContainerOptions
7+
import com.trendyol.stove.testing.e2e.database.migrations.*
108
import com.trendyol.stove.testing.e2e.serialization.StoveObjectMapper
11-
import com.trendyol.stove.testing.e2e.system.abstractions.ConfiguresExposedConfiguration
12-
import com.trendyol.stove.testing.e2e.system.abstractions.ExposedConfiguration
13-
import com.trendyol.stove.testing.e2e.system.abstractions.SystemOptions
9+
import com.trendyol.stove.testing.e2e.system.abstractions.*
1410
import com.trendyol.stove.testing.e2e.system.annotations.StoveDsl
1511
import org.apache.http.client.config.RequestConfig
1612
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder
@@ -22,7 +18,7 @@ import kotlin.time.Duration.Companion.minutes
2218
data class ElasticsearchSystemOptions(
2319
val defaultIndex: DefaultIndex,
2420
val clientConfigurer: ElasticClientConfigurer = ElasticClientConfigurer(),
25-
val containerOptions: ContainerOptions = ContainerOptions(),
21+
val container: ElasticContainerOptions = ElasticContainerOptions(),
2622
val objectMapper: ObjectMapper = StoveObjectMapper.Default,
2723
override val configureExposedConfiguration: (ElasticSearchExposedConfiguration) -> List<String> = { _ -> listOf() }
2824
) : SystemOptions, ConfiguresExposedConfiguration<ElasticSearchExposedConfiguration> {
@@ -54,15 +50,16 @@ data class ElasticsearchContext(
5450
val options: ElasticsearchSystemOptions
5551
)
5652

57-
data class ContainerOptions(
58-
val registry: String = "docker.elastic.co/",
59-
val imageVersion: String = "8.6.1",
60-
val compatibleSubstitute: Option<String> = None,
53+
data class ElasticContainerOptions(
54+
override val registry: String = "docker.elastic.co/",
55+
override val tag: String = "8.6.1",
56+
override val image: String = "elasticsearch/elasticsearch",
57+
override val compatibleSubstitute: String? = null,
6158
val exposedPorts: List<Int> = listOf(9200),
6259
val password: String = "password",
6360
val disableSecurity: Boolean = true,
6461
val configureContainer: ElasticsearchContainer.() -> Unit = {}
65-
)
62+
) : ContainerOptions
6663

6764
data class ElasticClientConfigurer(
6865
val httpClientBuilder: HttpAsyncClientBuilder.() -> Unit = {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class Setup : AbstractProjectConfig() {
6464
RestClient.builder(HttpHost(cfg.host, cfg.port)).build()
6565
}
6666
),
67-
ContainerOptions(imageVersion = "8.9.0")
67+
ElasticContainerOptions(tag = "8.9.0")
6868
).migrations { register<AnotherIndexMigrator>() }
6969
}
7070
applicationUnderTest(NoOpApplication())

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ data class MongoContainerOptions(
2626
override val registry: String = DEFAULT_REGISTRY,
2727
override val image: String = "mongo",
2828
override val tag: String = "latest",
29-
override val imageWithTag: String = "$image:$tag"
29+
override val compatibleSubstitute: String? = null
3030
) : ContainerOptions
3131

3232
@StoveDsl
@@ -40,11 +40,14 @@ data class DatabaseOptions(
4040
}
4141

4242
internal fun TestSystem.withMongodb(options: MongodbSystemOptions): TestSystem {
43-
val mongodbContainer =
44-
withProvidedRegistry(options.container.imageWithTag, options.container.registry) {
45-
MongoDBContainer(it)
46-
.withReuse(this.options.keepDependenciesRunning)
47-
}
43+
val mongodbContainer = withProvidedRegistry(
44+
options.container.imageWithTag,
45+
options.container.registry,
46+
options.container.compatibleSubstitute
47+
) {
48+
MongoDBContainer(it)
49+
.withReuse(this.options.keepDependenciesRunning)
50+
}
4851
this.getOrRegister(
4952
MongodbSystem(this, MongodbContext(mongodbContainer, options))
5053
)

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,19 @@ import com.trendyol.stove.testing.e2e.system.abstractions.*
99
import com.trendyol.stove.testing.e2e.system.annotations.StoveDsl
1010
import org.testcontainers.containers.MSSQLServerContainer
1111

12+
data class MssqlContainerOptions(
13+
override val registry: String = DEFAULT_REGISTRY,
14+
override val image: String = MSSQLServerContainer.IMAGE,
15+
override val tag: String = "2017-CU12",
16+
override val compatibleSubstitute: String? = null
17+
) : ContainerOptions
18+
1219
data class MsSqlOptions(
1320
val applicationName: String,
1421
val databaseName: String,
1522
val userName: String,
1623
val password: String,
17-
val registry: String = DEFAULT_REGISTRY,
24+
val container: MssqlContainerOptions = MssqlContainerOptions(),
1825
val configureContainer: MSSQLServerContainer<*>.() -> MSSQLServerContainer<*> = { this },
1926
override val configureExposedConfiguration: (RelationalDatabaseExposedConfiguration) -> List<String> = { _ -> listOf() }
2027
) : SystemOptions, ConfiguresExposedConfiguration<RelationalDatabaseExposedConfiguration> {
@@ -50,7 +57,11 @@ internal fun TestSystem.mssql(): MsSqlSystem =
5057
}
5158

5259
internal fun TestSystem.withMsSql(options: MsSqlOptions): TestSystem =
53-
withProvidedRegistry(MSSQLServerContainer.IMAGE) {
60+
withProvidedRegistry(
61+
options.container.imageWithTag,
62+
options.container.registry,
63+
options.container.compatibleSubstitute
64+
) {
5465
val container = MSSQLServerContainer(it)
5566
.acceptLicense()
5667
.withEnv("MSSQL_USER", options.userName)

lib/stove-testing-e2e-rdbms-postgres/src/main/kotlin/com/trendol/stove/testing/e2e/rdbms/postgres/Options.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,17 @@ import org.testcontainers.containers.PostgreSQLContainer
1111

1212
const val DEFAULT_POSTGRES_IMAGE_NAME = "postgres"
1313

14+
data class PostgresqlContainerOptions(
15+
override val registry: String = DEFAULT_REGISTRY,
16+
override val image: String = DEFAULT_POSTGRES_IMAGE_NAME,
17+
override val tag: String = "latest",
18+
override val compatibleSubstitute: String? = null
19+
) : ContainerOptions
20+
1421
@StoveDsl
1522
data class PostgresqlOptions(
1623
val databaseName: String = "stove-e2e-testing",
17-
val registry: String = DEFAULT_REGISTRY,
18-
val imageName: String = DEFAULT_POSTGRES_IMAGE_NAME,
24+
val container: PostgresqlContainerOptions = PostgresqlContainerOptions(),
1925
override val configureExposedConfiguration: (RelationalDatabaseExposedConfiguration) -> List<String> = { _ -> listOf() }
2026
) : SystemOptions, ConfiguresExposedConfiguration<RelationalDatabaseExposedConfiguration> {
2127
val migrationCollection: MigrationCollection<PostgresSqlMigrationContext> = MigrationCollection()
@@ -42,7 +48,7 @@ data class PostgresSqlMigrationContext(
4248
)
4349

4450
internal fun TestSystem.withPostgresql(options: PostgresqlOptions = PostgresqlOptions()): TestSystem =
45-
withProvidedRegistry(options.imageName, options.registry, "postgres") {
51+
withProvidedRegistry(options.container.imageWithTag, options.container.registry, options.container.compatibleSubstitute) {
4652
PostgreSQLContainer(it)
4753
.withDatabaseName(options.databaseName)
4854
.withUsername("sa")

0 commit comments

Comments
 (0)