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 {
|
public class TestcontainersCassandraConfiguration extends TestCassandraConfiguration {
|
||||||
|
|
||||||
// Apache Cassandra Constants
|
// 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");
|
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
|
// Testcontainers Constants
|
||||||
private static final String TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX = "harbor-repo.vmware.com/dockerhub-proxy-cache/";
|
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_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_PULL_PAUSE_TIMEOUT = "5"; // 5 seconds
|
||||||
private static final String TESTCONTAINERS_RYUK_DISABLED = "true";
|
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 =
|
private static final DockerImageName CASSANDRA_DOCKER_IMAGE_NAME =
|
||||||
DockerImageName.parse(String.format("cassandra:%s", CASSANDRA_VERSION));
|
DockerImageName.parse(String.format("cassandra:%s", CASSANDRA_VERSION));
|
||||||
//private static final DockerImageName CASSANDRA_DOCKER_IMAGE_NAME =
|
//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());
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
@Bean("CassandraContainer")
|
@Bean("CassandraContainer")
|
||||||
GenericContainer<?> cassandraContainer(Environment environment) {
|
GenericContainer<?> cassandraContainer(Environment environment) {
|
||||||
|
|
||||||
GenericContainer<?> cassandraContainer = newEnvironmentOptimizedCassandraContainer(environment);
|
GenericContainer<?> cassandraContainer = newEnvironmentCustomizedCassandraContainer(environment);
|
||||||
|
|
||||||
cassandraContainer.start();
|
cassandraContainer.start();
|
||||||
cassandraContainer.followOutput(new Slf4jLogConsumer(getLogger()));
|
cassandraContainer.followOutput(new Slf4jLogConsumer(getLogger()));
|
||||||
@@ -139,7 +145,7 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
|||||||
.withReuse(true);
|
.withReuse(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NonNull GenericContainer<?> newEnvironmentOptimizedCassandraContainer(@NonNull Environment environment) {
|
private @NonNull GenericContainer<?> newEnvironmentCustomizedCassandraContainer(@NonNull Environment environment) {
|
||||||
return withCassandraEnvironmentConfiguration(newCassandraContainer(environment), environment);
|
return withCassandraEnvironmentConfiguration(newCassandraContainer(environment), environment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,7 +162,7 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isJenkinsEnvironment() {
|
private boolean isJenkinsEnvironment() {
|
||||||
return Boolean.TRUE.equals(Boolean.getBoolean("jenkins"));
|
return Boolean.getBoolean("jenkins");
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isNotJenkinsEnvironment() {
|
private boolean isNotJenkinsEnvironment() {
|
||||||
@@ -169,7 +175,7 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
|||||||
return isNotJenkinsEnvironment()
|
return isNotJenkinsEnvironment()
|
||||||
? cassandraContainer.withEnv("TESTCONTAINERS_RYUK_DISABLED", TESTCONTAINERS_RYUK_DISABLED)
|
? cassandraContainer.withEnv("TESTCONTAINERS_RYUK_DISABLED", TESTCONTAINERS_RYUK_DISABLED)
|
||||||
.withEnv("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", TESTCONTAINERS_PULL_PAUSE_TIMEOUT)
|
.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);
|
.withEnv("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", TESTCONTAINERS_PULL_PAUSE_TIMEOUT);
|
||||||
//: cassandraContainer;
|
//: cassandraContainer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package example.app.crm.config.testcontainers;
|
package example.app.crm.config.testcontainers;
|
||||||
|
|
||||||
|
import org.springframework.lang.NonNull;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.testcontainers.utility.DockerImageName;
|
import org.testcontainers.utility.DockerImageName;
|
||||||
@@ -24,6 +26,7 @@ import org.testcontainers.utility.ImageNameSubstitutor;
|
|||||||
* Testcontainers {@link ImageNameSubstitutor} for {@literal VMware Harbor Proxy}.
|
* Testcontainers {@link ImageNameSubstitutor} for {@literal VMware Harbor Proxy}.
|
||||||
*
|
*
|
||||||
* @author John Blum
|
* @author John Blum
|
||||||
|
* @see org.testcontainers.utility.DockerImageName
|
||||||
* @see org.testcontainers.utility.ImageNameSubstitutor
|
* @see org.testcontainers.utility.ImageNameSubstitutor
|
||||||
* @see <a href="https://github.com/testcontainers/testcontainers-java/issues/4605">Image Name Substitution not applied for DockerComposeContainers</a>
|
* @see <a href="https://github.com/testcontainers/testcontainers-java/issues/4605">Image Name Substitution not applied for DockerComposeContainers</a>
|
||||||
* @since 1.7.6
|
* @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 VMWARE_HARBOR_PROXY_URL = "harbor-repo.vmware.com";
|
||||||
|
|
||||||
private static final String TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX =
|
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 =
|
private static final String TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX =
|
||||||
TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX.concat("%s");
|
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());
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DockerImageName apply(DockerImageName original) {
|
public @NonNull DockerImageName apply(@NonNull DockerImageName original) {
|
||||||
|
|
||||||
logInfo("Is Jenkins Environment [{}]", isJenkinsEnvironment());
|
logInfo("Is Jenkins Environment [{}]", isJenkinsEnvironment());
|
||||||
|
|
||||||
@@ -52,7 +64,11 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
|||||||
logInfo("Original Docker Image Name [%s]", originalDockerImageName);
|
logInfo("Original Docker Image Name [%s]", originalDockerImageName);
|
||||||
logInfo("Resolved Docker Image Name [{}]", resolvedDockerImageName);
|
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() {
|
private boolean isJenkinsEnvironment() {
|
||||||
@@ -64,16 +80,27 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
|||||||
String resolvedDockerImageName = originalDockerImageName;
|
String resolvedDockerImageName = originalDockerImageName;
|
||||||
|
|
||||||
if (originalDockerImageName.contains(VMWARE_HARBOR_PROXY_URL)) {
|
if (originalDockerImageName.contains(VMWARE_HARBOR_PROXY_URL)) {
|
||||||
originalDockerImageName = originalDockerImageName.substring(TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX.length() - 1);
|
logInfo("VMware Harbor Proxy URL detected");
|
||||||
resolvedDockerImageName = String.format(TESTCONTAINERS_HUB_IMAGE_NAME_TEMPLATE, originalDockerImageName);
|
originalDockerImageName = originalDockerImageName.substring(originalDockerImageName.lastIndexOf("/") + 1);
|
||||||
|
resolvedDockerImageName = String.format(TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE,
|
||||||
|
substituteCassandraDockerImageName(originalDockerImageName));
|
||||||
}
|
}
|
||||||
else if (isJenkinsEnvironment()) {
|
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;
|
return resolvedDockerImageName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String substituteCassandraDockerImageName(String originalDockerImageName) {
|
||||||
|
|
||||||
|
return originalDockerImageName.contains("cassandra")
|
||||||
|
? SPRING_DATA_CASSANDRA_DOCKER_IMAGE_NAME
|
||||||
|
: originalDockerImageName;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getDescription() {
|
protected String getDescription() {
|
||||||
return "VMware Harbor Proxy Image Name Substitutor";
|
return "VMware Harbor Proxy Image Name Substitutor";
|
||||||
|
|||||||
Reference in New Issue
Block a user