use of com.linkedin.data.schema.validation.ValidationOptions in project rest.li by linkedin.
the class TestDataAssert method testRecordTemplatesAfterFixup.
@Test
public void testRecordTemplatesAfterFixup() {
RecordTemplateWithDefaultValue actual = new RecordTemplateWithDefaultValue().setId(1L);
RecordTemplateWithDefaultValue expected = new RecordTemplateWithDefaultValue().setId(1L).setMessage("message");
ValidationOptions validationOptions = new ValidationOptions(RequiredMode.FIXUP_ABSENT_WITH_DEFAULT, CoercionMode.STRING_TO_PRIMITIVE);
try {
DataAssert.assertRecordTemplateDataEqual(actual, expected, validationOptions);
Assert.fail("Assertion should have failed as the record templates are not equal w/o fix-up and coercion!");
} catch (Throwable t) {
// expected
}
DataAssert.assertRecordTemplateDataEqual(actual, expected, validationOptions);
}
use of com.linkedin.data.schema.validation.ValidationOptions in project rest.li by linkedin.
the class TestEmptyRecord method testEmpty.
@Test
public void testEmpty() {
final EmptyRecord record = new EmptyRecord();
final DataSchemaAnnotationValidator validator = new DataSchemaAnnotationValidator(record.schema());
final ValidationResult result = ValidateDataAgainstSchema.validate(record.data(), record.schema(), new ValidationOptions(), validator);
Assert.assertTrue(result.isValid());
}
use of com.linkedin.data.schema.validation.ValidationOptions in project rest.li by linkedin.
the class TestExamplesGenerator method testExamples.
@Test
public void testExamples() throws IOException {
final Map<String, ResourceModel> resources = buildResourceModels(ActionsResource.class, GreetingsResource.class, GroupsResource2.class, GroupContactsResource2.class, GroupMembershipsResource2.class, RootSimpleResource.class, CollectionUnderSimpleResource.class, SimpleResourceUnderCollectionResource.class, CustomTypesResource.class);
final ResourceSchemaCollection resourceSchemas = ResourceSchemaCollection.loadOrCreateResourceSchema(resources);
final DataSchemaResolver schemaResolver = new ClasspathResourceDataSchemaResolver(SchemaParserFactory.instance());
final ValidationOptions valOptions = new ValidationOptions(RequiredMode.MUST_BE_PRESENT);
ExampleRequestResponse capture;
ValidationResult valRet;
final ResourceSchema greetings = resourceSchemas.getResource("greetings");
ExampleRequestResponseGenerator greetingsGenerator = new ExampleRequestResponseGenerator(greetings, schemaResolver);
final ResourceSchema groups = resourceSchemas.getResource("groups");
ExampleRequestResponseGenerator groupsGenerator = new ExampleRequestResponseGenerator(groups, schemaResolver);
final ResourceSchema groupsContacts = resourceSchemas.getResource("groups.contacts");
ExampleRequestResponseGenerator groupsContactsGenerator = new ExampleRequestResponseGenerator(Collections.singletonList(groups), groupsContacts, schemaResolver);
final ResourceSchema greeting = resourceSchemas.getResource("greeting");
ExampleRequestResponseGenerator greetingGenerator = new ExampleRequestResponseGenerator(greeting, schemaResolver);
final ResourceSchema actions = resourceSchemas.getResource("actions");
ExampleRequestResponseGenerator actionsGenerator = new ExampleRequestResponseGenerator(actions, schemaResolver);
final ResourceSchema customTypes = resourceSchemas.getResource("customTypes");
ExampleRequestResponseGenerator customTypesGenerator = new ExampleRequestResponseGenerator(customTypes, schemaResolver);
List<ResourceSchema> subResources = resourceSchemas.getSubResources(greeting);
final ResourceSchema subgreetings = subResources.get(0);
ExampleRequestResponseGenerator subgreetingsGenerator = new ExampleRequestResponseGenerator(Collections.singletonList(greeting), subgreetings, schemaResolver);
subResources = resourceSchemas.getSubResources(subgreetings);
final ResourceSchema subsubgreeting = subResources.get(0);
ExampleRequestResponseGenerator subsubgreetingGenerator = new ExampleRequestResponseGenerator(Arrays.asList(greeting, subgreetings), subsubgreeting, schemaResolver);
capture = greetingsGenerator.method(ResourceMethod.GET);
valRet = validateSingleResponse(capture.getResponse(), Greeting.class, valOptions);
Assert.assertTrue(valRet.isValid(), valRet.getMessages().toString());
capture = greetingsGenerator.method(ResourceMethod.CREATE);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
capture = greetingsGenerator.finder("search");
valRet = validateCollectionResponse(capture.getResponse(), Greeting.class, valOptions);
Assert.assertNull(valRet, (valRet == null ? null : valRet.getMessages().toString()));
capture = groupsContactsGenerator.method(ResourceMethod.GET);
valRet = validateSingleResponse(capture.getResponse(), GroupContact.class, valOptions);
Assert.assertTrue(valRet.isValid(), valRet.getMessages().toString());
capture = groupsGenerator.finder("search");
String queryString = capture.getRequest().getURI().getQuery();
Assert.assertTrue(queryString.contains("q=search"));
Assert.assertTrue(queryString.contains("keywords="));
Assert.assertTrue(queryString.contains("nameKeywords="));
Assert.assertTrue(queryString.contains("groupID="));
valRet = validateCollectionResponse(capture.getResponse(), Group.class, valOptions);
Assert.assertNull(valRet, (valRet == null ? null : valRet.getMessages().toString()));
capture = greetingsGenerator.action("purge", ResourceLevel.COLLECTION);
final DataMap purgeResponse = DataMapUtils.readMap(capture.getResponse());
Assert.assertTrue(purgeResponse.containsKey("value"));
capture = greetingsGenerator.action("updateTone", ResourceLevel.ENTITY);
valRet = validateCollectionResponse(capture.getResponse(), Greeting.class, valOptions);
Assert.assertNull(valRet, (valRet == null ? null : valRet.getMessages().toString()));
capture = groupsGenerator.action("sendTestAnnouncement", ResourceLevel.ENTITY);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
capture = greetingGenerator.method(ResourceMethod.GET);
valRet = validateSingleResponse(capture.getResponse(), Greeting.class, valOptions);
Assert.assertTrue(valRet.isValid(), valRet.getMessages().toString());
RestRequest request = capture.getRequest();
Assert.assertEquals(request.getURI(), URI.create("/greeting"));
capture = greetingGenerator.method(ResourceMethod.UPDATE);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
request = capture.getRequest();
Assert.assertEquals(request.getURI(), URI.create("/greeting"));
valRet = validateSingleRequest(capture.getRequest(), Greeting.class, valOptions);
Assert.assertTrue(valRet.isValid(), valRet.getMessages().toString());
capture = greetingGenerator.method(ResourceMethod.PARTIAL_UPDATE);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
request = capture.getRequest();
Assert.assertEquals(request.getURI(), URI.create("/greeting"));
DataMap patchMap = _codec.bytesToMap(capture.getRequest().getEntity().copyBytes());
checkPatchMap(patchMap);
capture = greetingGenerator.method(ResourceMethod.DELETE);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
request = capture.getRequest();
Assert.assertEquals(request.getURI(), URI.create("/greeting"));
capture = greetingGenerator.action("exampleAction", ResourceLevel.ENTITY);
DataMap exampleActionResponse = DataMapUtils.readMap(capture.getResponse());
Assert.assertTrue(exampleActionResponse.containsKey("value"));
request = capture.getRequest();
Assert.assertTrue(validateUrlPath(request.getURI(), new String[] { "greeting" }));
capture = subgreetingsGenerator.method(ResourceMethod.CREATE);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
request = capture.getRequest();
Assert.assertEquals(request.getURI(), URI.create("/greeting/subgreetings"));
valRet = validateSingleRequest(capture.getRequest(), Greeting.class, valOptions);
Assert.assertTrue(valRet.isValid(), valRet.getMessages().toString());
capture = subsubgreetingGenerator.method(ResourceMethod.GET);
valRet = validateSingleResponse(capture.getResponse(), Greeting.class, valOptions);
Assert.assertTrue(valRet.isValid(), valRet.getMessages().toString());
request = capture.getRequest();
Assert.assertTrue(validateUrlPath(request.getURI(), new String[] { "greeting", "subgreetings", null, "subsubgreeting" }));
capture = subsubgreetingGenerator.method(ResourceMethod.UPDATE);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
request = capture.getRequest();
Assert.assertTrue(validateUrlPath(request.getURI(), new String[] { "greeting", "subgreetings", null, "subsubgreeting" }));
valRet = validateSingleRequest(capture.getRequest(), Greeting.class, valOptions);
Assert.assertTrue(valRet.isValid(), valRet.getMessages().toString());
capture = subsubgreetingGenerator.method(ResourceMethod.PARTIAL_UPDATE);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
request = capture.getRequest();
Assert.assertTrue(validateUrlPath(request.getURI(), new String[] { "greeting", "subgreetings", null, "subsubgreeting" }));
patchMap = _codec.bytesToMap(capture.getRequest().getEntity().copyBytes());
checkPatchMap(patchMap);
capture = subsubgreetingGenerator.method(ResourceMethod.DELETE);
Assert.assertSame(capture.getResponse().getEntity().length(), 0);
request = capture.getRequest();
Assert.assertTrue(validateUrlPath(request.getURI(), new String[] { "greeting", "subgreetings", null, "subsubgreeting" }));
capture = subsubgreetingGenerator.action("exampleAction", ResourceLevel.ENTITY);
exampleActionResponse = DataMapUtils.readMap(capture.getResponse());
Assert.assertTrue(exampleActionResponse.containsKey("value"));
request = capture.getRequest();
Assert.assertTrue(validateUrlPath(request.getURI(), new String[] { "greeting", "subgreetings", null, "subsubgreeting" }));
capture = subgreetingsGenerator.finder("search");
queryString = capture.getRequest().getURI().getQuery();
Assert.assertTrue(queryString.contains("q=search"), queryString);
Assert.assertTrue(queryString.contains("id:"), queryString);
Assert.assertTrue(queryString.contains("message:"), queryString);
Assert.assertTrue(queryString.contains("tone:"), queryString);
capture = actionsGenerator.action("echoMessageArray", ResourceLevel.COLLECTION);
final DataMap echoMessageArrayResponse = DataMapUtils.readMap(capture.getResponse());
Assert.assertTrue(echoMessageArrayResponse.containsKey("value"));
capture = actionsGenerator.action("echoToneArray", ResourceLevel.COLLECTION);
final DataMap echoToneArrayResponse = DataMapUtils.readMap(capture.getResponse());
Assert.assertTrue(echoToneArrayResponse.containsKey("value"));
capture = actionsGenerator.action("echoStringArray", ResourceLevel.COLLECTION);
final DataMap echoStringArrayResponse = DataMapUtils.readMap(capture.getResponse());
Assert.assertTrue(echoStringArrayResponse.containsKey("value"));
capture = customTypesGenerator.action("action", ResourceLevel.COLLECTION);
DataMap requestMap = _codec.bytesToMap(capture.getRequest().getEntity().copyBytes());
Assert.assertTrue(requestMap.containsKey("l"));
Assert.assertEquals(requestMap.size(), 1);
final DataMap customTypesActionResponse = DataMapUtils.readMap(capture.getResponse());
Assert.assertTrue(customTypesActionResponse.containsKey("value"));
Assert.assertEquals(customTypesActionResponse.size(), 1);
}
use of com.linkedin.data.schema.validation.ValidationOptions in project rest.li by linkedin.
the class TestGreetingsClient method testGetAll.
@Test(dataProvider = com.linkedin.restli.internal.common.TestConstants.RESTLI_PROTOCOL_1_2_PREFIX + "requestBuilderDataProvider")
public void testGetAll(RootBuilderWrapper<Long, Greeting> builders) throws RemoteInvocationException {
List<Greeting> greetings = generateBatchTestData(3, "GetAll", Tone.FRIENDLY);
@SuppressWarnings("unchecked") List<Long> createdIds = createBatchTestDataSerially(builders, greetings);
addIdsToGeneratedGreetings(createdIds, greetings);
Request<CollectionResponse<Greeting>> getAllRequest = builders.getAll().build();
List<Greeting> getAllReturnedGreetings = getClient().sendRequest(getAllRequest).getResponse().getEntity().getElements();
// the current implementation of getAll should return all those Greetings with the String "GetAll"
// in them. Thus, fetchedGreetings and getAllGreetings should be the same
Assert.assertEquals(getAllReturnedGreetings.size(), greetings.size());
for (int i = 0; i < greetings.size(); i++) {
Greeting getAllReturnedGreeting = getAllReturnedGreetings.get(i);
Greeting greeting = greetings.get(i);
// Make sure the types of the fetched Greeting match the types in the schema. This happens as a side effect of the
// validate method
// This is why we can't do Assert.assertEquals(getAllReturnedGreetings, greetings) directly
ValidateDataAgainstSchema.validate(getAllReturnedGreeting.data(), getAllReturnedGreeting.schema(), new ValidationOptions());
Assert.assertEquals(getAllReturnedGreeting, greeting);
}
deleteAndVerifyBatchTestDataSerially(builders, createdIds);
}
use of com.linkedin.data.schema.validation.ValidationOptions in project rest.li by linkedin.
the class ResourceCompatibilityChecker method runCheck.
private void runCheck() {
final ValidationOptions valOptions = new ValidationOptions();
boolean valResult = validateData(_prevSchema.data(), _prevSchema.schema(), valOptions);
valResult &= validateData(_currSchema.data(), _currSchema.schema(), valOptions);
if (valResult) {
checkResourceSchema(_prevSchema, _currSchema);
}
_checked = true;
}
Aggregations