Refactor TestcontainersCassandraConfiguration class to use the springci cached Java 17/Cassandra-3.11 Docker Image in VMW Harbor Proxy.

This commit is contained in:
John Blum
2023-05-13 10:35:18 -07:00
parent 29187eb3e3
commit 2c69d9dff5
2 changed files with 47 additions and 14 deletions

View File

@@ -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;
}

View File

@@ -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";