Refactor the TestcontainersCassandraConfiguration class to resolve non-Spring Docker Images from 'dockerhub-proxy-cache' context in the VMware Harbor Proxy.

This commit is contained in:
John Blum
2023-05-13 11:49:58 -07:00
parent 2c69d9dff5
commit c41796e940
2 changed files with 44 additions and 27 deletions

View File

@@ -103,6 +103,16 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
return logContainerConfiguration(withCassandraServer(cassandraContainer, environment));
}
@Bean
CqlSessionBuilderCustomizer cqlSessionBuilderCustomizer(CassandraProperties properties,
@Qualifier("CassandraContainer") GenericContainer<?> cassandraContainer) {
return cqlSessionBuilder -> cqlSessionBuilder
.addContactPoint(resolveContactPoint(cassandraContainer))
.withLocalDatacenter(properties.getLocalDatacenter())
.withKeyspace(properties.getKeyspaceName());
}
protected @NonNull Logger getLogger() {
return this.logger;
}
@@ -177,7 +187,6 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
.withEnv("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", TESTCONTAINERS_PULL_PAUSE_TIMEOUT)
: cassandraContainer.withEnv("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX)
.withEnv("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", TESTCONTAINERS_PULL_PAUSE_TIMEOUT);
//: cassandraContainer;
}
private @NonNull GenericContainer<?> withCassandraServer(@NonNull GenericContainer<?> cassandraContainer,
@@ -237,16 +246,6 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
//assertThat(template.count(Customer.class)).isOne(); // Table Customers not found; needs to use the Keyspace
}
@Bean
CqlSessionBuilderCustomizer cqlSessionBuilderCustomizer(CassandraProperties properties,
@Qualifier("CassandraContainer") GenericContainer<?> cassandraContainer) {
return cqlSessionBuilder -> cqlSessionBuilder
.addContactPoint(resolveContactPoint(cassandraContainer))
.withLocalDatacenter(properties.getLocalDatacenter())
.withKeyspace(properties.getKeyspaceName());
}
private @NonNull InetSocketAddress resolveContactPoint(@NonNull GenericContainer<?> cassandraContainer) {
return new InetSocketAddress(cassandraContainer.getHost(),
cassandraContainer.getMappedPort(CASSANDRA_DEFAULT_PORT));

View File

@@ -34,11 +34,16 @@ import org.testcontainers.utility.ImageNameSubstitutor;
@SuppressWarnings("unused")
public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
private static final String CASSANDRA_KEYWORD = "cassandra";
private static final String JENKINS_KEYWORD = "jenkins";
private static final String VMWARE_HARBOR_PROXY_URL = "harbor-repo.vmware.com";
private static final String TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX =
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/");
@@ -56,8 +61,6 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
@Override
public @NonNull DockerImageName apply(@NonNull DockerImageName original) {
logInfo("Is Jenkins Environment [{}]", isJenkinsEnvironment());
String originalDockerImageName = original.asCanonicalNameString();
String resolvedDockerImageName = resolveDockerImageName(originalDockerImageName);;
@@ -66,34 +69,45 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
DockerImageName dockerImageName = DockerImageName.parse(resolvedDockerImageName);
return dockerImageName.asCanonicalNameString().contains("cassandra")
? dockerImageName.asCompatibleSubstituteFor("cassandra")
return dockerImageName.asCanonicalNameString().contains(CASSANDRA_KEYWORD)
? dockerImageName.asCompatibleSubstituteFor(CASSANDRA_KEYWORD)
: dockerImageName;
}
private boolean isJenkinsEnvironment() {
return Boolean.TRUE.equals(Boolean.getBoolean("jenkins"));
return Boolean.TRUE.equals(Boolean.getBoolean(JENKINS_KEYWORD));
}
private boolean isSpringDockerImageName(String dockerImageName) {
return dockerImageName.contains("spring");
}
private boolean isVMwareHarborProxyAvailable(String dockerImageName) {
return dockerImageName.contains(VMWARE_HARBOR_PROXY_URL) || isJenkinsEnvironment();
}
private String resolveDockerImageName(String originalDockerImageName) {
logInfo("Is Jenkins Environment [{}]", isJenkinsEnvironment());
String resolvedDockerImageName = originalDockerImageName;
if (originalDockerImageName.contains(VMWARE_HARBOR_PROXY_URL)) {
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()) {
logInfo("VMware Jenkins CI environment detected");
resolvedDockerImageName = String.format(TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE,
substituteCassandraDockerImageName(originalDockerImageName));
if (isVMwareHarborProxyAvailable(originalDockerImageName)) {
logInfo("VMware Harbor Proxy detected [{}]", originalDockerImageName);
originalDockerImageName = toUnqualifiedDockerImageName(originalDockerImageName);
resolvedDockerImageName = doResolveDockerImageName(originalDockerImageName);
}
return resolvedDockerImageName;
}
private String doResolveDockerImageName(String originalDockerImageName) {
return isSpringDockerImageName(originalDockerImageName)
? String.format(TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE, substituteCassandraDockerImageName(originalDockerImageName))
: String.format(TESTCONTAINERS_HUB_IMAGE_NAME_TEMPLATE, originalDockerImageName);
}
private String substituteCassandraDockerImageName(String originalDockerImageName) {
return originalDockerImageName.contains("cassandra")
@@ -101,12 +115,16 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
: originalDockerImageName;
}
private String toUnqualifiedDockerImageName(String dockerImageName) {
return dockerImageName.substring(dockerImageName.lastIndexOf("/") + 1);
}
@Override
protected String getDescription() {
return "VMware Harbor Proxy Image Name Substitutor";
}
protected Logger getLogger() {
protected @NonNull Logger getLogger() {
return this.logger;
}