33 """A conformance test implementation for the Python protobuf library.
35 See conformance.proto for more information.
48 import conformance_pb2
50 sys.stdout = os.fdopen(sys.stdout.fileno(),
'wb', 0)
51 sys.stdin = os.fdopen(sys.stdin.fileno(),
'rb', 0)
60 response = conformance_pb2.ConformanceResponse()
62 if request.message_type ==
"conformance.FailureSet":
63 failure_set = conformance_pb2.FailureSet()
67 hack_proto = test_messages_proto2_pb2.TestAllTypesProto2()
70 hack_proto.ParseFromString(b
"\322\002\001")
71 except message.DecodeError
as e:
78 "Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE",
79 "Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE",
80 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.BOOL",
81 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.DOUBLE",
82 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.ENUM",
83 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.FIXED32",
84 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.FIXED64",
85 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.FLOAT",
86 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT32",
87 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT64",
88 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SFIXED32",
89 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SFIXED64",
90 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT32",
91 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT64",
92 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT32",
93 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT64",
94 "Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE",
95 "Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE",
96 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.BOOL",
97 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.DOUBLE",
98 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.ENUM",
99 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.FIXED32",
100 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.FIXED64",
101 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.FLOAT",
102 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT32",
103 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT64",
104 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SFIXED32",
105 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SFIXED64",
106 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT32",
107 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT64",
108 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT32",
109 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT64",
112 failure_set.failure.append(x)
113 response.protobuf_payload = failure_set.SerializeToString()
116 isProto3 = (request.message_type ==
"protobuf_test_messages.proto3.TestAllTypesProto3")
117 isJson = (request.WhichOneof(
'payload') ==
'json_payload')
118 isProto2 = (request.message_type ==
"protobuf_test_messages.proto2.TestAllTypesProto2")
120 if (
not isProto3)
and (
not isJson)
and (
not isProto2):
121 raise ProtocolError(
"Protobuf request doesn't have specific payload type")
123 test_message = test_messages_proto2_pb2.TestAllTypesProto2()
if isProto2
else \
124 test_messages_proto3_pb2.TestAllTypesProto3()
127 if request.WhichOneof(
'payload') ==
'protobuf_payload':
129 test_message.ParseFromString(request.protobuf_payload)
130 except message.DecodeError
as e:
131 response.parse_error =
str(e)
134 elif request.WhichOneof(
'payload') ==
'json_payload':
136 ignore_unknown_fields = \
137 request.test_category == \
138 conformance_pb2.JSON_IGNORE_UNKNOWN_PARSING_TEST
139 json_format.Parse(request.json_payload, test_message,
140 ignore_unknown_fields)
141 except Exception
as e:
142 response.parse_error =
str(e)
145 elif request.WhichOneof(
'payload') ==
'text_payload':
147 text_format.Parse(request.text_payload, test_message)
148 except Exception
as e:
149 response.parse_error =
str(e)
153 raise ProtocolError(
"Request didn't have payload.")
155 if request.requested_output_format == conformance_pb2.UNSPECIFIED:
156 raise ProtocolError(
"Unspecified output format")
158 elif request.requested_output_format == conformance_pb2.PROTOBUF:
159 response.protobuf_payload = test_message.SerializeToString()
161 elif request.requested_output_format == conformance_pb2.JSON:
163 response.json_payload = json_format.MessageToJson(test_message)
164 except Exception
as e:
165 response.serialize_error =
str(e)
168 elif request.requested_output_format == conformance_pb2.TEXT_FORMAT:
169 response.text_payload = text_format.MessageToString(
170 test_message, print_unknown_fields=request.print_unknown_fields)
172 except Exception
as e:
173 response.runtime_error =
str(e)
178 length_bytes = sys.stdin.read(4)
179 if len(length_bytes) == 0:
181 elif len(length_bytes) != 4:
182 raise IOError(
"I/O error")
187 length = struct.unpack(
"<I", length_bytes)[0]
188 serialized_request = sys.stdin.read(length)
189 if len(serialized_request) != length:
190 raise IOError(
"I/O error")
192 request = conformance_pb2.ConformanceRequest()
193 request.ParseFromString(serialized_request)
197 serialized_response = response.SerializeToString()
198 sys.stdout.write(struct.pack(
"<I",
len(serialized_response)))
199 sys.stdout.write(serialized_response)
203 sys.stderr.write(
"conformance_python: request=%s, response=%s\n" % (
204 request.ShortDebugString().c_str(),
205 response.ShortDebugString().c_str()))
214 sys.stderr.write(
"conformance_python: received EOF from test runner " +
215 "after %s tests, exiting\n" % (test_count))