All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.vality.testcontainers.annotations.minio.MinioTestcontainerFactory Maven / Gradle / Ivy

package dev.vality.testcontainers.annotations.minio;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.Synchronized;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.utility.DockerImageName;

import java.time.Duration;
import java.util.UUID;

import static dev.vality.testcontainers.annotations.util.GenericContainerUtil.getWaitStrategy;
import static dev.vality.testcontainers.annotations.util.SpringApplicationPropertiesLoader.loadDefaultLibraryProperty;

/**
 * Фабрика по созданию контейнеров
 * 

{@link #create()} создает экземпляр тестконтейнера *

{@link #getOrCreateSingletonContainer()} создает синглтон тестконтейнера *

{@link #MINIO_USER} необходимо указать в файле application.yml при необходимости другого ключа *

{@link #MINIO_PASSWORD} необходимо указать в файле application.yml при необходимости другого ключа * * @see MinioTestcontainerExtension MinioTestcontainerExtension */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class MinioTestcontainerFactory { public static final String MINIO_USER = "testcontainers.minio.user"; public static final String MINIO_PASSWORD = "testcontainers.minio.password"; private static final String MINIO_IMAGE_NAME = "quay.io/minio/minio"; private static final String TAG_PROPERTY = "testcontainers.minio.tag"; private GenericContainer minioContainer; public static GenericContainer container() { return instance().create(); } public static GenericContainer singletonContainer() { return instance().getOrCreateSingletonContainer(); } private static MinioTestcontainerFactory instance() { return SingletonHolder.INSTANCE; } @Synchronized private GenericContainer getOrCreateSingletonContainer() { if (minioContainer != null) { return minioContainer; } minioContainer = create(); return minioContainer; } private GenericContainer create() { try (GenericContainer container = new GenericContainer<>( DockerImageName .parse(MINIO_IMAGE_NAME) .withTag(loadDefaultLibraryProperty(TAG_PROPERTY))) .withExposedPorts(9000) .withNetworkAliases("minio-" + UUID.randomUUID()) .withEnv("MINIO_ROOT_USER", loadDefaultLibraryProperty(MINIO_USER)) .withEnv("MINIO_ROOT_PASSWORD", loadDefaultLibraryProperty(MINIO_PASSWORD)) .withCommand("server /data{1...12}") .waitingFor(getWaitStrategy("/minio/health/live", 200, 9000, Duration.ofMinutes(1)))) { return container; } } private static class SingletonHolder { private static final MinioTestcontainerFactory INSTANCE = new MinioTestcontainerFactory(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy