36
36
from google.protobuf.internal import more_extensions_pb2
37
37
from google.protobuf.internal import more_messages_pb2
38
38
from google.protobuf.internal import packed_field_test_pb2
39
+
from google.protobuf.internal import self_recursive_pb2
39
40
from google.protobuf.internal import test_proto3_optional_pb2
40
41
from google.protobuf.internal import test_util
41
42
from google.protobuf.internal import testing_refleaks
@@ -1431,6 +1432,52 @@ def testMessageClassName(self, message_module):
1431
1432
)
1432
1433
1433
1434
1435
+
@testing_refleaks.TestCase
1436
+
class TestRecursiveGroup(unittest.TestCase):
1437
+
1438
+
def _MakeRecursiveGroupMessage(self, n):
1439
+
msg = self_recursive_pb2.SelfRecursive()
1440
+
sub = msg
1441
+
for _ in range(n):
1442
+
sub = sub.sub_group
1443
+
sub.i = 1
1444
+
return msg.SerializeToString()
1445
+
1446
+
def testRecursiveGroups(self):
1447
+
recurse_msg = self_recursive_pb2.SelfRecursive()
1448
+
data = self._MakeRecursiveGroupMessage(100)
1449
+
recurse_msg.ParseFromString(data)
1450
+
self.assertTrue(recurse_msg.HasField('sub_group'))
1451
+
1452
+
def testRecursiveGroupsException(self):
1453
+
if api_implementation.Type() != 'python':
1454
+
api_implementation._c_module.SetAllowOversizeProtos(False)
1455
+
recurse_msg = self_recursive_pb2.SelfRecursive()
1456
+
data = self._MakeRecursiveGroupMessage(300)
1457
+
with self.assertRaises(message.DecodeError) as context:
1458
+
recurse_msg.ParseFromString(data)
1459
+
self.assertIn('Error parsing message', str(context.exception))
1460
+
if api_implementation.Type() == 'python':
1461
+
self.assertIn('too many levels of nesting', str(context.exception))
1462
+
1463
+
def testRecursiveGroupsUnknownFields(self):
1464
+
if api_implementation.Type() != 'python':
1465
+
api_implementation._c_module.SetAllowOversizeProtos(False)
1466
+
test_msg = unittest_pb2.TestAllTypes()
1467
+
data = self._MakeRecursiveGroupMessage(300) # unknown to test_msg
1468
+
with self.assertRaises(message.DecodeError) as context:
1469
+
test_msg.ParseFromString(data)
1470
+
self.assertIn(
1471
+
'Error parsing message',
1472
+
str(context.exception),
1473
+
)
1474
+
if api_implementation.Type() == 'python':
1475
+
self.assertIn('too many levels of nesting', str(context.exception))
1476
+
decoder.SetRecursionLimit(310)
1477
+
test_msg.ParseFromString(data)
1478
+
decoder.SetRecursionLimit(decoder.DEFAULT_RECURSION_LIMIT)
1479
+
1480
+
1434
1481
# Class to test proto2-only features (required, extensions, etc.)
1435
1482
@testing_refleaks.TestCase
1436
1483
class Proto2Test(unittest.TestCase):
@@ -2859,8 +2906,6 @@ def testUnpackedFields(self):
2859
2906
self.assertEqual(golden_data, message.SerializeToString())
2860
2907
2861
2908
2862
-
@unittest.skipIf(api_implementation.Type() == 'python',
2863
-
'explicit tests of the C++ implementation')
2864
2909
@testing_refleaks.TestCase
2865
2910
class OversizeProtosTest(unittest.TestCase):
2866
2911
@@ -2877,16 +2922,23 @@ def testSucceedOkSizedProto(self):
2877
2922
msg.ParseFromString(self.GenerateNestedProto(100))
2878
2923
2879
2924
def testAssertOversizeProto(self):
2880
-
api_implementation._c_module.SetAllowOversizeProtos(False)
2925
+
if api_implementation.Type() != 'python':
2926
+
api_implementation._c_module.SetAllowOversizeProtos(False)
2881
2927
msg = unittest_pb2.TestRecursiveMessage()
2882
2928
with self.assertRaises(message.DecodeError) as context:
2883
2929
msg.ParseFromString(self.GenerateNestedProto(101))
2884
2930
self.assertIn('Error parsing message', str(context.exception))
2885
2931
2886
2932
def testSucceedOversizeProto(self):
2887
-
api_implementation._c_module.SetAllowOversizeProtos(True)
2933
+
2934
+
if api_implementation.Type() == 'python':
2935
+
decoder.SetRecursionLimit(310)
2936
+
else:
2937
+
api_implementation._c_module.SetAllowOversizeProtos(True)
2938
+
2888
2939
msg = unittest_pb2.TestRecursiveMessage()
2889
2940
msg.ParseFromString(self.GenerateNestedProto(101))
2941
+
decoder.SetRecursionLimit(decoder.DEFAULT_RECURSION_LIMIT)
2890
2942
2891
2943
2892
2944
if __name__ == '__main__':
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4