14 """Tests of grpc_reflection.v1alpha.reflection."""
26 from src.proto.grpc.testing
import empty_pb2
27 from src.proto.grpc.testing.proto2
import empty2_extensions_pb2
30 _EMPTY_PROTO_FILE_NAME =
'src/proto/grpc/testing/empty.proto'
31 _EMPTY_PROTO_SYMBOL_NAME =
'grpc.testing.Empty'
32 _SERVICE_NAMES = (
'Angstrom',
'Bohr',
'Curie',
'Dyson',
'Einstein',
'Feynman',
34 _EMPTY_EXTENSIONS_SYMBOL_NAME =
'grpc.testing.proto2.EmptyWithExtensions'
35 _EMPTY_EXTENSIONS_NUMBERS = (
45 proto = descriptor_pb2.FileDescriptorProto()
46 descriptor.CopyToProto(proto)
47 return proto.SerializeToString()
54 reflection.enable_server_reflection(_SERVICE_NAMES, self.
_server)
55 port = self.
_server.add_insecure_port(
'[::]:0')
58 self.
_channel = aio.insecure_channel(
'localhost:%d' % port)
61 async
def tearDown(self):
65 async
def test_file_by_name(self):
67 reflection_pb2.ServerReflectionRequest(
68 file_by_filename=_EMPTY_PROTO_FILE_NAME),
69 reflection_pb2.ServerReflectionRequest(
70 file_by_filename=
'i-donut-exist'),
73 async
for response
in self.
_stub.ServerReflectionInfo(
iter(requests)):
74 responses.append(response)
75 expected_responses = (
76 reflection_pb2.ServerReflectionResponse(
78 file_descriptor_response=reflection_pb2.FileDescriptorResponse(
79 file_descriptor_proto=(
81 reflection_pb2.ServerReflectionResponse(
83 error_response=reflection_pb2.ErrorResponse(
84 error_code=grpc.StatusCode.NOT_FOUND.value[0],
85 error_message=grpc.StatusCode.NOT_FOUND.value[1].
encode(),
88 self.assertSequenceEqual(expected_responses, responses)
90 async
def test_file_by_symbol(self):
92 reflection_pb2.ServerReflectionRequest(
93 file_containing_symbol=_EMPTY_PROTO_SYMBOL_NAME),
94 reflection_pb2.ServerReflectionRequest(
95 file_containing_symbol=
'i.donut.exist.co.uk.org.net.me.name.foo'
99 async
for response
in self.
_stub.ServerReflectionInfo(
iter(requests)):
100 responses.append(response)
101 expected_responses = (
102 reflection_pb2.ServerReflectionResponse(
104 file_descriptor_response=reflection_pb2.FileDescriptorResponse(
105 file_descriptor_proto=(
107 reflection_pb2.ServerReflectionResponse(
109 error_response=reflection_pb2.ErrorResponse(
110 error_code=grpc.StatusCode.NOT_FOUND.value[0],
111 error_message=grpc.StatusCode.NOT_FOUND.value[1].
encode(),
114 self.assertSequenceEqual(expected_responses, responses)
116 async
def test_file_containing_extension(self):
118 reflection_pb2.ServerReflectionRequest(
119 file_containing_extension=reflection_pb2.ExtensionRequest(
120 containing_type=_EMPTY_EXTENSIONS_SYMBOL_NAME,
121 extension_number=125,
123 reflection_pb2.ServerReflectionRequest(
124 file_containing_extension=reflection_pb2.ExtensionRequest(
125 containing_type=
'i.donut.exist.co.uk.org.net.me.name.foo',
130 async
for response
in self.
_stub.ServerReflectionInfo(
iter(requests)):
131 responses.append(response)
132 expected_responses = (
133 reflection_pb2.ServerReflectionResponse(
135 file_descriptor_response=reflection_pb2.FileDescriptorResponse(
137 empty2_extensions_pb2.DESCRIPTOR),))),
138 reflection_pb2.ServerReflectionResponse(
140 error_response=reflection_pb2.ErrorResponse(
141 error_code=grpc.StatusCode.NOT_FOUND.value[0],
142 error_message=grpc.StatusCode.NOT_FOUND.value[1].
encode(),
145 self.assertSequenceEqual(expected_responses, responses)
147 async
def test_extension_numbers_of_type(self):
149 reflection_pb2.ServerReflectionRequest(
150 all_extension_numbers_of_type=_EMPTY_EXTENSIONS_SYMBOL_NAME),
151 reflection_pb2.ServerReflectionRequest(
152 all_extension_numbers_of_type=
'i.donut.exist.co.uk.net.name.foo'
156 async
for response
in self.
_stub.ServerReflectionInfo(
iter(requests)):
157 responses.append(response)
158 expected_responses = (
159 reflection_pb2.ServerReflectionResponse(
161 all_extension_numbers_response=reflection_pb2.
162 ExtensionNumberResponse(
163 base_type_name=_EMPTY_EXTENSIONS_SYMBOL_NAME,
164 extension_number=_EMPTY_EXTENSIONS_NUMBERS)),
165 reflection_pb2.ServerReflectionResponse(
167 error_response=reflection_pb2.ErrorResponse(
168 error_code=grpc.StatusCode.NOT_FOUND.value[0],
169 error_message=grpc.StatusCode.NOT_FOUND.value[1].
encode(),
172 self.assertSequenceEqual(expected_responses, responses)
174 async
def test_list_services(self):
175 requests = (reflection_pb2.ServerReflectionRequest(list_services=
'',),)
177 async
for response
in self.
_stub.ServerReflectionInfo(
iter(requests)):
178 responses.append(response)
179 expected_responses = (reflection_pb2.ServerReflectionResponse(
181 list_services_response=reflection_pb2.ListServiceResponse(
183 reflection_pb2.ServiceResponse(name=name)
184 for name
in _SERVICE_NAMES))),)
185 self.assertSequenceEqual(expected_responses, responses)
187 def test_reflection_service_name(self):
188 self.assertEqual(reflection.SERVICE_NAME,
189 'grpc.reflection.v1alpha.ServerReflection')
192 if __name__ ==
'__main__':
193 logging.basicConfig(level=logging.DEBUG)
194 unittest.main(verbosity=2)