Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.testcontainers.containers.GenericContainer;

import java.io.IOException;
Expand All @@ -34,12 +34,8 @@ public class SetupEnterpriseAerospikeBootstrapConfiguration {
private GenericContainer<?> aerospikeContainer;
private AerospikeProperties aerospikeProperties;
private AerospikeEnterpriseProperties aerospikeEnterpriseProperties;
private Environment environment;

@Autowired
public void setEnvironment(Environment environment) {
this.environment = environment;
}
@Value("${embedded.aerospike.dockerImage:}")
private String dockerImage;

@Autowired
@Qualifier(BEAN_NAME_AEROSPIKE)
Expand Down Expand Up @@ -67,7 +63,6 @@ public void setupEnterpriseAerospike() throws IOException, InterruptedException
private void verifyAerospikeImage() {
log.info("Verify Aerospike Enterprise Image");

String dockerImage = environment.getProperty(AEROSPIKE_DOCKER_IMAGE_PROPERTY);
if (dockerImage == null) {
throw new IllegalStateException("Aerospike enterprise docker image not provided, set up 'embedded.aerospike.dockerImage' property.\n"
+ TEXT_TO_DOCUMENTATION);
Expand Down
4 changes: 4 additions & 0 deletions embedded-aerospike/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,9 @@
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.playtika.testcontainer.toxiproxy.EmbeddedToxiProxyBootstrapConfiguration;
import com.playtika.testcontainer.toxiproxy.condition.ConditionalOnToxiProxyEnabled;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
Expand All @@ -14,17 +15,14 @@
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.test.context.DynamicPropertyRegistrar;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.Network;
import org.testcontainers.containers.ToxiproxyContainer;
import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import org.testcontainers.containers.wait.strategy.WaitAllStrategy;
import org.testcontainers.containers.wait.strategy.WaitStrategy;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;

import static com.playtika.testcontainer.aerospike.AerospikeProperties.BEAN_NAME_AEROSPIKE;
Expand All @@ -51,26 +49,37 @@ public AerospikeWaitStrategy aerospikeStartupCheckStrategy(AerospikeProperties p
@ConditionalOnToxiProxyEnabled(module = "aerospike")
ToxiproxyContainer.ContainerProxy aerospikeContainerProxy(ToxiproxyContainer toxiproxyContainer,
GenericContainer<?> aerospike,
AerospikeProperties properties,
ConfigurableEnvironment environment) {
AerospikeProperties properties) {
ToxiproxyContainer.ContainerProxy proxy = toxiproxyContainer.getProxy(aerospike, properties.port);

Map<String, Object> map = new LinkedHashMap<>();
map.put("embedded.aerospike.toxiproxy.host", proxy.getContainerIpAddress());
map.put("embedded.aerospike.toxiproxy.port", proxy.getProxyPort());
map.put("embedded.aerospike.toxiproxy.proxyName", proxy.getName());

MapPropertySource propertySource = new MapPropertySource("embeddedAerospikeToxiProxyInfo", map);
environment.getPropertySources().addFirst(propertySource);
log.info("Started Aerospike ToxiProxy connection details {}", map);

log.info("Started Aerospike ToxiProxy connection details host={}, port={}, proxyName={}", proxy.getContainerIpAddress(), proxy.getProxyPort(), proxy.getName());
return proxy;
}

@Bean
public DynamicPropertyRegistrar aerospikeDynamicPropertyRegistrar(GenericContainer<?> aerospike, AerospikeProperties properties) {
return registry -> {
registry.add("embedded.aerospike.host", aerospike::getHost);
registry.add("embedded.aerospike.port", () -> aerospike.getMappedPort(properties.port));
registry.add("embedded.aerospike.namespace", () -> properties.namespace);
registry.add("embedded.aerospike.networkAlias", () -> AEROSPIKE_NETWORK_ALIAS);
registry.add("embedded.aerospike.internalPort", () -> properties.port);
};
}

@Bean
@ConditionalOnToxiProxyEnabled(module = "aerospike")
public DynamicPropertyRegistrar aerospikeToxiProxyDynamicPropertyRegistrar(
@Qualifier("aerospikeContainerProxy") ToxiproxyContainer.ContainerProxy proxy) {
return registry -> {
registry.add("embedded.aerospike.toxiproxy.host", proxy::getContainerIpAddress);
registry.add("embedded.aerospike.toxiproxy.port", proxy::getProxyPort);
registry.add("embedded.aerospike.toxiproxy.proxyName", proxy::getName);
log.info("Started Aerospike ToxiProxy connection details host={}, port={}, proxyName={}", proxy.getContainerIpAddress(), proxy.getProxyPort(), proxy.getName());
};
}

@Bean(name = BEAN_NAME_AEROSPIKE, destroyMethod = "stop")
public GenericContainer<?> aerospike(AerospikeWaitStrategy aerospikeWaitStrategy,
ConfigurableEnvironment environment,
AerospikeProperties properties,
Optional<Network> network) {
WaitStrategy waitStrategy = new WaitAllStrategy()
Expand All @@ -97,26 +106,8 @@ public GenericContainer<?> aerospike(AerospikeWaitStrategy aerospikeWaitStrategy
.withEnv("FEATURE_KEY_FILE", "env-b64:FEATURES");
}
aerospike = configureCommonsAndStart(aerospike, properties, log);
registerAerospikeEnvironment(aerospike, environment, properties);
log.info("Started aerospike server. Connection details host={}, port={}, namespace={}, networkAlias={}, internalPort={}",
aerospike.getHost(), aerospike.getMappedPort(properties.port), properties.namespace, AEROSPIKE_NETWORK_ALIAS, properties.port);
return aerospike;
}

private void registerAerospikeEnvironment(GenericContainer<?> aerospike,
ConfigurableEnvironment environment,
AerospikeProperties properties) {
Integer mappedPort = aerospike.getMappedPort(properties.port);
String host = aerospike.getHost();

LinkedHashMap<String, Object> map = new LinkedHashMap<>();
map.put("embedded.aerospike.host", host);
map.put("embedded.aerospike.port", mappedPort);
map.put("embedded.aerospike.namespace", properties.namespace);
map.put("embedded.aerospike.networkAlias", AEROSPIKE_NETWORK_ALIAS);
map.put("embedded.aerospike.internalPort", properties.port);

log.info("Started aerospike server. Connection details {}", map);

MapPropertySource propertySource = new MapPropertySource("embeddedAerospikeInfo", map);
environment.getPropertySources().addFirst(propertySource);
}
}
4 changes: 4 additions & 0 deletions embedded-artifactory/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,9 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,13 @@
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.test.context.DynamicPropertyRegistrar;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.Network;
import org.testcontainers.containers.ToxiproxyContainer;
import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
import org.testcontainers.containers.wait.strategy.WaitStrategy;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;

import static com.playtika.testcontainer.artifactory.ArtifactoryProperties.ARTIFACTORY_BEAN_NAME;
Expand All @@ -48,64 +45,53 @@ public WaitStrategy artifactoryWaitStrategy(ArtifactoryProperties properties) {

@Bean
@ConditionalOnToxiProxyEnabled(module = "artifactory")
ToxiproxyContainer.ContainerProxy artifactoryContainerProxy(ToxiproxyContainer toxiproxyContainer,
@Qualifier(ARTIFACTORY_BEAN_NAME) GenericContainer<?> artifactory,
ArtifactoryProperties properties,
ConfigurableEnvironment environment) {
public ToxiproxyContainer.ContainerProxy artifactoryContainerProxy(ToxiproxyContainer toxiproxyContainer,
@Qualifier(ARTIFACTORY_BEAN_NAME) GenericContainer<?> artifactory,
ArtifactoryProperties properties) {
ToxiproxyContainer.ContainerProxy proxy = toxiproxyContainer.getProxy(artifactory, properties.getRestApiPort());

Map<String, Object> map = new LinkedHashMap<>();
map.put("embedded.artifactory.toxiproxy.host", proxy.getContainerIpAddress());
map.put("embedded.artifactory.toxiproxy.port", proxy.getProxyPort());
map.put("embedded.artifactory.toxiproxy.proxyName", proxy.getName());

MapPropertySource propertySource = new MapPropertySource("embeddedArtifactoryToxiproxyInfo", map);
environment.getPropertySources().addFirst(propertySource);
log.info("Started Artifactory ToxiProxy connection details {}", map);

log.info("Started Artifactory ToxiProxy connection details host={}, port={}, proxyName={}", proxy.getContainerIpAddress(), proxy.getProxyPort(), proxy.getName());
return proxy;
}

@Bean
@ConditionalOnToxiProxyEnabled(module = "artifactory")
public DynamicPropertyRegistrar artifactoryToxiProxyDynamicPropertyRegistrar(@Qualifier("artifactoryContainerProxy") ToxiproxyContainer.ContainerProxy proxy) {
return registry -> {
registry.add("embedded.artifactory.toxiproxy.host", proxy::getContainerIpAddress);
registry.add("embedded.artifactory.toxiproxy.port", proxy::getProxyPort);
registry.add("embedded.artifactory.toxiproxy.proxyName", proxy::getName);
};
}

@Bean(name = ARTIFACTORY_BEAN_NAME, destroyMethod = "stop")
public GenericContainer<?> artifactory(ConfigurableEnvironment environment,
ArtifactoryProperties properties,
public GenericContainer<?> artifactory(ArtifactoryProperties properties,
WaitStrategy artifactoryWaitStrategy,
Optional<Network> network) {

GenericContainer<?> container =
new GenericContainer<>(ContainerUtils.getDockerImageName(properties))
.withExposedPorts(properties.getRestApiPort(), properties.getGeneralPort())
.withNetwork(Network.SHARED)
.withNetworkAliases(properties.getNetworkAlias(), ARTIFACTORY_NETWORK_ALIAS)
.waitingFor(artifactoryWaitStrategy);

network.ifPresent(container::withNetwork);
configureCommonsAndStart(container, properties, log);

registerEnvironment(container, environment, properties);

Integer mappedPort = container.getMappedPort(properties.generalPort);
String host = container.getHost();
log.info("Started Artifactory server. Connection details: host={}, port={}, username={}, password={}, staticNetworkAlias={}, internalRestApiPort={}, internalGeneralPort={}",
host, mappedPort, properties.getUsername(), properties.getPassword(), ARTIFACTORY_NETWORK_ALIAS, properties.getRestApiPort(), properties.getGeneralPort());
return container;
}

private void registerEnvironment(GenericContainer<?> artifactory,
ConfigurableEnvironment environment,
ArtifactoryProperties properties) {

Integer mappedPort = artifactory.getMappedPort(properties.generalPort);
String host = artifactory.getHost();

LinkedHashMap<String, Object> map = new LinkedHashMap<>();
map.put("embedded.artifactory.host", host);
map.put("embedded.artifactory.port", mappedPort);
map.put("embedded.artifactory.username", properties.getUsername());
map.put("embedded.artifactory.password", properties.getPassword());
map.put("embedded.artifactory.staticNetworkAlias", ARTIFACTORY_NETWORK_ALIAS);
map.put("embedded.artifactory.internalRestApiPort", properties.getRestApiPort());
map.put("embedded.artifactory.internalGeneralPort", properties.getGeneralPort());

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

MapPropertySource propertySource = new MapPropertySource("embeddedArtifactoryInfo", map);
environment.getPropertySources().addFirst(propertySource);
@Bean
public DynamicPropertyRegistrar artifactoryDynamicPropertyRegistrar(@Qualifier(ARTIFACTORY_BEAN_NAME) GenericContainer<?> artifactory, ArtifactoryProperties properties) {
return registry -> {
registry.add("embedded.artifactory.host", artifactory::getHost);
registry.add("embedded.artifactory.port", () -> artifactory.getMappedPort(properties.generalPort));
registry.add("embedded.artifactory.username", properties::getUsername);
registry.add("embedded.artifactory.password", properties::getPassword);
registry.add("embedded.artifactory.staticNetworkAlias", () -> ARTIFACTORY_NETWORK_ALIAS);
registry.add("embedded.artifactory.internalRestApiPort", properties::getRestApiPort);
registry.add("embedded.artifactory.internalGeneralPort", properties::getGeneralPort);
};
}
}
4 changes: 4 additions & 0 deletions embedded-cassandra/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,9 @@
<artifactId>spring-data-cassandra</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
</project>
Loading
Loading