Skip to content

Commit

Permalink
Extract common docker image properties (docker-image and docker-image…
Browse files Browse the repository at this point in the history
…-version). Deprecate custom differently named properties used for this purpose (PlaytikaOSS#807)
  • Loading branch information
Anastasiia Smirnova authored Feb 22, 2022
1 parent 9458b87 commit 4bc8c85
Show file tree
Hide file tree
Showing 84 changed files with 486 additions and 271 deletions.
10 changes: 9 additions & 1 deletion README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,14 @@ NOTE: embedded.kafka.enabled=false will cause DockerNotPresentException if you d
|===
|Setting name | Default value |Description

|embedded.{module-name}.dockerImage
|Depends on module
|Full Docker image name for container setup. Most of the modules have default value already setup.

|embedded.{module-name}.dockerImageVersion
|N/A
|Use this property if you want to override only Docker image's version.

|embedded.{module-name}.waitTimeoutInSeconds
|60
|Waiting time for a container to start in seconds
Expand All @@ -161,7 +169,7 @@ NOTE: embedded.kafka.enabled=false will cause DockerNotPresentException if you d

|embedded.{module-name}.reuseContainer
|false
|Enables a reuse container testcontainers feature.
|Enables a reuse container Testcontainers feature. For more info please refer to: https://github.com/testcontainers/testcontainers-java/pull/2555 and https://github.com/testcontainers/testcontainers-java/pull/1781.

|embedded.{module-name}.command
|null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ public class AerospikeProperties extends CommonContainerProperties {
static final String AEROSPIKE_BEAN_NAME = "aerospike";

boolean enabled = true;
String dockerImage = "aerospike/aerospike-server:5.5.0.2";
String namespace = "TEST";
String host = "localhost";
int port = 3000;
Expand All @@ -25,4 +24,9 @@ public class AerospikeProperties extends CommonContainerProperties {
public AerospikeProperties() {
this.setCapabilities(Arrays.asList(Capability.NET_ADMIN));
}

@Override
public String getDefaultDockerImage() {
return "aerospike/aerospike-server:5.5.0.2";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.aerospike.client.AerospikeClient;
import com.playtika.test.common.spring.DockerPresenceBootstrapConfiguration;
import com.playtika.test.common.utils.ContainerUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
Expand All @@ -17,7 +18,6 @@
import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import org.testcontainers.containers.wait.strategy.WaitAllStrategy;
import org.testcontainers.containers.wait.strategy.WaitStrategy;
import org.testcontainers.utility.DockerImageName;

import java.util.LinkedHashMap;

Expand All @@ -43,14 +43,13 @@ public AerospikeWaitStrategy aerospikeStartupCheckStrategy(AerospikeProperties p
public GenericContainer aerospike(AerospikeWaitStrategy aerospikeWaitStrategy,
ConfigurableEnvironment environment,
AerospikeProperties properties) {
log.info("Starting aerospike server. Docker image: {}", properties.dockerImage);
WaitStrategy waitStrategy = new WaitAllStrategy()
.withStrategy(aerospikeWaitStrategy)
.withStrategy(new HostPortWaitStrategy())
.withStartupTimeout(properties.getTimeoutDuration());

GenericContainer aerospike =
new GenericContainer<>(DockerImageName.parse(properties.dockerImage))
new GenericContainer<>(ContainerUtils.getDockerImageName(properties))
.withExposedPorts(properties.port)
// see https://github.com/aerospike/aerospike-server.docker/blob/master/aerospike.template.conf
.withEnv("NAMESPACE", properties.namespace)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ public class ArtifactoryProperties extends CommonContainerProperties {
static final String ARTIFACTORY_BEAN_NAME = "artifactory";

boolean enabled = true;
String dockerImage = "releases-docker.jfrog.io/jfrog/artifactory-oss:7.25.6";
String networkAlias = "artifactory";
String username = "admin";
String password = "password";
Expand All @@ -23,4 +22,9 @@ public class ArtifactoryProperties extends CommonContainerProperties {
public ArtifactoryProperties() {
setWaitTimeoutInSeconds(120);
}

@Override
public String getDefaultDockerImage() {
return "releases-docker.jfrog.io/jfrog/artifactory-oss:7.25.6";
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.playtika.test.artifactory;

import com.playtika.test.common.spring.DockerPresenceBootstrapConfiguration;
import com.playtika.test.common.utils.ContainerUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
Expand All @@ -15,7 +16,6 @@
import org.testcontainers.containers.Network;
import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
import org.testcontainers.containers.wait.strategy.WaitStrategy;
import org.testcontainers.utility.DockerImageName;

import java.util.LinkedHashMap;

Expand Down Expand Up @@ -44,7 +44,7 @@ public GenericContainer artifactory(ConfigurableEnvironment environment,
WaitStrategy artifactoryWaitStrategy) {

GenericContainer container =
new GenericContainer(DockerImageName.parse(properties.getDockerImage()))
new GenericContainer(ContainerUtils.getDockerImageName(properties))
.withExposedPorts(properties.getRestApiPort(), properties.getGeneralPort())
.withNetwork(Network.SHARED)
.withNetworkAliases(properties.getNetworkAlias())
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,20 @@ public class AzuriteProperties extends CommonContainerProperties {

static final String AZURITE_BEAN_NAME = "azurite";

String dockerImageVersion = "3.15.0";
/**
* can't be changed, see https://github.com/Azure/Azurite#default-storage-account
*/
static final String ACCOUNT_NAME = "devstoreaccount1";

/**
* can't be changed, see https://github.com/Azure/Azurite#default-storage-account
*/
static final String ACCOUNT_KEY = "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==";

int port = 10000;

@Override
public String getDefaultDockerImage() {
return "mcr.microsoft.com/azure-storage/azurite:3.15.0";
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.playtika.test.azurite;

import com.playtika.test.common.spring.DockerPresenceBootstrapConfiguration;
import com.playtika.test.common.utils.ContainerUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
Expand All @@ -10,6 +11,7 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.testcontainers.containers.GenericContainer;

import java.util.LinkedHashMap;

Expand All @@ -24,10 +26,9 @@
public class EmbeddedAzuriteBootstrapConfiguration {

@Bean(name = AzuriteProperties.AZURITE_BEAN_NAME, destroyMethod = "stop")
public AzuriteContainer azurite(ConfigurableEnvironment environment,
public GenericContainer azurite(ConfigurableEnvironment environment,
AzuriteProperties properties) {

AzuriteContainer container = new AzuriteContainer(properties.getDockerImageVersion())
GenericContainer container = new GenericContainer(ContainerUtils.getDockerImageName(properties))
.withExposedPorts(properties.getPort());

configureCommonsAndStart(container, properties, log);
Expand All @@ -37,7 +38,7 @@ public AzuriteContainer azurite(ConfigurableEnvironment environment,
return container;
}

private void registerEnvironment(AzuriteContainer azurite,
private void registerEnvironment(GenericContainer azurite,
ConfigurableEnvironment environment,
AzuriteProperties properties) {

Expand All @@ -47,9 +48,9 @@ private void registerEnvironment(AzuriteContainer azurite,
LinkedHashMap<String, Object> map = new LinkedHashMap<>();
map.put("embedded.azurite.host", host);
map.put("embedded.azurite.port", mappedPort);
map.put("embedded.azurite.account-name", azurite.ACCOUNT_NAME);
map.put("embedded.azurite.account-key", azurite.ACCOUNT_KEY);
map.put("embedded.azurite.blob-endpoint", "http://" + host + ":" + mappedPort + "/" + azurite.ACCOUNT_NAME);
map.put("embedded.azurite.account-name", AzuriteProperties.ACCOUNT_NAME);
map.put("embedded.azurite.account-key", AzuriteProperties.ACCOUNT_KEY);
map.put("embedded.azurite.blob-endpoint", "http://" + host + ":" + mappedPort + "/" + AzuriteProperties.ACCOUNT_NAME);

log.info("Started Azurite. Connection details: {}", map);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class EmbeddedAzuriteBoostrapConfigurationTest {
@Test
void accountName() {
BlobServiceClient blobServiceClient = blobServiceClientBuilder.buildClient();
assertThat(blobServiceClient.getAccountName()).isEqualTo(AzuriteContainer.ACCOUNT_NAME);
assertThat(blobServiceClient.getAccountName()).isEqualTo(AzuriteProperties.ACCOUNT_NAME);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,15 @@
public class CassandraProperties extends CommonContainerProperties {
public static final String BEAN_NAME_EMBEDDED_CASSANDRA = "embeddedCassandra";
public static final String DEFAULT_DATACENTER = "datacenter1";
// https://hub.docker.com/_/cassandra
public String dockerImage = "cassandra:4.0";

public String host = "localhost";
public int port = 9042;
public String keyspaceName = "embedded";
public int replicationFactor = 1;

// https://hub.docker.com/_/cassandra
@Override
public String getDefaultDockerImage() {
return "cassandra:4.0";
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.playtika.test.cassandra;

import com.playtika.test.common.utils.ContainerUtils;
import com.playtika.test.common.utils.FileUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -41,9 +42,7 @@ public class EmbeddedCassandraBootstrapConfiguration {
public CassandraContainer cassandra(ConfigurableEnvironment environment,
CassandraProperties properties) throws Exception {

log.info("Starting Cassandra cluster. Docker image: {}", properties.dockerImage);

CassandraContainer cassandra = new CassandraContainer<>(properties.dockerImage)
CassandraContainer cassandra = new CassandraContainer<>(ContainerUtils.getDockerImageName(properties))
.withExposedPorts(properties.getPort());

cassandra = (CassandraContainer) configureCommonsAndStart(cassandra, properties, log);
Expand Down
1 change: 0 additions & 1 deletion embedded-clickhouse/README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
* `embedded.clickhouse.reuseContainer` `(true|false, default is false)`
* `embedded.clickhouse.dockerImage` `(default is 'yandex/clickhouse-server:21.7-alpine')`
** Image versions on https://hub.docker.com/r/yandex/clickhouse-server/tags[dockerhub]
* `embedded.clickhouse.asCompatibleImage` `(true|false, default is false)`
* `embedded.clickhouse.user` `(default is 'default')`
* `embedded.clickhouse.password` `(default is '')`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,18 @@
@ConfigurationProperties("embedded.clickhouse")
public class ClickHouseProperties extends CommonContainerProperties {
static final String BEAN_NAME_EMBEDDED_CLICK_HOUSE = "embeddedClickHouse";
// https://github.com/ClickHouse/ClickHouse/releases
// https://hub.docker.com/r/yandex/clickhouse-server

static final String DEFAULT_DOCKER_IMAGE = "yandex/clickhouse-server";
static final String DEFAULT_DOCKER_IMAGE_TAG = "21.7-alpine";
String dockerImage = DEFAULT_DOCKER_IMAGE + ":" + DEFAULT_DOCKER_IMAGE_TAG;
String host = "localhost";
int port = 8123;
boolean asCompatibleImage;
String user = "default";
String password = "";

// https://github.com/ClickHouse/ClickHouse/releases
// https://hub.docker.com/r/yandex/clickhouse-server
@Override
public String getDefaultDockerImage() {
return DEFAULT_DOCKER_IMAGE + ":" + DEFAULT_DOCKER_IMAGE_TAG;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.playtika.test.clickhouse;

import com.playtika.test.common.spring.DockerPresenceBootstrapConfiguration;
import com.playtika.test.common.utils.ContainerUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
Expand All @@ -12,12 +13,10 @@
import org.springframework.core.env.MapPropertySource;
import org.testcontainers.containers.ClickHouseContainer;
import org.testcontainers.shaded.com.google.common.base.Strings;
import org.testcontainers.utility.DockerImageName;

import java.util.LinkedHashMap;

import static com.playtika.test.clickhouse.ClickHouseProperties.BEAN_NAME_EMBEDDED_CLICK_HOUSE;
import static com.playtika.test.clickhouse.ClickHouseProperties.DEFAULT_DOCKER_IMAGE;
import static com.playtika.test.common.utils.ContainerUtils.configureCommonsAndStart;

@Slf4j
Expand All @@ -29,30 +28,22 @@
public class EmbeddedClickHouseBootstrapConfiguration {

@Bean(name = BEAN_NAME_EMBEDDED_CLICK_HOUSE, destroyMethod = "stop")
public ConcreteClickHouseContainer clickHouseContainer(ConfigurableEnvironment environment,
public ClickHouseContainer clickHouseContainer(ConfigurableEnvironment environment,
ClickHouseProperties properties) {
log.info("Starting ClickHouse server. Docker image: {}", properties.getDockerImage());

DockerImageName dockerImageName = DockerImageName.parse(properties.dockerImage);

if (properties.asCompatibleImage) {
dockerImageName = dockerImageName.asCompatibleSubstituteFor(DEFAULT_DOCKER_IMAGE);
}

ConcreteClickHouseContainer clickHouseContainer = new ConcreteClickHouseContainer(dockerImageName);
ClickHouseContainer clickHouseContainer = new ClickHouseContainer(ContainerUtils.getDockerImageName(properties));
String username = Strings.isNullOrEmpty(properties.getUser()) ? clickHouseContainer.getUsername() : properties.getUser();
String password = Strings.isNullOrEmpty(properties.getPassword()) ? clickHouseContainer.getPassword() : properties.getPassword();
clickHouseContainer.addEnv("CLICKHOUSE_USER", username);
clickHouseContainer.addEnv("CLICKHOUSE_PASSWORD", Strings.nullToEmpty(password));

clickHouseContainer = (ConcreteClickHouseContainer) configureCommonsAndStart(clickHouseContainer, properties, log);
clickHouseContainer = (ClickHouseContainer) configureCommonsAndStart(clickHouseContainer, properties, log);

registerClickHouseEnvironment(clickHouseContainer, environment, properties, username, password);

return clickHouseContainer;
}

private void registerClickHouseEnvironment(ConcreteClickHouseContainer clickHouseContainer,
private void registerClickHouseEnvironment(ClickHouseContainer clickHouseContainer,
ConfigurableEnvironment environment,
ClickHouseProperties properties,
String username, String password) {
Expand All @@ -72,9 +63,4 @@ private void registerClickHouseEnvironment(ConcreteClickHouseContainer clickHous
environment.getPropertySources().addFirst(propertySource);
}

private static class ConcreteClickHouseContainer extends ClickHouseContainer {
public ConcreteClickHouseContainer(DockerImageName dockerImageName) {
super(dockerImageName);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,13 @@
@ConfigurationProperties("embedded.consul")
public class ConsulProperties extends CommonContainerProperties {
public static final String BEAN_NAME_EMBEDDED_CONSUL = "embeddedConsul";
// https://hub.docker.com/_/consul
private String dockerImage = "consul:1.10";

private int port = 8500;
private String configurationFile = null;

// https://hub.docker.com/_/consul
@Override
public String getDefaultDockerImage() {
return "consul:1.10";
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.playtika.test.consul;

import com.playtika.test.common.spring.DockerPresenceBootstrapConfiguration;
import com.playtika.test.common.utils.ContainerUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
Expand Down Expand Up @@ -29,9 +30,7 @@ public class EmbeddedConsulBootstrapConfiguration {

@Bean(name = BEAN_NAME_EMBEDDED_CONSUL, destroyMethod = "stop")
public GenericContainer consulContainer(ConfigurableEnvironment environment, ConsulProperties properties) {
log.info("Starting consul server. Docker image {}", properties.getDockerImage());

GenericContainer consul = new GenericContainer<>(properties.getDockerImage())
GenericContainer consul = new GenericContainer<>(ContainerUtils.getDockerImageName(properties))
.withExposedPorts(properties.getPort())
.waitingFor(
Wait.forHttp("/v1/status/leader")
Expand Down
Loading

0 comments on commit 4bc8c85

Please sign in to comment.