harness.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import sys
  2. import inspect
  3. from python.protoc_gen_validate.validator import validate, ValidationFailed
  4. from tests.harness.harness_pb2 import TestCase, TestResult
  5. from tests.harness.cases.bool_pb2 import *
  6. from tests.harness.cases.bytes_pb2 import *
  7. from tests.harness.cases.enums_pb2 import *
  8. from tests.harness.cases.enums_pb2 import *
  9. from tests.harness.cases.messages_pb2 import *
  10. from tests.harness.cases.numbers_pb2 import *
  11. from tests.harness.cases.oneofs_pb2 import *
  12. from tests.harness.cases.repeated_pb2 import *
  13. from tests.harness.cases.strings_pb2 import *
  14. from tests.harness.cases.maps_pb2 import *
  15. from tests.harness.cases.wkt_any_pb2 import *
  16. from tests.harness.cases.wkt_duration_pb2 import *
  17. from tests.harness.cases.wkt_wrappers_pb2 import *
  18. from tests.harness.cases.wkt_timestamp_pb2 import *
  19. from tests.harness.cases.kitchen_sink_pb2 import *
  20. message_classes = {}
  21. for k, v in inspect.getmembers(sys.modules[__name__], inspect.isclass):
  22. if 'DESCRIPTOR' in dir(v):
  23. message_classes[v.DESCRIPTOR.full_name] = v
  24. if __name__ == "__main__":
  25. read = sys.stdin.buffer.read()
  26. testcase = TestCase()
  27. testcase.ParseFromString(read)
  28. test_class = message_classes[testcase.message.TypeName()]
  29. test_msg = test_class()
  30. testcase.message.Unpack(test_msg)
  31. try:
  32. result = TestResult()
  33. valid = validate(test_msg)
  34. result.Valid = True
  35. except ValidationFailed as e:
  36. result.Valid = False
  37. result.Reasons[:] = [repr(e)]
  38. sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf8')
  39. sys.stdout.write(result.SerializeToString().decode("utf-8"))