Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
020a24df
Commit
020a24df
authored
Jun 29, 2017
by
Yilun Chong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
change cpp and python to uniform message
parent
467c1ccd
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
67 additions
and
102 deletions
+67
-102
conformance_cpp.cc
conformance/conformance_cpp.cc
+22
-28
conformance_python.py
conformance/conformance_python.py
+18
-29
conformance_test.cc
conformance/conformance_test.cc
+27
-45
No files found.
conformance/conformance_cpp.cc
View file @
020a24df
...
...
@@ -35,6 +35,7 @@
#include "conformance.pb.h"
#include <google/protobuf/test_messages_proto3.pb.h>
#include <google/protobuf/test_messages_proto2.pb.h>
#include <google/protobuf/message.h>
#include <google/protobuf/util/json_util.h>
#include <google/protobuf/util/type_resolver_util.h>
...
...
@@ -42,6 +43,7 @@ using conformance::ConformanceRequest;
using
conformance
::
ConformanceResponse
;
using
google
::
protobuf
::
Descriptor
;
using
google
::
protobuf
::
DescriptorPool
;
using
google
::
protobuf
::
Message
;
using
google
::
protobuf
::
internal
::
scoped_ptr
;
using
google
::
protobuf
::
util
::
BinaryToJsonString
;
using
google
::
protobuf
::
util
::
JsonToBinaryString
;
...
...
@@ -89,27 +91,27 @@ void CheckedWrite(int fd, const void *buf, size_t len) {
}
void
DoTest
(
const
ConformanceRequest
&
request
,
ConformanceResponse
*
response
)
{
TestAllTypes
test_message
;
TestAllTypesProto2
test_message_proto2
;
bool
isProto3
=
request
.
message_type
()
==
"proto3
"
;
Message
*
test_message
;
bool
isProto3
=
request
.
message_type
()
==
"protobuf_test_messages.proto3.TestAllTypes
"
;
bool
isJson
=
request
.
payload_case
()
==
ConformanceRequest
::
kJsonPayload
;
bool
isProto2
=
request
.
message_type
()
==
"protobuf_test_messages.proto2.TestAllTypesProto2"
;
if
(
isJson
||
isProto3
)
{
test_message
=
new
TestAllTypes
;
}
else
if
(
isProto2
)
{
test_message
=
new
TestAllTypesProto2
;
}
else
{
GOOGLE_LOG
(
FATAL
)
<<
"Protobuf request doesn't have specific payload type"
;
}
switch
(
request
.
payload_case
())
{
case
ConformanceRequest
:
:
kProtobufPayload
:
{
if
(
isProto3
)
{
if
(
!
test_message
.
ParseFromString
(
request
.
protobuf_payload
()))
{
// Getting parse details would involve something like:
// http://stackoverflow.com/questions/22121922/how-can-i-get-more-details-about-errors-generated-during-protobuf-parsing-c
response
->
set_parse_error
(
"Parse error (no more details available)."
);
return
;
}
}
else
if
(
request
.
message_type
()
==
"proto2"
)
{
if
(
!
test_message_proto2
.
ParseFromString
(
request
.
protobuf_payload
()))
{
response
->
set_parse_error
(
"Parse error (no more details available)."
);
return
;
}
}
else
{
GOOGLE_LOG
(
FATAL
)
<<
"Protobuf request doesn't have specific payload type"
;
if
(
!
test_message
->
ParseFromString
(
request
.
protobuf_payload
()))
{
// Getting parse details would involve something like:
// http://stackoverflow.com/questions/22121922/how-can-i-get-more-details-about-errors-generated-during-protobuf-parsing-c
response
->
set_parse_error
(
"Parse error (no more details available)."
);
return
;
}
break
;
}
...
...
@@ -124,7 +126,7 @@ void DoTest(const ConformanceRequest& request, ConformanceResponse* response) {
return
;
}
if
(
!
test_message
.
ParseFromString
(
proto_binary
))
{
if
(
!
test_message
->
ParseFromString
(
proto_binary
))
{
response
->
set_runtime_error
(
"Parsing JSON generates invalid proto output."
);
return
;
...
...
@@ -143,21 +145,13 @@ void DoTest(const ConformanceRequest& request, ConformanceResponse* response) {
break
;
case
conformance
:
:
PROTOBUF
:
{
(
isProto3
||
isJson
)
?
GOOGLE_CHECK
(
test_message
.
SerializeToString
(
response
->
mutable_protobuf_payload
()))
:
GOOGLE_CHECK
(
test_message_proto2
.
SerializeToString
(
response
->
mutable_protobuf_payload
()));
GOOGLE_CHECK
(
test_message
->
SerializeToString
(
response
->
mutable_protobuf_payload
()));
break
;
}
case
conformance
:
:
JSON
:
{
string
proto_binary
;
(
isProto3
||
isJson
)
?
GOOGLE_CHECK
(
test_message
.
SerializeToString
(
&
proto_binary
))
:
GOOGLE_CHECK
(
test_message_proto2
.
SerializeToString
(
&
proto_binary
));
GOOGLE_CHECK
(
test_message
->
SerializeToString
(
&
proto_binary
));
Status
status
=
BinaryToJsonString
(
type_resolver
,
*
type_url
,
proto_binary
,
response
->
mutable_json_payload
());
if
(
!
status
.
ok
())
{
...
...
conformance/conformance_python.py
View file @
020a24df
...
...
@@ -54,30 +54,25 @@ class ProtocolError(Exception):
pass
def
do_test
(
request
):
test_message
=
test_messages_proto3_pb2
.
TestAllTypes
()
response
=
conformance_pb2
.
ConformanceResponse
()
test_message
=
test_messages_proto3_pb2
.
TestAllTypes
()
test_message_proto2
=
test_messages_proto2_pb2
.
TestAllTypesProto2
()
isProto3
=
(
request
.
message_type
==
"proto3"
)
isProto3
=
(
request
.
message_type
==
"protobuf_test_messages.proto3.TestAllTypes"
)
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
.
TestAllTypes
()
response
=
conformance_pb2
.
ConformanceResponse
()
try
:
if
request
.
WhichOneof
(
'payload'
)
==
'protobuf_payload'
:
if
isProto3
:
try
:
test_message
.
ParseFromString
(
request
.
protobuf_payload
)
except
message
.
DecodeError
as
e
:
response
.
parse_error
=
str
(
e
)
return
response
elif
request
.
message_type
==
"proto2"
:
try
:
test_message_proto2
.
ParseFromString
(
request
.
protobuf_payload
)
except
message
.
DecodeError
as
e
:
response
.
parse_error
=
str
(
e
)
return
response
else
:
raise
ProtocolError
(
"Protobuf request doesn't have specific payload type"
)
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
:
json_format
.
Parse
(
request
.
json_payload
,
test_message
)
...
...
@@ -92,17 +87,11 @@ def do_test(request):
raise
ProtocolError
(
"Unspecified output format"
)
elif
request
.
requested_output_format
==
conformance_pb2
.
PROTOBUF
:
if
isProto3
or
isJson
:
response
.
protobuf_payload
=
test_message
.
SerializeToString
()
else
:
response
.
protobuf_payload
=
test_message_proto2
.
SerializeToString
()
response
.
protobuf_payload
=
test_message
.
SerializeToString
()
elif
request
.
requested_output_format
==
conformance_pb2
.
JSON
:
try
:
if
isProto3
or
isJson
:
response
.
json_payload
=
json_format
.
MessageToJson
(
test_message
)
else
:
response
.
json_payload
=
json_format
.
MessageToJson
(
test_message_proto2
)
try
:
response
.
json_payload
=
json_format
.
MessageToJson
(
test_message
)
except
Exception
as
e
:
response
.
serialize_error
=
str
(
e
)
return
response
...
...
conformance/conformance_test.cc
View file @
020a24df
...
...
@@ -276,14 +276,18 @@ void ConformanceTestSuite::RunValidInputTest(
const
string
&
test_name
,
ConformanceLevel
level
,
const
string
&
input
,
WireFormat
input_format
,
const
string
&
equivalent_text_format
,
WireFormat
requested_output
,
bool
isProto3
)
{
TestAllTypes
reference_message
;
TestAllTypesProto2
reference_message_proto2
;
auto
newTestMessage
=
[
&
isProto3
]()
{
Message
*
newMessage
;
if
(
isProto3
)
{
newMessage
=
new
TestAllTypes
;
}
else
{
newMessage
=
new
TestAllTypesProto2
;
}
return
newMessage
;
};
Message
*
reference_message
=
newTestMessage
();
GOOGLE_CHECK
(
isProto3
?
TextFormat
::
ParseFromString
(
equivalent_text_format
,
&
reference_message
)
:
TextFormat
::
ParseFromString
(
equivalent_text_format
,
&
reference_message_proto2
)
)
TextFormat
::
ParseFromString
(
equivalent_text_format
,
reference_message
))
<<
"Failed to parse data for test case: "
<<
test_name
<<
", data: "
<<
equivalent_text_format
;
...
...
@@ -294,9 +298,9 @@ void ConformanceTestSuite::RunValidInputTest(
case
conformance
:
:
PROTOBUF
:
{
request
.
set_protobuf_payload
(
input
);
if
(
isProto3
)
{
request
.
set_message_type
(
"proto
3
"
);
request
.
set_message_type
(
"proto
buf_test_messages.proto3.TestAllTypes
"
);
}
else
{
request
.
set_message_type
(
"proto2"
);
request
.
set_message_type
(
"proto
buf_test_messages.proto2.TestAllTypesProto
2"
);
}
break
;
}
...
...
@@ -313,8 +317,7 @@ void ConformanceTestSuite::RunValidInputTest(
RunTest
(
test_name
,
request
,
&
response
);
TestAllTypes
test_message
;
TestAllTypesProto2
test_message_proto2
;
Message
*
test_message
=
newTestMessage
();
switch
(
response
.
result_case
())
{
case
ConformanceResponse
:
:
RESULT_NOT_SET
:
...
...
@@ -350,20 +353,11 @@ void ConformanceTestSuite::RunValidInputTest(
return
;
}
if
(
isProto3
)
{
if
(
!
test_message
.
ParseFromString
(
binary_protobuf
))
{
ReportFailure
(
test_name
,
level
,
request
,
response
,
"INTERNAL ERROR: internal JSON->protobuf transcode "
"yielded unparseable proto."
);
return
;
}
}
else
{
if
(
!
test_message_proto2
.
ParseFromString
(
binary_protobuf
))
{
ReportFailure
(
test_name
,
level
,
request
,
response
,
"INTERNAL ERROR: internal JSON->protobuf transcode "
"yielded unparseable proto."
);
return
;
}
if
(
!
test_message
->
ParseFromString
(
binary_protobuf
))
{
ReportFailure
(
test_name
,
level
,
request
,
response
,
"INTERNAL ERROR: internal JSON->protobuf transcode "
"yielded unparseable proto."
);
return
;
}
break
;
...
...
@@ -377,18 +371,10 @@ void ConformanceTestSuite::RunValidInputTest(
return
;
}
if
(
isProto3
)
{
if
(
!
test_message
.
ParseFromString
(
response
.
protobuf_payload
()))
{
ReportFailure
(
test_name
,
level
,
request
,
response
,
"Protobuf output we received from test was unparseable."
);
return
;
}
}
else
{
if
(
!
test_message_proto2
.
ParseFromString
(
response
.
protobuf_payload
()))
{
ReportFailure
(
test_name
,
level
,
request
,
response
,
"Protobuf output we received from test was unparseable."
);
return
;
}
if
(
!
test_message
->
ParseFromString
(
response
.
protobuf_payload
()))
{
ReportFailure
(
test_name
,
level
,
request
,
response
,
"Protobuf output we received from test was unparseable."
);
return
;
}
break
;
...
...
@@ -407,11 +393,7 @@ void ConformanceTestSuite::RunValidInputTest(
differencer
.
ReportDifferencesToString
(
&
differences
);
bool
check
;
if
(
isProto3
)
{
check
=
differencer
.
Compare
(
reference_message
,
test_message
);
}
else
{
check
=
differencer
.
Compare
(
reference_message_proto2
,
test_message_proto2
);
}
check
=
differencer
.
Compare
(
*
reference_message
,
*
test_message
);
if
(
check
)
{
ReportSuccess
(
test_name
);
}
else
{
...
...
@@ -429,9 +411,9 @@ void ConformanceTestSuite::ExpectParseFailureForProto(
ConformanceResponse
response
;
request
.
set_protobuf_payload
(
proto
);
if
(
isProto3
)
{
request
.
set_message_type
(
"proto
3
"
);
request
.
set_message_type
(
"proto
buf_test_messages.proto3.TestAllTypes
"
);
}
else
{
request
.
set_message_type
(
"proto2"
);
request
.
set_message_type
(
"proto
buf_test_messages.proto2.TestAllTypesProto
2"
);
}
string
effective_test_name
=
ConformanceLevelToString
(
level
)
+
".ProtobufInput."
+
test_name
;
...
...
@@ -586,7 +568,7 @@ void ConformanceTestSuite::ExpectSerializeFailureForJson(
ConformanceRequest
request
;
ConformanceResponse
response
;
request
.
set_protobuf_payload
(
payload_message
.
SerializeAsString
());
request
.
set_message_type
(
"proto
3
"
);
request
.
set_message_type
(
"proto
buf_test_messages.proto3.TestAllTypes
"
);
string
effective_test_name
=
ConformanceLevelToString
(
level
)
+
"."
+
test_name
+
".JsonOutput"
;
request
.
set_requested_output_format
(
conformance
::
JSON
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment