_reflection_servicer_test.py
Go to the documentation of this file.
1 # Copyright 2016 gRPC authors.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 """Tests of grpc_reflection.v1alpha.reflection."""
15 
16 import sys
17 import unittest
18 
19 from google.protobuf import descriptor_pb2
20 from google.protobuf import descriptor_pool
21 import grpc
22 from grpc_reflection.v1alpha import reflection
23 from grpc_reflection.v1alpha import reflection_pb2
24 from grpc_reflection.v1alpha import reflection_pb2_grpc
25 
26 from src.proto.grpc.testing import empty_pb2
27 from src.proto.grpc.testing.proto2 import empty2_extensions_pb2
28 from tests.unit import test_common
29 
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',
33  'Galilei')
34 _EMPTY_EXTENSIONS_SYMBOL_NAME = 'grpc.testing.proto2.EmptyWithExtensions'
35 _EMPTY_EXTENSIONS_NUMBERS = (
36  124,
37  125,
38  126,
39  127,
40  128,
41 )
42 
43 
44 def _file_descriptor_to_proto(descriptor):
45  proto = descriptor_pb2.FileDescriptorProto()
46  descriptor.CopyToProto(proto)
47  return proto.SerializeToString()
48 
49 
50 @unittest.skipIf(sys.version_info[0] < 3,
51  'ProtoBuf descriptor has moved on from Python2')
52 class ReflectionServicerTest(unittest.TestCase):
53 
54  def setUp(self):
55  self._server = test_common.test_server()
56  reflection.enable_server_reflection(_SERVICE_NAMES, self._server)
57  port = self._server.add_insecure_port('[::]:0')
58  self._server.start()
59 
60  self._channel = grpc.insecure_channel('localhost:%d' % port)
61  self._stub = reflection_pb2_grpc.ServerReflectionStub(self._channel)
62 
63  def tearDown(self):
64  self._server.stop(None)
65  self._channel.close()
66 
67  def testFileByName(self):
68  requests = (
69  reflection_pb2.ServerReflectionRequest(
70  file_by_filename=_EMPTY_PROTO_FILE_NAME),
71  reflection_pb2.ServerReflectionRequest(
72  file_by_filename='i-donut-exist'),
73  )
74  responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
75  expected_responses = (
76  reflection_pb2.ServerReflectionResponse(
77  valid_host='',
78  file_descriptor_response=reflection_pb2.FileDescriptorResponse(
79  file_descriptor_proto=(
80  _file_descriptor_to_proto(empty_pb2.DESCRIPTOR),))),
81  reflection_pb2.ServerReflectionResponse(
82  valid_host='',
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(),
86  )),
87  )
88  self.assertEqual(expected_responses, responses)
89 
90  def testFileBySymbol(self):
91  requests = (
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'
96  ),
97  )
98  responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
99  expected_responses = (
100  reflection_pb2.ServerReflectionResponse(
101  valid_host='',
102  file_descriptor_response=reflection_pb2.FileDescriptorResponse(
103  file_descriptor_proto=(
104  _file_descriptor_to_proto(empty_pb2.DESCRIPTOR),))),
105  reflection_pb2.ServerReflectionResponse(
106  valid_host='',
107  error_response=reflection_pb2.ErrorResponse(
108  error_code=grpc.StatusCode.NOT_FOUND.value[0],
109  error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(),
110  )),
111  )
112  self.assertEqual(expected_responses, responses)
113 
115  requests = (
116  reflection_pb2.ServerReflectionRequest(
117  file_containing_extension=reflection_pb2.ExtensionRequest(
118  containing_type=_EMPTY_EXTENSIONS_SYMBOL_NAME,
119  extension_number=125,
120  ),),
121  reflection_pb2.ServerReflectionRequest(
122  file_containing_extension=reflection_pb2.ExtensionRequest(
123  containing_type='i.donut.exist.co.uk.org.net.me.name.foo',
124  extension_number=55,
125  ),),
126  )
127  responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
128  expected_responses = (
129  reflection_pb2.ServerReflectionResponse(
130  valid_host='',
131  file_descriptor_response=reflection_pb2.FileDescriptorResponse(
132  file_descriptor_proto=(_file_descriptor_to_proto(
133  empty2_extensions_pb2.DESCRIPTOR),))),
134  reflection_pb2.ServerReflectionResponse(
135  valid_host='',
136  error_response=reflection_pb2.ErrorResponse(
137  error_code=grpc.StatusCode.NOT_FOUND.value[0],
138  error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(),
139  )),
140  )
141  self.assertEqual(expected_responses, responses)
142 
144  requests = (
145  reflection_pb2.ServerReflectionRequest(
146  all_extension_numbers_of_type=_EMPTY_EXTENSIONS_SYMBOL_NAME),
147  reflection_pb2.ServerReflectionRequest(
148  all_extension_numbers_of_type='i.donut.exist.co.uk.net.name.foo'
149  ),
150  )
151  responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
152  expected_responses = (
153  reflection_pb2.ServerReflectionResponse(
154  valid_host='',
155  all_extension_numbers_response=reflection_pb2.
156  ExtensionNumberResponse(
157  base_type_name=_EMPTY_EXTENSIONS_SYMBOL_NAME,
158  extension_number=_EMPTY_EXTENSIONS_NUMBERS)),
159  reflection_pb2.ServerReflectionResponse(
160  valid_host='',
161  error_response=reflection_pb2.ErrorResponse(
162  error_code=grpc.StatusCode.NOT_FOUND.value[0],
163  error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(),
164  )),
165  )
166  self.assertEqual(expected_responses, responses)
167 
168  def testListServices(self):
169  requests = (reflection_pb2.ServerReflectionRequest(list_services='',),)
170  responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
171  expected_responses = (reflection_pb2.ServerReflectionResponse(
172  valid_host='',
173  list_services_response=reflection_pb2.ListServiceResponse(
174  service=tuple(
175  reflection_pb2.ServiceResponse(name=name)
176  for name in _SERVICE_NAMES))),)
177  self.assertEqual(expected_responses, responses)
178 
180  self.assertEqual(reflection.SERVICE_NAME,
181  'grpc.reflection.v1alpha.ServerReflection')
182 
183 
184 if __name__ == '__main__':
185  unittest.main(verbosity=2)
grpc.insecure_channel
def insecure_channel(target, options=None, compression=None)
Definition: src/python/grpcio/grpc/__init__.py:1962
google::protobuf
Definition: bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:12
tests.reflection._reflection_servicer_test.ReflectionServicerTest._channel
_channel
Definition: _reflection_servicer_test.py:60
grpc._common.encode
def encode(s)
Definition: grpc/_common.py:68
tests.reflection._reflection_servicer_test.ReflectionServicerTest.testExtensionNumbersOfType
def testExtensionNumbersOfType(self)
Definition: _reflection_servicer_test.py:143
grpc_reflection.v1alpha
Definition: src/python/grpcio_reflection/grpc_reflection/v1alpha/__init__.py:1
tests.reflection._reflection_servicer_test.ReflectionServicerTest.testReflectionServiceName
def testReflectionServiceName(self)
Definition: _reflection_servicer_test.py:179
start
static uint64_t start
Definition: benchmark-pound.c:74
tests.reflection._reflection_servicer_test.ReflectionServicerTest.testFileContainingExtension
def testFileContainingExtension(self)
Definition: _reflection_servicer_test.py:114
tests.reflection._reflection_servicer_test.ReflectionServicerTest.testFileBySymbol
def testFileBySymbol(self)
Definition: _reflection_servicer_test.py:90
tests.reflection._reflection_servicer_test.ReflectionServicerTest._server
_server
Definition: _reflection_servicer_test.py:55
close
#define close
Definition: test-fs.c:48
tests.reflection._reflection_servicer_test.ReflectionServicerTest.testListServices
def testListServices(self)
Definition: _reflection_servicer_test.py:168
tests.unit
Definition: src/python/grpcio_tests/tests/unit/__init__.py:1
tests.reflection._reflection_servicer_test.ReflectionServicerTest._stub
_stub
Definition: _reflection_servicer_test.py:61
tests.reflection._reflection_servicer_test.ReflectionServicerTest.setUp
def setUp(self)
Definition: _reflection_servicer_test.py:54
tests.reflection._reflection_servicer_test.ReflectionServicerTest
Definition: _reflection_servicer_test.py:52
tests.reflection._reflection_servicer_test.ReflectionServicerTest.testFileByName
def testFileByName(self)
Definition: _reflection_servicer_test.py:67
stop
static const char stop[]
Definition: benchmark-async-pummel.c:35
tests.reflection._reflection_servicer_test._file_descriptor_to_proto
def _file_descriptor_to_proto(descriptor)
Definition: _reflection_servicer_test.py:44
iter
Definition: test_winkernel.cpp:47
tests.reflection._reflection_servicer_test.ReflectionServicerTest.tearDown
def tearDown(self)
Definition: _reflection_servicer_test.py:63


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:27