package org.testcontainers.utility;
import com.google.common.base.MoreObjects;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
/**
* Provides a mechanism for fetching configuration/defaults from the classpath.
*/
@Data
@Slf4j @NoArgsConstructor(access = AccessLevel.PRIVATE)
public class TestcontainersConfiguration {
@Getter(lazy = true)
private static final TestcontainersConfiguration instance = loadConfiguration();
private String ambassadorContainerImage = "richnorth/ambassador:latest";
private String vncRecordedContainerImage = "richnorth/vnc-recorder:latest";
private String tinyImage = "alpine:3.2";
private static TestcontainersConfiguration loadConfiguration() {
final TestcontainersConfiguration config = new TestcontainersConfiguration();
ClassLoader loader = MoreObjects.firstNonNull(
Thread.currentThread().getContextClassLoader(),
TestcontainersConfiguration.class.getClassLoader());
final URL configOverrides = loader.getResource("testcontainers.properties");
if (configOverrides != null) {
log.debug("Testcontainers configuration overrides will be loaded from {}", configOverrides);
final Properties properties = new Properties();
try (final InputStream inputStream = configOverrides.openStream()) {
properties.load(inputStream);
config.ambassadorContainerImage = properties.getProperty("ambassador.container.image", config.ambassadorContainerImage);
config.vncRecordedContainerImage = properties.getProperty("vncrecorder.container.image", config.vncRecordedContainerImage);
config.tinyImage = properties.getProperty("tinyimage.container.image", config.tinyImage);
log.debug("Testcontainers configuration overrides loaded from {}: {}", configOverrides, config);
} catch (IOException e) {
log.error("Testcontainers config override was found on classpath but could not be loaded", e);
}
}
return config;
}
}