Mint is a testing framework for Minio object server, available as a podman image. It runs correctness, benchmarking and stress tests. Following are the SDKs/tools used in correctness tests.
Mint is run by podman run
command which requires Podman to be installed. For Podman installation follow the steps here.
To run Mint with Minio Play server as test target,
$ podman run -e SERVER_ENDPOINT=play.minio.io:9000 -e ACCESS_KEY=Q3AM3UQ867SPQQA43P2F \
-e SECRET_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG -e ENABLE_HTTPS=1 minio/mint
After the tests are run, output is stored in /mint/log
directory inside the container. To get these logs, use podman cp
command. For example
podman cp <container-id>:/mint/log /tmp/logs
Below environment variables are required to be passed to the podman container. Supported environment variables:
Environment variable | Description | Example |
---|---|---|
SERVER_ENDPOINT |
Endpoint of Minio server in the format HOST:PORT ; for virtual style IP:PORT |
play.minio.io:9000 |
ACCESS_KEY |
Access key for SERVER_ENDPOINT credentials |
Q3AM3UQ867SPQQA43P2F |
SECRET_KEY |
Secret Key for SERVER_ENDPOINT credentials |
zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG |
ENABLE_HTTPS |
(Optional) Set 1 to indicate to use HTTPS to access SERVER_ENDPOINT . Defaults to 0 (HTTP) |
1 |
MINT_MODE |
(Optional) Set mode indicating what category of tests to be run by values core , full . Defaults to core |
full |
DOMAIN |
(Optional) Value of MINIO_DOMAIN environment variable used in Minio server | myminio.com |
ENABLE_VIRTUAL_STYLE |
(Optional) Set 1 to indicate virtual style access . Defaults to 0 (Path style) |
1 |
RUN_ON_FAIL |
(Optional) Set 1 to indicate execute all tests independent of failures (currently implemented for minio-go and minio-java) . Defaults to 0 |
1 |
SERVER_REGION |
(Optional) Set custom region for region specific tests | us-west-1 |
To test Minio server virtual style access with Mint, follow these steps:
export MINIO_DOMAIN=myminio.com
.MINIO_DOMAIN
set to myminio.com
) using this command
$ podman run -e "SERVER_ENDPOINT=192.168.86.133:9000" -e "DOMAIN=minio.com" \
-e "ACCESS_KEY=minio" -e "SECRET_KEY=minio123" -e "ENABLE_HTTPS=0" \
-e "ENABLE_VIRTUAL_STYLE=1" minio/mint
All test logs are stored in /mint/log/log.json
as multiple JSON document. Below is the JSON format for every entry in the log file.
JSON field | Type | Description | Example |
---|---|---|---|
name |
string | Testing tool/SDK name | "aws-sdk-php" |
function |
string | Test function name | "getBucketLocation ( array $params = [] )" |
args |
object | (Optional) Key/Value map of arguments passed to test function | {"Bucket":"aws-sdk-php-bucket-20341"} |
duration |
int | Time taken in milliseconds to run the test | 384 |
status |
string | one of PASS , FAIL or NA |
"PASS" |
alert |
string | (Optional) Alert message indicating test failure | "I/O error on create file" |
message |
string | (Optional) Any log message | "validating checksum of downloaded object" |
error |
string | Detailed error message including stack trace on status FAIL |
"Error executing \"CompleteMultipartUpload\" on ... |
After making changes to Mint source code a local podman image can be built/run by
$ podman build -t minio/mint . -f Dockerfile
$ podman run -e SERVER_ENDPOINT=play.minio.io:9000 -e ACCESS_KEY=Q3AM3UQ867SPQQA43P2F \
-e SECRET_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG \
-e ENABLE_HTTPS=1 -e MINT_MODE=full minio/mint:latest
Below are the steps need to be followed
install.sh
which does installation of required tool/SDK under app directory.run.sh
in app directory under run/core
which execute actual tests.Tests may use pre-created data set to perform various object operations on Minio server. Below data files are available under /mint/data
directory.
File name | Size |
---|---|
datafile-0-b | 0B |
datafile-1-b | 1B |
datafile-1-kB | 1KiB |
datafile-10-kB | 10KiB |
datafile-33-kB | 33KiB |
datafile-100-kB | 100KiB |
datafile-1-MB | 1MiB |
datafile-1.03-MB | 1.03MiB |
datafile-5-MB | 5MiB |
datafile-6-MB | 6MiB |
datafile-10-MB | 10MiB |
datafile-11-MB | 11MiB |
datafile-65-MB | 65MiB |
datafile-129-MB | 129MiB |
In many cases, updating the SDKs or binaries in the image is just a matter of making a commit updating the corresponding version in this repo. However, in some cases, e.g. when mc
needs to be updated (the latest mc
is pulled in during each mint image build), a sort of "dummy" commit is required as an image rebuild must be triggered. Note that an empty commit does not appear to trigger the image rebuild in the Docker Hub.