diff --git a/docs/modules/minio.md b/docs/modules/minio.md index 165f760425c..0071a05c9d5 100644 --- a/docs/modules/minio.md +++ b/docs/modules/minio.md @@ -6,17 +6,17 @@ Testcontainers can be used to automatically instantiate and manage [MinIO](https Create a `MinIOContainer` to use it in your tests: -[Starting a MinIO container](../../modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java) inside_block:minioContainer +[Starting a MinIO container](../../modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java) inside_block:minioContainer The [MinIO Java client](https://min.io/docs/minio/linux/developers/java/API.html) can be configured with the container as such: -[Configuring a MinIO client](../../modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java) inside_block:configuringClient +[Configuring a MinIO client](../../modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java) inside_block:configuringClient If needed the username and password can be overridden as such: -[Overriding a MinIO container](../../modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java) inside_block:minioOverrides +[Overriding a MinIO container](../../modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java) inside_block:minioOverrides ## Adding this module to your project dependencies diff --git a/modules/minio/src/main/java/org/testcontainers/containers/MinIOContainer.java b/modules/minio/src/main/java/org/testcontainers/containers/MinIOContainer.java index dfd499194ef..1b0d668e1c8 100644 --- a/modules/minio/src/main/java/org/testcontainers/containers/MinIOContainer.java +++ b/modules/minio/src/main/java/org/testcontainers/containers/MinIOContainer.java @@ -16,6 +16,8 @@ *
  • S3: 9000
  • *
  • Console: 9001
  • * + * + * @deprecated use {@link org.testcontainers.minio.MinIOContainer} instead. */ public class MinIOContainer extends GenericContainer { diff --git a/modules/minio/src/main/java/org/testcontainers/minio/MinIOContainer.java b/modules/minio/src/main/java/org/testcontainers/minio/MinIOContainer.java new file mode 100644 index 00000000000..1ff01802830 --- /dev/null +++ b/modules/minio/src/main/java/org/testcontainers/minio/MinIOContainer.java @@ -0,0 +1,119 @@ +package org.testcontainers.minio; + +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; + +import java.time.Duration; +import java.time.temporal.ChronoUnit; + +/** + * Testcontainers implementation for MinIO. + *

    + * Supported image: {@code minio/minio} + *

    + * Exposed ports: + *

    + */ +public class MinIOContainer extends GenericContainer { + + private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("minio/minio"); + + private static final int MINIO_S3_PORT = 9000; + + private static final int MINIO_UI_PORT = 9001; + + private static final String DEFAULT_USER = "minioadmin"; + + private static final String DEFAULT_PASSWORD = "minioadmin"; + + private String userName; + + private String password; + + /** + * Constructs a MinIO container from the dockerImageName + * @param dockerImageName the full image name to use + */ + public MinIOContainer(final String dockerImageName) { + this(DockerImageName.parse(dockerImageName)); + } + + /** + * Constructs a MinIO container from the dockerImageName + * @param dockerImageName the full image name to use + */ + public MinIOContainer(final DockerImageName dockerImageName) { + super(dockerImageName); + dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME); + withExposedPorts(MINIO_S3_PORT, MINIO_UI_PORT); + withCommand("server", "--console-address", ":" + MINIO_UI_PORT, "/data"); + waitingFor( + Wait + .forHttp("/minio/health/live") + .forPort(MINIO_S3_PORT) + .withStartupTimeout(Duration.of(60, ChronoUnit.SECONDS)) + ); + } + + /** + * Overrides the DEFAULT_USER + * @param userName the Root user to override + * @return this + */ + public MinIOContainer withUserName(String userName) { + this.userName = userName; + return this; + } + + /** + * Overrides the DEFAULT_PASSWORD + * @param password the Root user's password to override + * @return this + */ + public MinIOContainer withPassword(String password) { + this.password = password; + return this; + } + + /** + * Configures the MinIO container + */ + @Override + public void configure() { + if (this.userName != null) { + addEnv("MINIO_ROOT_USER", this.userName); + } else { + this.userName = DEFAULT_USER; + } + if (this.password != null) { + addEnv("MINIO_ROOT_PASSWORD", this.password); + } else { + this.password = DEFAULT_PASSWORD; + } + } + + /** + * @return the URL to upload/download objects from + */ + public String getS3URL() { + return String.format("http://%s:%s", this.getHost(), getMappedPort(MINIO_S3_PORT)); + } + + /** + * @return the Username for the Root user + */ + public String getUserName() { + return this.userName; + } + + /** + * @return the password for the Root user + */ + public String getPassword() { + return this.password; + } +} diff --git a/modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java b/modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java similarity index 98% rename from modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java rename to modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java index 0998243de8e..5c3531042cf 100644 --- a/modules/minio/src/test/java/org/testcontainers/containers/MinIOContainerTest.java +++ b/modules/minio/src/test/java/org/testcontainers/minio/MinIOContainerTest.java @@ -1,4 +1,4 @@ -package org.testcontainers.containers; +package org.testcontainers.minio; import io.minio.BucketExistsArgs; import io.minio.MakeBucketArgs;