aboutsummaryrefslogtreecommitdiff
path: root/core-testkit/src/main/scala/xyz/driver/core/testkit/postgres/DockerPostgresDatabase.scala
blob: 41e6e0d1051697ffbc32ec16c964af576a0baa09 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package xyz.driver.core.testkit
package postgres

import xyz.driver.core.make

trait DockerPostgresDatabase {
  import com.spotify.docker.client._
  import com.spotify.docker.client.messages._

  lazy val dockerClient: DockerClient = DefaultDockerClient.fromEnv().build()

  val postgresVersion: String = "9.6"

  def setupDockerDatabase(
      username: String = "postgres",
      password: String = "postgres",
      database: String = "postgres",
      hostPort: Int = 15432): String = {
    import collection.JavaConverters._

    dockerClient.pull(s"postgres:$postgresVersion")

    val portBindings: Map[String, List[PortBinding]] = Map("5432" -> List(PortBinding.of("0.0.0.0", hostPort)))
    val portBindingsJava                             = portBindings.mapValues(_.asJava).asJava
    val hostConfig                                   = HostConfig.builder().portBindings(portBindingsJava).build()
    val containerConfig =
      ContainerConfig
        .builder()
        .hostConfig(hostConfig)
        .image(s"postgres:$postgresVersion")
        .exposedPorts("5432")
        .env(
          s"POSTGRES_USER=$username",
          s"POSTGRES_DB=$database",
          s"POSTGRES_PASSWORD=$password"
        )
        .build()

    make(dockerClient.createContainer(containerConfig).id())(dockerClient.startContainer)
  }

  def killDockerDatabase(containerId: String): Unit = {
    dockerClient.killContainer(containerId)
    dockerClient.removeContainer(containerId)
  }
}