14 """Tests server and client side metadata API."""
21 from grpc
import _channel
26 _CHANNEL_ARGS = ((
'grpc.primary_user_agent',
'primary-agent'),
27 (
'grpc.secondary_user_agent',
'secondary-agent'))
29 _REQUEST = b
'\x00\x00\x00'
30 _RESPONSE = b
'\x00\x00\x00'
32 _UNARY_UNARY =
'/test/UnaryUnary'
33 _UNARY_STREAM =
'/test/UnaryStream'
34 _STREAM_UNARY =
'/test/StreamUnary'
35 _STREAM_STREAM =
'/test/StreamStream'
37 _INVOCATION_METADATA = (
40 u'invocation-md-value',
43 u'invocation-md-key-bin',
47 _EXPECTED_INVOCATION_METADATA = (
50 'invocation-md-value',
53 'invocation-md-key-bin',
58 _INITIAL_METADATA = ((b
'initial-md-key',
u'initial-md-value'),
59 (
u'initial-md-key-bin', b
'\x00\x02'))
60 _EXPECTED_INITIAL_METADATA = (
71 _TRAILING_METADATA = (
73 'server-trailing-md-key',
74 'server-trailing-md-value',
77 'server-trailing-md-key-bin',
81 _EXPECTED_TRAILING_METADATA = _TRAILING_METADATA
85 for key, val
in metadata:
86 if key ==
'user-agent':
88 raise KeyError(
'No user agent!')
92 invocation_metadata = servicer_context.invocation_metadata()
94 test_common.metadata_transmitted(_EXPECTED_INVOCATION_METADATA,
98 user_agent.startswith(
'primary-agent ' + _channel._USER_AGENT))
99 test.assertTrue(user_agent.endswith(
'secondary-agent'))
104 servicer_context.send_initial_metadata(_INITIAL_METADATA)
105 servicer_context.set_trailing_metadata(_TRAILING_METADATA)
111 servicer_context.send_initial_metadata(_INITIAL_METADATA)
112 servicer_context.set_trailing_metadata(_TRAILING_METADATA)
113 for _
in range(test_constants.STREAM_LENGTH):
119 servicer_context.send_initial_metadata(_INITIAL_METADATA)
120 servicer_context.set_trailing_metadata(_TRAILING_METADATA)
122 for request
in request_iterator:
129 servicer_context.send_initial_metadata(_INITIAL_METADATA)
130 servicer_context.set_trailing_metadata(_TRAILING_METADATA)
133 for request
in request_iterator:
139 def __init__(self, test, request_streaming, response_streaming):
164 if handler_call_details.method == _UNARY_UNARY:
166 elif handler_call_details.method == _UNARY_STREAM:
168 elif handler_call_details.method == _STREAM_UNARY:
170 elif handler_call_details.method == _STREAM_STREAM:
180 self.
_server.add_generic_rpc_handlers(
182 port = self.
_server.add_insecure_port(
'[::]:0')
185 options=_CHANNEL_ARGS)
193 unused_response, call = multi_callable.with_call(
194 _REQUEST, metadata=_INVOCATION_METADATA)
196 test_common.metadata_transmitted(_EXPECTED_INITIAL_METADATA,
197 call.initial_metadata()))
199 test_common.metadata_transmitted(_EXPECTED_TRAILING_METADATA,
200 call.trailing_metadata()))
206 test_common.metadata_transmitted(_EXPECTED_INITIAL_METADATA,
207 call.initial_metadata()))
211 test_common.metadata_transmitted(_EXPECTED_TRAILING_METADATA,
212 call.trailing_metadata()))
216 unused_response, call = multi_callable.with_call(
217 iter([_REQUEST] * test_constants.STREAM_LENGTH),
218 metadata=_INVOCATION_METADATA)
220 test_common.metadata_transmitted(_EXPECTED_INITIAL_METADATA,
221 call.initial_metadata()))
223 test_common.metadata_transmitted(_EXPECTED_TRAILING_METADATA,
224 call.trailing_metadata()))
229 metadata=_INVOCATION_METADATA)
231 test_common.metadata_transmitted(_EXPECTED_INITIAL_METADATA,
232 call.initial_metadata()))
236 test_common.metadata_transmitted(_EXPECTED_TRAILING_METADATA,
237 call.trailing_metadata()))
240 if __name__ ==
'__main__':
241 logging.basicConfig()
242 unittest.main(verbosity=2)