diff --git a/pom.xml b/pom.xml index a4ad2c39d..14734d8f2 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ 2.13.3 4.1.52.Final 2.6.0-SNAPSHOT - 1.15.1 + 1.15.3 1.0.6.RELEASE spring.data.elasticsearch diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 6d3489fbe..c0960ff1d 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -15,7 +15,10 @@ */ package org.springframework.data.elasticsearch.core; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import org.elasticsearch.action.ActionFuture; @@ -290,12 +293,21 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate { public List doBulkOperation(List queries, BulkOptions bulkOptions, IndexCoordinates index) { - BulkRequestBuilder bulkRequestBuilder = requestFactory.bulkRequestBuilder(client, queries, bulkOptions, index); - bulkRequestBuilder = prepareWriteRequestBuilder(bulkRequestBuilder); - final List indexedObjectInformations = checkForBulkOperationFailure( - bulkRequestBuilder.execute().actionGet()); - updateIndexedObjectsWithQueries(queries, indexedObjectInformations); - return indexedObjectInformations; + + // do it in batches; test code on some machines kills the transport node when the size gets too much + Collection> queryLists = partitionBasedOnSize(queries, 2500); + List allIndexedObjectInformations = new ArrayList<>(queries.size()); + + queryLists.forEach(queryList -> { + BulkRequestBuilder bulkRequestBuilder = requestFactory.bulkRequestBuilder(client, queryList, bulkOptions, index); + bulkRequestBuilder = prepareWriteRequestBuilder(bulkRequestBuilder); + final List indexedObjectInformations = checkForBulkOperationFailure( + bulkRequestBuilder.execute().actionGet()); + updateIndexedObjectsWithQueries(queryList, indexedObjectInformations); + allIndexedObjectInformations.addAll(indexedObjectInformations); + }); + + return allIndexedObjectInformations; } // endregion @@ -411,6 +423,11 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate { public Client getClient() { return client; } + + Collection> partitionBasedOnSize(List inputList, int size) { + final AtomicInteger counter = new AtomicInteger(0); + return inputList.stream().collect(Collectors.groupingBy(s -> counter.getAndIncrement() / size)).values(); + } // endregion /** diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java index b767fc4b0..481fcc046 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java @@ -18,10 +18,8 @@ package org.springframework.data.elasticsearch.core; import static org.assertj.core.api.Assertions.*; import static org.elasticsearch.index.query.QueryBuilders.*; import static org.skyscreamer.jsonassert.JSONAssert.*; -import static org.springframework.data.elasticsearch.annotations.FieldType.*; import static org.springframework.data.elasticsearch.utils.IdGenerator.*; -import java.lang.Object; import java.time.Duration; import java.util.Collections; import java.util.HashMap; @@ -37,16 +35,16 @@ import org.elasticsearch.search.fetch.subphase.FetchSourceContext; import org.json.JSONException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.springframework.data.annotation.Id; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.data.elasticsearch.UncategorizedElasticsearchException; -import org.springframework.data.elasticsearch.annotations.Document; -import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.UpdateQuery; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration; -import org.springframework.lang.Nullable; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.test.context.ContextConfiguration; /** @@ -64,10 +62,19 @@ import org.springframework.test.context.ContextConfiguration; * @author Peter-Josef Meisch * @author Farid Faoudi */ -@ContextConfiguration(classes = { ElasticsearchRestTemplateConfiguration.class }) +@ContextConfiguration(classes = { ElasticsearchRestTemplateTests.Config.class }) @DisplayName("ElasticsearchRestTemplate") public class ElasticsearchRestTemplateTests extends ElasticsearchTemplateTests { + @Configuration + @Import({ ElasticsearchRestTemplateConfiguration.class }) + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("rest-template"); + } + } + @Test public void shouldThrowExceptionIfDocumentDoesNotExistWhileDoingPartialUpdate() { @@ -75,35 +82,10 @@ public class ElasticsearchRestTemplateTests extends ElasticsearchTemplateTests { org.springframework.data.elasticsearch.core.document.Document document = org.springframework.data.elasticsearch.core.document.Document .create(); UpdateQuery updateQuery = UpdateQuery.builder(nextIdAsString()).withDocument(document).build(); - assertThatThrownBy(() -> operations.update(updateQuery, index)) + assertThatThrownBy(() -> operations.update(updateQuery, IndexCoordinates.of(indexNameProvider.indexName()))) .isInstanceOf(UncategorizedElasticsearchException.class); } - @Document(indexName = "test-index-sample-core-rest-template") - static class SampleEntity { - @Nullable @Id private String id; - @Nullable - @Field(type = Text, store = true, fielddata = true) private String type; - - @Nullable - public String getId() { - return id; - } - - public void setId(@Nullable String id) { - this.id = id; - } - - @Nullable - public String getType() { - return type; - } - - public void setType(@Nullable String type) { - this.type = type; - } - } - @Test // DATAES-768 void shouldUseAllOptionsFromUpdateQuery() { Map doc = new HashMap<>(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java index 1e9b4a27a..831de08e8 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -65,6 +65,7 @@ import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.InvalidDataAccessApiUsageException; @@ -74,7 +75,6 @@ import org.springframework.data.annotation.Version; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.domain.Sort.Order; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; @@ -94,6 +94,7 @@ import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.*; import org.springframework.data.elasticsearch.core.query.RescorerQuery.ScoreMode; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.data.util.StreamUtils; import org.springframework.lang.Nullable; @@ -127,35 +128,27 @@ import org.springframework.lang.Nullable; @SpringIntegrationTest public abstract class ElasticsearchTemplateTests { - protected static final String INDEX_NAME_JOIN_SAMPLE_ENTITY = "test-index-sample-join-template"; - private static final String INDEX_NAME_SAMPLE_ENTITY = "test-index-sample-core-template"; private static final String INDEX_1_NAME = "test-index-1"; private static final String INDEX_2_NAME = "test-index-2"; private static final String INDEX_3_NAME = "test-index-3"; - protected final IndexCoordinates index = IndexCoordinates.of(INDEX_NAME_SAMPLE_ENTITY); + @Autowired protected ElasticsearchOperations operations; - protected IndexOperations indexOperations; + private IndexOperations indexOperations; + + @Autowired protected IndexNameProvider indexNameProvider; @BeforeEach public void before() { + + indexNameProvider.increment(); indexOperations = operations.indexOps(SampleEntity.class); + indexOperations.createWithMapping(); + } + @Test + @Order(java.lang.Integer.MAX_VALUE) + void cleanup() { operations.indexOps(IndexCoordinates.of("*")).delete(); - - indexOperations.create(); - indexOperations.putMapping(SampleEntity.class); - - IndexOperations indexOpsSampleEntityUUIDKeyed = operations.indexOps(SampleEntityUUIDKeyed.class); - indexOpsSampleEntityUUIDKeyed.create(); - indexOpsSampleEntityUUIDKeyed.putMapping(SampleEntityUUIDKeyed.class); - - IndexOperations indexOpsSearchHitsEntity = operations.indexOps(SearchHitsEntity.class); - indexOpsSearchHitsEntity.create(); - indexOpsSearchHitsEntity.putMapping(SearchHitsEntity.class); - - IndexOperations indexOpsJoinEntity = operations.indexOps(SampleJoinEntity.class); - indexOpsJoinEntity.create(); - indexOpsJoinEntity.putMapping(SampleJoinEntity.class); } @Test // DATAES-106 @@ -167,13 +160,14 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); // when - long count = operations.count(criteriaQuery, SampleEntity.class, index); + long count = operations.count(criteriaQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(count).isEqualTo(1); @@ -188,14 +182,14 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + ; NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); // when - long count = operations.count(searchQuery, SampleEntity.class, index); + long count = operations.count(searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(count).isEqualTo(1); } @@ -208,10 +202,11 @@ public abstract class ElasticsearchTemplateTests { SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message") .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); // when - SampleEntity sampleEntity1 = operations.get(documentId, SampleEntity.class, index); + SampleEntity sampleEntity1 = operations.get(documentId, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntity1).isEqualTo(sampleEntity); @@ -233,12 +228,12 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when NativeSearchQuery query = new NativeSearchQueryBuilder().withIds(Arrays.asList(documentId, documentId2)).build(); - List> sampleEntities = operations.multiGet(query, SampleEntity.class, index); + List> sampleEntities = operations.multiGet(query, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntities).hasSize(2); @@ -262,15 +257,15 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when List idsToSearch = Arrays.asList(documentId, nextIdAsString(), documentId2); assertThat(idsToSearch).hasSize(3); NativeSearchQuery query = new NativeSearchQueryBuilder().withIds(idsToSearch).build(); - List> sampleEntities = operations.multiGet(query, SampleEntity.class, index); + List> sampleEntities = operations.multiGet(query, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntities).hasSize(3); @@ -309,13 +304,13 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when NativeSearchQuery query = new NativeSearchQueryBuilder().withIds(Arrays.asList(documentId, documentId2)) .withFields("message", "type").build(); - List> sampleEntities = operations.multiGet(query, SampleEntity.class, index); + List> sampleEntities = operations.multiGet(query, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntities).hasSize(2); @@ -331,13 +326,13 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits).isNotNull(); @@ -355,14 +350,14 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQueryWithValidPreference = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPreference("_local").build(); // when - SearchHits searchHits = operations.search(searchQueryWithValidPreference, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQueryWithValidPreference, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits).isNotNull(); @@ -379,15 +374,14 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQueryWithInvalidPreference = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPreference("_only_nodes:oops").build(); // when - assertThatThrownBy(() -> operations.search(searchQueryWithInvalidPreference, SampleEntity.class, index)) - .isInstanceOf(Exception.class); + assertThatThrownBy(() -> operations.search(searchQueryWithInvalidPreference, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName()))).isInstanceOf(Exception.class); } @Test // DATAES-422 - Add support for IndicesOptions in search queries @@ -432,13 +426,13 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(2); @@ -457,8 +451,7 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); org.springframework.data.elasticsearch.core.document.Document document = org.springframework.data.elasticsearch.core.document.Document .create(); @@ -471,10 +464,11 @@ public abstract class ElasticsearchTemplateTests { queries.add(updateQuery); // when - operations.bulkUpdate(queries, index); + operations.bulkUpdate(queries, IndexCoordinates.of(indexNameProvider.indexName())); // then - SampleEntity indexedEntity = operations.get(documentId, SampleEntity.class, index); + SampleEntity indexedEntity = operations.get(documentId, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(indexedEntity.getMessage()).isEqualTo(messageAfterUpdate); } @@ -488,15 +482,15 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); // when - operations.delete(documentId, index); - indexOperations.refresh(); + operations.delete(documentId, IndexCoordinates.of(indexNameProvider.indexName())); // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(0); } @@ -511,15 +505,15 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); // when - operations.delete(documentId, index); - indexOperations.refresh(); + operations.delete(documentId, IndexCoordinates.of(indexNameProvider.indexName())); // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build(); - SearchHits sampleEntities = operations.search(searchQuery, SampleEntity.class, index); + SearchHits sampleEntities = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(sampleEntities.getTotalHits()).isEqualTo(0); } @@ -533,17 +527,16 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); // when Query query = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build(); - operations.delete(query, SampleEntity.class, index); - indexOperations.refresh(); + operations.delete(query, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(0); } @@ -621,14 +614,14 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withFilter(boolQuery().filter(termQuery("id", documentId))).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(1); @@ -656,14 +649,14 @@ public abstract class ElasticsearchTemplateTests { indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withSort(new FieldSortBuilder("rate").order(SortOrder.ASC)).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(3); @@ -692,15 +685,15 @@ public abstract class ElasticsearchTemplateTests { indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withSort(new FieldSortBuilder("rate").order(SortOrder.ASC)) .withSort(new FieldSortBuilder("message").order(SortOrder.ASC)).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(3); @@ -731,14 +724,14 @@ public abstract class ElasticsearchTemplateTests { indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPageable(PageRequest.of(0, 10, Sort.by(Sort.Order.asc("message").nullsFirst()))).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(3); @@ -769,14 +762,14 @@ public abstract class ElasticsearchTemplateTests { indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPageable(PageRequest.of(0, 10, Sort.by(Sort.Order.asc("message").nullsLast()))).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(3); @@ -793,8 +786,7 @@ public abstract class ElasticsearchTemplateTests { SampleEntity.builder().id("2").message("yellow green").build(), // SampleEntity.builder().id("3").message("blue").build()); - operations.bulkIndex(getIndexQueries(entities), index); - indexOperations.refresh(); + operations.bulkIndex(getIndexQueries(entities), IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() // .withQuery(matchQuery("message", "green")) // @@ -802,7 +794,8 @@ public abstract class ElasticsearchTemplateTests { .build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(2); @@ -820,13 +813,13 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); StringQuery stringQuery = new StringQuery(matchAllQuery().toString()); // when - SearchHits searchHits = operations.search(stringQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(stringQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(1); @@ -847,8 +840,7 @@ public abstract class ElasticsearchTemplateTests { indexQuery.setId(documentId); indexQuery.setObject(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); Map params = new HashMap<>(); params.put("factor", 2); @@ -857,7 +849,8 @@ public abstract class ElasticsearchTemplateTests { NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withScriptField( new ScriptField("scriptedRate", new Script(ScriptType.INLINE, "expression", "doc['rate'] * factor", params))) .build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(1); @@ -874,13 +867,13 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); StringQuery stringQuery = new StringQuery(matchAllQuery().toString(), PageRequest.of(0, 10)); // when - SearchHits searchHits = operations.search(stringQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(stringQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1); @@ -900,14 +893,14 @@ public abstract class ElasticsearchTemplateTests { indexQuery.setId(documentId); indexQuery.setObject(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); StringQuery stringQuery = new StringQuery(matchAllQuery().toString(), PageRequest.of(0, 10), - Sort.by(Order.asc("message"))); + Sort.by(Sort.Order.asc("message"))); // when - SearchHits searchHits = operations.search(stringQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(stringQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1); @@ -923,13 +916,13 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); StringQuery stringQuery = new StringQuery(termQuery("id", documentId).toString()); // when - SearchHit sampleEntity1 = operations.searchOne(stringQuery, SampleEntity.class, index); + SearchHit sampleEntity1 = operations.searchOne(stringQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntity1).isNotNull(); @@ -958,12 +951,13 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("test")); // when - SearchHit sampleEntity1 = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit sampleEntity1 = operations.searchOne(criteriaQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntity1).isNotNull(); @@ -979,17 +973,17 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("test")); // when - operations.delete(criteriaQuery, SampleEntity.class, index); - indexOperations.refresh(); + operations.delete(criteriaQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); // then StringQuery stringQuery = new StringQuery(matchAllQuery().toString()); - SearchHits sampleEntities = operations.search(stringQuery, SampleEntity.class, index); + SearchHits sampleEntities = operations.search(stringQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(sampleEntities).isEmpty(); } @@ -1005,8 +999,7 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); FetchSourceFilterBuilder sourceFilter = new FetchSourceFilterBuilder(); sourceFilter.withIncludes("message"); @@ -1015,7 +1008,8 @@ public abstract class ElasticsearchTemplateTests { .withSourceFilter(sourceFilter.build()).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits).isNotNull(); @@ -1039,15 +1033,14 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); String documentId2 = nextIdAsString(); operations.index( getIndexQuery( SampleEntity.builder().id(documentId2).message(sampleMessage).version(System.currentTimeMillis()).build()), - index); - indexOperations.refresh(); + IndexCoordinates.of(indexNameProvider.indexName())); MoreLikeThisQuery moreLikeThisQuery = new MoreLikeThisQuery(); moreLikeThisQuery.setId(documentId2); @@ -1055,7 +1048,8 @@ public abstract class ElasticsearchTemplateTests { moreLikeThisQuery.setMinDocFreq(1); // when - SearchHits searchHits = operations.search(moreLikeThisQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(moreLikeThisQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(1); @@ -1079,8 +1073,7 @@ public abstract class ElasticsearchTemplateTests { ids.stream() .map(id -> getIndexQuery( SampleEntity.builder().id(id).message(sampleMessage).version(System.currentTimeMillis()).build())) - .forEach(indexQuery -> operations.index(indexQuery, index)); - indexOperations.refresh(); + .forEach(indexQuery -> operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName()))); MoreLikeThisQuery moreLikeThisQuery = new MoreLikeThisQuery(); moreLikeThisQuery.setId(referenceId); @@ -1088,7 +1081,8 @@ public abstract class ElasticsearchTemplateTests { moreLikeThisQuery.setMinDocFreq(1); moreLikeThisQuery.setPageable(PageRequest.of(0, 5)); - SearchHits searchHits = operations.search(moreLikeThisQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(moreLikeThisQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(10); assertThat(searchHits.getSearchHits()).hasSize(5); @@ -1098,7 +1092,8 @@ public abstract class ElasticsearchTemplateTests { moreLikeThisQuery.setPageable(PageRequest.of(1, 5)); - searchHits = operations.search(moreLikeThisQuery, SampleEntity.class, index); + searchHits = operations.search(moreLikeThisQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(10); assertThat(searchHits.getSearchHits()).hasSize(5); @@ -1116,20 +1111,19 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 30); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); criteriaQuery.setPageable(PageRequest.of(0, 10)); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - criteriaQuery, SampleEntity.class, index); + criteriaQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scroll.getScrollId(), 1000, - SampleEntity.class, index); + SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scroll.getScrollId()); assertThat(sampleEntities).hasSize(30); @@ -1142,8 +1136,7 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 30); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then @@ -1151,12 +1144,12 @@ public abstract class ElasticsearchTemplateTests { .withPageable(PageRequest.of(0, 10)).build(); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - searchQuery, SampleEntity.class, index); + searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scroll.getScrollId(), 1000, - SampleEntity.class, index); + SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scroll.getScrollId()); assertThat(sampleEntities).hasSize(30); @@ -1169,8 +1162,7 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 30); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); @@ -1178,14 +1170,14 @@ public abstract class ElasticsearchTemplateTests { criteriaQuery.setPageable(PageRequest.of(0, 10)); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - criteriaQuery, SampleEntity.class, index); + criteriaQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); String scrollId = scroll.getScrollId(); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scrollId = scroll.getScrollId(); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scrollId, 1000, SampleEntity.class, - index); + IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scrollId); assertThat(sampleEntities).hasSize(30); @@ -1198,22 +1190,21 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 30); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withFields("message") .withQuery(matchAllQuery()).withPageable(PageRequest.of(0, 10)).build(); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - searchQuery, SampleEntity.class, index); + searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); String scrollId = scroll.getScrollId(); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scrollId = scroll.getScrollId(); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scrollId, 1000, SampleEntity.class, - index); + IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scrollId); assertThat(sampleEntities).hasSize(30); @@ -1226,22 +1217,21 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 30); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); criteriaQuery.setPageable(PageRequest.of(0, 10)); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - criteriaQuery, SampleEntity.class, index); + criteriaQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); String scrollId = scroll.getScrollId(); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scrollId = scroll.getScrollId(); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scrollId, 1000, SampleEntity.class, - index); + IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scrollId); assertThat(sampleEntities).hasSize(30); @@ -1254,22 +1244,21 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 30); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPageable(PageRequest.of(0, 10)).build(); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - searchQuery, SampleEntity.class, index); + searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); String scrollId = scroll.getScrollId(); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scrollId = scroll.getScrollId(); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scrollId, 1000, SampleEntity.class, - index); + IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scrollId); assertThat(sampleEntities).hasSize(30); @@ -1282,22 +1271,21 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 30); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); criteriaQuery.setPageable(PageRequest.of(0, 10)); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - criteriaQuery, SampleEntity.class, index); + criteriaQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); String scrollId = scroll.getScrollId(); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scrollId = scroll.getScrollId(); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scrollId, 1000, SampleEntity.class, - index); + IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scrollId); assertThat(sampleEntities).hasSize(30); @@ -1310,22 +1298,21 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 30); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPageable(PageRequest.of(0, 10)).build(); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - searchQuery, SampleEntity.class, index); + searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); String scrollId = scroll.getScrollId(); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scrollId = scroll.getScrollId(); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scrollId, 1000, SampleEntity.class, - index); + IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scrollId); assertThat(sampleEntities).hasSize(30); @@ -1334,13 +1321,14 @@ public abstract class ElasticsearchTemplateTests { @Test // DATAES-167, DATAES-831 public void shouldReturnAllResultsWithStreamForGivenCriteriaQuery() { - operations.bulkIndex(createSampleEntitiesWithMessage("Test message", 30), index); - indexOperations.refresh(); + operations.bulkIndex(createSampleEntitiesWithMessage("Test message", 30), + IndexCoordinates.of(indexNameProvider.indexName())); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); criteriaQuery.setPageable(PageRequest.of(0, 10)); - long count = StreamUtils - .createStreamFromIterator(operations.searchForStream(criteriaQuery, SampleEntity.class, index)).count(); + long count = StreamUtils.createStreamFromIterator(operations.searchForStream(criteriaQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName()))).count(); assertThat(count).isEqualTo(30); } @@ -1348,14 +1336,14 @@ public abstract class ElasticsearchTemplateTests { @Test // DATAES-831 void shouldLimitStreamResultToRequestedSize() { - operations.bulkIndex(createSampleEntitiesWithMessage("Test message", 30), index); - indexOperations.refresh(); + operations.bulkIndex(createSampleEntitiesWithMessage("Test message", 30), + IndexCoordinates.of(indexNameProvider.indexName())); CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); criteriaQuery.setMaxResults(10); - long count = StreamUtils - .createStreamFromIterator(operations.searchForStream(criteriaQuery, SampleEntity.class, index)).count(); + long count = StreamUtils.createStreamFromIterator(operations.searchForStream(criteriaQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName()))).count(); assertThat(count).isEqualTo(10); } @@ -1400,16 +1388,15 @@ public abstract class ElasticsearchTemplateTests { indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3)); // when - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); CriteriaQuery singleCriteriaQuery = new CriteriaQuery(new Criteria("message").contains("test")); CriteriaQuery multipleCriteriaQuery = new CriteriaQuery( new Criteria("message").contains("some").and("message").contains("message")); SearchHits sampleEntitiesForSingleCriteria = operations.search(singleCriteriaQuery, - SampleEntity.class, index); + SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); SearchHits sampleEntitiesForAndCriteria = operations.search(multipleCriteriaQuery, SampleEntity.class, - index); + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntitiesForSingleCriteria).hasSize(2); assertThat(sampleEntitiesForAndCriteria).hasSize(1); @@ -1437,11 +1424,11 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3)); // when - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); StringQuery stringQuery = new StringQuery(matchAllQuery().toString()); - SearchHits sampleEntities = operations.search(stringQuery, SampleEntity.class, index); + SearchHits sampleEntities = operations.search(stringQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntities).hasSize(3); @@ -1482,12 +1469,14 @@ public abstract class ElasticsearchTemplateTests { @DisplayName("should read mappings from alias") void shouldReadMappingsFromAlias() { - String aliasName = INDEX_NAME_SAMPLE_ENTITY + "alias"; + String indexName = indexNameProvider.indexName(); + String aliasName = "alias-" + indexName; + indexOperations.alias( // new AliasActions( // new AliasAction.Add( // AliasActionParameters.builder() // - .withIndices(INDEX_NAME_SAMPLE_ENTITY) // + .withIndices(indexName) // .withAliases(aliasName) // .build()) // ) // @@ -1528,8 +1517,7 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); org.springframework.data.elasticsearch.core.document.Document document = org.springframework.data.elasticsearch.core.document.Document .create(); @@ -1539,10 +1527,11 @@ public abstract class ElasticsearchTemplateTests { .build(); // when - operations.update(updateQuery, index); + operations.update(updateQuery, IndexCoordinates.of(indexNameProvider.indexName())); // then - SampleEntity indexedEntity = operations.get(documentId, SampleEntity.class, index); + SampleEntity indexedEntity = operations.get(documentId, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(indexedEntity.getMessage()).isEqualTo(messageAfterUpdate); } @@ -1558,8 +1547,7 @@ public abstract class ElasticsearchTemplateTests { final IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); final NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); @@ -1570,10 +1558,11 @@ public abstract class ElasticsearchTemplateTests { .build(); // when - operations.updateByQuery(updateQuery, index); + operations.updateByQuery(updateQuery, IndexCoordinates.of(indexNameProvider.indexName())); // then - SampleEntity indexedEntity = operations.get(documentId, SampleEntity.class, index); + SampleEntity indexedEntity = operations.get(documentId, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(indexedEntity.getMessage()).isEqualTo(messageAfterUpdate); } @@ -1638,10 +1627,11 @@ public abstract class ElasticsearchTemplateTests { .build(); // when - operations.update(updateQuery, index); + operations.update(updateQuery, IndexCoordinates.of(indexNameProvider.indexName())); // then - SampleEntity indexedEntity = operations.get(documentId, SampleEntity.class, index); + SampleEntity indexedEntity = operations.get(documentId, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(indexedEntity.getMessage()).isEqualTo("test message"); } @@ -1658,7 +1648,6 @@ public abstract class ElasticsearchTemplateTests { IndexCoordinates index = IndexCoordinates.of(INDEX_1_NAME); operations.index(idxQuery, index); - operations.indexOps(index).refresh(); // when NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) @@ -1691,8 +1680,7 @@ public abstract class ElasticsearchTemplateTests { indexQueries.add(buildIndex(SampleEntity.builder().id("2").message("bc").build())); indexQueries.add(buildIndex(SampleEntity.builder().id("3").message("ac").build())); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when List queries = new ArrayList<>(); @@ -1702,7 +1690,8 @@ public abstract class ElasticsearchTemplateTests { queries.add(new NativeSearchQueryBuilder().withQuery(termQuery("message", "ac")).build()); // then - List> searchHits = operations.multiSearch(queries, SampleEntity.class, index); + List> searchHits = operations.multiSearch(queries, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); for (SearchHits sampleEntity : searchHits) { assertThat(sampleEntity.getTotalHits()).isEqualTo(1); } @@ -1721,9 +1710,10 @@ public abstract class ElasticsearchTemplateTests { IndexCoordinates bookIndex = IndexCoordinates.of("test-index-book-core-template"); - operations.index(buildIndex(SampleEntity.builder().id("1").message("ab").build()), index); + operations.index(buildIndex(SampleEntity.builder().id("1").message("ab").build()), + IndexCoordinates.of(indexNameProvider.indexName())); operations.index(buildIndex(Book.builder().id("2").description("bc").build()), bookIndex); - indexOperations.refresh(); + bookIndexOperations.refresh(); // when @@ -1732,7 +1722,7 @@ public abstract class ElasticsearchTemplateTests { queries.add(new NativeSearchQueryBuilder().withQuery(termQuery("description", "bc")).build()); List> searchHitsList = operations.multiSearch(queries, Lists.newArrayList(SampleEntity.class, clazz), - IndexCoordinates.of(index.getIndexName(), bookIndex.getIndexName())); + IndexCoordinates.of(indexNameProvider.indexName(), bookIndex.getIndexName())); // then SearchHits searchHits0 = searchHitsList.get(0); @@ -1745,30 +1735,6 @@ public abstract class ElasticsearchTemplateTests { assertThat(searchHit1.getContent().getClass()).isEqualTo(clazz); } - @Test - public void shouldDeleteDocumentBySpecifiedTypeUsingDeleteQuery() { - - // given - String documentId = nextIdAsString(); - SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message") - .version(System.currentTimeMillis()).build(); - - IndexQuery indexQuery = getIndexQuery(sampleEntity); - - operations.index(indexQuery, index); - indexOperations.refresh(); - - // when - Query query = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build(); - operations.delete(query, SampleEntity.class, index); - operations.indexOps(IndexCoordinates.of(INDEX_NAME_SAMPLE_ENTITY)).refresh(); - - // then - NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); - assertThat(searchHits.getTotalHits()).isEqualTo(0); - } - @Test public void shouldIndexDocumentForSpecifiedSource() { @@ -1779,8 +1745,9 @@ public abstract class ElasticsearchTemplateTests { indexQuery.setSource(documentSource); // when - operations.index(indexQuery, IndexCoordinates.of(INDEX_NAME_SAMPLE_ENTITY)); - indexOperations.refresh(); + IndexCoordinates index = IndexCoordinates.of(indexNameProvider.indexName()); + operations.index(indexQuery, index); + NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", indexQuery.getId())) .build(); @@ -1799,7 +1766,7 @@ public abstract class ElasticsearchTemplateTests { indexQuery.setId("2333343434"); // when - assertThatThrownBy(() -> operations.index(indexQuery, IndexCoordinates.of(INDEX_NAME_SAMPLE_ENTITY))) + assertThatThrownBy(() -> operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName()))) .isInstanceOf(InvalidDataAccessApiUsageException.class); } @@ -1808,15 +1775,16 @@ public abstract class ElasticsearchTemplateTests { // given List entities = createSampleEntitiesWithMessage("Test message", 3); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + String indexName = indexNameProvider.indexName(); + operations.bulkIndex(entities, IndexCoordinates.of(indexName)); + NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("message", "message")) .withPageable(PageRequest.of(0, 100)).build(); // then SearchHits searchHits = operations.search(searchQuery, SampleEntity.class); searchHits.forEach(searchHit -> { - assertThat(searchHit.getIndex()).isEqualTo(INDEX_NAME_SAMPLE_ENTITY); + assertThat(searchHit.getIndex()).isEqualTo(indexName); }); } @@ -1829,15 +1797,15 @@ public abstract class ElasticsearchTemplateTests { indexQueries.add(buildIndex(SampleEntity.builder().id("2").message("bc").build())); indexQueries.add(buildIndex(SampleEntity.builder().id("3").message("ac").build())); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(boolQuery().must(wildcardQuery("message", "*a*")).should(wildcardQuery("message", "*b*"))) .withMinScore(2.0F).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getTotalHits()).isEqualTo(1); @@ -1854,14 +1822,14 @@ public abstract class ElasticsearchTemplateTests { indexQueries.add(buildIndex(SampleEntity.builder().id("2").message("bc").build())); indexQueries.add(buildIndex(SampleEntity.builder().id("3").message("ac xz hi").build())); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("message", "xz")) .withSort(SortBuilders.fieldSort("message")).withTrackScores(true).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits.getMaxScore()).isGreaterThan(0f); @@ -1881,12 +1849,13 @@ public abstract class ElasticsearchTemplateTests { indexQuery.setObject(sampleEntity); // when - String documentId = operations.index(indexQuery, index); + String documentId = operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(sampleEntity.getId()).isEqualTo(documentId); - SampleEntity result = operations.get(documentId, SampleEntity.class, index); + SampleEntity result = operations.get(documentId, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(result.getId()).isEqualTo(documentId); } @@ -1914,12 +1883,12 @@ public abstract class ElasticsearchTemplateTests { indexQueries.add(indexQuery2); // when - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(2); @@ -1958,12 +1927,12 @@ public abstract class ElasticsearchTemplateTests { indexQueries.add(indexQuery2); // when - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); - SearchHits searchHits = operations.search(searchQuery, Map.class, index); + SearchHits searchHits = operations.search(searchQuery, Map.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(2); assertThat(searchHits.getSearchHit(0).getContent().get("userId")).isEqualTo(person1.get("userId")); @@ -1984,8 +1953,8 @@ public abstract class ElasticsearchTemplateTests { IndexQueryBuilder indexQueryBuilder = new IndexQueryBuilder().withId(documentId).withVersion(entity.getVersion()) .withObject(entity); + IndexCoordinates index = IndexCoordinates.of(indexNameProvider.indexName()); operations.index(indexQueryBuilder.build(), index); - indexOperations.refresh(); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); // when @@ -1996,7 +1965,6 @@ public abstract class ElasticsearchTemplateTests { // reindex with same version operations.index(indexQueryBuilder.build(), index); - operations.indexOps(IndexCoordinates.of(INDEX_NAME_SAMPLE_ENTITY)).refresh(); // reindex with version one below assertThatThrownBy(() -> operations.index(indexQueryBuilder.withVersion(entity.getVersion() - 1).build(), index)) @@ -2004,7 +1972,9 @@ public abstract class ElasticsearchTemplateTests { } @Test - public void shouldIndexSampleEntityWithIndexAndTypeAtRuntime() { + public void shouldIndexSampleEntityWithIndexAtRuntime() { + + String indexName = "custom-" + indexNameProvider.indexName(); // given String documentId = nextIdAsString(); @@ -2013,13 +1983,13 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery = new IndexQueryBuilder().withId(documentId).withObject(sampleEntity).build(); - operations.index(indexQuery, IndexCoordinates.of(INDEX_NAME_SAMPLE_ENTITY)); - operations.indexOps(IndexCoordinates.of(INDEX_NAME_SAMPLE_ENTITY)).refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexName)); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexName)); // then assertThat(searchHits).isNotNull(); @@ -2035,12 +2005,13 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); // when - long count = operations.count(criteriaQuery, SampleEntity.class, index); + long count = operations.count(criteriaQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(count).isEqualTo(1); @@ -2055,12 +2026,12 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); // when - long count = operations.count(searchQuery, SampleEntity.class, index); + long count = operations.count(searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(count).isEqualTo(1); @@ -2075,12 +2046,12 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); // when - long count = operations.count(criteriaQuery, index); + long count = operations.count(criteriaQuery, IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(count).isEqualTo(1); @@ -2095,12 +2066,12 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); // when - long count = operations.count(searchQuery, index); + long count = operations.count(searchQuery, IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(count).isEqualTo(1); @@ -2278,8 +2249,8 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()); // when @@ -2296,8 +2267,8 @@ public abstract class ElasticsearchTemplateTests { .version(System.currentTimeMillis()).build(); IndexQuery indexQuery = getIndexQuery(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); + NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); // when @@ -2363,11 +2334,10 @@ public abstract class ElasticsearchTemplateTests { indexOperations.delete(); indexOperations.create(parse(settings)); indexOperations.putMapping(SampleEntity.class); - indexOperations.refresh(); // then Map map = indexOperations.getSettings(); - assertThat(operations.indexOps(IndexCoordinates.of(INDEX_NAME_SAMPLE_ENTITY)).exists()).isTrue(); + assertThat(operations.indexOps(IndexCoordinates.of(indexNameProvider.indexName())).exists()).isTrue(); assertThat(map.containsKey("index.number_of_replicas")).isTrue(); assertThat(map.containsKey("index.number_of_shards")).isTrue(); assertThat((String) map.get("index.number_of_replicas")).isEqualTo("0"); @@ -2376,8 +2346,11 @@ public abstract class ElasticsearchTemplateTests { @Test public void shouldTestResultsAcrossMultipleIndices() { + IndexCoordinates index1 = IndexCoordinates.of(INDEX_1_NAME); + IndexCoordinates index2 = IndexCoordinates.of(INDEX_2_NAME); + operations.indexOps(index1).delete(); + operations.indexOps(index2).delete(); - // given String documentId1 = nextIdAsString(); SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId1).message("some message") .version(System.currentTimeMillis()).build(); @@ -2390,10 +2363,8 @@ public abstract class ElasticsearchTemplateTests { IndexQuery indexQuery2 = new IndexQueryBuilder().withId(sampleEntity2.getId()).withObject(sampleEntity2).build(); - operations.index(indexQuery1, IndexCoordinates.of(INDEX_1_NAME)); - operations.index(indexQuery2, IndexCoordinates.of(INDEX_2_NAME)); - operations.indexOps(IndexCoordinates.of(INDEX_1_NAME)).refresh(); - operations.indexOps(IndexCoordinates.of(INDEX_2_NAME)).refresh(); + operations.index(indexQuery1, index1); + operations.index(indexQuery2, index2); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); @@ -2411,17 +2382,19 @@ public abstract class ElasticsearchTemplateTests { */ public void shouldComposeObjectsReturnedFromHeterogeneousIndexes() { - // given + IndexCoordinates index1 = IndexCoordinates.of(INDEX_1_NAME); + IndexCoordinates index2 = IndexCoordinates.of(INDEX_2_NAME); + operations.indexOps(index1).delete(); + operations.indexOps(index2).delete(); + HetroEntity1 entity1 = new HetroEntity1(nextIdAsString(), "aFirstName"); HetroEntity2 entity2 = new HetroEntity2(nextIdAsString(), "aLastName"); IndexQuery indexQuery1 = new IndexQueryBuilder().withId(entity1.getId()).withObject(entity1).build(); IndexQuery indexQuery2 = new IndexQueryBuilder().withId(entity2.getId()).withObject(entity2).build(); - operations.index(indexQuery1, IndexCoordinates.of(INDEX_1_NAME)); - operations.index(indexQuery2, IndexCoordinates.of(INDEX_2_NAME)); - operations.indexOps(IndexCoordinates.of(INDEX_1_NAME)).refresh(); - operations.indexOps(IndexCoordinates.of(INDEX_2_NAME)).refresh(); + operations.index(indexQuery1, index1); + operations.index(indexQuery2, index2); // when NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); @@ -2474,18 +2447,17 @@ public abstract class ElasticsearchTemplateTests { String remainingDocumentId = UUID.randomUUID().toString(); indexQueries.add(getIndexQuery(SampleEntity.builder().id(remainingDocumentId).message("some other message") .version(System.currentTimeMillis()).build())); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when Query query = new NativeSearchQueryBuilder().withQuery(idsQuery().addIds(documentIdToDelete)).build(); - operations.delete(query, SampleEntity.class, index); - indexOperations.refresh(); + operations.delete(query, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); // then // document with id "remainingDocumentId" should still be indexed NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(1); assertThat(searchHits.getSearchHit(0).getContent().getId()).isEqualTo(remainingDocumentId); } @@ -2505,18 +2477,17 @@ public abstract class ElasticsearchTemplateTests { String remainingDocumentId = UUID.randomUUID().toString(); indexQueries.add(getIndexQuery(SampleEntity.builder().id(remainingDocumentId).message("some other message") .version(System.currentTimeMillis()).build())); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("id").is(documentIdToDelete)); - operations.delete(criteriaQuery, SampleEntity.class, index); - indexOperations.refresh(); + operations.delete(criteriaQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); // then // document with id "remainingDocumentId" should still be indexed NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(1); assertThat(searchHits.getSearchHit(0).getContent().getId()).isEqualTo(remainingDocumentId); } @@ -2535,17 +2506,16 @@ public abstract class ElasticsearchTemplateTests { String remainingDocumentId = UUID.randomUUID().toString(); indexQueries.add(getIndexQuery(SampleEntity.builder().id(remainingDocumentId).message("some other message") .version(System.currentTimeMillis()).build())); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when - operations.delete(documentIdToDelete, index); - indexOperations.refresh(); + operations.delete(documentIdToDelete, IndexCoordinates.of(indexNameProvider.indexName())); // then // document with id "remainingDocumentId" should still be indexed NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); assertThat(searchHits.getTotalHits()).isEqualTo(1L); assertThat(searchHits.getSearchHit(0).getContent().getId()).isEqualTo(remainingDocumentId); } @@ -2564,20 +2534,19 @@ public abstract class ElasticsearchTemplateTests { indexQueries.add(getIndexQuery(SampleEntity.builder().id(UUID.randomUUID().toString()).message(notFindableMessage) .version(System.currentTimeMillis()).build())); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("message")); criteriaQuery.setPageable(PageRequest.of(0, 10)); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - criteriaQuery, SampleEntity.class, index); + criteriaQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scroll.getScrollId(), 1000, - SampleEntity.class, index); + SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scroll.getScrollId()); @@ -2602,20 +2571,19 @@ public abstract class ElasticsearchTemplateTests { indexQueries.add(getIndexQuery(SampleEntity.builder().id(UUID.randomUUID().toString()).message(notFindableMessage) .version(System.currentTimeMillis()).build())); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); // when NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("message", "message")) .withPageable(PageRequest.of(0, 10)).build(); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - searchQuery, SampleEntity.class, index); + searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scroll.getScrollId(), 1000, - SampleEntity.class, index); + SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scroll.getScrollId()); @@ -2633,8 +2601,7 @@ public abstract class ElasticsearchTemplateTests { List entities = createSampleEntitiesWithMessage("Test message", 3); // when - operations.bulkIndex(entities, index); - indexOperations.refresh(); + operations.bulkIndex(entities, IndexCoordinates.of(indexNameProvider.indexName())); // then SourceFilter sourceFilter = new FetchSourceFilterBuilder().withIncludes("id").build(); @@ -2643,12 +2610,12 @@ public abstract class ElasticsearchTemplateTests { .withPageable(PageRequest.of(0, 10)).withSourceFilter(sourceFilter).build(); SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - searchQuery, SampleEntity.class, index); + searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scroll.getScrollId(), 1000, - SampleEntity.class, index); + SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); } ((AbstractElasticsearchTemplate) operations).searchScrollClear(scroll.getScrollId()); assertThat(sampleEntities).hasSize(3); @@ -2680,8 +2647,7 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withSort(new FieldSortBuilder("rate").order(SortOrder.ASC)) @@ -2689,12 +2655,12 @@ public abstract class ElasticsearchTemplateTests { // when SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - searchQuery, SampleEntity.class, index); + searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scroll.getScrollId(), 1000, - SampleEntity.class, index); + SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); } // then @@ -2727,8 +2693,7 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPageable( @@ -2737,12 +2702,12 @@ public abstract class ElasticsearchTemplateTests { // when SearchScrollHits scroll = ((AbstractElasticsearchTemplate) operations).searchScrollStart(1000, - searchQuery, SampleEntity.class, index); + searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); List> sampleEntities = new ArrayList<>(); while (scroll.hasSearchHits()) { sampleEntities.addAll(scroll.getSearchHits()); scroll = ((AbstractElasticsearchTemplate) operations).searchScrollContinue(scroll.getScrollId(), 1000, - SampleEntity.class, index); + SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); } // then @@ -2767,14 +2732,14 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(sampleEntity, sampleEntity2, sampleEntity3)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withCollapseField("rate") .build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits).isNotNull(); @@ -2798,14 +2763,14 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(sampleEntity, sampleEntity2, sampleEntity3)); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName())); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withCollapseBuilder(new CollapseBuilder("rate").setInnerHits(new InnerHitBuilder("innerHits"))).build(); // when - SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, + IndexCoordinates.of(indexNameProvider.indexName())); // then assertThat(searchHits).isNotNull(); @@ -2890,21 +2855,24 @@ public abstract class ElasticsearchTemplateTests { @Test // DATAES-714 void shouldReturnSortFieldsInSearchHits() { - IndexCoordinates index = IndexCoordinates.of("test-index-searchhits-entity-template"); + IndexCoordinates index = IndexCoordinates.of(indexNameProvider.indexName()); + IndexOperations indexOperations = operations.indexOps(SearchHitsEntity.class); + indexOperations.delete(); + indexOperations.createWithMapping(); + SearchHitsEntity entity = new SearchHitsEntity(); entity.setId("1"); entity.setNumber(1000L); entity.setKeyword("thousands"); IndexQuery indexQuery = new IndexQueryBuilder().withId(entity.getId()).withObject(entity).build(); operations.index(indexQuery, index); - operations.indexOps(index).refresh(); NativeSearchQuery query = new NativeSearchQueryBuilder() // .withQuery(matchAllQuery()) // .withSort(new FieldSortBuilder("keyword").order(SortOrder.ASC)) .withSort(new FieldSortBuilder("number").order(SortOrder.DESC)).build(); - SearchHits searchHits = operations.search(query, SearchHitsEntity.class, index); + SearchHits searchHits = operations.search(query, SearchHitsEntity.class); assertThat(searchHits).isNotNull(); assertThat(searchHits.getSearchHits()).hasSize(1); @@ -2974,7 +2942,6 @@ public abstract class ElasticsearchTemplateTests { List indexQueries = getIndexQueries(Arrays.asList(entity, entity2)); operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); NativeSearchQuery query = new NativeSearchQueryBuilder() // .withQuery(boolQuery().filter(existsQuery("rate")).should(termQuery("message", "message"))) // @@ -3008,10 +2975,9 @@ public abstract class ElasticsearchTemplateTests { entity.setVersion(42L); entity.setMessage("message"); - operations.save(entity, index); - indexOperations.refresh(); + operations.save(entity, IndexCoordinates.of(indexNameProvider.indexName())); - SampleEntity result = operations.get(id, SampleEntity.class, index); + SampleEntity result = operations.get(id, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); assertThat(result).isEqualTo(entity); } @@ -3025,9 +2991,8 @@ public abstract class ElasticsearchTemplateTests { entity.setMessage("message"); operations.save(entity); - indexOperations.refresh(); - SampleEntity result = operations.get(id, SampleEntity.class, index); + SampleEntity result = operations.get(id, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); assertThat(result).isEqualTo(entity); } @@ -3045,11 +3010,10 @@ public abstract class ElasticsearchTemplateTests { entity2.setVersion(43L); entity2.setMessage("message"); - operations.save(Arrays.asList(entity1, entity2), index); - indexOperations.refresh(); + operations.save(Arrays.asList(entity1, entity2), IndexCoordinates.of(indexNameProvider.indexName())); - SampleEntity result1 = operations.get(id1, SampleEntity.class, index); - SampleEntity result2 = operations.get(id2, SampleEntity.class, index); + SampleEntity result1 = operations.get(id1, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); + SampleEntity result2 = operations.get(id2, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); assertThat(result1).isEqualTo(entity1); assertThat(result2).isEqualTo(entity2); @@ -3069,10 +3033,9 @@ public abstract class ElasticsearchTemplateTests { entity2.setMessage("message"); operations.save(Arrays.asList(entity1, entity2)); - indexOperations.refresh(); - SampleEntity result1 = operations.get(id1, SampleEntity.class, index); - SampleEntity result2 = operations.get(id2, SampleEntity.class, index); + SampleEntity result1 = operations.get(id1, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); + SampleEntity result2 = operations.get(id2, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); assertThat(result1).isEqualTo(entity1); assertThat(result2).isEqualTo(entity2); @@ -3087,7 +3050,6 @@ public abstract class ElasticsearchTemplateTests { entity.setMessage("message"); operations.save(entity); - indexOperations.refresh(); assertThat(operations.exists("42", SampleEntity.class)).isTrue(); } @@ -3101,9 +3063,8 @@ public abstract class ElasticsearchTemplateTests { entity.setMessage("message"); operations.save(entity); - indexOperations.refresh(); - assertThat(operations.exists("42", index)).isTrue(); + assertThat(operations.exists("42", IndexCoordinates.of(indexNameProvider.indexName()))).isTrue(); } @Test // DATAES-876 @@ -3259,6 +3220,11 @@ public abstract class ElasticsearchTemplateTests { String aId1 = java.util.UUID.randomUUID().toString(); String aId2 = java.util.UUID.randomUUID().toString(); + // default maps SampleEntity, need a new mapping here + IndexOperations indexOperations = operations.indexOps(SampleJoinEntity.class); + indexOperations.delete(); + indexOperations.createWithMapping(); + shouldSaveEntityWithJoinFields(qId1, qId2, aId1, aId2); shouldUpdateEntityWithJoinFields(qId1, qId2, aId1, aId2); shouldDeleteEntityWithJoinFields(qId2, aId2); @@ -3296,10 +3262,9 @@ public abstract class ElasticsearchTemplateTests { myAJoinField2.setParent(qId1); sampleAnswerEntity2.setMyJoinField(myAJoinField2); + IndexCoordinates index = IndexCoordinates.of(indexNameProvider.indexName()); operations.save( - Arrays.asList(sampleQuestionEntity1, sampleQuestionEntity2, sampleAnswerEntity1, sampleAnswerEntity2), - IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)); - operations.indexOps(IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)).refresh(); + Arrays.asList(sampleQuestionEntity1, sampleQuestionEntity2, sampleAnswerEntity1, sampleAnswerEntity2), index); SearchHits hits = operations.search( new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId1)).build(), @@ -3328,8 +3293,7 @@ public abstract class ElasticsearchTemplateTests { queries.add(updateQuery); // when - operations.bulkUpdate(queries, IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)); - operations.indexOps(IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)).refresh(); + operations.bulkUpdate(queries, IndexCoordinates.of(indexNameProvider.indexName())); SearchHits updatedHits = operations.search( new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId2)).build(), @@ -3361,8 +3325,7 @@ public abstract class ElasticsearchTemplateTests { private void shouldDeleteEntityWithJoinFields(String qId2, String aId2) throws Exception { Query query = new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId2)).withRoute(qId2) .build(); - operations.delete(query, SampleJoinEntity.class, IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)); - operations.indexOps(IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)).refresh(); + operations.delete(query, SampleJoinEntity.class, IndexCoordinates.of(indexNameProvider.indexName())); SearchHits deletedHits = operations.search( new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId2)).build(), @@ -3461,7 +3424,6 @@ public abstract class ElasticsearchTemplateTests { .mapToObj(i -> SampleEntity.builder().id("" + i).build()).collect(Collectors.toList()); operations.save(entities); - indexOperations.refresh(); queryAll.setTrackTotalHits(null); SearchHits searchHits = operations.search(queryAll, SampleEntity.class); @@ -3483,7 +3445,6 @@ public abstract class ElasticsearchTemplateTests { .mapToObj(i -> SampleEntity.builder().id("" + i).build()).collect(Collectors.toList()); operations.save(entities); - indexOperations.refresh(); queryAll.setTrackTotalHits(true); queryAll.setTrackTotalHitsUpTo(12_345); @@ -3506,7 +3467,6 @@ public abstract class ElasticsearchTemplateTests { .mapToObj(i -> SampleEntity.builder().id("" + i).build()).collect(Collectors.toList()); operations.save(entities); - indexOperations.refresh(); queryAll.setTrackTotalHits(null); queryAll.setTrackTotalHitsUpTo(12_345); @@ -3529,7 +3489,6 @@ public abstract class ElasticsearchTemplateTests { .mapToObj(i -> SampleEntity.builder().id("" + i).build()).collect(Collectors.toList()); operations.save(entities); - indexOperations.refresh(); queryAll.setTrackTotalHits(false); queryAll.setTrackTotalHitsUpTo(12_345); @@ -3618,7 +3577,7 @@ public abstract class ElasticsearchTemplateTests { } // region entities - @Document(indexName = INDEX_NAME_SAMPLE_ENTITY) + @Document(indexName = "#{@indexNameProvider.indexName()}") @Setting(shards = 1, replicas = 0, refreshInterval = "-1") static class SampleEntity { @Nullable @Id private String id; @@ -3797,7 +3756,7 @@ public abstract class ElasticsearchTemplateTests { } } - @Document(indexName = "test-index-uuid-keyed-core-template") + @Document(indexName = "#{@indexNameProvider.indexName()}") private static class SampleEntityUUIDKeyed { @Nullable @Id private UUID id; @Nullable private String type; @@ -4008,7 +3967,7 @@ public abstract class ElasticsearchTemplateTests { } } - @Document(indexName = "test-index-version-core-template", versionType = VersionType.EXTERNAL_GTE) + @Document(indexName = "#{@indexNameProvider.indexName()}", versionType = VersionType.EXTERNAL_GTE) private static class GTEVersionEntity { @Nullable @Version private Long version; @Nullable @Id private String id; @@ -4188,7 +4147,7 @@ public abstract class ElasticsearchTemplateTests { } } - @Document(indexName = "test-index-searchhits-entity-template") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class SearchHitsEntity { @Nullable @Id private String id; @Nullable @Field(type = FieldType.Long) Long number; @@ -4361,7 +4320,7 @@ public abstract class ElasticsearchTemplateTests { } } - @Document(indexName = INDEX_NAME_JOIN_SAMPLE_ENTITY) + @Document(indexName = "#{@indexNameProvider.indexName()}") static class SampleJoinEntity { @Nullable @Id @Field(type = Keyword) private String uuid; @Nullable @JoinTypeRelations(relations = { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTransportTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTransportTemplateTests.java index d95faed41..e5722fb25 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTransportTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTransportTemplateTests.java @@ -41,6 +41,9 @@ import org.json.JSONException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -52,6 +55,7 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.UpdateQuery; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.lang.Nullable; import org.springframework.test.context.ContextConfiguration; @@ -60,10 +64,19 @@ import org.springframework.test.context.ContextConfiguration; * @author Sascha Woo * @author Farid Faoudi */ -@ContextConfiguration(classes = { ElasticsearchTemplateConfiguration.class }) +@ContextConfiguration(classes = { ElasticsearchTransportTemplateTests.Config.class }) @DisplayName("ElasticsearchTransportTemplate") public class ElasticsearchTransportTemplateTests extends ElasticsearchTemplateTests { + @Configuration + @Import({ ElasticsearchTemplateConfiguration.class }) + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("transport-template"); + } + } + @Autowired private Client client; @Test @@ -72,7 +85,8 @@ public class ElasticsearchTransportTemplateTests extends ElasticsearchTemplateTe org.springframework.data.elasticsearch.core.document.Document document = org.springframework.data.elasticsearch.core.document.Document .create(); UpdateQuery updateQuery = UpdateQuery.builder(nextIdAsString()).withDocument(document).build(); - assertThatThrownBy(() -> operations.update(updateQuery, index)).isInstanceOf(DocumentMissingException.class); + assertThatThrownBy(() -> operations.update(updateQuery, IndexCoordinates.of(indexNameProvider.indexName()))) + .isInstanceOf(DocumentMissingException.class); } @Override diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplateIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplateIntegrationTests.java index 0fb532bf1..bfc32188c 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplateIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplateIntegrationTests.java @@ -47,12 +47,13 @@ import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms; import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.SortOrder; import org.json.JSONException; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.dao.DataAccessResourceFailureException; @@ -78,6 +79,7 @@ import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.*; import org.springframework.data.elasticsearch.junit.jupiter.ReactiveElasticsearchRestTemplateConfiguration; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; @@ -99,40 +101,29 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Configuration @Import({ ReactiveElasticsearchRestTemplateConfiguration.class }) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("reactive-template"); + } + } - static final String DEFAULT_INDEX = "reactive-template-test-index"; - static final String ALTERNATE_INDEX = "reactive-template-tests-alternate-index"; + @Autowired private ReactiveElasticsearchOperations operations; - @Autowired private ReactiveElasticsearchTemplate template; - private ReactiveIndexOperations indexOperations; + @Autowired private IndexNameProvider indexNameProvider; // region Setup @BeforeEach - public void setUp() { - indexOperations = template.indexOps(SampleEntity.class); + public void beforeEach() { - deleteIndices(); - - indexOperations.create() // - .then(indexOperations.putMapping(SampleEntity.class)) // - .then(indexOperations.refresh()) // - .block(); // + indexNameProvider.increment(); + operations.indexOps(SampleEntity.class).createWithMapping().block(); } - @AfterEach - public void after() { - deleteIndices(); - } - - private void deleteIndices() { - template.indexOps(IndexCoordinates.of(DEFAULT_INDEX)).delete().block(); - template.indexOps(IndexCoordinates.of(ALTERNATE_INDEX)).delete().block(); - template.indexOps(IndexCoordinates.of("rx-template-test-index-this")).delete().block(); - template.indexOps(IndexCoordinates.of("rx-template-test-index-that")).delete().block(); - template.indexOps(IndexCoordinates.of("test-index-reactive-optimistic-entity-template")).delete().block(); - template.indexOps(IndexCoordinates.of("test-index-reactive-optimistic-and-versioned-entity-template")).delete() - .block(); + @Test + @Order(java.lang.Integer.MAX_VALUE) + void cleanup() { + operations.indexOps(IndexCoordinates.of("*")).delete().block(); } // endregion @@ -140,7 +131,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-504 public void executeShouldProvideResource() { - Mono.from(template.execute(ReactiveElasticsearchClient::ping)) // + Mono.from(operations.execute(ReactiveElasticsearchClient::ping)) // .as(StepVerifier::create) // .expectNext(true) // .verifyComplete(); @@ -149,7 +140,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-504 public void executeShouldConvertExceptions() { - Mono.from(template.execute(client -> { + Mono.from(operations.execute(client -> { throw new RuntimeException(new ConnectException("we're doomed")); })) // .as(StepVerifier::create) // @@ -162,13 +153,12 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("foo bar"); - template.save(sampleEntity) // - .then(indexOperations.refresh()) // + operations.save(sampleEntity) // .block(); - template + operations .search(new CriteriaQuery(Criteria.where("message").is(sampleEntity.getMessage())), SampleEntity.class, - IndexCoordinates.of(DEFAULT_INDEX)) // + IndexCoordinates.of(indexNameProvider.indexName())) // .as(StepVerifier::create) // .expectNextCount(1) // .verifyComplete(); @@ -180,34 +170,33 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setMessage("wohoo"); - template.save(sampleEntity) // + operations.save(sampleEntity) // .map(SampleEntity::getId) // - .flatMap(id -> indexOperations.refresh().thenReturn(id)) // - .flatMap(id -> documentWithIdExistsInIndex(id, DEFAULT_INDEX)).as(StepVerifier::create) // + .flatMap(id -> documentWithIdExistsInIndex(id, indexNameProvider.indexName())).as(StepVerifier::create) // .expectNext(true) // .verifyComplete(); } private Mono documentWithIdExistsInIndex(String id, String index) { - return template.exists(id, IndexCoordinates.of(index)); + return operations.exists(id, IndexCoordinates.of(index)); } @Test // DATAES-504 public void insertWithExplicitIndexNameShouldOverwriteMetadata() { - SampleEntity sampleEntity = randomEntity("in another index"); - IndexCoordinates alternateIndex = IndexCoordinates.of(ALTERNATE_INDEX); + String defaultIndexName = indexNameProvider.indexName(); + String alternateIndexName = defaultIndexName + "-alt"; - template.save(sampleEntity, alternateIndex) // + SampleEntity sampleEntity = randomEntity("in another index"); + IndexCoordinates alternateIndex = IndexCoordinates.of(alternateIndexName); + + operations.save(sampleEntity, alternateIndex) // .as(StepVerifier::create)// .expectNextCount(1)// .verifyComplete(); - template.indexOps(IndexCoordinates.of(DEFAULT_INDEX)).refresh().block(); - template.indexOps(alternateIndex).refresh().block(); - - assertThat(documentWithIdExistsInIndex(sampleEntity.getId(), DEFAULT_INDEX).block()).isFalse(); - assertThat(documentWithIdExistsInIndex(sampleEntity.getId(), ALTERNATE_INDEX).block()).isTrue(); + assertThat(documentWithIdExistsInIndex(sampleEntity.getId(), defaultIndexName).block()).isFalse(); + assertThat(documentWithIdExistsInIndex(sampleEntity.getId(), alternateIndexName).block()).isTrue(); } @Test // DATAES-504 @@ -215,7 +204,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { Map map = new LinkedHashMap<>(Collections.singletonMap("foo", "bar")); - template.save(map, IndexCoordinates.of(ALTERNATE_INDEX)) // + operations.save(map, IndexCoordinates.of(indexNameProvider.indexName())) // .as(StepVerifier::create) // .consumeNextWith(actual -> { assertThat(map).containsKey("id"); @@ -225,14 +214,14 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-504 public void insertShouldErrorOnNullEntity() { assertThatThrownBy(() -> { - template.save(null); + operations.save(null); }).isInstanceOf(IllegalArgumentException.class); } @Test // DATAES-519, DATAES-767, DATAES-822 public void getByIdShouldErrorWhenIndexDoesNotExist() { - template.get("foo", SampleEntity.class, IndexCoordinates.of("no-such-index")) // + operations.get("foo", SampleEntity.class, IndexCoordinates.of("no-such-index")) // .as(StepVerifier::create) // .expectError(ElasticsearchStatusException.class); } @@ -243,7 +232,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("some message"); index(sampleEntity); - template.get(sampleEntity.getId(), SampleEntity.class) // + operations.get(sampleEntity.getId(), SampleEntity.class) // .as(StepVerifier::create) // .expectNext(sampleEntity) // .verifyComplete(); @@ -259,7 +248,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { assertThat(sampleEntity.getId()).isNotNull(); - template.get(sampleEntity.getId(), SampleEntity.class) // + operations.get(sampleEntity.getId(), SampleEntity.class) // .as(StepVerifier::create) // .consumeNextWith(it -> assertThat(it.getId()).isEqualTo(sampleEntity.getId())) // .verifyComplete(); @@ -271,7 +260,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("some message"); index(sampleEntity); - template.get("foo", SampleEntity.class) // + operations.get("foo", SampleEntity.class) // .as(StepVerifier::create) // .verifyComplete(); } @@ -279,7 +268,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-504 public void getByIdShouldErrorForNullId() { assertThatThrownBy(() -> { - template.get(null, SampleEntity.class); + operations.get(null, SampleEntity.class); }).isInstanceOf(IllegalArgumentException.class); } @@ -288,20 +277,19 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("some message"); - IndexCoordinates defaultIndex = IndexCoordinates.of(DEFAULT_INDEX); - IndexCoordinates alternateIndex = IndexCoordinates.of(ALTERNATE_INDEX); + IndexCoordinates defaultIndex = IndexCoordinates.of(indexNameProvider.indexName()); + IndexCoordinates alternateIndex = IndexCoordinates.of(indexNameProvider.indexName() + "-alt"); - template.save(sampleEntity, alternateIndex) // - .then(indexOperations.refresh()) // - .then(template.indexOps(defaultIndex).refresh()) // - .then(template.indexOps(alternateIndex).refresh()) // + operations.save(sampleEntity, alternateIndex) // + .then(operations.indexOps(defaultIndex).refresh()) // + .then(operations.indexOps(alternateIndex).refresh()) // .block(); - template.get(sampleEntity.getId(), SampleEntity.class, defaultIndex) // + operations.get(sampleEntity.getId(), SampleEntity.class, defaultIndex) // .as(StepVerifier::create) // .verifyComplete(); - template.get(sampleEntity.getId(), SampleEntity.class, alternateIndex) // + operations.get(sampleEntity.getId(), SampleEntity.class, alternateIndex) // .as(StepVerifier::create)// .expectNextCount(1) // .verifyComplete(); @@ -310,7 +298,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-519 public void existsShouldReturnFalseWhenIndexDoesNotExist() { - template.exists("foo", IndexCoordinates.of("no-such-index")) // + operations.exists("foo", IndexCoordinates.of("no-such-index")) // .as(StepVerifier::create) // .expectNext(false) // .verifyComplete(); @@ -322,7 +310,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("some message"); index(sampleEntity); - template.exists(sampleEntity.getId(), SampleEntity.class) // + operations.exists(sampleEntity.getId(), SampleEntity.class) // .as(StepVerifier::create) // .expectNext(true) // .verifyComplete(); @@ -334,7 +322,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("some message"); index(sampleEntity); - template.exists("foo", SampleEntity.class) // + operations.exists("foo", SampleEntity.class) // .as(StepVerifier::create) // .expectNext(false) // .verifyComplete(); @@ -343,7 +331,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-519, DATAES-767 public void searchShouldCompleteWhenIndexDoesNotExist() { - template + operations .search(new CriteriaQuery(Criteria.where("message").is("some message")), SampleEntity.class, IndexCoordinates.of("no-such-index")) // .as(StepVerifier::create) // @@ -358,7 +346,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery criteriaQuery = new CriteriaQuery(Criteria.where("message").is("some message")); - template.search(criteriaQuery, SampleEntity.class) // + operations.search(criteriaQuery, SampleEntity.class) // .map(SearchHit::getContent) // .as(StepVerifier::create) // .expectNext(sampleEntity) // @@ -373,7 +361,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery criteriaQuery = new CriteriaQuery(Criteria.where("message").is("foo")); - template.search(criteriaQuery, SampleEntity.class) // + operations.search(criteriaQuery, SampleEntity.class) // .as(StepVerifier::create) // .verifyComplete(); } @@ -383,7 +371,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { index(randomEntity("test message"), randomEntity("test test"), randomEntity("some message")); - template.search(new StringQuery(matchAllQuery().toString()), SampleEntity.class) // + operations.search(new StringQuery(matchAllQuery().toString()), SampleEntity.class) // .as(StepVerifier::create) // .expectNextCount(3) // .verifyComplete(); @@ -398,7 +386,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery query = new CriteriaQuery(new Criteria("message").contains("test")); - template.search(query, SampleEntity.class) // + operations.search(query, SampleEntity.class) // .map(SearchHit::getContent) // .as(StepVerifier::create) // .assertNext(next -> { @@ -419,7 +407,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery query = new CriteriaQuery( new Criteria("message").contains("some").and("message").contains("message")); - template.search(query, SampleEntity.class) // + operations.search(query, SampleEntity.class) // .map(SearchHit::getContent) // .as(StepVerifier::create) // .expectNext(sampleEntity3) // @@ -439,7 +427,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { new Criteria("message").contains("some").and("message").contains("message")); queryWithValidPreference.setPreference("_local"); - template.search(queryWithValidPreference, SampleEntity.class) // + operations.search(queryWithValidPreference, SampleEntity.class) // .map(SearchHit::getContent) // .as(StepVerifier::create) // .expectNext(sampleEntity3) // @@ -459,7 +447,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { new Criteria("message").contains("some").and("message").contains("message")); queryWithInvalidPreference.setPreference("_only_nodes:oops"); - template.search(queryWithInvalidPreference, SampleEntity.class) // + operations.search(queryWithInvalidPreference, SampleEntity.class) // .as(StepVerifier::create) // .expectError(UncategorizedElasticsearchException.class).verify(); } @@ -476,7 +464,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery query = new CriteriaQuery( new Criteria("message").contains("some").and("message").contains("message")); - template.search(query, SampleEntity.class, Message.class) // + operations.search(query, SampleEntity.class, Message.class) // .map(SearchHit::getContent) // .as(StepVerifier::create) // .expectNext(new Message(sampleEntity3.getMessage())) // @@ -492,7 +480,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { .addSort(Sort.by("message"))// .setPageable(PageRequest.of(0, 20)); - template.search(query, SampleEntity.class).as(StepVerifier::create) // + operations.search(query, SampleEntity.class).as(StepVerifier::create) // .expectNextCount(20) // .verifyComplete(); } @@ -506,7 +494,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { .addSort(Sort.by("message"))// .setPageable(Pageable.unpaged()); - template.search(query, SampleEntity.class).as(StepVerifier::create) // + operations.search(query, SampleEntity.class).as(StepVerifier::create) // .expectNextCount(100) // .verifyComplete(); } @@ -523,7 +511,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .addAggregation(AggregationBuilders.terms("messages").field("message")).build(); - template.aggregate(query, SampleEntity.class) // + operations.aggregate(query, SampleEntity.class) // .as(StepVerifier::create) // .consumeNextWith(aggregation -> { assertThat(aggregation.getName()).isEqualTo("messages"); @@ -538,7 +526,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-567, DATAES-767 public void aggregateShouldErrorWhenIndexDoesNotExist() { - template + operations .aggregate(new CriteriaQuery(Criteria.where("message").is("some message")), SampleEntity.class, IndexCoordinates.of("no-such-index")) // .as(StepVerifier::create) // @@ -548,7 +536,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-519, DATAES-767 public void countShouldReturnZeroWhenIndexDoesNotExist() { - template.count(SampleEntity.class) // + operations.count(SampleEntity.class) // .as(StepVerifier::create) // .expectError(ElasticsearchStatusException.class); } @@ -558,7 +546,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { index(randomEntity("test message"), randomEntity("test test"), randomEntity("some message")); - template.count(SampleEntity.class) // + operations.count(SampleEntity.class) // .as(StepVerifier::create) // .expectNext(3L) // .verifyComplete(); @@ -571,7 +559,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery query = new CriteriaQuery(new Criteria("message").contains("test")); - template.count(query, SampleEntity.class) // + operations.count(query, SampleEntity.class) // .as(StepVerifier::create) // .expectNext(2L) // .verifyComplete(); @@ -580,7 +568,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-519, DATAES-767 public void deleteShouldErrorWhenIndexDoesNotExist() { - template.delete("does-not-exists", IndexCoordinates.of("no-such-index")) // + operations.delete("does-not-exists", IndexCoordinates.of("no-such-index")) // .as(StepVerifier::create)// .expectError(ElasticsearchStatusException.class); } @@ -591,7 +579,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("test message"); index(sampleEntity); - template.delete(sampleEntity.getId(), SampleEntity.class) // + operations.delete(sampleEntity.getId(), SampleEntity.class) // .as(StepVerifier::create)// .expectNext(sampleEntity.getId()) // .verifyComplete(); @@ -603,7 +591,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("test message"); index(sampleEntity); - template.delete(sampleEntity.getId(), IndexCoordinates.of(DEFAULT_INDEX)) // + operations.delete(sampleEntity.getId(), IndexCoordinates.of(indexNameProvider.indexName())) // .as(StepVerifier::create)// .expectNext(sampleEntity.getId()) // .verifyComplete(); @@ -615,7 +603,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("test message"); index(sampleEntity); - template.delete(sampleEntity) // + operations.delete(sampleEntity) // .as(StepVerifier::create)// .expectNext(sampleEntity.getId()) // .verifyComplete(); @@ -626,7 +614,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity sampleEntity = randomEntity("test message"); - template.delete(sampleEntity) // + operations.delete(sampleEntity) // .as(StepVerifier::create)// .verifyComplete(); } @@ -636,7 +624,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery query = new CriteriaQuery(new Criteria("message").contains("test")); - template.delete(query, SampleEntity.class) // + operations.delete(query, SampleEntity.class) // .as(StepVerifier::create) // .consumeNextWith(byQueryResponse -> { assertThat(byQueryResponse.getDeleted()).isEqualTo(0L); @@ -650,25 +638,25 @@ public class ReactiveElasticsearchTemplateIntegrationTests { IndexCoordinates thisIndex = IndexCoordinates.of(indexPrefix + "-this"); IndexCoordinates thatIndex = IndexCoordinates.of(indexPrefix + "-that"); - template.save(randomEntity("test"), thisIndex) // - .then(template.save(randomEntity("test"), thatIndex)) // + operations.save(randomEntity("test"), thisIndex) // + .then(operations.save(randomEntity("test"), thatIndex)) // .then() // .as(StepVerifier::create)// .verifyComplete(); - template.indexOps(thisIndex).refresh().then(template.indexOps(thatIndex).refresh()).block(); + operations.indexOps(thisIndex).refresh().then(operations.indexOps(thatIndex).refresh()).block(); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() // .withQuery(termQuery("message", "test")) // .build(); - template.delete(searchQuery, SampleEntity.class, IndexCoordinates.of(indexPrefix + '*')) // + operations.delete(searchQuery, SampleEntity.class, IndexCoordinates.of(indexPrefix + '*')) // .map(ByQueryResponse::getDeleted) // .as(StepVerifier::create) // .expectNext(2L) // .verifyComplete(); - template.indexOps(thisIndex).delete().then(template.indexOps(thatIndex).delete()).block(); + operations.indexOps(thisIndex).delete().then(operations.indexOps(thatIndex).delete()).block(); } @Test // DATAES-547 @@ -678,25 +666,25 @@ public class ReactiveElasticsearchTemplateIntegrationTests { IndexCoordinates thisIndex = IndexCoordinates.of(indexPrefix + "-this"); IndexCoordinates thatIndex = IndexCoordinates.of(indexPrefix + "-that"); - template.save(randomEntity("positive"), thisIndex) // - .then(template.save(randomEntity("positive"), thatIndex)) // + operations.save(randomEntity("positive"), thisIndex) // + .then(operations.save(randomEntity("positive"), thatIndex)) // .then() // .as(StepVerifier::create)// .verifyComplete(); - template.indexOps(thisIndex).refresh().then(template.indexOps(thatIndex).refresh()).block(); + operations.indexOps(thisIndex).refresh().then(operations.indexOps(thatIndex).refresh()).block(); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() // .withQuery(termQuery("message", "negative")) // .build(); - template.delete(searchQuery, SampleEntity.class, IndexCoordinates.of(indexPrefix + '*')) // + operations.delete(searchQuery, SampleEntity.class, IndexCoordinates.of(indexPrefix + '*')) // .map(ByQueryResponse::getDeleted) // .as(StepVerifier::create) // .expectNext(0L) // .verifyComplete(); - template.indexOps(thisIndex).delete().then(template.indexOps(thatIndex).delete()).block(); + operations.indexOps(thisIndex).delete().then(operations.indexOps(thatIndex).delete()).block(); } @Test // DATAES-504 @@ -706,7 +694,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery query = new CriteriaQuery(new Criteria("message").contains("test")); - template.delete(query, SampleEntity.class) // + operations.delete(query, SampleEntity.class) // .map(ByQueryResponse::getDeleted) // .as(StepVerifier::create) // .expectNext(2L) // @@ -720,7 +708,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { CriteriaQuery query = new CriteriaQuery(new Criteria("message").contains("luke")); - template.delete(query, SampleEntity.class) // + operations.delete(query, SampleEntity.class) // .map(ByQueryResponse::getDeleted) // .as(StepVerifier::create) // .expectNext(0L) // @@ -744,7 +732,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { .withPageable(PageRequest.of(0, 25)) // .build(); - template.search(query, SampleEntity.class, IndexCoordinates.of(DEFAULT_INDEX)) // + operations.search(query, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())) // .as(StepVerifier::create) // .expectNextCount(2) // .verifyComplete(); @@ -761,7 +749,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { .withSort(new FieldSortBuilder("rate").order(SortOrder.DESC)) // .build(); - template.search(query, SampleEntity.class) // + operations.search(query, SampleEntity.class) // .as(StepVerifier::create) // .consumeNextWith(it -> { List sortValues = it.getSortValues(); @@ -784,7 +772,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { .withIds(Arrays.asList(entity1.getId(), entity2.getId())) // .build(); - template.multiGet(query, SampleEntity.class, IndexCoordinates.of(DEFAULT_INDEX)) // + operations.multiGet(query, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())) // .map(MultiGetItem::getItem).as(StepVerifier::create) // .expectNext(entity1, entity2) // .verifyComplete(); @@ -804,7 +792,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { .withFields("message") // .build(); - template.multiGet(query, SampleEntity.class, IndexCoordinates.of(DEFAULT_INDEX)) // + operations.multiGet(query, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())) // .as(StepVerifier::create) // .expectNextCount(2) // .verifyComplete(); @@ -834,12 +822,12 @@ public class ReactiveElasticsearchTemplateIntegrationTests { .build(); List queries = Arrays.asList(updateQuery1, updateQuery2); - template.bulkUpdate(queries, IndexCoordinates.of(DEFAULT_INDEX)).block(); + operations.bulkUpdate(queries, IndexCoordinates.of(indexNameProvider.indexName())).block(); NativeSearchQuery getQuery = new NativeSearchQueryBuilder() // .withIds(Arrays.asList(entity1.getId(), entity2.getId())) // .build(); - template.multiGet(getQuery, SampleEntity.class, IndexCoordinates.of(DEFAULT_INDEX)) // + operations.multiGet(getQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())) // .map(MultiGetItem::getItem) // .as(StepVerifier::create) // .expectNextMatches(entity -> entity.getMessage().equals("updated 1")) // @@ -854,12 +842,11 @@ public class ReactiveElasticsearchTemplateIntegrationTests { SampleEntity entity2 = randomEntity("test message 2"); entity2.rate = 2; - template.saveAll(Mono.just(Arrays.asList(entity1, entity2)), IndexCoordinates.of(DEFAULT_INDEX)) // - .then(indexOperations.refresh()) // - .block(); + operations.saveAll(Mono.just(Arrays.asList(entity1, entity2)), IndexCoordinates.of(indexNameProvider.indexName())) // + .then().block(); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build(); - template.search(searchQuery, SampleEntity.class, IndexCoordinates.of(DEFAULT_INDEX)) // + operations.search(searchQuery, SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())) // .as(StepVerifier::create) // .expectNextMatches(hit -> entity1.equals(hit.getContent()) || entity2.equals(hit.getContent())) // .expectNextMatches(hit -> entity1.equals(hit.getContent()) || entity2.equals(hit.getContent())) // @@ -868,7 +855,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-753 void shouldReturnEmptyFluxOnSaveAllWithEmptyInput() { - template.saveAll(Collections.emptyList(), IndexCoordinates.of(DEFAULT_INDEX)) // + operations.saveAll(Collections.emptyList(), IndexCoordinates.of(indexNameProvider.indexName())) // .as(StepVerifier::create) // .verifyComplete(); } @@ -877,9 +864,9 @@ public class ReactiveElasticsearchTemplateIntegrationTests { void getShouldReturnSeqNoPrimaryTerm() { OptimisticEntity original = new OptimisticEntity(); original.setMessage("It's fine"); - OptimisticEntity saved = template.save(original).block(); + OptimisticEntity saved = operations.save(original).block(); - template.get(saved.getId(), OptimisticEntity.class).as(StepVerifier::create) + operations.get(saved.getId(), OptimisticEntity.class).as(StepVerifier::create) .assertNext(this::assertThatSeqNoPrimaryTermIsFilled).verifyComplete(); } @@ -895,11 +882,11 @@ public class ReactiveElasticsearchTemplateIntegrationTests { void multiGetShouldReturnSeqNoPrimaryTerm() { OptimisticEntity original = new OptimisticEntity(); original.setMessage("It's fine"); - OptimisticEntity saved = template.save(original).block(); + OptimisticEntity saved = operations.save(original).block(); - template + operations .multiGet(multiGetQueryForOne(saved.getId()), OptimisticEntity.class, - template.getIndexCoordinatesFor(OptimisticEntity.class)) // + operations.getIndexCoordinatesFor(OptimisticEntity.class)) // .map(MultiGetItem::getItem) // .as(StepVerifier::create) // .assertNext(this::assertThatSeqNoPrimaryTermIsFilled).verifyComplete(); @@ -913,13 +900,13 @@ public class ReactiveElasticsearchTemplateIntegrationTests { void searchShouldReturnSeqNoPrimaryTerm() { OptimisticEntity original = new OptimisticEntity(); original.setMessage("It's fine"); - OptimisticEntity saved = template.save(original).block(); + OptimisticEntity saved = operations.save(original).block(); - template.indexOps(OptimisticEntity.class).refresh().block(); + operations.indexOps(OptimisticEntity.class).refresh().block(); - template + operations .search(searchQueryForOne(saved.getId()), OptimisticEntity.class, - template.getIndexCoordinatesFor(OptimisticEntity.class)) + operations.getIndexCoordinatesFor(OptimisticEntity.class)) .map(SearchHit::getContent).as(StepVerifier::create).assertNext(this::assertThatSeqNoPrimaryTermIsFilled) .verifyComplete(); } @@ -932,16 +919,16 @@ public class ReactiveElasticsearchTemplateIntegrationTests { void shouldThrowOptimisticLockingFailureExceptionWhenConcurrentUpdateOccursOnEntityWithSeqNoPrimaryTermProperty() { OptimisticEntity original = new OptimisticEntity(); original.setMessage("It's fine"); - OptimisticEntity saved = template.save(original).block(); + OptimisticEntity saved = operations.save(original).block(); - OptimisticEntity forEdit1 = template.get(saved.getId(), OptimisticEntity.class).block(); - OptimisticEntity forEdit2 = template.get(saved.getId(), OptimisticEntity.class).block(); + OptimisticEntity forEdit1 = operations.get(saved.getId(), OptimisticEntity.class).block(); + OptimisticEntity forEdit2 = operations.get(saved.getId(), OptimisticEntity.class).block(); forEdit1.setMessage("It'll be ok"); - template.save(forEdit1).block(); + operations.save(forEdit1).block(); forEdit2.setMessage("It'll be great"); - template.save(forEdit2) // + operations.save(forEdit2) // .as(StepVerifier::create) // .expectError(OptimisticLockingFailureException.class) // .verify(); @@ -951,28 +938,28 @@ public class ReactiveElasticsearchTemplateIntegrationTests { void shouldThrowOptimisticLockingFailureExceptionWhenConcurrentUpdateOccursOnVersionedEntityWithSeqNoPrimaryTermProperty() { OptimisticAndVersionedEntity original = new OptimisticAndVersionedEntity(); original.setMessage("It's fine"); - OptimisticAndVersionedEntity saved = template.save(original).block(); + OptimisticAndVersionedEntity saved = operations.save(original).block(); - OptimisticAndVersionedEntity forEdit1 = template.get(saved.getId(), OptimisticAndVersionedEntity.class).block(); - OptimisticAndVersionedEntity forEdit2 = template.get(saved.getId(), OptimisticAndVersionedEntity.class).block(); + OptimisticAndVersionedEntity forEdit1 = operations.get(saved.getId(), OptimisticAndVersionedEntity.class).block(); + OptimisticAndVersionedEntity forEdit2 = operations.get(saved.getId(), OptimisticAndVersionedEntity.class).block(); forEdit1.setMessage("It'll be ok"); - template.save(forEdit1).block(); + operations.save(forEdit1).block(); forEdit2.setMessage("It'll be great"); - template.save(forEdit2).as(StepVerifier::create).expectError(OptimisticLockingFailureException.class).verify(); + operations.save(forEdit2).as(StepVerifier::create).expectError(OptimisticLockingFailureException.class).verify(); } @Test // DATAES-799 void shouldAllowFullReplaceOfEntityWithBothSeqNoPrimaryTermAndVersion() { OptimisticAndVersionedEntity original = new OptimisticAndVersionedEntity(); original.setMessage("It's fine"); - OptimisticAndVersionedEntity saved = template.save(original).block(); + OptimisticAndVersionedEntity saved = operations.save(original).block(); - OptimisticAndVersionedEntity forEdit = template.get(saved.getId(), OptimisticAndVersionedEntity.class).block(); + OptimisticAndVersionedEntity forEdit = operations.get(saved.getId(), OptimisticAndVersionedEntity.class).block(); forEdit.setMessage("It'll be ok"); - template.save(forEdit).as(StepVerifier::create).expectNextCount(1).verifyComplete(); + operations.save(forEdit).as(StepVerifier::create).expectNextCount(1).verifyComplete(); } @Test // DATAES-909 @@ -988,11 +975,12 @@ public class ReactiveElasticsearchTemplateIntegrationTests { .withDocument(document) // .build(); - UpdateResponse updateResponse = template.update(updateQuery, IndexCoordinates.of(DEFAULT_INDEX)).block(); + UpdateResponse updateResponse = operations.update(updateQuery, IndexCoordinates.of(indexNameProvider.indexName())) + .block(); assertThat(updateResponse).isNotNull(); assertThat(updateResponse.getResult()).isEqualTo(UpdateResponse.Result.UPDATED); - template.get(entity.getId(), SampleEntity.class, IndexCoordinates.of(DEFAULT_INDEX)) // + operations.get(entity.getId(), SampleEntity.class, IndexCoordinates.of(indexNameProvider.indexName())) // .as(StepVerifier::create) // .expectNextMatches(foundEntity -> foundEntity.getMessage().equals("updated")) // .verifyComplete(); @@ -1000,28 +988,28 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // DATAES-908 void shouldFillVersionOnSaveOne() { - VersionedEntity saved = template.save(new VersionedEntity()).block(); + VersionedEntity saved = operations.save(new VersionedEntity()).block(); assertThat(saved.getVersion()).isNotNull(); } @Test // DATAES-908 void shouldFillVersionOnSaveAll() { - VersionedEntity saved = template.saveAll(singletonList(new VersionedEntity()), VersionedEntity.class).blockLast(); + VersionedEntity saved = operations.saveAll(singletonList(new VersionedEntity()), VersionedEntity.class).blockLast(); assertThat(saved.getVersion()).isNotNull(); } @Test // DATAES-908 void shouldFillSeqNoPrimaryTermOnSaveOne() { - OptimisticEntity saved = template.save(new OptimisticEntity()).block(); + OptimisticEntity saved = operations.save(new OptimisticEntity()).block(); assertThatSeqNoPrimaryTermIsFilled(saved); } @Test // DATAES-908 void shouldFillSeqNoPrimaryTermOnSaveAll() { - OptimisticEntity saved = template.saveAll(singletonList(new OptimisticEntity()), OptimisticEntity.class) + OptimisticEntity saved = operations.saveAll(singletonList(new OptimisticEntity()), OptimisticEntity.class) .blockLast(); assertThatSeqNoPrimaryTermIsFilled(saved); @@ -1037,9 +1025,9 @@ public class ReactiveElasticsearchTemplateIntegrationTests { Query query = Query.findAll().setPageable(PageRequest.of(0, 5)); - template.saveAll(Mono.just(entities), SampleEntity.class).then(indexOperations.refresh()).block(); + operations.saveAll(Mono.just(entities), SampleEntity.class).then().block(); - Mono> searchPageMono = template.searchForPage(query, SampleEntity.class); + Mono> searchPageMono = operations.searchForPage(query, SampleEntity.class); searchPageMono.as(StepVerifier::create) // .consumeNextWith(searchPage -> { @@ -1057,19 +1045,19 @@ public class ReactiveElasticsearchTemplateIntegrationTests { String indexName = "foo-" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy.MM")); String dateMathIndexName = ""; - template.indexOps(IndexCoordinates.of(dateMathIndexName)) // + operations.indexOps(IndexCoordinates.of(dateMathIndexName)) // .create() // .as(StepVerifier::create) // .expectNext(true) // .verifyComplete(); // - template.indexOps(IndexCoordinates.of(indexName)) // + operations.indexOps(IndexCoordinates.of(indexName)) // .exists() // .as(StepVerifier::create) // .expectNext(true) // .verifyComplete(); // - template.indexOps(IndexCoordinates.of(dateMathIndexName)) // + operations.indexOps(IndexCoordinates.of(dateMathIndexName)) // .delete() // .as(StepVerifier::create) // .expectNext(true) // @@ -1082,12 +1070,12 @@ public class ReactiveElasticsearchTemplateIntegrationTests { ElasticsearchTemplateTests.SampleEntity entity = ElasticsearchTemplateTests.SampleEntity.builder().id("42") .message("a message with text").build(); - template.save(entity).as(StepVerifier::create).expectNextCount(1).verifyComplete(); + operations.save(entity).as(StepVerifier::create).expectNextCount(1).verifyComplete(); Criteria criteria = new Criteria("message").contains("with"); CriteriaQuery query = new CriteriaQuery(criteria); - template.search(query, ElasticsearchTemplateTests.SampleEntity.class).as(StepVerifier::create) + operations.search(query, ElasticsearchTemplateTests.SampleEntity.class).as(StepVerifier::create) .consumeNextWith(searchHit -> { Explanation explanation = searchHit.getExplanation(); assertThat(explanation).isNull(); @@ -1100,13 +1088,13 @@ public class ReactiveElasticsearchTemplateIntegrationTests { ElasticsearchTemplateTests.SampleEntity entity = ElasticsearchTemplateTests.SampleEntity.builder().id("42") .message("a message with text").build(); - template.save(entity).as(StepVerifier::create).expectNextCount(1).verifyComplete(); + operations.save(entity).as(StepVerifier::create).expectNextCount(1).verifyComplete(); Criteria criteria = new Criteria("message").contains("with"); CriteriaQuery query = new CriteriaQuery(criteria); query.setExplain(true); - template.search(query, ElasticsearchTemplateTests.SampleEntity.class).as(StepVerifier::create) + operations.search(query, ElasticsearchTemplateTests.SampleEntity.class).as(StepVerifier::create) .consumeNextWith(searchHit -> { Explanation explanation = searchHit.getExplanation(); assertThat(explanation).isNotNull(); @@ -1116,11 +1104,12 @@ public class ReactiveElasticsearchTemplateIntegrationTests { @Test // #1646, #1718 @DisplayName("should return a list of info for specific index") void shouldReturnInformationListOfAllIndices() { - String indexName = "test-index-reactive-information-list"; - String aliasName = "testindexinformationindex"; - ReactiveIndexOperations indexOps = template.indexOps(EntityWithSettingsAndMappingsReactive.class); + String indexName = indexNameProvider.indexName(); + String aliasName = indexName + "-alias"; + ReactiveIndexOperations indexOps = operations.indexOps(EntityWithSettingsAndMappingsReactive.class); - indexOps.createWithMapping().block(); + // beforeEach uses SampleEntity, so recreate the index here + indexOps.delete().then(indexOps.createWithMapping()).block(); AliasActionParameters parameters = AliasActionParameters.builder().withAliases(aliasName).withIndices(indexName) .withIsHidden(false).withIsWriteIndex(false).withRouting("indexrouting").withSearchRouting("searchrouting") @@ -1158,7 +1147,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { ImmutableEntity entity = new ImmutableEntity(null, "some text", null); AtomicReference savedEntity = new AtomicReference<>(); - template.save(entity).as(StepVerifier::create).consumeNextWith(saved -> { + operations.save(entity).as(StepVerifier::create).consumeNextWith(saved -> { assertThat(saved).isNotNull(); savedEntity.set(saved); assertThat(saved.getId()).isNotEmpty(); @@ -1166,7 +1155,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { assertThat(seqNoPrimaryTerm).isNotNull(); }).verifyComplete(); - template.get(savedEntity.get().getId(), ImmutableEntity.class).as(StepVerifier::create) + operations.get(savedEntity.get().getId(), ImmutableEntity.class).as(StepVerifier::create) .consumeNextWith(retrieved -> { assertThat(retrieved).isEqualTo(savedEntity.get()); }).verifyComplete(); @@ -1195,58 +1184,18 @@ public class ReactiveElasticsearchTemplateIntegrationTests { private void index(SampleEntity... entities) { - IndexCoordinates indexCoordinates = IndexCoordinates.of(DEFAULT_INDEX); + IndexCoordinates indexCoordinates = IndexCoordinates.of(indexNameProvider.indexName()); if (entities.length == 1) { - template.save(entities[0], indexCoordinates).then(indexOperations.refresh()).block(); + operations.save(entities[0], indexCoordinates).block(); } else { - template.saveAll(Mono.just(Arrays.asList(entities)), indexCoordinates).then(indexOperations.refresh()).block(); + operations.saveAll(Mono.just(Arrays.asList(entities)), indexCoordinates).then().block(); } } // endregion // region Entities - @Document(indexName = "marvel") - static class Person { - @Nullable private @Id String id; - @Nullable private String name; - @Nullable private int age; - - public Person() {} - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - - @Nullable - public String getId() { - return id; - } - - public void setId(@Nullable String id) { - this.id = id; - } - - @Nullable - public String getName() { - return name; - } - - public void setName(@Nullable String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - } - static class Message { @Nullable String message; @@ -1281,7 +1230,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { } } - @Document(indexName = DEFAULT_INDEX) + @Document(indexName = "#{@indexNameProvider.indexName()}") static class SampleEntity { @Nullable @Id private String id; @Nullable @Field(type = Text, store = true, fielddata = true) private String message; @@ -1351,7 +1300,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { } } - @Document(indexName = "test-index-reactive-optimistic-entity-template") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class OptimisticEntity { @Nullable @Id private String id; @Nullable private String message; @@ -1385,7 +1334,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { } } - @Document(indexName = "test-index-reactive-optimistic-and-versioned-entity-template") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class OptimisticAndVersionedEntity { @Nullable @Id private String id; @Nullable private String message; @@ -1429,7 +1378,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { } } - @Document(indexName = "test-index-reactive-versioned-entity-template") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class VersionedEntity { @Nullable @Id private String id; @Nullable @Version private Long version; @@ -1453,7 +1402,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { } } - @Document(indexName = "test-index-reactive-information-list", createIndex = false) + @Document(indexName = "#{@indexNameProvider.indexName()}", createIndex = false) @Setting(settingPath = "settings/test-settings.json") @Mapping(mappingPath = "mappings/test-mappings.json") private static class EntityWithSettingsAndMappingsReactive { @@ -1469,7 +1418,7 @@ public class ReactiveElasticsearchTemplateIntegrationTests { } } - @Document(indexName = "immutable-class") + @Document(indexName = "#{@indexNameProvider.indexName()}") private static final class ImmutableEntity { @Id private final String id; @Field(type = FieldType.Text) private final String text; diff --git a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java index 98f6a264b..67a9a6099 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java @@ -38,9 +38,8 @@ import java.util.Set; import org.assertj.core.data.Percentage; import org.elasticsearch.search.suggest.completion.context.ContextMapping; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.annotation.Id; @@ -84,27 +83,18 @@ import org.springframework.test.context.ContextConfiguration; public class MappingBuilderIntegrationTests extends MappingContextBaseTests { @Autowired private ElasticsearchOperations operations; - private IndexOperations indexOperations; - @AfterEach - @BeforeEach - public void deleteIndices() { - indexOperations = operations.indexOps(SimpleRecursiveEntity.class); - indexOperations.delete(); - operations.indexOps(StockPrice.class).delete(); - operations.indexOps(SampleInheritedEntity.class).delete(); - operations.indexOps(User.class).delete(); - operations.indexOps(Group.class).delete(); - operations.indexOps(Book.class).delete(); - operations.indexOps(NormalizerEntity.class).delete(); - operations.indexOps(CopyToEntity.class).delete(); + @Test + @Order(java.lang.Integer.MAX_VALUE) + void cleanup() { + operations.indexOps(IndexCoordinates.of("*")).delete(); } @Test public void shouldNotFailOnCircularReference() { - operations.indexOps(SimpleRecursiveEntity.class).create(); - indexOperations.putMapping(SimpleRecursiveEntity.class); + IndexOperations indexOperations = operations.indexOps(SimpleRecursiveEntity.class); + indexOperations.createWithMapping(); indexOperations.refresh(); } @@ -274,7 +264,6 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests { IndexOperations indexOps = operations.indexOps(DenseVectorEntity.class); indexOps.create(); indexOps.putMapping(); - indexOps.delete(); } @Test // #1370 @@ -284,7 +273,7 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests { IndexOperations indexOps = operations.indexOps(DisabledMappingEntity.class); indexOps.create(); indexOps.putMapping(); - indexOps.delete(); + } @Test // #1370 @@ -294,7 +283,7 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests { IndexOperations indexOps = operations.indexOps(DisabledMappingProperty.class); indexOps.create(); indexOps.putMapping(); - indexOps.delete(); + } @Test // #1767 @@ -304,7 +293,7 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests { IndexOperations indexOps = operations.indexOps(DynamicMappingEntity.class); indexOps.create(); indexOps.putMapping(); - indexOps.delete(); + } @Test // #638 @@ -314,7 +303,7 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests { IndexOperations indexOps = operations.indexOps(DynamicDetectionMapping.class); indexOps.create(); indexOps.putMapping(); - indexOps.delete(); + } @Test // #1816 @@ -324,7 +313,7 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests { IndexOperations indexOps = operations.indexOps(RuntimeFieldEntity.class); indexOps.create(); indexOps.putMapping(); - indexOps.delete(); + } // region entities diff --git a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryIntegrationTests.java index 18e2527a3..9c88b9fff 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryIntegrationTests.java @@ -24,10 +24,11 @@ import java.lang.Long; import java.util.ArrayList; import java.util.List; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; @@ -35,12 +36,12 @@ import org.springframework.data.annotation.Version; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.IndexOperations; import org.springframework.data.elasticsearch.core.SearchHit; import org.springframework.data.elasticsearch.core.SearchHits; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.lang.Nullable; import org.springframework.test.context.ContextConfiguration; @@ -56,31 +57,31 @@ public class CriteriaQueryIntegrationTests { @Configuration @Import({ ElasticsearchRestTemplateConfiguration.class }) - static class Config {} - - private final IndexCoordinates index = IndexCoordinates.of("test-index-sample-core-query"); + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider(); + } + } @Autowired private ElasticsearchOperations operations; - private IndexOperations indexOperations; + @Autowired private IndexNameProvider indexNameProvider; @BeforeEach public void before() { - indexOperations = operations.indexOps(SampleEntity.class); - indexOperations.delete(); - indexOperations.create(); - indexOperations.putMapping(SampleEntity.class); - indexOperations.refresh(); + indexNameProvider.increment(); + operations.indexOps(SampleEntity.class).createWithMapping(); } - @AfterEach - void after() { - indexOperations.delete(); + @Test + @Order(java.lang.Integer.MAX_VALUE) + void cleanup() { + operations.indexOps(IndexCoordinates.of("*")).delete(); } - @Test // ,DATAES-706 + @Test // DATAES-706 public void shouldPerformAndOperationOnCriteriaEntries() { - // given SampleEntity sampleEntity1 = new SampleEntity(); sampleEntity1.setId(nextIdAsString()); sampleEntity1.setMessage("some test message"); @@ -89,22 +90,18 @@ public class CriteriaQueryIntegrationTests { sampleEntity2.setId(nextIdAsString()); sampleEntity2.setMessage("some other message"); operations.save(sampleEntity2); - indexOperations.refresh(); - // when CriteriaQuery criteriaQuery = new CriteriaQuery( new Criteria("message").contains("test").and("message").contains("some")); - SearchHit searchHit = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit searchHit = operations.searchOne(criteriaQuery, SampleEntity.class); - // then assertThat(searchHit).isNotNull(); assertThat(searchHit.getId()).isEqualTo(sampleEntity1.id); } - @Test // ,DATAES-706 + @Test // DATAES-706 public void shouldPerformOrOperationOnCriteriaEntries() { - // given SampleEntity sampleEntity1 = new SampleEntity(); sampleEntity1.setId(nextIdAsString()); sampleEntity1.setMessage("some test message"); @@ -113,23 +110,19 @@ public class CriteriaQueryIntegrationTests { sampleEntity2.setId(nextIdAsString()); sampleEntity2.setMessage("some other message"); operations.save(sampleEntity2); - indexOperations.refresh(); - // when CriteriaQuery criteriaQuery = new CriteriaQuery( new Criteria("message").contains("test").or("message").contains("other")); - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(searchHits).isNotNull(); assertThat(searchHits.getSearchHits().stream().map(SearchHit::getId)).containsExactlyInAnyOrder(sampleEntity1.id, sampleEntity2.id); } - @Test // ,DATAES-706 + @Test // DATAES-706 public void shouldPerformAndOperationWithinCriteria() { - // given SampleEntity sampleEntity1 = new SampleEntity(); sampleEntity1.setId(nextIdAsString()); sampleEntity1.setMessage("some test message"); @@ -138,22 +131,18 @@ public class CriteriaQueryIntegrationTests { sampleEntity2.setId(nextIdAsString()); sampleEntity2.setMessage("some other message"); operations.save(sampleEntity2); - indexOperations.refresh(); - // when CriteriaQuery criteriaQuery = new CriteriaQuery( new Criteria("message").contains("test").and(new Criteria("message").contains("some"))); - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(searchHits).isNotNull(); assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1); } - @Test // ,DATAES-706 + @Test // DATAES-706 public void shouldPerformOrOperationWithinCriteria() { - // given SampleEntity sampleEntity1 = new SampleEntity(); sampleEntity1.setId(nextIdAsString()); sampleEntity1.setMessage("some test message"); @@ -162,14 +151,11 @@ public class CriteriaQueryIntegrationTests { sampleEntity2.setId(nextIdAsString()); sampleEntity2.setMessage("some other message"); operations.save(sampleEntity2); - indexOperations.refresh(); - // when CriteriaQuery criteriaQuery = new CriteriaQuery( new Criteria("message").contains("test").or(new Criteria("message").contains("other"))); - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(searchHits).isNotNull(); assertThat(searchHits.getSearchHits().stream().map(SearchHit::getId)).containsExactlyInAnyOrder(sampleEntity1.id, sampleEntity2.id); @@ -178,9 +164,8 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformIsOperation() { - // given List indexQueries = new ArrayList<>(); - // first document + String documentId = nextIdAsString(); SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setId(documentId); @@ -192,12 +177,12 @@ public class CriteriaQueryIntegrationTests { indexQuery.setObject(sampleEntity); indexQueries.add(indexQuery); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("some message")); // when - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); // then assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message"); @@ -207,7 +192,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformMultipleIsOperations() { - // given List indexQueries = new ArrayList<>(); // first document @@ -234,14 +218,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("some message")); - // when - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message"); assertThat(searchHits.getTotalHits()).isEqualTo(1); } @@ -249,7 +231,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformEndsWithOperation() { - // given List indexQueries = new ArrayList<>(); // first document @@ -276,15 +257,13 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + Criteria criteria = new Criteria("message").endsWith("end"); CriteriaQuery criteriaQuery = new CriteriaQuery(criteria); - // when - SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class); - // then assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message"); assertThat(sampleEntity).isNotNull(); } @@ -292,7 +271,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformStartsWithOperation() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -318,15 +296,13 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + Criteria criteria = new Criteria("message").startsWith("start"); CriteriaQuery criteriaQuery = new CriteriaQuery(criteria); - // when - SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class); - // then assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message"); assertThat(sampleEntity).isNotNull(); } @@ -334,7 +310,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformContainsOperation() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -360,14 +335,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("contains")); - // when - SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class); - // then assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message"); assertThat(sampleEntity).isNotNull(); } @@ -401,12 +374,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").expression("+elasticsearch || test")); // when - SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class); // then assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message"); @@ -416,7 +389,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldExecuteCriteriaChain() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -442,15 +414,13 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery( new Criteria("message").startsWith("some").endsWith("search").contains("message").is("some message search")); - // when - SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class); - // then assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message"); assertThat(sampleEntity).isNotNull(); } @@ -458,7 +428,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformIsNotOperation() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -484,14 +453,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("foo").not()); - // when - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(criteriaQuery.getCriteria().isNegating()).isTrue(); assertThat(searchHits).isNotNull(); assertThat(searchHits.iterator().next().getContent().getMessage()).doesNotContain("foo"); @@ -500,7 +467,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformBetweenOperation() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -528,21 +494,18 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").between(100, 150)); - // when - SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit sampleEntity = operations.searchOne(criteriaQuery, SampleEntity.class); - // then assertThat(sampleEntity).isNotNull(); } @Test public void shouldPerformBetweenOperationWithoutUpperBound() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -570,14 +533,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").between(350, null)); - // when - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(searchHits).isNotNull(); assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1); } @@ -585,7 +546,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformBetweenOperationWithoutLowerBound() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -613,14 +573,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").between(null, 550)); - // when - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(searchHits).isNotNull(); assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1); } @@ -628,7 +586,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformLessThanEqualOperation() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -656,14 +613,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").lessThanEqual(750)); - // when - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(searchHits).isNotNull(); assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1); } @@ -671,7 +626,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformGreaterThanEquals() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -699,14 +653,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").greaterThanEqual(950)); - // when - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(searchHits).isNotNull(); assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1); } @@ -714,7 +666,6 @@ public class CriteriaQueryIntegrationTests { @Test public void shouldPerformBoostOperation() { - // given List indexQueries = new ArrayList<>(); // first document String documentId = nextIdAsString(); @@ -742,14 +693,12 @@ public class CriteriaQueryIntegrationTests { indexQuery2.setObject(sampleEntity2); indexQueries.add(indexQuery2); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); + CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("foo").boost(1)); - // when - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); - // then assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1); } @@ -760,13 +709,12 @@ public class CriteriaQueryIntegrationTests { indexQueries.add(buildIndex(new SampleEntity("1", "ab"))); indexQueries.add(buildIndex(new SampleEntity("2", "bc"))); indexQueries.add(buildIndex(new SampleEntity("3", "ac"))); - operations.bulkIndex(indexQueries, index); - indexOperations.refresh(); + operations.bulkIndex(indexQueries, SampleEntity.class); CriteriaQuery criteriaQuery = new CriteriaQuery( new Criteria("message").contains("a").or(new Criteria("message").contains("b"))); criteriaQuery.setMinScore(2.0F); - SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(criteriaQuery, SampleEntity.class); assertThat(searchHits.getTotalHits()).isEqualTo(1); assertThat(searchHits.getSearchHit(0).getContent().getMessage()).isEqualTo("ab"); @@ -775,7 +723,6 @@ public class CriteriaQueryIntegrationTests { @Test // DATAES-213 public void shouldEscapeValue() { - // given String documentId = nextIdAsString(); SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setId(documentId); @@ -785,19 +732,16 @@ public class CriteriaQueryIntegrationTests { IndexQuery indexQuery = new IndexQuery(); indexQuery.setId(documentId); indexQuery.setObject(sampleEntity); - operations.index(indexQuery, index); - indexOperations.refresh(); + operations.index(indexQuery, IndexCoordinates.of(indexNameProvider.indexName())); CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("Hello World!")); - // when - SearchHit sampleEntity1 = operations.searchOne(criteriaQuery, SampleEntity.class, index); + SearchHit sampleEntity1 = operations.searchOne(criteriaQuery, SampleEntity.class); - // then assertThat(sampleEntity1).isNotNull(); } - @Document(indexName = "test-index-sample-core-query") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class SampleEntity { @Nullable @Id private String id; @Nullable @Field(type = Text, store = true, fielddata = true) private String type; diff --git a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTransportIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTransportIntegrationTests.java index d66f07a4c..561a2fe90 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTransportIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTransportIntegrationTests.java @@ -15,10 +15,12 @@ */ package org.springframework.data.elasticsearch.core.query; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.test.context.ContextConfiguration; /** @@ -29,5 +31,11 @@ public class CriteriaQueryTransportIntegrationTests extends CriteriaQueryIntegra @Configuration @Import({ ElasticsearchTemplateConfiguration.class }) @EnableElasticsearchRepositories(considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("criteria-query"); + } + + } } diff --git a/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ClusterConnection.java b/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ClusterConnection.java index 111b91c44..4b6f8083b 100644 --- a/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ClusterConnection.java +++ b/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/ClusterConnection.java @@ -15,15 +15,11 @@ */ package org.springframework.data.elasticsearch.junit.jupiter; -import java.net.MalformedURLException; -import java.net.URL; - import org.junit.jupiter.api.extension.ExtensionContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.elasticsearch.support.VersionInfo; import org.springframework.lang.Nullable; -import org.springframework.util.StringUtils; import org.testcontainers.elasticsearch.ElasticsearchContainer; /** @@ -47,12 +43,10 @@ public class ClusterConnection implements ExtensionContext.Store.CloseableResour @Nullable private final ClusterConnectionInfo clusterConnectionInfo; /** - * creates the ClusterConnection, starting a container if necessary. - * - * @param clusterUrl if null or empty a local cluster is tarted + * creates the ClusterConnection, starting a container */ - public ClusterConnection(@Nullable String clusterUrl) { - clusterConnectionInfo = StringUtils.isEmpty(clusterUrl) ? startElasticsearchContainer() : parseUrl(clusterUrl); + public ClusterConnection() { + clusterConnectionInfo = startElasticsearchContainer(); if (clusterConnectionInfo != null) { LOGGER.debug(clusterConnectionInfo.toString()); @@ -75,28 +69,6 @@ public class ClusterConnection implements ExtensionContext.Store.CloseableResour return clusterConnectionInfo; } - /** - * @param clusterUrl the URL to parse - * @return the connection information - */ - private ClusterConnectionInfo parseUrl(String clusterUrl) { - try { - URL url = new URL(clusterUrl); - - if (!url.getProtocol().startsWith("http") || url.getPort() <= 0) { - throw new ClusterConnectionException("invalid url " + clusterUrl); - } - - return ClusterConnectionInfo.builder() // - .withHostAndPort(url.getHost(), url.getPort()) // - .useSsl(url.getProtocol().equals("https")) // - .build(); - } catch (MalformedURLException e) { - throw new ClusterConnectionException(e); - } - - } - @Nullable private ClusterConnectionInfo startElasticsearchContainer() { diff --git a/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/SpringDataElasticsearchExtension.java b/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/SpringDataElasticsearchExtension.java index c966d32a5..82ba9b973 100644 --- a/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/SpringDataElasticsearchExtension.java +++ b/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/SpringDataElasticsearchExtension.java @@ -46,7 +46,6 @@ import org.springframework.test.context.MergedContextConfiguration; public class SpringDataElasticsearchExtension implements BeforeAllCallback, ParameterResolver, ContextCustomizerFactory { - public static final String SPRING_DATA_ELASTICSEARCH_TEST_CLUSTER_URL = "SPRING_DATA_ELASTICSEARCH_TEST_CLUSTER_URL"; private static final Logger LOGGER = LoggerFactory.getLogger(SpringDataElasticsearchExtension.class); private static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace @@ -77,7 +76,7 @@ public class SpringDataElasticsearchExtension } private ClusterConnection createClusterConnection() { - return new ClusterConnection(System.getenv(SPRING_DATA_ELASTICSEARCH_TEST_CLUSTER_URL)); + return new ClusterConnection(); } @Override @@ -89,7 +88,7 @@ public class SpringDataElasticsearchExtension /* * (non javadoc) - * no need to check the paramaterContext and extensionContext here, this was done before in supportsParameter. + * no need to check the parameterContext and extensionContext here, this was done before in supportsParameter. */ @Override public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) diff --git a/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/SpringIntegrationTest.java b/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/SpringIntegrationTest.java index 9c3a37493..3deecc7d7 100644 --- a/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/SpringIntegrationTest.java +++ b/src/test/java/org/springframework/data/elasticsearch/junit/jupiter/SpringIntegrationTest.java @@ -20,12 +20,16 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.test.context.junit.jupiter.SpringExtension; /** - * Combines the {@link SpringDataElasticsearchExtension} and the {@link SpringExtension}. + * Combines the {@link SpringDataElasticsearchExtension} and the {@link SpringExtension}. Tests are executed in + * accordance to the {@link org.junit.jupiter.api.Order} annotation, to be able to have an explicit last test method for + * cleanup (since 4.3) * * @author Peter-Josef Meisch */ @@ -34,5 +38,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringDataElasticsearchExtension.class) @ExtendWith(SpringExtension.class) @Tag(Tags.INTEGRATION_TEST) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) public @interface SpringIntegrationTest { } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/CdiRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/CdiRepositoryTests.java index 321e32f1e..03c098230 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/CdiRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/cdi/CdiRepositoryTests.java @@ -153,10 +153,6 @@ public class CdiRepositoryTests { assertThat(personRepository.returnOne()).isEqualTo(1); } - /** - * @author Mohsin Husen - * @author Artur Konczak - */ @Document(indexName = "test-index-product-cdi-repository") static class Product { @Nullable @Id private String id; @@ -372,7 +368,7 @@ public class CdiRepositoryTests { } } - static class Author { + private static class Author { @Nullable private String id; @Nullable private String name; diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryTests.java index df74cf0dd..acb2fe57e 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryTests.java @@ -18,21 +18,22 @@ package org.springframework.data.elasticsearch.repositories.complex.custommethod import static org.assertj.core.api.Assertions.*; import static org.springframework.data.elasticsearch.annotations.FieldType.*; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.IndexOperations; +import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.elasticsearch.utils.IndexInitializer; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.lang.Nullable; import org.springframework.test.context.ContextConfiguration; @@ -48,38 +49,37 @@ public class ComplexCustomMethodRepositoryTests { @Configuration @Import({ ElasticsearchRestTemplateConfiguration.class }) @EnableElasticsearchRepositories(considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("complex-custom-method"); + } + } @Autowired private ComplexElasticsearchRepository complexRepository; - @Autowired ElasticsearchOperations operations; - - private IndexOperations indexOperations; + @Autowired private IndexNameProvider indexNameProvider; @BeforeEach public void before() { - indexOperations = operations.indexOps(SampleEntity.class); - IndexInitializer.init(indexOperations); + indexNameProvider.increment(); + operations.indexOps(SampleEntity.class).createWithMapping(); } - @AfterEach - void after() { - indexOperations.delete(); + @Test + @Order(java.lang.Integer.MAX_VALUE) + void cleanup() { + operations.indexOps(IndexCoordinates.of("*")).delete(); } @Test public void shouldExecuteComplexCustomMethod() { - // given - - // when String result = complexRepository.doSomethingSpecial(); - - // then assertThat(result).isEqualTo("2+2=4"); } - @Document(indexName = "test-index-sample-repositories-complex-custommethod-autowiring") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class SampleEntity { @Nullable @Id private String id; @Nullable @Field(type = Text, store = true, fielddata = true) private String type; diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryTransportTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryTransportTests.java index 821f8e795..2ce12567e 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryTransportTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/autowiring/ComplexCustomMethodRepositoryTransportTests.java @@ -15,10 +15,12 @@ */ package org.springframework.data.elasticsearch.repositories.complex.custommethod.autowiring; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.test.context.ContextConfiguration; /** @@ -29,5 +31,10 @@ public class ComplexCustomMethodRepositoryTransportTests extends ComplexCustomMe @Configuration @Import({ ElasticsearchTemplateConfiguration.class }) @EnableElasticsearchRepositories(considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("complex-custom-method"); + } + } } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringTests.java index 4a535a291..7837d79d0 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringTests.java @@ -18,21 +18,22 @@ package org.springframework.data.elasticsearch.repositories.complex.custommethod import static org.assertj.core.api.Assertions.*; import static org.springframework.data.elasticsearch.annotations.FieldType.*; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.IndexOperations; +import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.elasticsearch.utils.IndexInitializer; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.lang.Nullable; import org.springframework.test.context.ContextConfiguration; @@ -47,37 +48,37 @@ public class ComplexCustomMethodRepositoryManualWiringTests { @Configuration @Import({ ElasticsearchRestTemplateConfiguration.class }) @EnableElasticsearchRepositories(considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("complex-custom-method"); + } + } @Autowired private ComplexElasticsearchRepositoryManualWiring complexRepository; - @Autowired ElasticsearchOperations operations; - private IndexOperations indexOperations; + @Autowired private IndexNameProvider indexNameProvider; @BeforeEach public void before() { - indexOperations = operations.indexOps(SampleEntity.class); - IndexInitializer.init(indexOperations); + indexNameProvider.increment(); + operations.indexOps(SampleEntity.class).createWithMapping(); } - @AfterEach - void after() { - indexOperations.delete(); + @Test + @Order(java.lang.Integer.MAX_VALUE) + void cleanup() { + operations.indexOps(IndexCoordinates.of("*")).delete(); } @Test public void shouldExecuteComplexCustomMethod() { - // given - - // when String result = complexRepository.doSomethingSpecial(); - - // then assertThat(result).isEqualTo("3+3=6"); } - @Document(indexName = "test-index-sample-repository-manual-wiring") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class SampleEntity { @Nullable @Id private String id; @Nullable @Field(type = Text, store = true, fielddata = true) private String type; diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringTransportTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringTransportTests.java index 6a5b5092d..7eb99bae6 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringTransportTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/complex/custommethod/manualwiring/ComplexCustomMethodRepositoryManualWiringTransportTests.java @@ -15,10 +15,12 @@ */ package org.springframework.data.elasticsearch.repositories.complex.custommethod.manualwiring; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.test.context.ContextConfiguration; /** @@ -30,5 +32,10 @@ public class ComplexCustomMethodRepositoryManualWiringTransportTests @Configuration @Import({ ElasticsearchTemplateConfiguration.class }) @EnableElasticsearchRepositories(considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("complex-custom-method"); + } + } } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java index 81665558f..196adb47b 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java @@ -28,7 +28,6 @@ import java.util.UUID; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -47,16 +46,16 @@ import org.springframework.data.elasticsearch.annotations.Highlight; import org.springframework.data.elasticsearch.annotations.HighlightField; import org.springframework.data.elasticsearch.annotations.Query; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.IndexOperations; import org.springframework.data.elasticsearch.core.SearchHit; import org.springframework.data.elasticsearch.core.SearchHits; import org.springframework.data.elasticsearch.core.SearchPage; import org.springframework.data.elasticsearch.core.geo.GeoBox; import org.springframework.data.elasticsearch.core.geo.GeoPoint; +import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.GeoDistanceOrder; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.data.elasticsearch.utils.IndexInitializer; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.data.geo.Box; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Metrics; @@ -76,22 +75,23 @@ import org.springframework.lang.Nullable; @SpringIntegrationTest public abstract class CustomMethodRepositoryBaseTests { + @Autowired private IndexNameProvider indexNameProvider; @Autowired private SampleCustomMethodRepository repository; - @Autowired private SampleStreamingCustomMethodRepository streamingRepository; @Autowired ElasticsearchOperations operations; - private IndexOperations indexOperations; @BeforeEach public void before() { - indexOperations = operations.indexOps(SampleEntity.class); - IndexInitializer.init(indexOperations); + + indexNameProvider.increment(); + operations.indexOps(SampleEntity.class).createWithMapping(); } - @AfterEach - void after() { - indexOperations.delete(); + @Test + @org.junit.jupiter.api.Order(java.lang.Integer.MAX_VALUE) + void cleanup() { + operations.indexOps(IndexCoordinates.of("*")).delete(); } @Test @@ -1431,13 +1431,15 @@ public abstract class CustomMethodRepositoryBaseTests { // given List entities = createSampleEntities("abc", 10001); repository.saveAll(entities); + operations.indexOps(SampleEntity.class).refresh(); // when Stream stream = streamingRepository.findByType("abc"); // then assertThat(stream).isNotNull(); - assertThat(stream.count()).isEqualTo(10001L); + long count = stream.count(); + assertThat(count).isEqualTo(10001L); } @Test // DATAES-605 @@ -1647,7 +1649,7 @@ public abstract class CustomMethodRepositoryBaseTests { assertThat(count).isEqualTo(20); } - @Document(indexName = "test-index-sample-repositories-custom-method") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class SampleEntity { @Nullable @Id private String id; @Nullable @Field(type = Text, store = true, fielddata = true) private String type; @@ -1734,6 +1736,7 @@ public abstract class CustomMethodRepositoryBaseTests { * @author Mohsin Husen * @author Kevin Leturc */ + @SuppressWarnings("SpringDataRepositoryMethodParametersInspection") public interface SampleCustomMethodRepository extends ElasticsearchRepository { Page findByType(String type, Pageable pageable); diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryRestTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryRestTests.java index 3bc287dd4..891579868 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryRestTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryRestTests.java @@ -15,10 +15,12 @@ */ package org.springframework.data.elasticsearch.repositories.custommethod; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.test.context.ContextConfiguration; /** @@ -34,5 +36,10 @@ public class CustomMethodRepositoryRestTests extends CustomMethodRepositoryBaseT @EnableElasticsearchRepositories( basePackages = { "org.springframework.data.elasticsearch.repositories.custommethod" }, considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("custom-method-repository"); + } + } } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryTests.java index bb4632ebe..30bdd1b54 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryTests.java @@ -15,10 +15,13 @@ */ package org.springframework.data.elasticsearch.repositories.custommethod; +import org.junit.jupiter.api.Disabled; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.test.context.ContextConfiguration; /** @@ -34,6 +37,15 @@ public class CustomMethodRepositoryTests extends CustomMethodRepositoryBaseTests @EnableElasticsearchRepositories( basePackages = { "org.springframework.data.elasticsearch.repositories.custommethod" }, considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider("custom-method-repository"); + } + } + @Disabled("this test crashes the transport client connection in some dockerized test container setup") + @Override + public void streamMethodsShouldWorkWithLargeResultSets() { + } } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/doubleid/DoubleIDRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/doubleid/DoubleIDRepositoryTests.java index dc8d526f8..d234f1a81 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/doubleid/DoubleIDRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/doubleid/DoubleIDRepositoryTests.java @@ -21,22 +21,23 @@ import static org.springframework.data.elasticsearch.utils.IdGenerator.*; import java.util.Arrays; import java.util.Optional; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.IndexOperations; +import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.elasticsearch.utils.IndexInitializer; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.test.context.ContextConfiguration; /** @@ -53,22 +54,28 @@ public class DoubleIDRepositoryTests { @Configuration @Import({ ElasticsearchRestTemplateConfiguration.class }) @EnableElasticsearchRepositories(considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider(); + } + } @Autowired private DoubleIDRepository repository; @Autowired ElasticsearchOperations operations; - private IndexOperations indexOperations; + @Autowired IndexNameProvider indexNameProvider; @BeforeEach public void before() { - indexOperations = operations.indexOps(DoubleIDEntity.class); - IndexInitializer.init(indexOperations); + indexNameProvider.increment(); + operations.indexOps(DoubleIDEntity.class).createWithMapping(); } - @AfterEach - public void after() { - indexOperations.delete(); + @Test + @Order(Integer.MAX_VALUE) + public void cleanup() { + operations.indexOps(IndexCoordinates.of("*")).delete(); } @Test @@ -116,12 +123,7 @@ public class DoubleIDRepositoryTests { assertThat(entityFromElasticSearch).isPresent(); } - /** - * @author Rizwan Idrees - * @author Mohsin Husen - */ - - @Document(indexName = "test-index-double-keyed-entity") + @Document(indexName = "#{@indexNameProvider.indexName()}") static class DoubleIDEntity { @Id private Double id; @@ -162,9 +164,5 @@ public class DoubleIDRepositoryTests { } } - /** - * @author Ryan Henszey - * @author Mohsin Husen - */ interface DoubleIDRepository extends ElasticsearchRepository {} } diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryTests.java index 757a3b6a9..c38a0da86 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryTests.java @@ -22,10 +22,11 @@ import static org.springframework.data.elasticsearch.utils.IdGenerator.*; import java.util.Map; import org.elasticsearch.index.query.QueryBuilders; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; @@ -42,7 +43,7 @@ import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTem import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import org.springframework.data.elasticsearch.utils.IndexInitializer; +import org.springframework.data.elasticsearch.utils.IndexNameProvider; import org.springframework.test.context.ContextConfiguration; /** @@ -59,31 +60,34 @@ public class DynamicSettingAndMappingEntityRepositoryTests { @Configuration @Import({ ElasticsearchRestTemplateConfiguration.class }) @EnableElasticsearchRepositories(considerNestedRepositories = true) - static class Config {} + static class Config { + @Bean + IndexNameProvider indexNameProvider() { + return new IndexNameProvider(); + } + } @Autowired private ElasticsearchOperations operations; private IndexOperations indexOperations; - + @Autowired IndexNameProvider indexNameProvider; @Autowired private DynamicSettingAndMappingEntityRepository repository; @BeforeEach public void before() { + indexNameProvider.increment(); indexOperations = operations.indexOps(DynamicSettingAndMappingEntity.class); - IndexInitializer.init(indexOperations); + indexOperations.createWithMapping(); } - @AfterEach - void after() { - indexOperations.delete(); + @Test + @Order(Integer.MAX_VALUE) + void cleanup() { + operations.indexOps(IndexCoordinates.of("*")).delete(); } @Test // DATAES-64 public void shouldCreateGivenDynamicSettingsForGivenIndex() { - // given - // delete , create and apply mapping in before method - - // then assertThat(indexOperations.exists()).isTrue(); Map map = indexOperations.getSettings(); assertThat(map.containsKey("index.number_of_replicas")).isTrue(); @@ -97,7 +101,6 @@ public class DynamicSettingAndMappingEntityRepositoryTests { @Test // DATAES-64 public void shouldSearchOnGivenTokenizerUsingGivenDynamicSettingsForGivenIndex() { - // given DynamicSettingAndMappingEntity dynamicSettingAndMappingEntity1 = new DynamicSettingAndMappingEntity(); dynamicSettingAndMappingEntity1.setId(nextIdAsString()); dynamicSettingAndMappingEntity1.setName("test-setting1"); @@ -112,16 +115,14 @@ public class DynamicSettingAndMappingEntityRepositoryTests { repository.save(dynamicSettingAndMappingEntity2); - // when NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(QueryBuilders.termQuery("email", dynamicSettingAndMappingEntity1.getEmail())).build(); - IndexCoordinates index = IndexCoordinates.of("test-index-dynamic-setting-and-mapping"); + IndexCoordinates index = IndexCoordinates.of(indexNameProvider.indexName()); long count = operations.count(searchQuery, DynamicSettingAndMappingEntity.class, index); SearchHits entityList = operations.search(searchQuery, DynamicSettingAndMappingEntity.class, index); - // then assertThat(count).isEqualTo(1L); assertThat(entityList).isNotNull().hasSize(1); assertThat(entityList.getSearchHit(0).getContent().getEmail()) @@ -131,13 +132,8 @@ public class DynamicSettingAndMappingEntityRepositoryTests { @Test public void shouldGetMappingForGivenIndexAndType() { - // given - // delete , create and apply mapping in before method - - // when Map mapping = indexOperations.getMapping(); - // then Map properties = (Map) mapping.get("properties"); assertThat(mapping).isNotNull(); assertThat(properties).isNotNull(); @@ -176,9 +172,6 @@ public class DynamicSettingAndMappingEntityRepositoryTests { @Test // DATAES-86 public void shouldCreateMappingWithUsingMappingAnnotation() { - // given - - // then Map mapping = indexOperations.getMapping(); Map properties = (Map) mapping.get("properties"); assertThat(mapping).isNotNull(); @@ -188,10 +181,7 @@ public class DynamicSettingAndMappingEntityRepositoryTests { assertThat(emailProperties.get("analyzer")).isEqualTo("emailAnalyzer"); } - /** - * @author Mohsin Husen - */ - @Document(indexName = "test-index-dynamic-setting-and-mapping") + @Document(indexName = "#{@indexNameProvider.indexName()}") @Setting(settingPath = "/settings/test-settings.json") @Mapping(mappingPath = "/mappings/test-mappings.json") static class DynamicSettingAndMappingEntity { @@ -225,9 +215,6 @@ public class DynamicSettingAndMappingEntityRepositoryTests { } } - /** - * @author Mohsin Husen - */ public interface DynamicSettingAndMappingEntityRepository extends ElasticsearchRepository {} diff --git a/src/test/java/org/springframework/data/elasticsearch/utils/IndexNameProvider.java b/src/test/java/org/springframework/data/elasticsearch/utils/IndexNameProvider.java new file mode 100644 index 000000000..442d2681f --- /dev/null +++ b/src/test/java/org/springframework/data/elasticsearch/utils/IndexNameProvider.java @@ -0,0 +1,44 @@ +/* + * Copyright 2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.elasticsearch.utils; + +/** + * Class providing an index name with a prefix and a index number + * + * @author Peter-Josef Meisch + */ +public class IndexNameProvider { + private final String prefix; + private int idx = -1; + private String indexName; + + public IndexNameProvider() { + this("index-default"); + } + + public IndexNameProvider(String prefix) { + this.prefix = prefix; + increment(); + } + + public void increment() { + indexName = prefix + "-" + ++idx; + } + + public String indexName() { + return indexName; + } +}