Skip to content

Commit e4e2b42

Browse files
committed
feat(extensions): add Elasticsearch Testcontainer support in usage module
- Added `testcontainers-elasticsearch` dependency to demonstrate user-managed Elasticsearch containers. - Updated `DummyAppUsageTest` to include an Elasticsearch Testcontainer and validate coexistence with BigDataKit-managed services. - Expanded README with examples of user-managed containers and their configuration.
1 parent b8cf45b commit e4e2b42

4 files changed

Lines changed: 51 additions & 1 deletion

File tree

example/app-extension/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ Modules:
1212
- `usage`: a test module showing how an application test uses `@BigDataTest`,
1313
`@BigDataExtensions`, and `@DummyAppTest` together.
1414

15+
The `usage` module also starts a user-owned Elasticsearch Testcontainer with
16+
`org.testcontainers:testcontainers-elasticsearch`. This demonstrates that user
17+
Testcontainers can coexist with the containers managed by `bigdata-test`; keep
18+
those containers in the test or application extension code and let the BigData
19+
kit manage only the services declared through its own config.
20+
1521
Run it with:
1622

1723
```bash

example/app-extension/usage/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ dependencies {
1010
testImplementation(project(":example:app-extension:dummy-app-framework"))
1111
testImplementation(project(":example:app-extension:dummy-app-test-extension"))
1212
testImplementation(libs.junitJupiterApi)
13+
testImplementation(libs.testcontainersElasticsearch)
1314
testRuntimeOnly(libs.junitJupiterEngine)
1415
testRuntimeOnly(libs.junitPlatformLauncher)
1516
}

example/app-extension/usage/src/test/kotlin/org/openprojectx/bigdata/test/example/app/usage/DummyAppUsageTest.kt

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,24 @@ import org.openprojectx.bigdata.test.example.app.extension.DummyAppConfigCustomi
77
import org.openprojectx.bigdata.test.example.app.extension.DummyAppTest
88
import org.openprojectx.bigdata.test.example.app.framework.DummyApp
99
import org.openprojectx.bigdata.test.example.app.framework.DummyAppConfig
10+
import org.openprojectx.bigdata.test.core.BigDataService
1011
import org.openprojectx.bigdata.test.extensions.core.BigDataExtensionResult
1112
import org.openprojectx.bigdata.test.extensions.junit5.BigDataExtensions
1213
import org.openprojectx.bigdata.test.core.BigDataTestKit
1314
import org.openprojectx.bigdata.test.junit5.BigDataTest
15+
import org.testcontainers.junit.jupiter.Container
16+
import org.testcontainers.junit.jupiter.Testcontainers
17+
import org.testcontainers.elasticsearch.ElasticsearchContainer
18+
import org.testcontainers.utility.DockerImageName
19+
import java.net.URI
20+
import java.net.http.HttpClient
21+
import java.net.http.HttpRequest
22+
import java.net.http.HttpResponse
1423

15-
@BigDataTest
24+
@BigDataTest(localStackS3 = true)
1625
@BigDataExtensions
1726
@DummyAppTest
27+
@Testcontainers
1828
class DummyAppUsageTest : DummyAppConfigCustomizer {
1929
override fun customize(
2030
kit: BigDataTestKit,
@@ -34,4 +44,36 @@ class DummyAppUsageTest : DummyAppConfigCustomizer {
3444
assertEquals("usage-example", app.property("dummy.project.name"))
3545
assertEquals(config, app.config)
3646
}
47+
48+
@Test
49+
fun `coexists with user managed elasticsearch testcontainer`(
50+
app: DummyApp,
51+
kit: BigDataTestKit,
52+
) {
53+
val response = httpClient.send(
54+
HttpRequest.newBuilder(URI.create("http://${elasticsearch.httpHostAddress}/_cluster/health"))
55+
.GET()
56+
.build(),
57+
HttpResponse.BodyHandlers.ofString(),
58+
)
59+
60+
assertTrue(app.started)
61+
assertTrue(kit.endpoints().containsKey(BigDataService.LOCALSTACK_S3))
62+
assertEquals(200, response.statusCode())
63+
assertTrue(response.body().contains("\"cluster_name\""))
64+
}
65+
66+
private companion object {
67+
private val elasticsearchImage: DockerImageName =
68+
DockerImageName.parse("ghcr.io/openprojectx/dockerhub/library/elasticsearch:8.19.18")
69+
.asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch")
70+
71+
@Container
72+
@JvmField
73+
val elasticsearch: ElasticsearchContainer = ElasticsearchContainer(elasticsearchImage)
74+
.withEnv("xpack.security.enabled", "false")
75+
.withEnv("xpack.security.http.ssl.enabled", "false")
76+
77+
private val httpClient: HttpClient = HttpClient.newHttpClient()
78+
}
3779
}

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ testcontainers = { module = "org.testcontainers:testcontainers" }
4343
testcontainersPostgresql = { module = "org.testcontainers:testcontainers-postgresql" }
4444
testcontainersMysql = { module = "org.testcontainers:testcontainers-mysql" }
4545
testcontainersKafka = { module = "org.testcontainers:testcontainers-kafka" }
46+
testcontainersElasticsearch = { module = "org.testcontainers:testcontainers-elasticsearch" }
4647
testcontainersJunitJupiter = { module = "org.testcontainers:testcontainers-junit-jupiter" }
4748
kafkaClients = { module = "org.apache.kafka:kafka-clients", version.ref = "kafka" }
4849
hiveDockerTestcontainers = { module = "org.openprojectx.hive.docker.core:hive-docker-testcontainers", version.ref = "hiveDockerTestcontainers" }

0 commit comments

Comments
 (0)