Skip to content

Commit

Permalink
fix(#1294): Allow to set general Docker registry mirror
Browse files Browse the repository at this point in the history
- Users may set Docker registry mirror for Testcontainers images used in Citrus
  • Loading branch information
christophd committed Jan 9, 2025
1 parent 8e2a3f7 commit d84e512
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,19 @@ public final class TestContainersSettings {
private static final String ENABLED_ENV = TESTCONTAINERS_ENV_PREFIX + "ENABLED";
private static final String ENABLED_DEFAULT = "true";

public static final String DOCKER_REGISTRY = "docker.io";
private static final String REGISTRY_PROPERTY = TESTCONTAINERS_PROPERTY_PREFIX + "registry";
private static final String REGISTRY_ENV = TESTCONTAINERS_ENV_PREFIX + "REGISTRY";
private static final String REGISTRY_DEFAULT = DOCKER_REGISTRY;

private static final String REGISTRY_MIRROR_ENABLED_PROPERTY = TESTCONTAINERS_PROPERTY_PREFIX + "registry.mirror.enabled";
private static final String REGISTRY_MIRROR_ENABLED_ENV = TESTCONTAINERS_ENV_PREFIX + "REGISTRY_MIRROR_ENABLED";
private static final String REGISTRY_MIRROR_ENABLED_DEFAULT = "false";

private static final String REGISTRY_MIRROR_PROPERTY = TESTCONTAINERS_PROPERTY_PREFIX + "registry.mirror";
private static final String REGISTRY_MIRROR_ENV = TESTCONTAINERS_ENV_PREFIX + "REGISTRY_MIRROR";
private static final String REGISTRY_MIRROR_DEFAULT = "mirror.gcr.io";

private static final String AUTO_REMOVE_RESOURCES_PROPERTY = TESTCONTAINERS_PROPERTY_PREFIX + "auto.remove.resources";
private static final String AUTO_REMOVE_RESOURCES_ENV = TESTCONTAINERS_ENV_PREFIX + "AUTO_REMOVE_RESOURCES";
private static final String AUTO_REMOVE_RESOURCES_DEFAULT = "true";
Expand Down Expand Up @@ -76,6 +89,31 @@ public static boolean isAutoRemoveResources() {
System.getenv(AUTO_REMOVE_RESOURCES_ENV) != null ? System.getenv(AUTO_REMOVE_RESOURCES_ENV) : AUTO_REMOVE_RESOURCES_DEFAULT));
}

/**
* Docker registry.
* @return
*/
public static String getRegistry() {
return System.getProperty(REGISTRY_PROPERTY, Optional.ofNullable(System.getenv(REGISTRY_ENV)).orElse(REGISTRY_DEFAULT));
}

/**
* True when using Docker registry mirror.
* @return
*/
public static boolean isRegistryMirrorEnabled() {
return Boolean.parseBoolean(System.getProperty(REGISTRY_MIRROR_ENABLED_PROPERTY,
Optional.ofNullable(System.getenv(REGISTRY_MIRROR_ENABLED_ENV)).orElse(REGISTRY_MIRROR_ENABLED_DEFAULT)));
}

/**
* Docker registry mirror.
* @return
*/
public static String getRegistryMirror() {
return System.getProperty(REGISTRY_MIRROR_PROPERTY, Optional.ofNullable(System.getenv(REGISTRY_MIRROR_ENV)).orElse(REGISTRY_MIRROR_DEFAULT));
}

/**
* True when using KubeDock services.
* @return
Expand Down Expand Up @@ -118,4 +156,21 @@ public static long getConnectTimeout() {
return Long.parseLong(System.getProperty(CONNECT_TIMEOUT_PROPERTY,
System.getenv(CONNECT_TIMEOUT_ENV) != null ? System.getenv(CONNECT_TIMEOUT_ENV) : CONNECT_TIMEOUT_DEFAULT));
}

/**
* Gets the Docker registry to use for pulling Testcontainers images.
* Uses registry mirror if enabled.
* The default Docker registry is left empty.
* @return
*/
public static String getDockerRegistry() {
String registry = "";
if (TestContainersSettings.isRegistryMirrorEnabled()) {
registry = TestContainersSettings.getRegistryMirror() + "/";
} else if (!TestContainersSettings.DOCKER_REGISTRY.equals(TestContainersSettings.getRegistry())) {
registry = TestContainersSettings.getRegistry() + "/";
}

return registry;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.citrusframework.spi.Resources;
import org.citrusframework.testcontainers.TestContainersSettings;
import org.citrusframework.testcontainers.WaitStrategyHelper;
import org.citrusframework.util.StringUtils;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.Network;
import org.testcontainers.containers.wait.strategy.Wait;
Expand Down Expand Up @@ -298,7 +299,14 @@ protected void prepareBuild() {
}

protected C buildContainer() {
C container = (C) new GenericContainer<>(image);
String imageName;
if (StringUtils.hasText(TestContainersSettings.getRegistry()) && !image.startsWith(TestContainersSettings.getDockerRegistry())) {
imageName = TestContainersSettings.getDockerRegistry() + image;
} else {
imageName = image;
}

C container = (C) new GenericContainer<>(imageName);

if (network != null) {
container.withNetwork(network);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ private LocalStackSettings() {
* @return
*/
public static String getImageName() {
return System.getProperty(IMAGE_NAME_PROPERTY,
return TestContainersSettings.getDockerRegistry() + System.getProperty(IMAGE_NAME_PROPERTY,
System.getenv(IMAGE_NAME_ENV) != null ? System.getenv(IMAGE_NAME_ENV) : IMAGE_NAME_DEFAULT);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private KafkaSettings() {
* @return
*/
public static String getImageName() {
return System.getProperty(IMAGE_NAME_PROPERTY,
return TestContainersSettings.getDockerRegistry() + System.getProperty(IMAGE_NAME_PROPERTY,
System.getenv(IMAGE_NAME_ENV) != null ? System.getenv(IMAGE_NAME_ENV) : IMAGE_NAME_DEFAULT);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ public class MongoDBSettings {
private static final String MONGODB_PROPERTY_PREFIX = TestContainersSettings.TESTCONTAINERS_PROPERTY_PREFIX + "mongodb.";
private static final String MONGODB_ENV_PREFIX = TestContainersSettings.TESTCONTAINERS_ENV_PREFIX + "MONGODB_";

private static final String IMAGE_NAME_PROPERTY = MONGODB_PROPERTY_PREFIX + "image.name";
private static final String IMAGE_NAME_ENV = MONGODB_ENV_PREFIX + "IMAGE_NAME";
private static final String IMAGE_NAME_DEFAULT = "mongo";

private static final String VERSION_PROPERTY = MONGODB_PROPERTY_PREFIX + "version";
private static final String VERSION_ENV = MONGODB_ENV_PREFIX + "VERSION";
private static final String VERSION_DEFAULT = "4.0.10";
Expand All @@ -48,6 +52,15 @@ private MongoDBSettings() {
// prevent instantiation of utility class
}

/**
* MongoDB image name setting.
* @return
*/
public static String getImageName() {
return TestContainersSettings.getDockerRegistry() + System.getProperty(IMAGE_NAME_PROPERTY,
System.getenv(IMAGE_NAME_ENV) != null ? System.getenv(IMAGE_NAME_ENV) : IMAGE_NAME_DEFAULT);
}

/**
* MongoDB version setting.
* @return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package org.citrusframework.testcontainers.mongodb;

import org.citrusframework.context.TestContext;
import org.citrusframework.kubernetes.KubernetesSupport;
import org.citrusframework.testcontainers.TestContainersSettings;
import org.citrusframework.testcontainers.actions.StartTestcontainersAction;
import org.citrusframework.testcontainers.postgresql.PostgreSQLSettings;
Expand Down Expand Up @@ -63,7 +62,7 @@ protected void prepareBuild() {
}

if (image == null) {
image("mongo");
image(MongoDBSettings.getImageName());
}

withLabel("app", "citrus");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ public class PostgreSQLSettings {
private static final String POSTGRESQL_PROPERTY_PREFIX = TestContainersSettings.TESTCONTAINERS_PROPERTY_PREFIX + "postgresql.";
private static final String POSTGRESQL_ENV_PREFIX = TestContainersSettings.TESTCONTAINERS_ENV_PREFIX + "POSTGRESQL_";

private static final String IMAGE_NAME_PROPERTY = POSTGRESQL_PROPERTY_PREFIX + "image.name";
private static final String IMAGE_NAME_ENV = POSTGRESQL_ENV_PREFIX + "IMAGE_NAME";
private static final String IMAGE_NAME_DEFAULT = "postgres";

private static final String POSTGRESQL_VERSION_PROPERTY = POSTGRESQL_PROPERTY_PREFIX + "version";
private static final String POSTGRESQL_VERSION_ENV = POSTGRESQL_ENV_PREFIX + "POSTGRESQL_VERSION";
private static final String POSTGRESQL_VERSION_DEFAULT = PostgreSQLContainer.DEFAULT_TAG;
Expand Down Expand Up @@ -60,6 +64,15 @@ private PostgreSQLSettings() {
// prevent instantiation of utility class
}

/**
* PostgreSQL image name setting.
* @return
*/
public static String getImageName() {
return TestContainersSettings.getDockerRegistry() + System.getProperty(IMAGE_NAME_PROPERTY,
System.getenv(IMAGE_NAME_ENV) != null ? System.getenv(IMAGE_NAME_ENV) : IMAGE_NAME_DEFAULT);
}

/**
* PostgreSQL service name.
* @return default service name.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import org.apache.commons.dbcp2.BasicDataSource;
import org.citrusframework.context.TestContext;
import org.citrusframework.exceptions.CitrusRuntimeException;
import org.citrusframework.kubernetes.KubernetesSupport;
import org.citrusframework.spi.Resource;
import org.citrusframework.spi.Resources;
import org.citrusframework.testcontainers.TestContainersSettings;
Expand Down Expand Up @@ -155,7 +154,7 @@ protected void prepareBuild() {
}

if (image == null) {
image("postgres");
image(PostgreSQLSettings.getImageName());
}

env.putIfAbsent("PGDATA", "/var/lib/postgresql/data/mydata");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ private RedpandaSettings() {
}

/**
* Redpanda version setting.
* Redpanda image name setting.
* @return
*/
public static String getImageName() {
return System.getProperty(IMAGE_NAME_PROPERTY,
return TestContainersSettings.getDockerRegistry() + System.getProperty(IMAGE_NAME_PROPERTY,
System.getenv(IMAGE_NAME_ENV) != null ? System.getenv(IMAGE_NAME_ENV) : IMAGE_NAME_DEFAULT);
}

Expand Down

0 comments on commit d84e512

Please sign in to comment.