|
@@ -23,7 +23,9 @@ import org.apache.http.HttpEntity;
|
|
|
import org.apache.http.entity.ContentType;
|
|
|
import org.elasticsearch.Version;
|
|
|
import org.elasticsearch.action.search.SearchRequest;
|
|
|
+import org.elasticsearch.client.Request;
|
|
|
import org.elasticsearch.common.bytes.BytesArray;
|
|
|
+import org.elasticsearch.common.bytes.BytesReference;
|
|
|
import org.elasticsearch.common.io.Streams;
|
|
|
import org.elasticsearch.common.unit.TimeValue;
|
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
@@ -35,14 +37,12 @@ import java.nio.charset.StandardCharsets;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import static org.elasticsearch.common.unit.TimeValue.timeValueMillis;
|
|
|
-import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.clearScrollEntity;
|
|
|
-import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.initialSearchEntity;
|
|
|
-import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.initialSearchParams;
|
|
|
-import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.initialSearchPath;
|
|
|
-import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.scrollEntity;
|
|
|
-import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.scrollParams;
|
|
|
+import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.clearScroll;
|
|
|
+import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.initialSearch;
|
|
|
+import static org.elasticsearch.index.reindex.remote.RemoteRequestBuilders.scroll;
|
|
|
import static org.hamcrest.Matchers.containsString;
|
|
|
import static org.hamcrest.Matchers.either;
|
|
|
+import static org.hamcrest.Matchers.empty;
|
|
|
import static org.hamcrest.Matchers.endsWith;
|
|
|
import static org.hamcrest.Matchers.hasEntry;
|
|
|
import static org.hamcrest.Matchers.hasKey;
|
|
@@ -57,15 +57,17 @@ import static org.hamcrest.Matchers.not;
|
|
|
*/
|
|
|
public class RemoteRequestBuildersTests extends ESTestCase {
|
|
|
public void testIntialSearchPath() {
|
|
|
- SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
+ Version remoteVersion = Version.fromId(between(0, Version.CURRENT.id));
|
|
|
+ BytesReference query = new BytesArray("{}");
|
|
|
|
|
|
- assertEquals("/_search", initialSearchPath(searchRequest));
|
|
|
+ SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
+ assertEquals("/_search", initialSearch(searchRequest, query, remoteVersion).getEndpoint());
|
|
|
searchRequest.indices("a");
|
|
|
searchRequest.types("b");
|
|
|
- assertEquals("/a/b/_search", initialSearchPath(searchRequest));
|
|
|
+ assertEquals("/a/b/_search", initialSearch(searchRequest, query, remoteVersion).getEndpoint());
|
|
|
searchRequest.indices("a", "b");
|
|
|
searchRequest.types("c", "d");
|
|
|
- assertEquals("/a,b/c,d/_search", initialSearchPath(searchRequest));
|
|
|
+ assertEquals("/a,b/c,d/_search", initialSearch(searchRequest, query, remoteVersion).getEndpoint());
|
|
|
|
|
|
searchRequest.indices("cat,");
|
|
|
expectBadStartRequest(searchRequest, "Index", ",", "cat,");
|
|
@@ -96,63 +98,70 @@ public class RemoteRequestBuildersTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
private void expectBadStartRequest(SearchRequest searchRequest, String type, String bad, String failed) {
|
|
|
- IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> initialSearchPath(searchRequest));
|
|
|
+ Version remoteVersion = Version.fromId(between(0, Version.CURRENT.id));
|
|
|
+ BytesReference query = new BytesArray("{}");
|
|
|
+ IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> initialSearch(searchRequest, query, remoteVersion));
|
|
|
assertEquals(type + " containing [" + bad + "] not supported but got [" + failed + "]", e.getMessage());
|
|
|
}
|
|
|
|
|
|
public void testInitialSearchParamsSort() {
|
|
|
+ BytesReference query = new BytesArray("{}");
|
|
|
SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
|
|
|
// Test sort:_doc for versions that support it.
|
|
|
Version remoteVersion = Version.fromId(between(2010099, Version.CURRENT.id));
|
|
|
searchRequest.source().sort("_doc");
|
|
|
- assertThat(initialSearchParams(searchRequest, remoteVersion), hasEntry("sort", "_doc:asc"));
|
|
|
+ assertThat(initialSearch(searchRequest, query, remoteVersion).getParameters(), hasEntry("sort", "_doc:asc"));
|
|
|
|
|
|
// Test search_type scan for versions that don't support sort:_doc.
|
|
|
remoteVersion = Version.fromId(between(0, 2010099 - 1));
|
|
|
- assertThat(initialSearchParams(searchRequest, remoteVersion), hasEntry("search_type", "scan"));
|
|
|
+ assertThat(initialSearch(searchRequest, query, remoteVersion).getParameters(), hasEntry("search_type", "scan"));
|
|
|
|
|
|
// Test sorting by some field. Version doesn't matter.
|
|
|
remoteVersion = Version.fromId(between(0, Version.CURRENT.id));
|
|
|
searchRequest.source().sorts().clear();
|
|
|
searchRequest.source().sort("foo");
|
|
|
- assertThat(initialSearchParams(searchRequest, remoteVersion), hasEntry("sort", "foo:asc"));
|
|
|
+ assertThat(initialSearch(searchRequest, query, remoteVersion).getParameters(), hasEntry("sort", "foo:asc"));
|
|
|
}
|
|
|
|
|
|
public void testInitialSearchParamsFields() {
|
|
|
+ BytesReference query = new BytesArray("{}");
|
|
|
SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
|
|
|
// Test request without any fields
|
|
|
Version remoteVersion = Version.fromId(between(2000099, Version.CURRENT.id));
|
|
|
- assertThat(initialSearchParams(searchRequest, remoteVersion),
|
|
|
+ assertThat(initialSearch(searchRequest, query, remoteVersion).getParameters(),
|
|
|
not(either(hasKey("stored_fields")).or(hasKey("fields"))));
|
|
|
|
|
|
// Test stored_fields for versions that support it
|
|
|
searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
searchRequest.source().storedField("_source").storedField("_id");
|
|
|
remoteVersion = Version.fromId(between(Version.V_5_0_0_alpha4_ID, Version.CURRENT.id));
|
|
|
- assertThat(initialSearchParams(searchRequest, remoteVersion), hasEntry("stored_fields", "_source,_id"));
|
|
|
+ assertThat(initialSearch(searchRequest, query, remoteVersion).getParameters(), hasEntry("stored_fields", "_source,_id"));
|
|
|
|
|
|
// Test fields for versions that support it
|
|
|
searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
searchRequest.source().storedField("_source").storedField("_id");
|
|
|
remoteVersion = Version.fromId(between(2000099, Version.V_5_0_0_alpha4_ID - 1));
|
|
|
- assertThat(initialSearchParams(searchRequest, remoteVersion), hasEntry("fields", "_source,_id"));
|
|
|
+ assertThat(initialSearch(searchRequest, query, remoteVersion).getParameters(), hasEntry("fields", "_source,_id"));
|
|
|
|
|
|
// Test extra fields for versions that need it
|
|
|
searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
searchRequest.source().storedField("_source").storedField("_id");
|
|
|
remoteVersion = Version.fromId(between(0, 2000099 - 1));
|
|
|
- assertThat(initialSearchParams(searchRequest, remoteVersion), hasEntry("fields", "_source,_id,_parent,_routing,_ttl"));
|
|
|
+ assertThat(initialSearch(searchRequest, query, remoteVersion).getParameters(),
|
|
|
+ hasEntry("fields", "_source,_id,_parent,_routing,_ttl"));
|
|
|
|
|
|
// But only versions before 1.0 force _source to be in the list
|
|
|
searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
searchRequest.source().storedField("_id");
|
|
|
remoteVersion = Version.fromId(between(1000099, 2000099 - 1));
|
|
|
- assertThat(initialSearchParams(searchRequest, remoteVersion), hasEntry("fields", "_id,_parent,_routing,_ttl"));
|
|
|
+ assertThat(initialSearch(searchRequest, query, remoteVersion).getParameters(),
|
|
|
+ hasEntry("fields", "_id,_parent,_routing,_ttl"));
|
|
|
}
|
|
|
|
|
|
public void testInitialSearchParamsMisc() {
|
|
|
+ BytesReference query = new BytesArray("{}");
|
|
|
SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());
|
|
|
Version remoteVersion = Version.fromId(between(0, Version.CURRENT.id));
|
|
|
|
|
@@ -169,7 +178,7 @@ public class RemoteRequestBuildersTests extends ESTestCase {
|
|
|
searchRequest.source().version(fetchVersion);
|
|
|
}
|
|
|
|
|
|
- Map<String, String> params = initialSearchParams(searchRequest, remoteVersion);
|
|
|
+ Map<String, String> params = initialSearch(searchRequest, query, remoteVersion).getParameters();
|
|
|
|
|
|
if (scroll == null) {
|
|
|
assertThat(params, not(hasKey("scroll")));
|
|
@@ -199,7 +208,7 @@ public class RemoteRequestBuildersTests extends ESTestCase {
|
|
|
SearchRequest searchRequest = new SearchRequest();
|
|
|
searchRequest.source(new SearchSourceBuilder());
|
|
|
String query = "{\"match_all\":{}}";
|
|
|
- HttpEntity entity = initialSearchEntity(searchRequest, new BytesArray(query), remoteVersion);
|
|
|
+ HttpEntity entity = initialSearch(searchRequest, new BytesArray(query), remoteVersion).getEntity();
|
|
|
assertEquals(ContentType.APPLICATION_JSON.toString(), entity.getContentType().getValue());
|
|
|
if (remoteVersion.onOrAfter(Version.fromId(1000099))) {
|
|
|
assertEquals("{\"query\":" + query + ",\"_source\":true}",
|
|
@@ -211,48 +220,51 @@ public class RemoteRequestBuildersTests extends ESTestCase {
|
|
|
|
|
|
// Source filtering is included if set up
|
|
|
searchRequest.source().fetchSource(new String[] {"in1", "in2"}, new String[] {"out"});
|
|
|
- entity = initialSearchEntity(searchRequest, new BytesArray(query), remoteVersion);
|
|
|
+ entity = initialSearch(searchRequest, new BytesArray(query), remoteVersion).getEntity();
|
|
|
assertEquals(ContentType.APPLICATION_JSON.toString(), entity.getContentType().getValue());
|
|
|
assertEquals("{\"query\":" + query + ",\"_source\":{\"includes\":[\"in1\",\"in2\"],\"excludes\":[\"out\"]}}",
|
|
|
Streams.copyToString(new InputStreamReader(entity.getContent(), StandardCharsets.UTF_8)));
|
|
|
|
|
|
// Invalid XContent fails
|
|
|
RuntimeException e = expectThrows(RuntimeException.class,
|
|
|
- () -> initialSearchEntity(searchRequest, new BytesArray("{}, \"trailing\": {}"), remoteVersion));
|
|
|
+ () -> initialSearch(searchRequest, new BytesArray("{}, \"trailing\": {}"), remoteVersion));
|
|
|
assertThat(e.getCause().getMessage(), containsString("Unexpected character (',' (code 44))"));
|
|
|
- e = expectThrows(RuntimeException.class, () -> initialSearchEntity(searchRequest, new BytesArray("{"), remoteVersion));
|
|
|
+ e = expectThrows(RuntimeException.class, () -> initialSearch(searchRequest, new BytesArray("{"), remoteVersion));
|
|
|
assertThat(e.getCause().getMessage(), containsString("Unexpected end-of-input"));
|
|
|
}
|
|
|
|
|
|
public void testScrollParams() {
|
|
|
+ String scroll = randomAlphaOfLength(30);
|
|
|
Version remoteVersion = Version.fromId(between(0, Version.CURRENT.id));
|
|
|
- TimeValue scroll = TimeValue.parseTimeValue(randomPositiveTimeValue(), "test");
|
|
|
- assertScroll(remoteVersion, scrollParams(scroll, remoteVersion), scroll);
|
|
|
+ TimeValue keepAlive = TimeValue.parseTimeValue(randomPositiveTimeValue(), "test");
|
|
|
+ assertScroll(remoteVersion, scroll(scroll, keepAlive, remoteVersion).getParameters(), keepAlive);
|
|
|
}
|
|
|
|
|
|
public void testScrollEntity() throws IOException {
|
|
|
String scroll = randomAlphaOfLength(30);
|
|
|
- HttpEntity entity = scrollEntity(scroll, Version.V_5_0_0);
|
|
|
+ HttpEntity entity = scroll(scroll, timeValueMillis(between(1, 1000)), Version.V_5_0_0).getEntity();
|
|
|
assertEquals(ContentType.APPLICATION_JSON.toString(), entity.getContentType().getValue());
|
|
|
assertThat(Streams.copyToString(new InputStreamReader(entity.getContent(), StandardCharsets.UTF_8)),
|
|
|
containsString("\"" + scroll + "\""));
|
|
|
|
|
|
// Test with version < 2.0.0
|
|
|
- entity = scrollEntity(scroll, Version.fromId(1070499));
|
|
|
+ entity = scroll(scroll, timeValueMillis(between(1, 1000)), Version.fromId(1070499)).getEntity();
|
|
|
assertEquals(ContentType.TEXT_PLAIN.toString(), entity.getContentType().getValue());
|
|
|
assertEquals(scroll, Streams.copyToString(new InputStreamReader(entity.getContent(), StandardCharsets.UTF_8)));
|
|
|
}
|
|
|
|
|
|
- public void testClearScrollEntity() throws IOException {
|
|
|
+ public void testClearScroll() throws IOException {
|
|
|
String scroll = randomAlphaOfLength(30);
|
|
|
- HttpEntity entity = clearScrollEntity(scroll, Version.V_5_0_0);
|
|
|
- assertEquals(ContentType.APPLICATION_JSON.toString(), entity.getContentType().getValue());
|
|
|
- assertThat(Streams.copyToString(new InputStreamReader(entity.getContent(), StandardCharsets.UTF_8)),
|
|
|
+ Request request = clearScroll(scroll, Version.V_5_0_0);
|
|
|
+ assertEquals(ContentType.APPLICATION_JSON.toString(), request.getEntity().getContentType().getValue());
|
|
|
+ assertThat(Streams.copyToString(new InputStreamReader(request.getEntity().getContent(), StandardCharsets.UTF_8)),
|
|
|
containsString("\"" + scroll + "\""));
|
|
|
+ assertThat(request.getParameters().keySet(), empty());
|
|
|
|
|
|
// Test with version < 2.0.0
|
|
|
- entity = clearScrollEntity(scroll, Version.fromId(1070499));
|
|
|
- assertEquals(ContentType.TEXT_PLAIN.toString(), entity.getContentType().getValue());
|
|
|
- assertEquals(scroll, Streams.copyToString(new InputStreamReader(entity.getContent(), StandardCharsets.UTF_8)));
|
|
|
+ request = clearScroll(scroll, Version.fromId(1070499));
|
|
|
+ assertEquals(ContentType.TEXT_PLAIN.toString(), request.getEntity().getContentType().getValue());
|
|
|
+ assertEquals(scroll, Streams.copyToString(new InputStreamReader(request.getEntity().getContent(), StandardCharsets.UTF_8)));
|
|
|
+ assertThat(request.getParameters().keySet(), empty());
|
|
|
}
|
|
|
}
|