From d987545052d26ccdb659a4bde7d59ddad275ead8 Mon Sep 17 00:00:00 2001 From: David Pilato Date: Mon, 3 Feb 2020 15:53:35 +0100 Subject: [PATCH] Add withPassword(String) method to secure Elasticsearch Instead of providing env settings manually, we can simplify the usage of Elasticsearch in the context of TestContainers by just asking a password. Behind the scene, we do provide the needed env settings. --- docs/modules/elasticsearch.md | 5 ++--- .../elasticsearch/ElasticsearchContainer.java | 6 ++++++ .../elasticsearch/ElasticsearchContainerTest.java | 5 +---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/modules/elasticsearch.md b/docs/modules/elasticsearch.md index 9758410bd91..ccfbdc9094d 100644 --- a/docs/modules/elasticsearch.md +++ b/docs/modules/elasticsearch.md @@ -38,12 +38,11 @@ or set `client.transport.ignore_cluster_name` to `true`. ## Secure your Elasticsearch cluster The default distribution of Elasticsearch comes with the basic license which contains security feature. -You can turn on security by providing some extra environment settings: +You can turn on security by providing a password: ```java ElasticsearchContainer container = new ElasticsearchContainer("docker.elastic.co/elasticsearch/elasticsearch:7.5.2") - .withEnv("ELASTIC_PASSWORD", "changeme") - .withEnv("xpack.security.enabled", "true"); + .withPassword("changeme"); ``` In which case you can create the Client like this: diff --git a/modules/elasticsearch/src/main/java/org/testcontainers/elasticsearch/ElasticsearchContainer.java b/modules/elasticsearch/src/main/java/org/testcontainers/elasticsearch/ElasticsearchContainer.java index 72a2be6ff9f..5d0f327f138 100644 --- a/modules/elasticsearch/src/main/java/org/testcontainers/elasticsearch/ElasticsearchContainer.java +++ b/modules/elasticsearch/src/main/java/org/testcontainers/elasticsearch/ElasticsearchContainer.java @@ -56,6 +56,12 @@ public ElasticsearchContainer(String dockerImageName) { .withStartupTimeout(Duration.ofMinutes(2))); } + public ElasticsearchContainer withPassword(String password) { + withEnv("ELASTIC_PASSWORD", password); + withEnv("xpack.security.enabled", "true"); + return this; + } + public String getHttpHostAddress() { return getContainerIpAddress() + ":" + getMappedPort(ELASTICSEARCH_DEFAULT_PORT); } diff --git a/modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java b/modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java index 9cd1ad2dbc5..cd90f1b19fa 100644 --- a/modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java +++ b/modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java @@ -79,10 +79,7 @@ public void elasticsearchDefaultTest() throws IOException { @Test public void elasticsearchSecuredTest() throws IOException { - try (ElasticsearchContainer container = new ElasticsearchContainer() - .withEnv("ELASTIC_PASSWORD", ELASTICSEARCH_PASSWORD) - .withEnv("xpack.security.enabled", "true") - ) { + try (ElasticsearchContainer container = new ElasticsearchContainer().withPassword(ELASTICSEARCH_PASSWORD)) { container.start(); // The cluster should be secured so it must fail when we try to access / without credentials