Skip to content

Commit

Permalink
Added better elastic container
Browse files Browse the repository at this point in the history
  • Loading branch information
sksamuel committed Jun 18, 2023
1 parent 1dc682e commit d4a7647
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 29 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.kotest.extensions.testcontainers.elastic

import co.elastic.clients.elasticsearch.ElasticsearchClient
import co.elastic.clients.json.jackson.JacksonJsonpMapper
import co.elastic.clients.transport.rest_client.RestClientTransport
import io.kotest.core.extensions.MountableExtension
import io.kotest.core.listeners.AfterProjectListener
import io.kotest.core.listeners.AfterSpecListener
import io.kotest.core.spec.Spec
import io.kotest.extensions.testcontainers.TestContainerLifecycleMode
import org.apache.http.HttpHost
import org.elasticsearch.client.RestClient
import org.testcontainers.elasticsearch.ElasticsearchContainer
import org.testcontainers.utility.DockerImageName

class ElasticsearchContainerExtension(
private val container: ElasticsearchContainer,
private val mode: TestContainerLifecycleMode = TestContainerLifecycleMode.Project,
) : AfterProjectListener,
AfterSpecListener,
MountableExtension<ElasticsearchContainer, ElasticsearchContainer>,
AutoCloseable {

constructor(
image: DockerImageName,
mode: TestContainerLifecycleMode = TestContainerLifecycleMode.Project
) : this(ElasticsearchContainer(image), mode)

override suspend fun afterProject() {
if (container.isRunning) close()
}

override suspend fun afterSpec(spec: Spec) {
if (mode == TestContainerLifecycleMode.Spec && container.isRunning) close()
}

override fun mount(configure: ElasticsearchContainer.() -> Unit): ElasticsearchContainer {
container.start()
return container
}

override fun close() {
container.stop()
}
}

fun ElasticsearchContainer.client(): ElasticsearchClient {
val restClient = RestClient.builder(HttpHost.create(httpHostAddress)).build()
val transport = RestClientTransport(restClient, JacksonJsonpMapper())
return ElasticsearchClient(transport)
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,19 @@ import co.elastic.clients.elasticsearch.indices.CreateIndexRequest
import io.kotest.core.extensions.install
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe
import org.testcontainers.elasticsearch.ElasticsearchContainer
import org.testcontainers.utility.DockerImageName

class ElasticTestContainerExtensionTest : FunSpec() {
init {

val container = ElasticsearchContainer(
DockerImageName.parse("elasticsearch:7.17.6")
.asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch")
val container = install(
ElasticsearchContainerExtension(
DockerImageName.parse("elasticsearch:7.17.6")
.asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch")
)
)

val client = install(ElasticTestContainerExtension(container))
val client = container.client()

test("elastic happy path") {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import org.apache.kafka.common.serialization.BytesDeserializer
import org.apache.kafka.common.serialization.BytesSerializer
import org.apache.kafka.common.utils.Bytes
import org.testcontainers.containers.KafkaContainer
import org.testcontainers.utility.DockerImageName
import java.util.Properties

class KafkaContainerExtension(
Expand All @@ -24,6 +25,11 @@ class KafkaContainerExtension(
MountableExtension<KafkaContainer, KafkaContainer>,
AutoCloseable {

constructor(
image: DockerImageName,
mode: TestContainerLifecycleMode = TestContainerLifecycleMode.Project
) : this(KafkaContainer(image), mode)

override suspend fun afterProject() {
if (container.isRunning) close()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.kotest.extensions.testcontainers

@Deprecated("To be removed")
enum class LifecycleMode {
Spec, EveryTest, Leaf, Root
}
Expand Down

0 comments on commit d4a7647

Please sign in to comment.