diff options
author | Tor Brede Vekterli <vekterli@oath.com> | 2018-01-31 16:33:12 +0100 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@oath.com> | 2018-01-31 16:53:57 +0100 |
commit | 464dfbedeb9b59d980dc093abd4ef30ba9f75ecb (patch) | |
tree | 3013b6fa5e7750f53c3f52a15a8843ffa06b81b9 /vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi | |
parent | 2c25a02adbe644b3f50dc44252c6b61974d0c8d6 (diff) |
Add `fieldSet` and `concurrency` parameter support to Document V1 visiting API
This fixes #4847
Diffstat (limited to 'vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi')
3 files changed, 72 insertions, 5 deletions
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java index 5735e84f3fe..2615f5e3f81 100644 --- a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java +++ b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java @@ -6,6 +6,7 @@ import com.yahoo.documentapi.ProgressToken; import com.yahoo.documentapi.VisitorControlHandler; import com.yahoo.documentapi.VisitorParameters; import com.yahoo.documentapi.VisitorSession; +import com.yahoo.messagebus.StaticThrottlePolicy; import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vdslib.VisitorStatistics; import com.yahoo.vespaclient.ClusterDef; @@ -21,7 +22,9 @@ import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.core.Is.is; +import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; @@ -119,16 +122,20 @@ public class OperationHandlerImplTest { } } + private static OperationHandler.VisitOptions.Builder optionsBuilder() { + return OperationHandler.VisitOptions.builder(); + } + private static RestUri dummyVisitUri() throws Exception { return new RestUri(new URI("http://localhost/document/v1/namespace/document-type/docid/")); } private static OperationHandler.VisitOptions visitOptionsWithWantedDocumentCount(int wantedDocumentCount) { - return new OperationHandler.VisitOptions(Optional.empty(), Optional.empty(), Optional.of(wantedDocumentCount)); + return optionsBuilder().wantedDocumentCount(wantedDocumentCount).build(); } private static OperationHandler.VisitOptions emptyVisitOptions() { - return new OperationHandler.VisitOptions(Optional.empty(), Optional.empty(), Optional.empty()); + return optionsBuilder().build(); } @Test @@ -207,4 +214,30 @@ public class OperationHandlerImplTest { assertThat(params.getMaxTotalHits(), is((long)OperationHandlerImpl.WANTED_DOCUMENT_COUNT_UPPER_BOUND)); } + @Test + public void field_set_covers_all_fields_by_default() throws Exception { + VisitorParameters params = generatedParametersFromVisitOptions(emptyVisitOptions()); + assertThat(params.fieldSet(), equalTo("document-type:[document]")); + } + + @Test + public void provided_fieldset_is_propagated_to_visitor_parameters() throws Exception { + VisitorParameters params = generatedParametersFromVisitOptions(optionsBuilder().fieldSet("document-type:bjarne").build()); + assertThat(params.fieldSet(), equalTo("document-type:bjarne")); + } + + @Test + public void concurrency_is_1_by_default() throws Exception { + VisitorParameters params = generatedParametersFromVisitOptions(emptyVisitOptions()); + assertThat(params.getThrottlePolicy(), instanceOf(StaticThrottlePolicy.class)); + assertThat(((StaticThrottlePolicy)params.getThrottlePolicy()).getMaxPendingCount(), is((int)1)); + } + + @Test + public void concurrency_is_propagated_to_visitor_parameters() throws Exception { + VisitorParameters params = generatedParametersFromVisitOptions(optionsBuilder().concurrency(3).build()); + assertThat(params.getThrottlePolicy(), instanceOf(StaticThrottlePolicy.class)); + assertThat(((StaticThrottlePolicy)params.getThrottlePolicy()).getMaxPendingCount(), is((int)3)); + } + } diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/MockedOperationHandler.java b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/MockedOperationHandler.java index f353013232f..3b16d9a378c 100644 --- a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/MockedOperationHandler.java +++ b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/MockedOperationHandler.java @@ -22,7 +22,9 @@ public class MockedOperationHandler implements OperationHandler { return new VisitResult(Optional.of("token"), "List of json docs, cont token " + options.continuation.orElse("not set") + ", doc selection: '" + documentSelection + "'" - + options.wantedDocumentCount.map(n -> String.format(", min docs returned: %d", n)).orElse("")); + + options.wantedDocumentCount.map(n -> String.format(", min docs returned: %d", n)).orElse("") + + options.fieldSet.map(s -> String.format(", field set: '%s'", s)).orElse("") + + options.concurrency.map(n -> String.format(", concurrency: %d", n)).orElse("")); } @Override diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java index 91390e3a0d8..faee5947794 100644 --- a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java +++ b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/RestApiTest.java @@ -304,11 +304,43 @@ public class RestApiTest { } @Test - public void wanted_document_count_parameter_returns_error_response() throws IOException { + public void invalid_wanted_document_count_parameter_returns_error_response() throws IOException { Request request = new Request(String.format("http://localhost:%s/document/v1/namespace/document-type/docid/?wantedDocumentCount=aardvark", getFirstListenPort())); HttpGet get = new HttpGet(request.getUri()); String rest = doRest(get); - assertThat(rest, containsString("Invalid 'wantedDocumentCount' value. Expected integer")); + assertThat(rest, containsString("Invalid 'wantedDocumentCount' value. Expected positive integer")); + } + + @Test + public void negative_document_count_parameter_returns_error_response() throws IOException { + Request request = new Request(String.format("http://localhost:%s/document/v1/namespace/document-type/docid/?wantedDocumentCount=-1", getFirstListenPort())); + HttpGet get = new HttpGet(request.getUri()); + String rest = doRest(get); + assertThat(rest, containsString("Invalid 'wantedDocumentCount' value. Expected positive integer")); + } + + @Test + public void fieldset_parameter_is_propagated() throws IOException { + Request request = new Request(String.format("http://localhost:%s/document/v1/namespace/document-type/docid/?fieldSet=foo,baz", getFirstListenPort())); + HttpGet get = new HttpGet(request.getUri()); + String rest = doRest(get); + assertThat(rest, containsString("field set: 'foo,baz'")); + } + + @Test + public void concurrency_parameter_is_propagated() throws IOException { + Request request = new Request(String.format("http://localhost:%s/document/v1/namespace/document-type/docid/?concurrency=42", getFirstListenPort())); + HttpGet get = new HttpGet(request.getUri()); + String rest = doRest(get); + assertThat(rest, containsString("concurrency: 42")); + } + + @Test + public void invalid_concurrency_parameter_returns_error_response() throws IOException { + Request request = new Request(String.format("http://localhost:%s/document/v1/namespace/document-type/docid/?concurrency=badgers", getFirstListenPort())); + HttpGet get = new HttpGet(request.getUri()); + String rest = doRest(get); + assertThat(rest, containsString("Invalid 'concurrency' value. Expected positive integer")); } private String doRest(HttpRequestBase request) throws IOException { |