diff --git a/spring-geode-project/spring-geode/src/test/java/example/app/crm/config/TestcontainersCassandraConfiguration.java b/spring-geode-project/spring-geode/src/test/java/example/app/crm/config/TestcontainersCassandraConfiguration.java index 5fa6948a..ed9378db 100644 --- a/spring-geode-project/spring-geode/src/test/java/example/app/crm/config/TestcontainersCassandraConfiguration.java +++ b/spring-geode-project/spring-geode/src/test/java/example/app/crm/config/TestcontainersCassandraConfiguration.java @@ -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; } diff --git a/spring-geode-project/spring-geode/src/test/java/example/app/crm/config/testcontainers/VmwHarborProxyImageNameSubstitutor.java b/spring-geode-project/spring-geode/src/test/java/example/app/crm/config/testcontainers/VmwHarborProxyImageNameSubstitutor.java index abf0d62c..8c0478c6 100644 --- a/spring-geode-project/spring-geode/src/test/java/example/app/crm/config/testcontainers/VmwHarborProxyImageNameSubstitutor.java +++ b/spring-geode-project/spring-geode/src/test/java/example/app/crm/config/testcontainers/VmwHarborProxyImageNameSubstitutor.java @@ -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 Image Name Substitution not applied for DockerComposeContainers * @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";