35 #include "conformance.pb.h"
36 #include <google/protobuf/test_messages_proto3.pb.h>
37 #include <google/protobuf/test_messages_proto2.pb.h>
43 using conformance::ConformanceRequest;
44 using conformance::ConformanceResponse;
56 using protobuf_test_messages::proto2::TestAllTypesProto2;
57 using protobuf_test_messages::proto3::TestAllTypesProto3;
63 #if !GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
64 "Required.Proto2.ProtobufInput."
65 "PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE",
66 "Required.Proto2.ProtobufInput."
67 "PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE",
68 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.BOOL",
69 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.ENUM",
70 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT32",
71 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT64",
72 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT32",
73 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT64",
74 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT32",
75 "Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT64",
76 "Required.Proto3.ProtobufInput."
77 "PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE",
78 "Required.Proto3.ProtobufInput."
79 "PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE",
80 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.BOOL",
81 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.ENUM",
82 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT32",
83 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT64",
84 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT32",
85 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT64",
86 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT32",
87 "Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT64",
104 ssize_t bytes_read = read(fd, (
char*)
buf + ofs,
len);
106 if (bytes_read == 0)
return false;
108 if (bytes_read < 0) {
125 void DoTest(
const ConformanceRequest& request, ConformanceResponse* response) {
128 request.message_type());
130 GOOGLE_LOG(
FATAL) <<
"No such message type: " << request.message_type();
132 test_message = MessageFactory::generated_factory()->GetPrototype(
descriptor)->
New();
134 switch (request.payload_case()) {
135 case ConformanceRequest::kProtobufPayload: {
139 response->set_parse_error(
"Parse error (no more details available).");
145 case ConformanceRequest::kJsonPayload: {
148 options.ignore_unknown_fields =
149 (request.test_category() ==
150 conformance::JSON_IGNORE_UNKNOWN_PARSING_TEST);
152 request.json_payload(), &proto_binary,
155 response->set_parse_error(
string(
"Parse error: ") +
162 "Parsing JSON generates invalid proto output.");
168 case ConformanceRequest::kTextPayload: {
170 response->set_parse_error(
"Parse error");
176 case ConformanceRequest::PAYLOAD_NOT_SET:
182 << request.payload_case();
186 conformance::FailureSet failures;
188 for (
const char*
s :
kFailures) failures.add_failure(
s);
189 test_message = &failures;
192 switch (request.requested_output_format()) {
193 case conformance::UNSPECIFIED:
197 case conformance::PROTOBUF: {
202 case conformance::JSON: {
209 string(
"Failed to serialize JSON output: ") +
216 case conformance::TEXT_FORMAT: {
217 TextFormat::Printer printer;
218 printer.SetHideUnknownFields(!request.print_unknown_fields());
226 << request.requested_output_format();
231 string serialized_input;
232 string serialized_output;
233 ConformanceRequest request;
242 serialized_input.resize(
bytes);
248 if (!request.ParseFromString(serialized_input)) {
255 response.SerializeToString(&serialized_output);
257 bytes = serialized_output.size();
262 fprintf(stderr,
"conformance-cpp: request=%s, response=%s\n",
263 request.ShortDebugString().c_str(),
264 response.ShortDebugString().c_str());
278 fprintf(stderr,
"conformance-cpp: received EOF from test runner "