summaryrefslogtreecommitdiffstats
path: root/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java')
-rw-r--r--vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java100
1 files changed, 98 insertions, 2 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 5021899e30b..4c04070cec4 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
@@ -145,6 +145,10 @@ public class OperationHandlerImplTest {
return new RestUri(new URI("http://localhost/document/v1/namespace/document-type/docid/"));
}
+ private static RestUri apiRootVisitUri() throws Exception {
+ return new RestUri(new URI("http://localhost/document/v1/"));
+ }
+
private static RestUri dummyGetUri() throws Exception {
return new RestUri(new URI("http://localhost/document/v1/namespace/document-type/docid/foo"));
}
@@ -166,6 +170,7 @@ public class OperationHandlerImplTest {
try {
OperationHandlerImpl handler = fixture.createHandler();
handler.visit(dummyVisitUri(), "", emptyVisitOptions());
+ fail("Exception expected");
} catch (RestApiException e) {
assertThat(e.getResponse().getStatus(), is(500));
assertThat(renderRestApiExceptionAsString(e), containsString("Timed out"));
@@ -192,14 +197,19 @@ public class OperationHandlerImplTest {
assertThat(fixture.assignedParameters.get().getSessionTimeoutMs(), is((long)OperationHandlerImpl.VISIT_TIMEOUT_MS));
}
- private static VisitorParameters generatedParametersFromVisitOptions(OperationHandler.VisitOptions options) throws Exception {
+ private static VisitorParameters generatedVisitParametersFrom(RestUri restUri, String documentSelection,
+ OperationHandler.VisitOptions options) throws Exception {
OperationHandlerImplFixture fixture = new OperationHandlerImplFixture();
OperationHandlerImpl handler = fixture.createHandler();
- handler.visit(dummyVisitUri(), "", options);
+ handler.visit(restUri, documentSelection, options);
return fixture.assignedParameters.get();
}
+ private static VisitorParameters generatedParametersFromVisitOptions(OperationHandler.VisitOptions options) throws Exception {
+ return generatedVisitParametersFrom(dummyVisitUri(), "", options);
+ }
+
@Test
public void document_type_is_mapped_to_correct_bucket_space() throws Exception {
OperationHandlerImplFixture fixture = new OperationHandlerImplFixture();
@@ -218,6 +228,7 @@ public class OperationHandlerImplTest {
try {
OperationHandlerImpl handler = fixture.createHandler();
handler.visit(dummyVisitUri(), "", emptyVisitOptions());
+ fail("Exception expected");
} catch (RestApiException e) {
assertThat(e.getResponse().getStatus(), is(400));
String errorMsg = renderRestApiExceptionAsString(e);
@@ -304,4 +315,89 @@ public class OperationHandlerImplTest {
verify(fixture.mockSyncSession).get(any(), eq("donald,duck"), any());
}
+ @Test
+ public void api_root_visit_uri_requires_cluster_set() throws Exception {
+ OperationHandlerImplFixture fixture = new OperationHandlerImplFixture();
+ OperationHandlerImpl handler = fixture.createHandler();
+ try {
+ handler.visit(apiRootVisitUri(), "", emptyVisitOptions());
+ fail("Exception expected");
+ } catch (RestApiException e) {
+ assertThat(e.getResponse().getStatus(), is(400));
+ assertThat(renderRestApiExceptionAsString(e), containsString(
+ "MISSING_CLUSTER Must set 'cluster' parameter to a valid content cluster id " +
+ "when visiting at a root /document/v1/ level"));
+ }
+ }
+
+ @Test
+ public void api_root_visiting_propagates_request_route() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "", optionsBuilder().cluster("foo").build());
+ assertEquals("[Storage:cluster=foo;clusterconfigid=configId]", parameters.getRoute().toString());
+ }
+
+ @Test
+ public void api_root_visiting_targets_default_bucket_space_by_default() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "", optionsBuilder().cluster("foo").build());
+ assertEquals("default", parameters.getBucketSpace());
+ }
+
+ @Test
+ public void api_root_visiting_can_explicitly_specify_bucket_space() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "",
+ optionsBuilder().cluster("foo").bucketSpace("global").build());
+ assertEquals("global", parameters.getBucketSpace());
+ }
+
+ @Test
+ public void api_root_visiting_throws_exception_on_unknown_bucket_space_name() throws Exception {
+ try {
+ VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "",
+ optionsBuilder().cluster("foo").bucketSpace("langbein").build());
+ } catch (RestApiException e) {
+ assertThat(e.getResponse().getStatus(), is(400));
+ assertThat(renderRestApiExceptionAsString(e), containsString(
+ "UNKNOWN_BUCKET_SPACE Bucket space 'langbein' is not a known bucket space " +
+ "(expected 'default' or 'global')"));
+ }
+ }
+
+ @Test
+ public void api_root_visiting_has_empty_document_selection_by_default() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "", optionsBuilder().cluster("foo").build());
+ assertEquals("", parameters.getDocumentSelection());
+ }
+
+ @Test
+ public void api_root_visiting_propagates_provided_document_selection() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "baz.blarg", optionsBuilder().cluster("foo").build());
+ // Note: syntax correctness of selection is checked and enforced by RestApi
+ assertEquals("baz.blarg", parameters.getDocumentSelection());
+ }
+
+ @Test
+ public void api_root_visiting_uses_all_fieldset_by_default() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "", optionsBuilder().cluster("foo").build());
+ assertEquals("[all]", parameters.getFieldSet());
+ }
+
+ @Test
+ public void api_root_visiting_propagates_provided_fieldset() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "",
+ optionsBuilder().cluster("foo").fieldSet("zoidberg:[document]").build());
+ assertEquals("zoidberg:[document]", parameters.getFieldSet());
+ }
+
+ @Test
+ public void namespace_and_doctype_augmented_selection_has_parenthesized_selection_sub_expression() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(dummyVisitUri(), "1 != 2", optionsBuilder().cluster("foo").build());
+ assertEquals("((1 != 2) and document-type and (id.namespace=='namespace'))", parameters.getDocumentSelection());
+ }
+
+ @Test
+ public void namespace_and_doctype_visit_without_selection_does_not_contain_selection_sub_expression() throws Exception {
+ VisitorParameters parameters = generatedVisitParametersFrom(dummyVisitUri(), "", optionsBuilder().cluster("foo").build());
+ assertEquals("document-type and (id.namespace=='namespace')", parameters.getDocumentSelection());
+ }
+
}