Skip to content

Commit 4bfda16

Browse files
committed
Add ElasticsearchServer for testing
1 parent 50b4984 commit 4bfda16

File tree

6 files changed

+111
-5
lines changed

6 files changed

+111
-5
lines changed

jasync/jasync-mysql-example/src/test/kotlin/io/github/debop/examples/BasicConnectionExample.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class BasicConnectionExample: AbstractJasyncTest() {
7070

7171
withContext(Dispatchers.IO) {
7272
val result1 = conn.sendPreparedStatement("SELECT 1")
73-
val result2 = conn.sendPreparedStatement("SELECT 1")
73+
val result2 = conn.sendPreparedStatement("SELECT 2")
7474

7575
val rowData1 = result1.await().rows[0] as ArrayRowData
7676
val rowData2 = result2.await().rows[0] as ArrayRowData

kotlin-koin-example/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ dependencies {
33
api(project(":kotlin-basic"))
44
testImplementation(project(":kotlin-tests"))
55

6+
api(Libraries.koin_core)
67
api(Libraries.koin_core_ext)
78
testImplementation(Libraries.koin_test)
89

Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package io.github.debop.koin.example.coffeemaker
22

33
import org.koin.dsl.module
4+
import org.koin.experimental.builder.singleBy
45

56
val coffeeAppModule = module {
6-
single<CoffeeMaker> { CoffeeMaker(get(), get()) }
7-
single<Pump>(createdAtStart = false, override = true) { Thermosiphon(get()) }
8-
single<Heater>(createdAtStart = false, override = false) { ElectricHeater() }
7+
single { CoffeeMaker(get(), get()) }
8+
// single<Pump>(createdAtStart = false, override = true) { Thermosiphon(get()) }
9+
// single<Heater>(createdAtStart = false, override = false) { ElectricHeater() }
10+
11+
// koin-core-ext 의 extension method 를 사용할 수 있다
12+
singleBy<Pump, Thermosiphon>(createOnStart = false, override = true)
13+
singleBy<Heater, ElectricHeater>(createOnStart = false, override = false)
914
}

kotlin-tests/build.gradle.kts

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ dependencies {
99
api(Libraries.testcontainers_mariadb)
1010
api(Libraries.testcontainers_mysql)
1111
api(Libraries.testcontainers_postgresql)
12-
api(Libraries.testcontainers_kafka)
12+
implementation(Libraries.testcontainers_kafka)
13+
implementation(Libraries.testcontainers_elasticsearch)
1314

1415
api(Libraries.hikaricp)
1516
api(Libraries.mysql_connector_java)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package io.github.debop.kotlin.tests.containers
2+
3+
import com.github.dockerjava.api.model.ExposedPort
4+
import com.github.dockerjava.api.model.PortBinding
5+
import com.github.dockerjava.api.model.Ports.Binding
6+
import mu.KLogging
7+
import org.testcontainers.containers.output.Slf4jLogConsumer
8+
import org.testcontainers.containers.wait.strategy.Wait
9+
import org.testcontainers.elasticsearch.ElasticsearchContainer
10+
11+
/**
12+
* ElasticSearchServer
13+
* @author debop (Sunghyouk Bae)
14+
*/
15+
class ElasticsearchServer(tag: String = ELASTICSEARCH_DEFAULT_VERSION,
16+
private val useDefaultPort: Boolean = false)
17+
: ElasticsearchContainer("$IMAGE:$tag") {
18+
19+
companion object: KLogging() {
20+
const val IMAGE = "docker.elastic.co/elasticsearch/elasticsearch"
21+
const val NAME = "elasticsearch"
22+
const val ELASTICSEARCH_PORT = 9200
23+
const val ELASTICSEARCH_TCP_PORT = 9300
24+
}
25+
26+
init {
27+
withExposedPorts(ELASTICSEARCH_PORT, ELASTICSEARCH_TCP_PORT)
28+
withLogConsumer(Slf4jLogConsumer(logger))
29+
setWaitStrategy(Wait.forListeningPort())
30+
31+
// BUG: 왜 기본 Port 매핑이 안되는지???
32+
if (useDefaultPort) {
33+
withCreateContainerCmdModifier {
34+
it.withPortBindings(PortBinding(Binding.bindPort(ELASTICSEARCH_PORT), ExposedPort(ELASTICSEARCH_PORT)))
35+
it.withPortBindings(PortBinding(Binding.bindPort(ELASTICSEARCH_TCP_PORT), ExposedPort(ELASTICSEARCH_TCP_PORT)))
36+
}
37+
}
38+
}
39+
40+
val host: String get() = containerIpAddress
41+
val port: Int by lazy { getMappedPort(ELASTICSEARCH_PORT) }
42+
val tcpPort: Int by lazy { getMappedPort(ELASTICSEARCH_TCP_PORT) }
43+
val url: String get() = "http://$host:$port"
44+
45+
override fun start() {
46+
super.start()
47+
48+
val name = "$CONTAINER_PREFIX.$NAME"
49+
50+
System.setProperty("$name.host", host)
51+
System.setProperty("$name.port", port.toString())
52+
System.setProperty("$name.tcp-port", tcpPort.toString())
53+
System.setProperty("$name.url", url)
54+
55+
RedisServer.logger.info {
56+
"""
57+
|Start TestContainer Elasticsearch:
58+
| $name.host=$host
59+
| $name.port=$port
60+
| $name.tcp-port=$tcpPort
61+
| $name.url=$url
62+
""".trimMargin()
63+
}
64+
}
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.github.debop.kotlin.tests.containers
2+
3+
import mu.KLogging
4+
import org.amshove.kluent.shouldBeTrue
5+
import org.amshove.kluent.shouldEqualTo
6+
import org.junit.jupiter.api.AfterAll
7+
import org.junit.jupiter.api.BeforeAll
8+
import org.junit.jupiter.api.Test
9+
10+
class ElasticsearchServerTest {
11+
12+
companion object: KLogging() {
13+
val elasticsearchServer = ElasticsearchServer(useDefaultPort = true)
14+
}
15+
16+
@BeforeAll
17+
fun beforeAll() {
18+
elasticsearchServer.start()
19+
}
20+
21+
@AfterAll
22+
fun afterAll() {
23+
elasticsearchServer.stop()
24+
}
25+
26+
@Test
27+
fun `run elasticsearch server`() {
28+
elasticsearchServer.isRunning.shouldBeTrue()
29+
30+
// BUG: 왜 기본 Port 매핑이 안되는지???
31+
elasticsearchServer.port shouldEqualTo ElasticsearchServer.ELASTICSEARCH_PORT
32+
elasticsearchServer.tcpPort shouldEqualTo ElasticsearchServer.ELASTICSEARCH_TCP_PORT
33+
}
34+
}

0 commit comments

Comments
 (0)