# Elasticsearch Unit test using Test-containers

**URL:** https://discuss.elastic.co/t/elasticsearch-unit-test-using-test-containers/335831
**Category:** Elasticsearch
**Tags:** docker, language-clients
**Created:** [June 13, 2023, 7:52am UTC](https://discuss.elastic.co/t/elasticsearch-unit-test-using-test-containers/335831 "2023-06-13T07:52:46Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![tcpeiris](https://avatars.discourse-cdn.com/v4/letter/t/54ee81/32.png) [@tcpeiris](https://discuss.elastic.co/u/tcpeiris)
#### Post date: [June 13, 2023, 7:52am UTC](https://discuss.elastic.co/t/elasticsearch-unit-test-using-test-containers/335831/1 "2023-06-13T07:52:46Z")

</div>

```auto
@TestConfiguration
public class ESRestClientTestConfig {
    private static final String ELASTICSEARCH_VERSION = "8.7.0";
    private static final DockerImageName ELASTICSEARCH_IMAGE = DockerImageName
            .parse("docker.elastic.co/elasticsearch/elasticsearch")
            .withTag(ELASTICSEARCH_VERSION);
    /**
     * Elasticsearch default username, when secured
     */
    private static final String ELASTICSEARCH_USERNAME = "elastic";
    /**
     * Optionally activate security with a default password.
     */
    private static final String ELASTICSEARCH_PASSWORD = "changeme";
    @Container
    private static final ElasticsearchContainer container = new ElasticsearchContainer(ELASTICSEARCH_IMAGE)
            .withPassword(ELASTICSEARCH_PASSWORD);
    @Bean
    public ElasticsearchContainer elasticsearchContainer() {
        return container;
    }
    @Bean
    public ElasticsearchClient elasticsearchClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(
                AuthScope.ANY,
                new UsernamePasswordCredentials(ELASTICSEARCH_USERNAME, ELASTICSEARCH_PASSWORD));
        String protocol = container.caCertAsBytes().isPresent() ? "https://" : "http://";
        RestClient restClient = RestClient
                .builder(HttpHost.create(protocol + container.getHttpHostAddress()))
                .setHttpClientConfigCallback(httpClientBuilder -> {
                    if (container.caCertAsBytes().isPresent()) {
                        httpClientBuilder.setSSLContext(container.createSslContextFromCa());
                    }
                    return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                })
                .build();
        // Create the transport with a Jackson mapper
        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        // And create the API client
        return new ElasticsearchClient(transport);
    }
}

```

Will this test configuration works for elasticsearch test containers

I need to write unit tests for a specific class that interacts with Elasticsearch. There will be only data retrieving and I need this test configuration file to be reused.

---

<div class="post-metadata">

### Author: ![swallez](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/swallez/32/11972_2.png) [@swallez](https://discuss.elastic.co/u/swallez)
#### Post date: [June 13, 2023, 8:26am UTC](https://discuss.elastic.co/t/elasticsearch-unit-test-using-test-containers/335831/2 "2023-06-13T08:26:44Z")

</div>

> Will this test configuration works for elasticsearch test containers

Have you tested it before asking? 😉

We use TestContainers for integration tests in the Java client, you can look at [the test helper code](https://github.com/elastic/elasticsearch-java/blob/9246eabcd2a4652704e7a34ece9647f60ff69bf7/java-client/src/test/java/co/elastic/clients/elasticsearch/ElasticsearchTestServer.java#L73) to see how to use it, in particular to setup the SSL context.

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [June 13, 2023, 9:35am UTC](https://discuss.elastic.co/t/elasticsearch-unit-test-using-test-containers/335831/3 "2023-06-13T09:35:02Z")

</div>

Also look at this example in case it helps 😉

> <https://github.com/dadoonet/elasticsearch-java-client-demo/blob/main/src/test/java/fr/pilato/test/elasticsearch/hlclient/EsClientIT.java>

---

<div class="post-metadata">

### Author: ![tcpeiris](https://avatars.discourse-cdn.com/v4/letter/t/54ee81/32.png) [@tcpeiris](https://discuss.elastic.co/u/tcpeiris)
#### Post date: [June 13, 2023, 9:43am UTC](https://discuss.elastic.co/t/elasticsearch-unit-test-using-test-containers/335831/4 "2023-06-13T09:43:26Z")

</div>

Thank you 🙂 . I tried it out. But faced some issues in the Unit tests. That's why I looked for a reference to confirm whether I have taken the correct approach.

---

<div class="post-metadata">

### Author: ![tcpeiris](https://avatars.discourse-cdn.com/v4/letter/t/54ee81/32.png) [@tcpeiris](https://discuss.elastic.co/u/tcpeiris)
#### Post date: [June 13, 2023, 9:44am UTC](https://discuss.elastic.co/t/elasticsearch-unit-test-using-test-containers/335831/5 "2023-06-13T09:44:07Z")

</div>

Thank you 🙂 . Will look into it

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)
#### Post date: [July 11, 2023, 9:44am UTC](https://discuss.elastic.co/t/elasticsearch-unit-test-using-test-containers/335831/6 "2023-07-11T09:44:34Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
