From 89162de6d0f1bb2ce25e1dd0ab649a671296626f Mon Sep 17 00:00:00 2001 From: Peter Nowak Date: Tue, 1 Feb 2022 14:54:26 +0100 Subject: [PATCH] Fix IllegalArgumentException when creating custom IndicesOption with empty Option or WildcardState set. Closes https://github.com/spring-projects/spring-data-elasticsearch/issues/2075 --- .../data/elasticsearch/core/RequestFactory.java | 7 ++++++- .../elasticsearch/core/RequestFactoryTests.java | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java b/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java index 333ab6ea3..a55af3538 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java @@ -118,6 +118,7 @@ * @author Farid Faoudi * @author Peer Mueller * @author Sijia Liu + * @author Peter Nowak * @since 4.0 */ class RequestFactory { @@ -1248,7 +1249,11 @@ public org.elasticsearch.action.support.IndicesOptions toElasticsearchIndicesOpt .map(it -> org.elasticsearch.action.support.IndicesOptions.WildcardStates.valueOf(it.name().toUpperCase())) .collect(Collectors.toSet()); - return new org.elasticsearch.action.support.IndicesOptions(EnumSet.copyOf(options), EnumSet.copyOf(wildcardStates)); + return new org.elasticsearch.action.support.IndicesOptions( + options.isEmpty() ? EnumSet.noneOf(org.elasticsearch.action.support.IndicesOptions.Option.class) + : EnumSet.copyOf(options), + wildcardStates.isEmpty() ? EnumSet.noneOf(org.elasticsearch.action.support.IndicesOptions.WildcardStates.class) + : EnumSet.copyOf(wildcardStates)); } // endregion diff --git a/src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java b/src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java index 772d02522..3e61fe735 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.time.Duration; import java.util.Arrays; +import java.util.EnumSet; import java.util.HashSet; import org.elasticsearch.action.DocWriteRequest; @@ -70,6 +71,7 @@ * @author Peer Mueller * @author vdisk * @author Sijia Liu + * @author Peter Nowak */ @SuppressWarnings("ConstantConditions") @ExtendWith(MockitoExtension.class) @@ -628,6 +630,20 @@ void shouldAllowSourceQueryForReindexWithoutRemote() throws IOException, JSONExc assertEquals(expected, json, false); } + @Test // #2075 + @DisplayName("should not fail on empty Option set during toElasticsearchIndicesOptions") + void shouldNotFailOnEmptyOptionsOnToElasticsearchIndicesOptions() { + assertThat(requestFactory.toElasticsearchIndicesOptions(new IndicesOptions( + EnumSet.noneOf(IndicesOptions.Option.class), EnumSet.of(IndicesOptions.WildcardStates.OPEN)))).isNotNull(); + } + + @Test // #2075 + @DisplayName("should not fail on empty WildcardState set during toElasticsearchIndicesOptions") + void shouldNotFailOnEmptyWildcardStatesOnToElasticsearchIndicesOptions() { + assertThat(requestFactory.toElasticsearchIndicesOptions(IndicesOptions.STRICT_SINGLE_INDEX_NO_EXPAND_FORBID_CLOSED)) + .isNotNull(); + } + // region entities static class Person { @Nullable