def __init__(self, jsonDict, requestClass): validator = avrotools.Validator(requestClass) self.message = ("Response '{}' is not a valid instance of {}. " "Invalid fields: {} " "Please file a bug report.".format( jsonDict, requestClass, validator.getInvalidFields(jsonDict)))
def __init__(self, jsonDict, requestClass): messageString = ( "Request '{}' is not a valid instance of {}; " "invalid fields: {}") validator = avrotools.Validator(requestClass) self.message = messageString.format( jsonDict, requestClass, validator.getInvalidFields(jsonDict))
def testLessFields(self): # Returns a bogus field indicator # when there are fields missing from the jsonDict for class_ in protocol.getProtocolClasses(): validator = avrotools.Validator(class_) invalidFields = validator.getInvalidFields({}) for key, value in invalidFields.items(): self.assertEqual(value, avrotools.SchemaValidator.missingValue)
def testMoreFields(self): # Throws an exception when there are extra fields in the jsonDict for class_ in protocol.getProtocolClasses(): jsonDict = class_().toJsonDict() jsonDict['extra'] = 'extra' validator = avrotools.Validator(class_) with self.assertRaises(avrotools.AvrotoolsException): validator.getInvalidFields(jsonDict)
def testGeneratedObjects(self): # Test that generated objects pass validation for class_ in protocol.getProtocolClasses(): creator = avrotools.Creator(class_) validator = avrotools.Validator(class_) generatedInstance = creator.getTypicalInstance() jsonDict = generatedInstance.toJsonDict() returnValue = validator.getInvalidFields(jsonDict) self.assertEqual(returnValue, {})
def assertValid(self, protocolClass, jsonDict): """ Asserts that the specified JSON dictionary is a valid instance of the specified protocol class. """ if not protocolClass.validate(jsonDict): validator = avrotools.Validator(protocolClass) invalidFields = validator.getInvalidFields(jsonDict) message = ("{} is not a valid instance of {}. " "Invalid fields = {}".format(jsonDict, protocolClass, invalidFields)) assert False, message
def testMoreFields(self): # Returns a bogus field indicator # when there are extra fields in the jsonDict key = 'extra' for class_ in protocol.getProtocolClasses(): jsonDict = class_().toJsonDict() jsonDict[key] = None validator = avrotools.Validator(class_) invalidFields = validator.getInvalidFields(jsonDict) self.assertIn(key, invalidFields) self.assertEqual(invalidFields[key], avrotools.SchemaValidator.extraValue)
def testOptionalFields(self): # test that omission of optional fields does not throw # an exception, but omission of a required field returns # a dict only mentioning that field for class_ in protocol.getProtocolClasses(): validator = avrotools.Validator(class_) creator = avrotools.Creator(class_) generatedInstance = creator.getTypicalInstance() jsonDict = generatedInstance.toJsonDict() requiredFields = class_.requiredFields for key in jsonDict.keys(): if key not in requiredFields: del jsonDict[key] returnValue = validator.getInvalidFields(jsonDict) self.assertEqual(returnValue, {}) if len(requiredFields) != 0: requiredKey = list(requiredFields)[0] del jsonDict[requiredKey] returnValue = validator.getInvalidFields(jsonDict) self.assertEqual(returnValue[requiredKey], avrotools.SchemaValidator.missingValue) self.assertEqual(len(returnValue), 1)
def testNonProtocolElement(self): # Throws an exception when class_ is not a subclass of ProtocolElement with self.assertRaises(avrotools.AvrotoolsException): avrotools.Validator(object).getInvalidFields({})
def testLessFields(self): # Throws an exception when there are fields missing from the jsonDict for class_ in protocol.getProtocolClasses(): validator = avrotools.Validator(class_) with self.assertRaises(avrotools.AvrotoolsException): validator.getInvalidFields({})