Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/modules/minio.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ Testcontainers can be used to automatically instantiate and manage [MinIO](https

Create a `MinIOContainer` to use it in your tests:
<!--codeinclude-->
[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
<!--/codeinclude-->

The [MinIO Java client](https://min.io/docs/minio/linux/developers/java/API.html) can be configured with the container as such:
<!--codeinclude-->
[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
<!--/codeinclude-->

If needed the username and password can be overridden as such:
<!--codeinclude-->
[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
<!--/codeinclude-->

## Adding this module to your project dependencies
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
* <li>S3: 9000</li>
* <li>Console: 9001</li>
* </ul>
*
* @deprecated use {@link org.testcontainers.minio.MinIOContainer} instead.
*/
public class MinIOContainer extends GenericContainer<MinIOContainer> {

Expand Down
Original file line number Diff line number Diff line change
@@ -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.
* <p>
* Supported image: {@code minio/minio}
* <p>
* Exposed ports:
* <ul>
* <li>S3: 9000</li>
* <li>Console: 9001</li>
* </ul>
*/
public class MinIOContainer extends GenericContainer<MinIOContainer> {

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;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.testcontainers.containers;
package org.testcontainers.minio;

import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
Expand Down