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
+ }
0 commit comments