14 """Tests of grpc_reflection.v1alpha.reflection."""
22 ProtoReflectionDescriptorDatabase
24 from src.proto.grpc.testing
import test_pb2
26 from src.proto.grpc.testing.proto2
import empty2_extensions_pb2
29 _PROTO_PACKAGE_NAME =
"grpc.testing"
30 _PROTO_FILE_NAME =
"src/proto/grpc/testing/test.proto"
31 _EMPTY_PROTO_FILE_NAME =
"src/proto/grpc/testing/empty.proto"
32 _INVALID_FILE_NAME =
"i-do-not-exist.proto"
33 _EMPTY_PROTO_SYMBOL_NAME =
"grpc.testing.Empty"
34 _INVALID_SYMBOL_NAME =
"IDoNotExist"
35 _EMPTY_EXTENSIONS_SYMBOL_NAME =
"grpc.testing.proto2.EmptyWithExtensions"
43 test_pb2.DESCRIPTOR.services_by_name[
"TestService"].full_name,
44 reflection.SERVICE_NAME,
47 port = self.
_server.add_insecure_port(
"[::]:0")
64 self.assertEqual(reflection.SERVICE_NAME,
65 "grpc.reflection.v1alpha.ServerReflection")
68 file_name = _PROTO_FILE_NAME
70 self.assertEqual(file_name, file_desc.name)
71 self.assertEqual(_PROTO_PACKAGE_NAME, file_desc.package)
72 self.assertEqual(
"proto3", file_desc.syntax)
73 self.assertIn(
"TestService", file_desc.services_by_name)
75 file_name = _EMPTY_PROTO_FILE_NAME
77 self.assertEqual(file_name, file_desc.name)
78 self.assertEqual(_PROTO_PACKAGE_NAME, file_desc.package)
79 self.assertEqual(
"proto3", file_desc.syntax)
80 self.assertIn(
"Empty", file_desc.message_types_by_name)
83 with self.assertRaises(KeyError):
87 message_name = _EMPTY_PROTO_SYMBOL_NAME
88 message_desc = self.
desc_pool.FindMessageTypeByName(message_name)
89 self.assertEqual(message_name, message_desc.full_name)
90 self.assertTrue(message_name.endswith(message_desc.name))
93 with self.assertRaises(KeyError):
94 self.
desc_pool.FindMessageTypeByName(_INVALID_SYMBOL_NAME)
99 self.assertEqual(service_name, service_desc.full_name)
100 self.assertTrue(service_name.endswith(service_desc.name))
101 file_name = _PROTO_FILE_NAME
103 self.assertIs(file_desc, service_desc.file)
105 method_name =
"EmptyCall"
106 self.assertIn(method_name, service_desc.methods_by_name)
108 method_desc = service_desc.FindMethodByName(method_name)
109 self.assertIs(method_desc, service_desc.methods_by_name[method_name])
110 self.assertIs(service_desc, method_desc.containing_service)
111 self.assertEqual(method_name, method_desc.name)
112 self.assertTrue(method_desc.full_name.endswith(method_name))
114 empty_message_desc = self.
desc_pool.FindMessageTypeByName(
115 _EMPTY_PROTO_SYMBOL_NAME)
116 self.assertEqual(empty_message_desc, method_desc.input_type)
117 self.assertEqual(empty_message_desc, method_desc.output_type)
120 with self.assertRaises(KeyError):
129 with self.assertRaises(KeyError):
130 res = service_desc.FindMethodByName(_INVALID_SYMBOL_NAME)
136 Extensions aren't implemented in Protobuf for Python.
137 For now, simply assert that indeed they don't work.
139 message_name = _EMPTY_EXTENSIONS_SYMBOL_NAME
140 message_desc = self.
desc_pool.FindMessageTypeByName(message_name)
141 self.assertEqual(message_name, message_desc.full_name)
142 self.assertTrue(message_name.endswith(message_desc.name))
145 self.assertEqual(0,
len(extension_field_descs))
146 with self.assertRaises(KeyError):
150 if __name__ ==
"__main__":
151 unittest.main(verbosity=2)