From b9dacc9a5eef3dd7dbb3aceec16198ea589020f4 Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Sat, 9 Jul 2022 23:40:34 +0200 Subject: [PATCH] implement getAlias variants. Original Pull Request #2213 Closes #2209 --- .../client/elc/IndicesTemplate.java | 14 ++++- .../elasticsearch/core/index/AliasData.java | 2 +- .../IndexOperationsIntegrationTests.java | 58 +++++++++++++++++++ ...lasticsearchRestTemplateConfiguration.java | 8 +++ 4 files changed, 79 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/IndicesTemplate.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/IndicesTemplate.java index 24af22171..0fa08c80c 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/IndicesTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/IndicesTemplate.java @@ -277,12 +277,22 @@ public class IndicesTemplate extends ChildTemplate i @Override public Map> getAliases(String... aliasNames) { - throw new UnsupportedOperationException("not implemented"); + + Assert.notNull(aliasNames, "aliasNames must not be null"); + + GetAliasRequest getAliasRequest = requestConverter.indicesGetAliasRequest(aliasNames, null); + var getAliasResponse = execute(client -> client.getAlias(getAliasRequest)); + return responseConverter.indicesGetAliasData(getAliasResponse); } @Override public Map> getAliasesForIndex(String... indexNames) { - throw new UnsupportedOperationException("not implemented"); + + Assert.notNull(indexNames, "indexNames must not be null"); + + GetAliasRequest getAliasRequest = requestConverter.indicesGetAliasRequest(null, indexNames); + var getAliasResponse = execute(client -> client.getAlias(getAliasRequest)); + return responseConverter.indicesGetAliasData(getAliasResponse); } @Override diff --git a/src/main/java/org/springframework/data/elasticsearch/core/index/AliasData.java b/src/main/java/org/springframework/data/elasticsearch/core/index/AliasData.java index 9403ca09f..1217c8c58 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/index/AliasData.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/index/AliasData.java @@ -71,6 +71,6 @@ public class AliasData { @Nullable public Boolean isHidden() { - return isHidden; + return Boolean.TRUE.equals(isHidden); } } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/indices/IndexOperationsIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/indices/IndexOperationsIntegrationTests.java index 17b5654a1..490937f08 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/indices/IndexOperationsIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/indices/IndexOperationsIntegrationTests.java @@ -18,6 +18,8 @@ package org.springframework.data.elasticsearch.core.indices; import static org.assertj.core.api.Assertions.*; import java.util.List; +import java.util.Map; +import java.util.Set; import org.assertj.core.api.SoftAssertions; import org.json.JSONException; @@ -120,6 +122,62 @@ public abstract class IndexOperationsIntegrationTests implements NewElasticsearc JSONAssert.assertEquals(expectedMappings, indexInformation.getMapping().toJson(), false); } + @Test // #2209 + @DisplayName("should return AliasData with getAliases method") + void shouldReturnAliasDataWithGetAliasesMethod() { + + String indexName = indexNameProvider.indexName(); + String aliasName = "testindexinformationindex"; + + AliasActionParameters parameters = AliasActionParameters.builder().withAliases(aliasName).withIndices(indexName) + .withIsHidden(false).withIsWriteIndex(false).withRouting("indexrouting").withSearchRouting("searchrouting") + .build(); + indexOperations.alias(new AliasActions(new AliasAction.Add(parameters))); + + Map> aliases = indexOperations.getAliases(aliasName); + + assertThat(aliases).hasSize(1); + Set aliasDataSet = aliases.get(indexName); + assertThat(aliasDataSet).hasSize(1); + AliasData aliasData = aliasDataSet.iterator().next(); + + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(aliasData.getAlias()).isEqualTo(aliasName); + softly.assertThat(aliasData.isHidden()).isEqualTo(false); + softly.assertThat(aliasData.isWriteIndex()).isEqualTo(false); + softly.assertThat(aliasData.getIndexRouting()).isEqualTo("indexrouting"); + softly.assertThat(aliasData.getSearchRouting()).isEqualTo("searchrouting"); + softly.assertAll(); + } + + @Test // #2209 + @DisplayName("should return AliasData with getAliasesForIndex method") + void shouldReturnAliasDataWithGetAliasesForIndexMethod() { + + String indexName = indexNameProvider.indexName(); + String aliasName = "testindexinformationindex"; + + AliasActionParameters parameters = AliasActionParameters.builder().withAliases(aliasName).withIndices(indexName) + .withIsHidden(false).withIsWriteIndex(false).withRouting("indexrouting").withSearchRouting("searchrouting") + .build(); + indexOperations.alias(new AliasActions(new AliasAction.Add(parameters))); + + Map> aliases = indexOperations.getAliasesForIndex(indexName); + + assertThat(aliases).hasSize(1); + Set aliasDataSet = aliases.get(indexName); + assertThat(aliasDataSet).hasSize(1); + AliasData aliasData = aliasDataSet.iterator().next(); + + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(aliasData.getAlias()).isEqualTo(aliasName); + softly.assertThat(aliasData.isHidden()).isEqualTo(false); + softly.assertThat(aliasData.isWriteIndex()).isEqualTo(false); + softly.assertThat(aliasData.getIndexRouting()).isEqualTo("indexrouting"); + softly.assertThat(aliasData.getSearchRouting()).isEqualTo("searchrouting"); + softly.assertAll(); + } + @Document(indexName = "#{@indexNameProvider.indexName()}") @Setting(settingPath = "settings/test-settings.json") @Mapping(mappingPath = "mappings/test-mappings.json") diff --git a/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ElasticsearchRestTemplateConfiguration.java b/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ElasticsearchRestTemplateConfiguration.java index c6918045d..aa8a109cc 100644 --- a/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ElasticsearchRestTemplateConfiguration.java +++ b/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ElasticsearchRestTemplateConfiguration.java @@ -31,6 +31,7 @@ import org.springframework.data.elasticsearch.client.erhlc.RestClients; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.RefreshPolicy; import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter; +import org.springframework.http.HttpHeaders; /** * Configuration for Spring Data Elasticsearch using {@link ElasticsearchRestTemplate}. @@ -42,6 +43,7 @@ import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverte @Configuration public class ElasticsearchRestTemplateConfiguration extends AbstractElasticsearchConfiguration { + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") @Autowired private ClusterConnectionInfo clusterConnectionInfo; @Override @@ -71,7 +73,13 @@ public class ElasticsearchRestTemplateConfiguration extends AbstractElasticsearc configurationBuilder.withBasicAuth(user, password); } + HttpHeaders defaultHeaders = new HttpHeaders(); + defaultHeaders.add("Accept", "application/vnd.elasticsearch+json;compatible-with=7"); + defaultHeaders.add("Content-Type", "application/vnd.elasticsearch+json;compatible-with=7"); + + //noinspection resource return RestClients.create(configurationBuilder // + .withDefaultHeaders(defaultHeaders) // .withConnectTimeout(Duration.ofSeconds(20)) // .withSocketTimeout(Duration.ofSeconds(20)) // .build()) //