DATAES-684 Implement bulk request from reactive client
Original PR: #342 * DATAES-684 Implement bulk request from reactive client * Update src/main/java/org/springframework/data/elasticsearch/client/reactive/ReactiveElasticsearchClient.java Co-Authored-By: Peter-Josef Meisch <pj.meisch@sothawo.com> * DATAES-684 Implement bulk request from reactive client Added author
This commit is contained in:
committed by
Peter-Josef Meisch
parent
a4b9a764c9
commit
6ae424428c
@@ -18,10 +18,12 @@ package org.springframework.data.elasticsearch.client.reactive;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import org.elasticsearch.action.bulk.BulkRequest;
|
||||
import reactor.test.StepVerifier;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
@@ -64,6 +66,7 @@ import org.springframework.test.context.ContextConfiguration;
|
||||
* @author Christoph Strobl
|
||||
* @author Mark Paluch
|
||||
* @author Peter-Josef Meisch
|
||||
* @author Henrique Amaral
|
||||
*/
|
||||
@SpringIntegrationTest
|
||||
@ContextConfiguration(classes = { ElasticsearchRestTemplateConfiguration.class })
|
||||
@@ -650,6 +653,34 @@ public class ReactiveElasticsearchClientTests {
|
||||
.verifyError(ElasticsearchStatusException.class);
|
||||
}
|
||||
|
||||
@Test // DATAES-684
|
||||
public void bulkShouldUpdateExistingDocument() {
|
||||
String idFirstDoc = addSourceDocument().ofType(TYPE_I).to(INDEX_I);
|
||||
String idSecondDoc = addSourceDocument().ofType(TYPE_I).to(INDEX_I);
|
||||
|
||||
UpdateRequest requestFirstDoc = new UpdateRequest(INDEX_I, TYPE_I, idFirstDoc) //
|
||||
.doc(Collections.singletonMap("dutiful", "farseer"));
|
||||
UpdateRequest requestSecondDoc = new UpdateRequest(INDEX_I, TYPE_I, idSecondDoc) //
|
||||
.doc(Collections.singletonMap("secondDocUpdate", "secondDocUpdatePartTwo"));
|
||||
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(requestFirstDoc);
|
||||
bulkRequest.add(requestSecondDoc);
|
||||
|
||||
client.bulk(bulkRequest)
|
||||
.as(StepVerifier::create) //
|
||||
.consumeNextWith(it -> {
|
||||
assertThat(it.status()).isEqualTo(RestStatus.OK);
|
||||
assertThat(it.hasFailures()).isFalse();
|
||||
|
||||
Arrays.stream(it.getItems()).forEach(itemResponse-> {
|
||||
assertThat(itemResponse.status()).isEqualTo(RestStatus.OK);
|
||||
assertThat(itemResponse.getVersion()).isEqualTo(2);
|
||||
});
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
private AddToIndexOfType addSourceDocument() {
|
||||
return add(DOC_SOURCE);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ import static org.mockito.ArgumentMatchers.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.springframework.data.elasticsearch.client.reactive.ReactiveMockClientTestsUtils.MockWebClientProvider.Receive.*;
|
||||
|
||||
import org.elasticsearch.action.bulk.BulkRequest;
|
||||
import org.elasticsearch.rest.RestStatus;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.test.StepVerifier;
|
||||
|
||||
@@ -51,6 +53,7 @@ import org.springframework.util.StreamUtils;
|
||||
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
* @author Henrique Amaral
|
||||
*/
|
||||
public class ReactiveElasticsearchClientUnitTests {
|
||||
|
||||
@@ -622,4 +625,26 @@ public class ReactiveElasticsearchClientUnitTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test // DATAES-684
|
||||
public void bulkShouldEmitResponseCorrectly() {
|
||||
|
||||
hostProvider.when(HOST) //
|
||||
.receiveBulkOk();
|
||||
|
||||
final UpdateRequest updateRequest = new UpdateRequest("twitter", "doc", "1")
|
||||
.doc(Collections.singletonMap("user", "cstrobl"));
|
||||
final BulkRequest bulkRequest = new BulkRequest();
|
||||
bulkRequest.add(updateRequest);
|
||||
|
||||
client.bulk(bulkRequest)
|
||||
.as(StepVerifier::create) //
|
||||
.consumeNextWith(bulkResponse -> {
|
||||
|
||||
assertThat(bulkResponse.status()).isEqualTo(RestStatus.OK);
|
||||
assertThat(bulkResponse.hasFailures()).isFalse();
|
||||
|
||||
}) //
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ import org.springframework.web.util.UriBuilder;
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
* @author Huw Ayling-Miller
|
||||
* @author Henrique Amaral
|
||||
*/
|
||||
public class ReactiveMockClientTestsUtils {
|
||||
|
||||
@@ -371,6 +372,12 @@ public class ReactiveMockClientTestsUtils {
|
||||
});
|
||||
}
|
||||
|
||||
default Receive receiveBulkOk() {
|
||||
|
||||
return receiveJsonFromFile("bulk-ok") //
|
||||
.receive(Receive::ok);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public interface Receive {
|
||||
|
||||
Reference in New Issue
Block a user