[OLINGO-206] introduce decision matrix
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/c0db941b Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/c0db941b Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/c0db941b Branch: refs/heads/master Commit: c0db941b8529f224540062073f6466d2076696a3 Parents: df675e1 Author: Stephan Klevenz <[email protected]> Authored: Mon Mar 17 17:14:27 2014 +0100 Committer: Stephan Klevenz <[email protected]> Committed: Mon Mar 17 17:16:49 2014 +0100 ---------------------------------------------------------------------- .../apache/olingo/server/api/uri/UriInfo.java | 7 + .../olingo/server/core/uri/UriInfoImpl.java | 101 ++++++------ .../uri/validator/SystemQueryValidator.java | 159 +++++++++++++++++++ .../uri/validator/UriValidationException.java | 4 + .../server/core/uri/validator/Validator.java | 37 ----- .../core/uri/validator/UriEdmValidatorTest.java | 66 ++++---- 6 files changed, 254 insertions(+), 120 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c0db941b/lib/server-api/src/main/java/org/apache/olingo/server/api/uri/UriInfo.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/uri/UriInfo.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/uri/UriInfo.java index 41d9c6c..c0a140c 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/uri/UriInfo.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/uri/UriInfo.java @@ -18,6 +18,11 @@ */ package org.apache.olingo.server.api.uri; +import java.util.Collection; +import java.util.List; + +import org.apache.olingo.server.api.uri.queryoption.SystemQueryOption; + /** * Object acting as general access to URI information extracted from the request URI. Depending on * the URI info kind different interfaces are used to provide access to that information. </p> @@ -43,4 +48,6 @@ public interface UriInfo extends public UriInfoResource asUriInfoResource(); + public Collection<SystemQueryOption> getSystemQueryOptions(); + } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c0db941b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriInfoImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriInfoImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriInfoImpl.java index a04b55f..758d8d9 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriInfoImpl.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriInfoImpl.java @@ -1,27 +1,30 @@ -/* +/* * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file + * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file + * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the + * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.olingo.server.core.uri; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import org.apache.olingo.commons.api.ODataRuntimeException; import org.apache.olingo.commons.api.edm.EdmEntityType; import org.apache.olingo.server.api.uri.UriInfo; import org.apache.olingo.server.api.uri.UriInfoAll; @@ -44,22 +47,12 @@ import org.apache.olingo.server.api.uri.queryoption.SearchOption; import org.apache.olingo.server.api.uri.queryoption.SelectOption; import org.apache.olingo.server.api.uri.queryoption.SkipOption; import org.apache.olingo.server.api.uri.queryoption.SkipTokenOption; +import org.apache.olingo.server.api.uri.queryoption.SystemQueryOption; import org.apache.olingo.server.api.uri.queryoption.SystemQueryOptionKind; import org.apache.olingo.server.api.uri.queryoption.TopOption; -import org.apache.olingo.server.core.uri.queryoption.CountOptionImpl; import org.apache.olingo.server.core.uri.queryoption.CustomQueryOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.ExpandOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.FilterOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.FormatOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.IdOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.OrderByOptionImpl; import org.apache.olingo.server.core.uri.queryoption.QueryOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.SearchOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.SelectOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.SkipOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.SkipTokenOptionImpl; import org.apache.olingo.server.core.uri.queryoption.SystemQueryOptionImpl; -import org.apache.olingo.server.core.uri.queryoption.TopOptionImpl; public class UriInfoImpl implements UriInfo { @@ -68,19 +61,10 @@ public class UriInfoImpl implements UriInfo { private List<String> entitySetNames = new ArrayList<String>(); // for $entity private EdmEntityType entityTypeCast; // for $entity - // Query options private List<CustomQueryOptionImpl> customQueryOptions = new ArrayList<CustomQueryOptionImpl>(); - private ExpandOptionImpl expandOption; - private FilterOptionImpl filterOption; - private FormatOptionImpl formatOption; - private IdOption idOption; - private CountOptionImpl inlineCountOption; - private OrderByOptionImpl orderByOption; - private SearchOptionImpl searchOption; - private SelectOptionImpl selectOption; - private SkipOptionImpl skipOption; - private SkipTokenOptionImpl skipTokenOption; - private TopOptionImpl topOption; + + HashMap<SystemQueryOptionKind, SystemQueryOption> systemQueryOptions = + new HashMap<SystemQueryOptionKind, SystemQueryOption>(); private String fragment; @@ -162,27 +146,27 @@ public class UriInfoImpl implements UriInfo { @Override public ExpandOption getExpandOption() { - return expandOption; + return (ExpandOption) systemQueryOptions.get(SystemQueryOptionKind.EXPAND); } @Override public FilterOption getFilterOption() { - return filterOption; + return (FilterOption) systemQueryOptions.get(SystemQueryOptionKind.FILTER); } @Override public FormatOption getFormatOption() { - return formatOption; + return (FormatOption) systemQueryOptions.get(SystemQueryOptionKind.FORMAT); } @Override public IdOption getIdOption() { - return idOption; + return (IdOption) systemQueryOptions.get(SystemQueryOptionKind.ID); } @Override public CountOption getCountOption() { - return inlineCountOption; + return (CountOption) systemQueryOptions.get(SystemQueryOptionKind.COUNT); } @Override @@ -201,33 +185,33 @@ public class UriInfoImpl implements UriInfo { @Override public OrderByOption getOrderByOption() { - return orderByOption; + return (OrderByOption) systemQueryOptions.get(SystemQueryOptionKind.ORDERBY); } @Override public SearchOption getSearchOption() { - return searchOption; + return (SearchOption) systemQueryOptions.get(SystemQueryOptionKind.SEARCH); } @Override public SelectOption getSelectOption() { - return selectOption; + return (SelectOption) systemQueryOptions.get(SystemQueryOptionKind.SELECT); } @Override public SkipOption getSkipOption() { - return skipOption; + return (SkipOption) systemQueryOptions.get(SystemQueryOptionKind.SKIP); } @Override public SkipTokenOption getSkipTokenOption() { - return skipTokenOption; + return (SkipTokenOption) systemQueryOptions.get(SystemQueryOptionKind.SKIPTOKEN); } @Override public TopOption getTopOption() { - return topOption; + return (TopOption) systemQueryOptions.get(SystemQueryOptionKind.TOP); } public UriInfoImpl setQueryOptions(final List<QueryOptionImpl> list) { @@ -249,28 +233,33 @@ public class UriInfoImpl implements UriInfo { public UriInfoImpl setSystemQueryOption(final SystemQueryOptionImpl systemOption) { if (systemOption.getKind() == SystemQueryOptionKind.EXPAND) { - expandOption = (ExpandOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.EXPAND, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.FILTER) { - filterOption = (FilterOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.FILTER, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.FORMAT) { - formatOption = (FormatOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.FORMAT, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.ID) { - idOption = (IdOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.ID, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.COUNT) { - inlineCountOption = (CountOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.COUNT, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.ORDERBY) { - orderByOption = (OrderByOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.ORDERBY, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.SEARCH) { - searchOption = (SearchOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.SEARCH, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.SELECT) { - selectOption = (SelectOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.SELECT, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.SKIP) { - skipOption = (SkipOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.SKIP, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.SKIPTOKEN) { - skipTokenOption = (SkipTokenOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.SKIPTOKEN, systemOption); } else if (systemOption.getKind() == SystemQueryOptionKind.TOP) { - topOption = (TopOptionImpl) systemOption; + systemQueryOptions.put(SystemQueryOptionKind.TOP, systemOption); + } else if (systemOption.getKind() == SystemQueryOptionKind.LEVELS) { + systemQueryOptions.put(SystemQueryOptionKind.LEVELS, systemOption); + } else { + throw new ODataRuntimeException("Unsupported System Query Option: " + systemOption.getName()); } + return this; } @@ -291,6 +280,10 @@ public class UriInfoImpl implements UriInfo { public void removeResourcePart(int index) { this.pathParts.remove(index); - + } + + @Override + public Collection<SystemQueryOption> getSystemQueryOptions() { + return Collections.unmodifiableCollection(systemQueryOptions.values()); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c0db941b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/SystemQueryValidator.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/SystemQueryValidator.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/SystemQueryValidator.java new file mode 100644 index 0000000..0fd944f --- /dev/null +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/SystemQueryValidator.java @@ -0,0 +1,159 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.olingo.server.core.uri.validator; + +import org.apache.olingo.commons.api.ODataRuntimeException; +import org.apache.olingo.commons.api.edm.Edm; +import org.apache.olingo.server.api.uri.UriInfo; +import org.apache.olingo.server.api.uri.queryoption.SystemQueryOption; +import org.apache.olingo.server.api.uri.queryoption.SystemQueryOptionKind; + +public class SystemQueryValidator { + + //@formatter:off (Eclipse formatter) + //CHECKSTYLE:OFF (Maven checkstyle) + private boolean[][] decisionMatrix = + { + /* FILTER FORMAT EXPAND ID COUNT ORDERBY SEARCH SELECT SKIP SKIPTOKEN LEVELS TOP */ + /* all */ { true , true , true , false, true , true , true , true , true , true , true , false }, + /* batch */ { false, false, false, false, false, false, false, false, false, false, false, false }, + /* crossjoin */ { true , true , true , false, true , true , true , true , true , true , true , true }, + /* entityId */ { false, true , true , true , false, false, false, true , false, false, true , false }, + /* metadata */ { false, true , false, false, false, false, false, false, false, false, false, false }, + /* resource */ { false, true , false, false, false, false, false, false, false, false, false, false }, + /* service */ { false, true , false, false, false, false, false, false, false, false, false, false }, + /* entitySet */ { true , true , true , false, true , true , true , true , true , true , true , true }, + /* entitySetCount */ { false, false, false, false, false, false, false, false, false, false, false, false }, + /* entity */ { false, true , true , false, false, false, false, true , false, false, true , false }, + /* mediaStream */ { false, true , false, false, false, false, false, false, false, false, false, false }, + /* references */ { true , true , false, false, false, true , true , false, true , true , false, true }, + /* reference */ { false, true , false, false, false, false, false, false, false, false, false, false }, + /* propertyComplex */ { false, true , true , false, false, false, false, true , false, false, true , false }, + /* propertyComplexCollection */ { true , true , true , false, true , true , false, false, true , true , true , true }, + /* propertyComplexCollectionCount */ { false, false, false, false, false, false, false, false, false, false, false, false }, + /* propertyPrimitive */ { false, true , false, false, false, false, false, false, false, false, false, false }, + /* propertyPrimitiveCollection */ { true , true , false, false, false, true , false, false, true , true , false, true }, + /* propertyPrimitiveCollectionCount */ { false, false, false, false, false, false, false, false, false, false, false, false }, + /* propertyPrimitiveValue */ { false, true , false, false, false, false, false, false, false, false, false, false }, + }; + //CHECKSTYLE:ON + //@formatter:on + + public void validate(final UriInfo uriInfo, final Edm edm) throws UriValidationException { + + validateQueryOptions(uriInfo); + validateKeyPredicateTypes(uriInfo, edm); + + } + + private int colIndex(SystemQueryOptionKind queryOptionKind) { + int idx; + switch (queryOptionKind) { + case FILTER: + idx = 0; + break; + case FORMAT: + idx = 1; + break; + case EXPAND: + idx = 2; + break; + case ID: + idx = 3; + break; + case COUNT: + idx = 4; + break; + case ORDERBY: + idx = 5; + break; + case SEARCH: + idx = 6; + break; + case SELECT: + idx = 7; + break; + case SKIP: + idx = 8; + break; + case SKIPTOKEN: + idx = 9; + break; + case LEVELS: + idx = 10; + break; + case TOP: + idx = 11; + break; + default: + throw new ODataRuntimeException("Unsupported Option: " + queryOptionKind); + } + + return idx; + } + + private int rowIndex(final UriInfo uriInfo) { + int idx; + + switch (uriInfo.getKind()) { + case all: + idx = 0; + break; + case batch: + idx = 1; + break; + case crossjoin: + idx = 2; + break; + case entityId: + idx = 3; + break; + case metadata: + idx = 4; + break; + case resource: + idx = 5; + break; + case service: + idx = 6; + break; + default: + throw new ODataRuntimeException("Unsupported Option: " + uriInfo.getKind()); + } + + return idx; + } + + private void validateKeyPredicateTypes(final UriInfo uriInfo, final Edm edm) throws UriValidationException { + + } + + private void validateQueryOptions(final UriInfo uriInfo) throws UriValidationException { + int row = rowIndex(uriInfo); + + for (SystemQueryOption option : uriInfo.getSystemQueryOptions()) { + int col = colIndex(option.getKind()); + if (!decisionMatrix[row][col]) { + throw new UriValidationException("Unsupported System Query Option for Uri Type: " + option.getName()); + } + } + + } + +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c0db941b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidationException.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidationException.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidationException.java index d0f4b8c..3ba323d 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidationException.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidationException.java @@ -20,6 +20,10 @@ package org.apache.olingo.server.core.uri.validator; public class UriValidationException extends Exception { + public UriValidationException(String msg) { + super(msg); + } + private static final long serialVersionUID = -3179078078053564742L; } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c0db941b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/Validator.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/Validator.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/Validator.java deleted file mode 100644 index 0442563..0000000 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/Validator.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.olingo.server.core.uri.validator; - -import org.apache.olingo.commons.api.edm.Edm; -import org.apache.olingo.server.api.uri.UriInfo; - -public class Validator { - - public void validate(UriInfo uriInfo, Edm edm) throws UriValidationException { - switch (uriInfo.getKind()) { - case metadata: - if (uriInfo.getTopOption() != null) { - throw new UriValidationException(); - } - break; - default: - } - } - -} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c0db941b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/validator/UriEdmValidatorTest.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/validator/UriEdmValidatorTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/validator/UriEdmValidatorTest.java index 106b4ce..de5578c 100644 --- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/validator/UriEdmValidatorTest.java +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/validator/UriEdmValidatorTest.java @@ -18,25 +18,23 @@ */ package org.apache.olingo.server.core.uri.validator; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import org.apache.olingo.commons.api.edm.Edm; import org.apache.olingo.server.api.uri.UriInfo; import org.apache.olingo.server.core.edm.provider.EdmProviderImpl; import org.apache.olingo.server.core.testutil.EdmTechProvider; import org.apache.olingo.server.core.uri.parser.Parser; -import org.apache.olingo.server.core.uri.parser.RawUri; -import org.apache.olingo.server.core.uri.parser.UriDecoder; import org.apache.olingo.server.core.uri.parser.UriParserException; +import org.junit.Ignore; import org.junit.Test; public class UriEdmValidatorTest { private Edm edm = new EdmProviderImpl(new EdmTechProvider()); - String[] uris = { + String[] tmpUri = { "$crossjoin(ESKeyNav, ESTwoKeyNav)/invalid ", "$crossjoin(invalidEntitySet) ", "$entity ", @@ -50,26 +48,17 @@ public class UriEdmValidatorTest { "FICRTESTwoKeyNavParam(ParameterInt16=@invalidAlias)?@validAlias=1 ", "FINRTESMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='2')/PropertyComplex ", "FINRTESMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='2')/$count ", - "ESKeyNav(1)?$expand=NavPropertyETKeyNavOne/$ref ", - "ESKeyNav(1)?$expand=NavPropertyETKeyNavOne/$count ", - "ESKeyNav?$top=-3 ", - "ESAllPrim?$count=foo ", - "ESAllPrim?$skip=-3 " + // "ESKeyNav(1)?$expand=NavPropertyETKeyNavOne/$ref ", +// "ESKeyNav(1)?$expand=NavPropertyETKeyNavOne/$count ", +// "ESKeyNav?$top=-3 ", +// "ESAllPrim?$count=foo ", +// "ESAllPrim?$skip=-3 " }; @Test - public void foo() throws Exception { - for (String uri : uris) { - Parser parser = new Parser(); - System.out.println(uri); - UriInfo uriInfo = parser.parseUri(uri.trim(), edm); - assertNotNull(uriInfo); - } - } - - @Test + @Ignore("key predicate validation not implemented") public void keyPredicateValidTypes() throws Exception { - String[] uris = { "/ESAllPrim" }; + String[] uris = {}; for (String uri : uris) { parseAndValidate(uri); @@ -78,6 +67,7 @@ public class UriEdmValidatorTest { } @Test + @Ignore("key predicate validation not implemented") public void keyPredicateInvalidTypes() throws UriParserException { String[] uris = {}; @@ -94,22 +84,40 @@ public class UriEdmValidatorTest { @Test public void systemQueryOptionValid() throws Exception { - String[] uris = { + String[] uris = + { + /* service document */ + "", + /* metadata */ "/$metadata", - "/$metadata?$format=json" + "/$metadata?$format=atom", }; for (String uri : uris) { - parseAndValidate(uri); + try { + parseAndValidate(uri); + } catch (Exception e) { + throw new Exception("Faild for uri: " + uri, e); + } } } @Test public void systemQueryOptionInvalid() throws Exception { - String[] uris = { - "/$metadata?$format=json&$top=3" - }; + String[] uris = + { + /* service document */ + /* metadata */ + "/$metadata?$format=json&$top=3&$skip=5&$skiptoken=123", + + /* misc */ + "ESKeyNav(1)?$expand=NavPropertyETKeyNavOne/$ref ", + "ESKeyNav(1)?$expand=NavPropertyETKeyNavOne/$count ", + "ESKeyNav?$top=-3 ", + "ESAllPrim?$count=foo ", + "ESAllPrim?$skip=-3 " + }; for (String uri : uris) { @@ -124,7 +132,7 @@ public class UriEdmValidatorTest { private void parseAndValidate(String uri) throws UriParserException, UriValidationException { UriInfo uriInfo = new Parser().parseUri(uri.trim(), edm); - Validator validator = new Validator(); + SystemQueryValidator validator = new SystemQueryValidator(); validator.validate(uriInfo, edm); } }
