def do_test(request): isProto3 = (request.message_type == "protobuf_test_messages.proto3.TestAllTypesProto3") isJson = (request.WhichOneof('payload') == 'json_payload') isProto2 = (request.message_type == "protobuf_test_messages.proto2.TestAllTypesProto2") if (not isProto3) and (not isJson) and (not isProto2): raise ProtocolError( "Protobuf request doesn't have specific payload type") test_message = test_messages_proto2_pb2.TestAllTypesProto2() if isProto2 else \ test_messages_proto3_pb2.TestAllTypesProto3() response = conformance_pb2.ConformanceResponse() try: if request.WhichOneof('payload') == 'protobuf_payload': try: test_message.ParseFromString(request.protobuf_payload) except message.DecodeError as e: response.parse_error = str(e) return response elif request.WhichOneof('payload') == 'json_payload': try: ignore_unknown_fields = \ request.test_category == \ conformance_pb2.JSON_IGNORE_UNKNOWN_PARSING_TEST json_format.Parse(request.json_payload, test_message, ignore_unknown_fields) except Exception as e: response.parse_error = str(e) return response else: raise ProtocolError("Request didn't have payload.") if request.requested_output_format == conformance_pb2.UNSPECIFIED: raise ProtocolError("Unspecified output format") elif request.requested_output_format == conformance_pb2.PROTOBUF: response.protobuf_payload = test_message.SerializeToString() elif request.requested_output_format == conformance_pb2.JSON: try: response.json_payload = json_format.MessageToJson(test_message) except Exception as e: response.serialize_error = str(e) return response except Exception as e: response.runtime_error = str(e) return response
def do_test(request): response = conformance_pb2.ConformanceResponse() if request.message_type == "conformance.FailureSet": failure_set = conformance_pb2.FailureSet() failures = [] # TODO(gerbens): Remove, this is a hack to detect if the old vs new # parser is used by the cpp code. Relying on a bug in the old parser. hack_proto = test_messages_proto2_pb2.TestAllTypesProto2() if hack_proto.ParseFromString(b"\322\002\001"): # the string above is one of the failing conformance test strings of the # old parser. If we succeed the c++ implementation is using the old # parser so we add the list of failing conformance tests. failures = [ "Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE", "Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.BOOL", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.DOUBLE", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.ENUM", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.FIXED32", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.FIXED64", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.FLOAT", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT32", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT64", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SFIXED32", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SFIXED64", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT32", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT64", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT32", "Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT64", "Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE", "Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.BOOL", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.DOUBLE", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.ENUM", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.FIXED32", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.FIXED64", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.FLOAT", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT32", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT64", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SFIXED32", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SFIXED64", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT32", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT64", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT32", "Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT64", ] for x in failures: failure_set.failure.append(x) response.protobuf_payload = failure_set.SerializeToString() return response isProto3 = (request.message_type == "protobuf_test_messages.proto3.TestAllTypesProto3") isJson = (request.WhichOneof('payload') == 'json_payload') isProto2 = (request.message_type == "protobuf_test_messages.proto2.TestAllTypesProto2") if (not isProto3) and (not isJson) and (not isProto2): raise ProtocolError("Protobuf request doesn't have specific payload type") test_message = test_messages_proto2_pb2.TestAllTypesProto2() if isProto2 else \ test_messages_proto3_pb2.TestAllTypesProto3() try: if request.WhichOneof('payload') == 'protobuf_payload': try: test_message.ParseFromString(request.protobuf_payload) except message.DecodeError as e: response.parse_error = str(e) return response elif request.WhichOneof('payload') == 'json_payload': try: ignore_unknown_fields = \ request.test_category == \ conformance_pb2.JSON_IGNORE_UNKNOWN_PARSING_TEST json_format.Parse(request.json_payload, test_message, ignore_unknown_fields) except Exception as e: response.parse_error = str(e) return response elif request.WhichOneof('payload') == 'text_payload': try: text_format.Parse(request.text_payload, test_message) except Exception as e: response.parse_error = str(e) return response else: raise ProtocolError("Request didn't have payload.") if request.requested_output_format == conformance_pb2.UNSPECIFIED: raise ProtocolError("Unspecified output format") elif request.requested_output_format == conformance_pb2.PROTOBUF: response.protobuf_payload = test_message.SerializeToString() elif request.requested_output_format == conformance_pb2.JSON: try: response.json_payload = json_format.MessageToJson(test_message) except Exception as e: response.serialize_error = str(e) return response elif request.requested_output_format == conformance_pb2.TEXT_FORMAT: response.text_payload = text_format.MessageToString(test_message) except Exception as e: response.runtime_error = str(e) return response