Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Unified Diff: tools/telemetry/third_party/gsutilz/third_party/protorpc/protorpc/generate_python_test.py

Issue 1264873003: Add gsutil/third_party to telemetry/third_party/gsutilz/third_party. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove httplib2 Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/gsutilz/third_party/protorpc/protorpc/generate_python_test.py
diff --git a/tools/telemetry/third_party/gsutilz/third_party/protorpc/protorpc/generate_python_test.py b/tools/telemetry/third_party/gsutilz/third_party/protorpc/protorpc/generate_python_test.py
new file mode 100755
index 0000000000000000000000000000000000000000..21a05cced0e035de0aeef219dfdf6ca9b04f6fd2
--- /dev/null
+++ b/tools/telemetry/third_party/gsutilz/third_party/protorpc/protorpc/generate_python_test.py
@@ -0,0 +1,362 @@
+#!/usr/bin/env python
+#
+# Copyright 2010 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+"""Tests for protorpc.generate_python_test."""
+
+__author__ = 'rafek@google.com (Rafe Kaplan)'
+
+
+import os
+import shutil
+import sys
+import tempfile
+import unittest
+
+from protorpc import descriptor
+from protorpc import generate_python
+from protorpc import test_util
+from protorpc import util
+
+
+class ModuleInterfaceTest(test_util.ModuleInterfaceTest,
+ test_util.TestCase):
+
+ MODULE = generate_python
+
+
+class FormatPythonFileTest(test_util.TestCase):
+
+ def setUp(self):
+ self.original_path = list(sys.path)
+ self.original_modules = dict(sys.modules)
+ sys.path = list(sys.path)
+ self.file_descriptor = descriptor.FileDescriptor()
+
+ # Create temporary directory and add to Python path so that generated
+ # Python code can be easily parsed, imported and executed.
+ self.temp_dir = tempfile.mkdtemp()
+ sys.path.append(self.temp_dir)
+
+ def tearDown(self):
+ # Reset path.
+ sys.path[:] = []
+ sys.path.extend(self.original_path)
+
+ # Reset modules.
+ sys.modules.clear()
+ sys.modules.update(self.original_modules)
+
+ # Remove temporary directory.
+ try:
+ shutil.rmtree(self.temp_dir)
+ except IOError:
+ pass
+
+ def DoPythonTest(self, file_descriptor):
+ """Execute python test based on a FileDescriptor object.
+
+ The full test of the Python code generation is to generate a Python source
+ code file, import the module and regenerate the FileDescriptor from it.
+ If the generated FileDescriptor is the same as the original, it means that
+ the generated source code correctly implements the actual FileDescriptor.
+ """
+ file_name = os.path.join(self.temp_dir,
+ '%s.py' % (file_descriptor.package or 'blank',))
+ source_file = open(file_name, 'wt')
+ try:
+ generate_python.format_python_file(file_descriptor, source_file)
+ finally:
+ source_file.close()
+
+ module_to_import = file_descriptor.package or 'blank'
+ module = __import__(module_to_import)
+
+ if not file_descriptor.package:
+ self.assertFalse(hasattr(module, 'package'))
+ module.package = '' # Create package name so that comparison will work.
+
+ reloaded_descriptor = descriptor.describe_file(module)
+
+ # Need to sort both message_types fields because document order is never
+ # Ensured.
+ # TODO(rafek): Ensure document order.
+ if reloaded_descriptor.message_types:
+ reloaded_descriptor.message_types = sorted(
+ reloaded_descriptor.message_types, key=lambda v: v.name)
+
+ if file_descriptor.message_types:
+ file_descriptor.message_types = sorted(
+ file_descriptor.message_types, key=lambda v: v.name)
+
+ self.assertEquals(file_descriptor, reloaded_descriptor)
+
+ @util.positional(2)
+ def DoMessageTest(self,
+ field_descriptors,
+ message_types=None,
+ enum_types=None):
+ """Execute message generation test based on FieldDescriptor objects.
+
+ Args:
+ field_descriptor: List of FieldDescriptor object to generate and test.
+ message_types: List of other MessageDescriptor objects that the new
+ Message class depends on.
+ enum_types: List of EnumDescriptor objects that the new Message class
+ depends on.
+ """
+ file_descriptor = descriptor.FileDescriptor()
+ file_descriptor.package = 'my_package'
+
+ message_descriptor = descriptor.MessageDescriptor()
+ message_descriptor.name = 'MyMessage'
+
+ message_descriptor.fields = list(field_descriptors)
+
+ file_descriptor.message_types = message_types or []
+ file_descriptor.message_types.append(message_descriptor)
+
+ if enum_types:
+ file_descriptor.enum_types = list(enum_types)
+
+ self.DoPythonTest(file_descriptor)
+
+ def testBlankPackage(self):
+ self.DoPythonTest(descriptor.FileDescriptor())
+
+ def testEmptyPackage(self):
+ file_descriptor = descriptor.FileDescriptor()
+ file_descriptor.package = 'mypackage'
+ self.DoPythonTest(file_descriptor)
+
+ def testSingleField(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'integer_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.INT64
+
+ self.DoMessageTest([field])
+
+ def testMessageField_InternalReference(self):
+ other_message = descriptor.MessageDescriptor()
+ other_message.name = 'OtherMessage'
+
+ field = descriptor.FieldDescriptor()
+ field.name = 'message_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.MESSAGE
+ field.type_name = 'my_package.OtherMessage'
+
+ self.DoMessageTest([field], message_types=[other_message])
+
+ def testMessageField_ExternalReference(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'message_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.MESSAGE
+ field.type_name = 'protorpc.registry.GetFileSetResponse'
+
+ self.DoMessageTest([field])
+
+ def testEnumField_InternalReference(self):
+ enum = descriptor.EnumDescriptor()
+ enum.name = 'Color'
+
+ field = descriptor.FieldDescriptor()
+ field.name = 'color'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.ENUM
+ field.type_name = 'my_package.Color'
+
+ self.DoMessageTest([field], enum_types=[enum])
+
+ def testEnumField_ExternalReference(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'color'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.ENUM
+ field.type_name = 'protorpc.descriptor.FieldDescriptor.Label'
+
+ self.DoMessageTest([field])
+
+ def testDateTimeField(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'timestamp'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.MESSAGE
+ field.type_name = 'protorpc.message_types.DateTimeMessage'
+
+ self.DoMessageTest([field])
+
+ def testNonDefaultVariant(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'integer_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.UINT64
+
+ self.DoMessageTest([field])
+
+ def testRequiredField(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'integer_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.REQUIRED
+ field.variant = descriptor.FieldDescriptor.Variant.INT64
+
+ self.DoMessageTest([field])
+
+ def testRepeatedField(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'integer_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.REPEATED
+ field.variant = descriptor.FieldDescriptor.Variant.INT64
+
+ self.DoMessageTest([field])
+
+ def testIntegerDefaultValue(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'integer_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.INT64
+ field.default_value = '10'
+
+ self.DoMessageTest([field])
+
+ def testFloatDefaultValue(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'float_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.DOUBLE
+ field.default_value = '10.1'
+
+ self.DoMessageTest([field])
+
+ def testStringDefaultValue(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'string_field'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.STRING
+ field.default_value = u'a nice lovely string\'s "string"'
+
+ self.DoMessageTest([field])
+
+ def testEnumDefaultValue(self):
+ field = descriptor.FieldDescriptor()
+ field.name = 'label'
+ field.number = 1
+ field.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field.variant = descriptor.FieldDescriptor.Variant.ENUM
+ field.type_name = 'protorpc.descriptor.FieldDescriptor.Label'
+ field.default_value = '2'
+
+ self.DoMessageTest([field])
+
+ def testMultiFields(self):
+ field1 = descriptor.FieldDescriptor()
+ field1.name = 'integer_field'
+ field1.number = 1
+ field1.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field1.variant = descriptor.FieldDescriptor.Variant.INT64
+
+ field2 = descriptor.FieldDescriptor()
+ field2.name = 'string_field'
+ field2.number = 2
+ field2.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field2.variant = descriptor.FieldDescriptor.Variant.STRING
+
+ field3 = descriptor.FieldDescriptor()
+ field3.name = 'unsigned_integer_field'
+ field3.number = 3
+ field3.label = descriptor.FieldDescriptor.Label.OPTIONAL
+ field3.variant = descriptor.FieldDescriptor.Variant.UINT64
+
+ self.DoMessageTest([field1, field2, field3])
+
+ def testNestedMessage(self):
+ message = descriptor.MessageDescriptor()
+ message.name = 'OuterMessage'
+
+ inner_message = descriptor.MessageDescriptor()
+ inner_message.name = 'InnerMessage'
+
+ inner_inner_message = descriptor.MessageDescriptor()
+ inner_inner_message.name = 'InnerInnerMessage'
+
+ inner_message.message_types = [inner_inner_message]
+
+ message.message_types = [inner_message]
+
+ file_descriptor = descriptor.FileDescriptor()
+ file_descriptor.message_types = [message]
+
+ self.DoPythonTest(file_descriptor)
+
+ def testNestedEnum(self):
+ message = descriptor.MessageDescriptor()
+ message.name = 'OuterMessage'
+
+ inner_enum = descriptor.EnumDescriptor()
+ inner_enum.name = 'InnerEnum'
+
+ message.enum_types = [inner_enum]
+
+ file_descriptor = descriptor.FileDescriptor()
+ file_descriptor.message_types = [message]
+
+ self.DoPythonTest(file_descriptor)
+
+ def testService(self):
+ service = descriptor.ServiceDescriptor()
+ service.name = 'TheService'
+
+ method1 = descriptor.MethodDescriptor()
+ method1.name = 'method1'
+ method1.request_type = 'protorpc.descriptor.FileDescriptor'
+ method1.response_type = 'protorpc.descriptor.MethodDescriptor'
+
+ service.methods = [method1]
+
+ file_descriptor = descriptor.FileDescriptor()
+ file_descriptor.service_types = [service]
+
+ self.DoPythonTest(file_descriptor)
+
+ # Test to make sure that implementation methods raise an exception.
+ import blank
+ service_instance = blank.TheService()
+ self.assertRaisesWithRegexpMatch(NotImplementedError,
+ 'Method method1 is not implemented',
+ service_instance.method1,
+ descriptor.FileDescriptor())
+
+
+def main():
+ unittest.main()
+
+
+if __name__ == '__main__':
+ main()

Powered by Google App Engine
This is Rietveld 408576698