35 #include <google/protobuf/message.h>
36 #include <google/protobuf/text_format.h>
37 #include <google/protobuf/util/json_util.h>
38 #include <google/protobuf/util/type_resolver_util.h>
39 #include <google/protobuf/stubs/status.h>
40 #include "conformance.pb.h"
41 #include <google/protobuf/test_messages_proto2.pb.h>
42 #include <google/protobuf/test_messages_proto3.pb.h>
43 #include <google/protobuf/stubs/status.h>
45 using conformance::ConformanceRequest;
46 using conformance::ConformanceResponse;
57 using protobuf_test_messages::proto3::TestAllTypesProto3;
58 using protobuf_test_messages::proto2::TestAllTypesProto2;
88 GOOGLE_LOG(
FATAL) <<
"Error reading from test runner: " << strerror(errno);
100 GOOGLE_LOG(
FATAL) <<
"Error writing to test runner: " << strerror(errno);
106 google::protobuf::LinkMessageReflection<TestAllTypesProto2>();
107 google::protobuf::LinkMessageReflection<TestAllTypesProto3>();
115 switch (
request.payload_case()) {
116 case ConformanceRequest::kProtobufPayload: {
120 response->set_parse_error(
"Parse error (no more details available).");
126 case ConformanceRequest::kJsonPayload: {
129 options.ignore_unknown_fields =
131 conformance::JSON_IGNORE_UNKNOWN_PARSING_TEST);
136 response->set_parse_error(
string(
"Parse error: ") +
143 "Parsing JSON generates invalid proto output.");
149 case ConformanceRequest::kTextPayload: {
151 response->set_parse_error(
"Parse error");
157 case ConformanceRequest::PAYLOAD_NOT_SET:
172 switch (
request.requested_output_format()) {
173 case conformance::UNSPECIFIED:
177 case conformance::PROTOBUF: {
179 response->mutable_protobuf_payload()));
183 case conformance::JSON: {
191 string(
"Failed to serialize JSON output: ") +
198 case conformance::TEXT_FORMAT: {
208 <<
request.requested_output_format();
213 string serialized_input;
214 string serialized_output;
224 serialized_input.resize(
bytes);
230 if (!
request.ParseFromString(serialized_input)) {
237 response.SerializeToString(&serialized_output);
239 bytes = serialized_output.size();
244 fprintf(
stderr,
"conformance-cpp: request=%s, response=%s\n",
245 request.ShortDebugString().c_str(),
246 response.ShortDebugString().c_str());
263 fprintf(
stderr,
"conformance-cpp: received EOF from test runner "