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

dev.vality.testcontainers.annotations.opensearch.OpensearchTestcontainerFactory Maven / Gradle / Ivy

package dev.vality.testcontainers.annotations.opensearch;

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

import java.util.UUID;

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

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class OpensearchTestcontainerFactory {

    private static final String OPENSEARCH_IMAGE_NAME = "opensearchproject/opensearch";
    private static final String TAG_PROPERTY = "testcontainers.opensearch.tag";

    private GenericContainer opensearchContainer;

    public static GenericContainer container() {
        return instance().create();
    }

    public static GenericContainer singletonContainer() {
        return instance().getOrCreateSingletonContainer();
    }

    private static OpensearchTestcontainerFactory instance() {
        return SingletonHolder.INSTANCE;
    }

    @Synchronized
    private GenericContainer getOrCreateSingletonContainer() {
        if (opensearchContainer != null) {
            return opensearchContainer;
        }
        opensearchContainer = create();
        return opensearchContainer;
    }

    private GenericContainer create() {
        try (GenericContainer container = new GenericContainer<>(
                DockerImageName
                        .parse(OPENSEARCH_IMAGE_NAME)
                        .withTag(loadDefaultLibraryProperty(TAG_PROPERTY)))) {
            container.withNetworkAliases("opensearch-" + UUID.randomUUID());
            container.withExposedPorts(9200, 9600);
            container.setWaitStrategy((new HttpWaitStrategy())
                    .forPort(9200)
                    .forStatusCodeMatching(response -> response == 200 || response == 401));
            container.withEnv("discovery.type", "single-node");
            container.withEnv("DISABLE_INSTALL_DEMO_CONFIG", "true");
            container.withEnv("DISABLE_SECURITY_PLUGIN", "true");
            return container;
        }
    }

    private static class SingletonHolder {

        private static final OpensearchTestcontainerFactory INSTANCE = new OpensearchTestcontainerFactory();

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy