package com.github.obourgain.elasticsearch.http.handler.document;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import org.assertj.core.api.Assertions;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.Requests;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.search.fetch.source.FetchSourceContext;
import org.elasticsearch.search.lookup.SourceLookup;
import org.junit.Test;
import com.github.obourgain.elasticsearch.http.AbstractTest;
import com.github.obourgain.elasticsearch.http.response.ElasticsearchHttpException;
import com.github.obourgain.elasticsearch.http.handler.document.get.GetResponse;
public class GetActionHandlerTest extends AbstractTest {
@Test
public void should_get_document() throws IOException, ExecutionException, InterruptedException {
BytesReference source = source().bytes();
byte[] array = source.toBytes();
IndexRequest request = Requests.indexRequest().index(THE_INDEX)
.type(THE_TYPE)
.id(THE_ID)
.source(array);
Map<String, Object> expected = SourceLookup.sourceAsMap(source);
transportClient.index(request).actionGet();
GetResponse getResponse = httpClient.get(Requests.getRequest(THE_INDEX).type(THE_TYPE).id(THE_ID)
.fetchSourceContext(FetchSourceContext.FETCH_SOURCE))
.get();
compareMap(expected, getResponse.getSource());
}
@Test
public void should_get_document_without_source() throws IOException, ExecutionException, InterruptedException {
BytesReference source = source().bytes();
byte[] array = source.toBytes();
IndexRequest request = Requests.indexRequest().index(THE_INDEX)
.type(THE_TYPE)
.id(THE_ID)
.source(array);
transportClient.index(request).actionGet();
GetResponse getResponse = httpClient.get(Requests.getRequest(THE_INDEX).type(THE_TYPE).id(THE_ID)
.fields("the_string_field")
.fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE))
.get();
Assertions.assertThat(getResponse.getSource()).isNull();
Assertions.assertThat(getResponse.getFields()).hasSize(1)
.containsKey("the_string_field");
}
@Test
public void should_get_document_fields() throws IOException, ExecutionException, InterruptedException {
BytesReference source = source().bytes();
byte[] array = source.toBytes();
IndexRequest request = Requests.indexRequest().index(THE_INDEX)
.type(THE_TYPE)
.id(THE_ID)
.source(array);
transportClient.index(request).actionGet();
GetResponse getResponse = httpClient.get(Requests.getRequest(THE_INDEX).type(THE_TYPE).id(THE_ID)
.fields("the_string_field"))
.get();
Assertions.assertThat(getResponse.getSource()).isNull();
Assertions.assertThat(getResponse.getFields()).hasSize(1)
.containsKey("the_string_field");
}
@Test
public void should_get_document_version() throws IOException, ExecutionException, InterruptedException {
BytesReference source = source().bytes();
byte[] array = source.toBytes();
IndexRequest request = Requests.indexRequest().index(THE_INDEX)
.type(THE_TYPE)
.id(THE_ID)
.source(array);
transportClient.index(request).actionGet();
transportClient.index(request).actionGet();
httpClient.get(Requests.getRequest(THE_INDEX).type(THE_TYPE).id(THE_ID)
.version(2))
.get();
}
@Test
public void should_fail_when_version_different() throws IOException, InterruptedException {
BytesReference source = source().bytes();
byte[] array = source.toBytes();
IndexRequest request = Requests.indexRequest().index(THE_INDEX)
.type(THE_TYPE)
.id(THE_ID)
.source(array);
transportClient.index(request).actionGet();
transportClient.index(request).actionGet();
try {
httpClient.get(Requests.getRequest(THE_INDEX).type(THE_TYPE).id(THE_ID)
.version(1))
.get();
} catch (ExecutionException e) {
Assertions.assertThat(e).hasCauseInstanceOf(ElasticsearchHttpException.class);
Assertions.assertThat(e.getMessage()).contains("status code 409");
Assertions.assertThat(e.getMessage()).contains("VersionConflictEngineException");
Assertions.assertThat(e.getMessage()).contains("version conflict, current [2], provided [1]");
}
}
}