[OLINGO-206] more validation tests

This commit is contained in:
Stephan Klevenz 2014-03-18 18:51:01 +01:00
parent f3d5d66735
commit d3d411118e
2 changed files with 78 additions and 43 deletions

View File

@ -30,27 +30,27 @@ public class SystemQueryValidator {
//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 },
/* 0-FILTER 1-FORMAT 2-EXPAND 3-ID 4-COUNT 5-ORDERBY 6-SEARCH 7-SELECT 8-SKIP 9-SKIPTOKEN 10-LEVELS 11-TOP */
/* all 0 */ { true , true , true , false, true , true , true , true , true , true , true , false },
/* batch 1 */ { false, false, false, false, false, false, false, false, false, false, false, false },
/* crossjoin 2 */ { true , true , true , false, true , true , true , true , true , true , true , true },
/* entityId 3 */ { false, true , true , true , false, false, false, true , false, false, true , false },
/* metadata 4 */ { false, true , false, false, false, false, false, false, false, false, false, false },
/* resource 5 */ { false, true , false, false, false, false, false, false, false, false, false, false },
/* service 6 */ { false, true , false, false, false, false, false, false, false, false, false, false },
/* entitySet 7 */ { true , true , true , false, true , true , true , true , true , true , true , true },
/* entitySetCount 8 */ { false, false, false, false, false, false, false, false, false, false, false, false },
/* entity 9 */ { false, true , true , false, false, false, false, true , false, false, true , false },
/* mediaStream 10 */ { false, true , false, false, false, false, false, false, false, false, false, false },
/* references 11 */ { true , true , false, false, false, true , true , false, true , true , false, true },
/* reference 12 */ { false, true , false, false, false, false, false, false, false, false, false, false },
/* propertyComplex 13 */ { false, true , true , false, false, false, false, true , false, false, true , false },
/* propertyComplexCollection 14 */ { true , true , true , false, true , true , false, false, true , true , true , true },
/* propertyComplexCollectionCount 15 */ { false, false, false, false, false, false, false, false, false, false, false, false },
/* propertyPrimitive 16 */ { false, true , false, false, false, false, false, false, false, false, false, false },
/* propertyPrimitiveCollection 17 */ { true , true , false, false, false, true , false, false, true , true , false, true },
/* propertyPrimitiveCollectionCount 18 */ { false, false, false, false, false, false, false, false, false, false, false, false },
/* propertyPrimitiveValue 19 */ { false, true , false, false, false, false, false, false, false, false, false, false },
};
//CHECKSTYLE:ON
//@formatter:on
@ -102,7 +102,7 @@ public class SystemQueryValidator {
idx = 11;
break;
default:
throw new ODataRuntimeException("Unsupported Option: " + queryOptionKind);
throw new ODataRuntimeException("Unsupported option: " + queryOptionKind);
}
return idx;
@ -134,26 +134,33 @@ public class SystemQueryValidator {
idx = 6;
break;
default:
throw new ODataRuntimeException("Unsupported Option: " + uriInfo.getKind());
throw new ODataRuntimeException("Unsupported uriInfo kind: " + uriInfo.getKind());
}
return idx;
}
private void validateKeyPredicateTypes(final UriInfo uriInfo, final Edm edm) throws UriValidationException {
}
private void validateQueryOptions(final UriInfo uriInfo) throws UriValidationException {
try {
int row = rowIndex(uriInfo);
for (SystemQueryOption option : uriInfo.getSystemQueryOptions()) {
int col = colIndex(option.getKind());
System.out.print("[" + row +"][" + col +"]");
if (!decisionMatrix[row][col]) {
throw new UriValidationException("Unsupported System Query Option for Uri Type: " + option.getName());
throw new UriValidationException("System query option not allowed: " + option.getName());
}
}
}finally {
System.out.println();
}
}
private void validateKeyPredicateTypes(final UriInfo uriInfo, final Edm edm) throws UriValidationException {
}
}

View File

@ -34,6 +34,7 @@ public class UriEdmValidatorTest {
private Edm edm = new EdmProviderImpl(new EdmTechProvider());
String[] tmpUri = {
"$crossjoin(ESKeyNav, ESTwoKeyNav)/invalid ",
"$crossjoin(invalidEntitySet) ",
@ -86,12 +87,46 @@ public class UriEdmValidatorTest {
public void systemQueryOptionValid() throws Exception {
String[] uris =
{
/* service document */
"",
/* $filter */
"/$all?$format=bla",
"/$batch?$format=bla",
"/$crossjoin(ESAllPrim)?$format=bla",
"/$entity?$id=Products(0)?$format=bla",
"/$metadata?$format=bla",
"?$format=bla",
"/ESAllPrim?$format=bla",
"/ESAllPrim/$count?$format=bla",
"/ESAllPrim(1)?$format=bla" ,
"/ESMedia(1)/$value?$format=bla",
"/ESAllPrim/$ref?$format=bla",
"/ESAllPrim(1)/$ref?$format=bla",
"/ESCompComp(1)/PropertyComplex?$format=bla",
"/ESCompCollComp(1)/PropertyComplex/CollPropertyComplex?$format=bla",
"/ESCompCollComp(1)/PropertyComplex/CollPropertyComplex/$count?$format=bla",
"/ESAllPrim(1)/PropertyString?$format=bla",
"/ESCollAllPrim/CollPropertyString?$format=bla",
"/ESCollAllPrim/CollPropertyString/$count?$format=bla",
"/ESAllPrim(1)/PropertyString/$value?$format=bla"
/* all */
/* batch */
/* crossjoin */
/* entityId */
/* metadata */
"/$metadata",
"/$metadata?$format=atom",
};
/* resource */
/* service */
/* entitySet */
/* entitySetCount */
/* entity */
/* mediaStream */
/* references */
/* reference */
/* propertyComplex */
/* propertyComplexCollection */
/* propertyComplexCollectionCount */
/* propertyPrimitive */
/* propertyPrimitiveCollection */
/* propertyPrimitiveCollectionCount */
/* propertyPrimitiveValue */};
for (String uri : uris) {
try {
@ -104,19 +139,10 @@ public class UriEdmValidatorTest {
}
@Test
@Ignore
public void systemQueryOptionInvalid() throws Exception {
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) {
@ -133,6 +159,8 @@ public class UriEdmValidatorTest {
private void parseAndValidate(String uri) throws UriParserException, UriValidationException {
UriInfo uriInfo = new Parser().parseUri(uri.trim(), edm);
SystemQueryValidator validator = new SystemQueryValidator();
System.out.print("URI: " + uri );
validator.validate(uriInfo, edm);
}
}