From 46d7e38b4651caff2a7fb9dc9ee1aa398807db44 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Tue, 9 Oct 2018 14:37:57 -0700 Subject: Add testkit module --- .../testkit/postgres/DockerPostgresDatabase.scala | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 core-testkit/src/main/scala/xyz/driver/core/testkit/postgres/DockerPostgresDatabase.scala (limited to 'core-testkit/src/main/scala/xyz/driver/core/testkit/postgres/DockerPostgresDatabase.scala') diff --git a/core-testkit/src/main/scala/xyz/driver/core/testkit/postgres/DockerPostgresDatabase.scala b/core-testkit/src/main/scala/xyz/driver/core/testkit/postgres/DockerPostgresDatabase.scala new file mode 100644 index 0000000..41e6e0d --- /dev/null +++ b/core-testkit/src/main/scala/xyz/driver/core/testkit/postgres/DockerPostgresDatabase.scala @@ -0,0 +1,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) + } +} -- cgit v1.2.3