Refactor TestcontainersCassandraConfiguration class to use the springci cached Java 17/Cassandra-3.11 Docker Image in VMW Harbor Proxy.
This commit is contained in:
@@ -68,11 +68,15 @@ import example.app.crm.model.Customer;
|
||||
public class TestcontainersCassandraConfiguration extends TestCassandraConfiguration {
|
||||
|
||||
// Apache Cassandra Constants
|
||||
private static final String CASSANDRA_VERSION = System.getProperty("cassandra.version", "3.11.15");
|
||||
private static final String CASSANDRA_VERSION = System.getProperty("cassandra.version", "3.11.14");
|
||||
private static final String LOCAL_DATACENTER_NAME = System.getProperty("cassandra.datacenter.name", "datacenter1");
|
||||
|
||||
// Java (JVM/JRE) Constants
|
||||
private static final String SPRING_JAVA_VERSION = System.getProperty("spring.java.version", "17.0.6_10-jdk-focal");
|
||||
|
||||
// Testcontainers Constants
|
||||
private static final String TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX = "harbor-repo.vmware.com/dockerhub-proxy-cache/";
|
||||
private static final String TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX = TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX.concat("springci/");
|
||||
private static final String TESTCONTAINERS_HTTPS_PROXY = String.format("https://%s", TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX);
|
||||
private static final String TESTCONTAINERS_PULL_PAUSE_TIMEOUT = "5"; // 5 seconds
|
||||
private static final String TESTCONTAINERS_RYUK_DISABLED = "true";
|
||||
@@ -82,14 +86,16 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
||||
private static final DockerImageName CASSANDRA_DOCKER_IMAGE_NAME =
|
||||
DockerImageName.parse(String.format("cassandra:%s", CASSANDRA_VERSION));
|
||||
//private static final DockerImageName CASSANDRA_DOCKER_IMAGE_NAME =
|
||||
// DockerImageName.parse(String.format("%scassandra:3.11.15", TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX));
|
||||
// DockerImageName.parse(String.format("%1$sspring-data-with-cassandra-3.11:%2$s",
|
||||
// TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX, SPRING_JAVA_VERSION))
|
||||
// .asCompatibleSubstituteFor("cassandra");
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@Bean("CassandraContainer")
|
||||
GenericContainer<?> cassandraContainer(Environment environment) {
|
||||
|
||||
GenericContainer<?> cassandraContainer = newEnvironmentOptimizedCassandraContainer(environment);
|
||||
GenericContainer<?> cassandraContainer = newEnvironmentCustomizedCassandraContainer(environment);
|
||||
|
||||
cassandraContainer.start();
|
||||
cassandraContainer.followOutput(new Slf4jLogConsumer(getLogger()));
|
||||
@@ -139,7 +145,7 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
||||
.withReuse(true);
|
||||
}
|
||||
|
||||
private @NonNull GenericContainer<?> newEnvironmentOptimizedCassandraContainer(@NonNull Environment environment) {
|
||||
private @NonNull GenericContainer<?> newEnvironmentCustomizedCassandraContainer(@NonNull Environment environment) {
|
||||
return withCassandraEnvironmentConfiguration(newCassandraContainer(environment), environment);
|
||||
}
|
||||
|
||||
@@ -156,7 +162,7 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
||||
}
|
||||
|
||||
private boolean isJenkinsEnvironment() {
|
||||
return Boolean.TRUE.equals(Boolean.getBoolean("jenkins"));
|
||||
return Boolean.getBoolean("jenkins");
|
||||
}
|
||||
|
||||
private boolean isNotJenkinsEnvironment() {
|
||||
@@ -169,7 +175,7 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
||||
return isNotJenkinsEnvironment()
|
||||
? cassandraContainer.withEnv("TESTCONTAINERS_RYUK_DISABLED", TESTCONTAINERS_RYUK_DISABLED)
|
||||
.withEnv("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", TESTCONTAINERS_PULL_PAUSE_TIMEOUT)
|
||||
: cassandraContainer.withEnv("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX)
|
||||
: cassandraContainer.withEnv("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX)
|
||||
.withEnv("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", TESTCONTAINERS_PULL_PAUSE_TIMEOUT);
|
||||
//: cassandraContainer;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package example.app.crm.config.testcontainers;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.testcontainers.utility.DockerImageName;
|
||||
@@ -24,6 +26,7 @@ import org.testcontainers.utility.ImageNameSubstitutor;
|
||||
* Testcontainers {@link ImageNameSubstitutor} for {@literal VMware Harbor Proxy}.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.testcontainers.utility.DockerImageName
|
||||
* @see org.testcontainers.utility.ImageNameSubstitutor
|
||||
* @see <a href="https://github.com/testcontainers/testcontainers-java/issues/4605">Image Name Substitution not applied for DockerComposeContainers</a>
|
||||
* @since 1.7.6
|
||||
@@ -34,15 +37,24 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
||||
private static final String VMWARE_HARBOR_PROXY_URL = "harbor-repo.vmware.com";
|
||||
|
||||
private static final String TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX =
|
||||
String.format("%s/dockerhub-proxy-cache/", VMWARE_HARBOR_PROXY_URL);
|
||||
VMWARE_HARBOR_PROXY_URL.concat("/dockerhub-proxy-cache/");
|
||||
|
||||
private static final String TESTCONTAINERS_HUB_IMAGE_NAME_TEMPLATE =
|
||||
TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX.concat("%s");
|
||||
private static final String TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX =
|
||||
TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX.concat("springci/");
|
||||
|
||||
private static final String TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE =
|
||||
TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX.concat("%s");
|
||||
|
||||
private static final String SPRING_JAVA_VERSION =
|
||||
System.getProperty("spring.java.version", "17.0.6_10-jdk-focal");
|
||||
|
||||
private static final String SPRING_DATA_CASSANDRA_DOCKER_IMAGE_NAME =
|
||||
String.format("spring-data-with-cassandra-3.11:%s", SPRING_JAVA_VERSION);
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@Override
|
||||
public DockerImageName apply(DockerImageName original) {
|
||||
public @NonNull DockerImageName apply(@NonNull DockerImageName original) {
|
||||
|
||||
logInfo("Is Jenkins Environment [{}]", isJenkinsEnvironment());
|
||||
|
||||
@@ -52,7 +64,11 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
||||
logInfo("Original Docker Image Name [%s]", originalDockerImageName);
|
||||
logInfo("Resolved Docker Image Name [{}]", resolvedDockerImageName);
|
||||
|
||||
return DockerImageName.parse(resolvedDockerImageName);
|
||||
DockerImageName dockerImageName = DockerImageName.parse(resolvedDockerImageName);
|
||||
|
||||
return dockerImageName.asCanonicalNameString().contains("cassandra")
|
||||
? dockerImageName.asCompatibleSubstituteFor("cassandra")
|
||||
: dockerImageName;
|
||||
}
|
||||
|
||||
private boolean isJenkinsEnvironment() {
|
||||
@@ -64,16 +80,27 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
||||
String resolvedDockerImageName = originalDockerImageName;
|
||||
|
||||
if (originalDockerImageName.contains(VMWARE_HARBOR_PROXY_URL)) {
|
||||
originalDockerImageName = originalDockerImageName.substring(TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX.length() - 1);
|
||||
resolvedDockerImageName = String.format(TESTCONTAINERS_HUB_IMAGE_NAME_TEMPLATE, originalDockerImageName);
|
||||
logInfo("VMware Harbor Proxy URL detected");
|
||||
originalDockerImageName = originalDockerImageName.substring(originalDockerImageName.lastIndexOf("/") + 1);
|
||||
resolvedDockerImageName = String.format(TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE,
|
||||
substituteCassandraDockerImageName(originalDockerImageName));
|
||||
}
|
||||
else if (isJenkinsEnvironment()) {
|
||||
resolvedDockerImageName = String.format(TESTCONTAINERS_HUB_IMAGE_NAME_TEMPLATE, originalDockerImageName);
|
||||
logInfo("VMware Jenkins CI environment detected");
|
||||
resolvedDockerImageName = String.format(TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE,
|
||||
substituteCassandraDockerImageName(originalDockerImageName));
|
||||
}
|
||||
|
||||
return resolvedDockerImageName;
|
||||
}
|
||||
|
||||
private String substituteCassandraDockerImageName(String originalDockerImageName) {
|
||||
|
||||
return originalDockerImageName.contains("cassandra")
|
||||
? SPRING_DATA_CASSANDRA_DOCKER_IMAGE_NAME
|
||||
: originalDockerImageName;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getDescription() {
|
||||
return "VMware Harbor Proxy Image Name Substitutor";
|
||||
|
||||
Reference in New Issue
Block a user