Index: tools/telemetry/third_party/gsutilz/third_party/apitools/apitools/base/py/encoding_test.py |
diff --git a/tools/telemetry/third_party/gsutilz/third_party/apitools/apitools/base/py/encoding_test.py b/tools/telemetry/third_party/gsutilz/third_party/apitools/apitools/base/py/encoding_test.py |
index 0d10d8b6590a2bd29c88fd215a70343699a3e429..0389af125f0544547bc8512e00ab46e6cc2fe044 100644 |
--- a/tools/telemetry/third_party/gsutilz/third_party/apitools/apitools/base/py/encoding_test.py |
+++ b/tools/telemetry/third_party/gsutilz/third_party/apitools/apitools/base/py/encoding_test.py |
@@ -1,6 +1,7 @@ |
import base64 |
import datetime |
import json |
+import sys |
from protorpc import message_types |
from protorpc import messages |
@@ -9,6 +10,7 @@ import unittest2 |
from apitools.base.py import encoding |
from apitools.base.py import exceptions |
+from apitools.base.py import extra_types |
class SimpleMessage(messages.Message): |
@@ -33,6 +35,21 @@ class AdditionalPropertiesMessage(messages.Message): |
value = messages.StringField(2) |
additional_properties = messages.MessageField( |
+ 'AdditionalProperty', 1, repeated=True) |
+ |
+ |
+@encoding.MapUnrecognizedFields('additional_properties') |
+class UnrecognizedEnumMessage(messages.Message): |
+ |
+ class ThisEnum(messages.Enum): |
+ VALUE_ONE = 1 |
+ VALUE_TWO = 2 |
+ |
+ class AdditionalProperty(messages.Message): |
+ key = messages.StringField(1) |
+ value = messages.EnumField('UnrecognizedEnumMessage.ThisEnum', 2) |
+ |
+ additional_properties = messages.MessageField( |
AdditionalProperty, 1, repeated=True) |
@@ -85,6 +102,17 @@ class MessageWithRemappings(messages.Message): |
repeated_field = messages.StringField(5, repeated=True) |
+@encoding.MapUnrecognizedFields('additional_properties') |
+class RepeatedJsonValueMessage(messages.Message): |
+ |
+ class AdditionalProperty(messages.Message): |
+ key = messages.StringField(1) |
+ value = messages.MessageField(extra_types.JsonValue, 2, repeated=True) |
+ |
+ additional_properties = messages.MessageField('AdditionalProperty', 1, |
+ repeated=True) |
+ |
+ |
encoding.AddCustomJsonEnumMapping(MessageWithRemappings.SomeEnum, |
'enum_value', 'wire_name') |
encoding.AddCustomJsonFieldMapping(MessageWithRemappings, |
@@ -187,6 +215,14 @@ class EncodingTest(unittest2.TestCase): |
self.assertEqual(1, len(result.additional_properties)) |
self.assertEqual(0, result.additional_properties[0].value.index) |
+ def testUnrecognizedEnum(self): |
+ json_msg = '{"input": "VALUE_ONE"}' |
+ result = encoding.JsonToMessage( |
+ UnrecognizedEnumMessage, json_msg) |
+ self.assertEqual(1, len(result.additional_properties)) |
+ self.assertEqual(UnrecognizedEnumMessage.ThisEnum.VALUE_ONE, |
+ result.additional_properties[0].value) |
+ |
def testNestedFieldMapping(self): |
nested_msg = AdditionalPropertiesMessage() |
nested_msg.additional_properties = [ |
@@ -342,3 +378,33 @@ class EncodingTest(unittest2.TestCase): |
'TimeMessage(\n ' |
'timefield=datetime.datetime(2014, 7, 2, 23, 33, 25, 541000, ' |
'tzinfo=TimeZoneOffset(datetime.timedelta(0))),\n)') |
+ |
+ def testPackageMappingsNoPackage(self): |
+ this_module_name = util.get_package_for_module(__name__) |
+ full_type_name = 'MessageWithEnum.ThisEnum' |
+ full_key = '%s.%s' % (this_module_name, full_type_name) |
+ self.assertEqual(full_key, |
+ encoding._GetTypeKey(MessageWithEnum.ThisEnum, '')) |
+ |
+ def testPackageMappingsWithPackage(self): |
+ this_module_name = util.get_package_for_module(__name__) |
+ full_type_name = 'MessageWithEnum.ThisEnum' |
+ full_key = '%s.%s' % (this_module_name, full_type_name) |
+ this_module = sys.modules[__name__] |
+ new_package = 'new_package' |
+ try: |
+ setattr(this_module, 'package', new_package) |
+ new_key = '%s.%s' % (new_package, full_type_name) |
+ self.assertEqual( |
+ new_key, |
+ encoding._GetTypeKey(MessageWithEnum.ThisEnum, '')) |
+ self.assertEqual( |
+ full_key, |
+ encoding._GetTypeKey(MessageWithEnum.ThisEnum, new_package)) |
+ finally: |
+ delattr(this_module, 'package') |
+ |
+ def testRepeatedJsonValuesAsRepeatedProperty(self): |
+ encoded_msg = '{"a": [{"one": 1}]}' |
+ msg = encoding.JsonToMessage(RepeatedJsonValueMessage, encoded_msg) |
+ self.assertEqual(encoded_msg, encoding.MessageToJson(msg)) |