|
|
|
@ -24,7 +24,6 @@ from grpc.experimental import aio |
|
|
|
|
|
|
|
|
|
from tests_aio.unit._test_base import AioTestBase |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_TEST_CLIENT_TO_SERVER = '/test/TestClientToServer' |
|
|
|
|
_TEST_SERVER_TO_CLIENT = '/test/TestServerToClient' |
|
|
|
|
_TEST_TRAILING_METADATA = '/test/TestTrailingMetadata' |
|
|
|
@ -34,10 +33,10 @@ _TEST_GENERIC_HANDLER = '/test/TestGenericHandler' |
|
|
|
|
_REQUEST = b'\x00\x00\x00' |
|
|
|
|
_RESPONSE = b'\x01\x01\x01' |
|
|
|
|
|
|
|
|
|
_INITIAL_METADATA_FROM_CLIENT_TO_SERVER = ('client-to-server', 'question') |
|
|
|
|
_INITIAL_METADATA_FROM_SERVER_TO_CLIENT = ('server-to-client', 'answer') |
|
|
|
|
_TRAILING_METADATA = ('a-trailing-metadata', 'stack-trace') |
|
|
|
|
_INITIAL_METADATA_FOR_GENERIC_HANDLER = ('a-must-have-key', 'secret') |
|
|
|
|
_INITIAL_METADATA_FROM_CLIENT_TO_SERVER = (('client-to-server', 'question'),) |
|
|
|
|
_INITIAL_METADATA_FROM_SERVER_TO_CLIENT = (('server-to-client', 'answer'),) |
|
|
|
|
_TRAILING_METADATA = (('a-trailing-metadata', 'stack-trace'),) |
|
|
|
|
_INITIAL_METADATA_FOR_GENERIC_HANDLER = (('a-must-have-key', 'secret'),) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _seen_metadata(expected, actual): |
|
|
|
@ -59,7 +58,8 @@ class _TestGenericHandlerForMethods(grpc.GenericRpcHandler): |
|
|
|
|
@staticmethod |
|
|
|
|
async def _test_server_to_client(request, context): |
|
|
|
|
assert _REQUEST == request |
|
|
|
|
await context.send_initial_metadata(_INITIAL_METADATA_FROM_SERVER_TO_CLIENT) |
|
|
|
|
await context.send_initial_metadata( |
|
|
|
|
_INITIAL_METADATA_FROM_SERVER_TO_CLIENT) |
|
|
|
|
return _RESPONSE |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
@ -70,21 +70,26 @@ class _TestGenericHandlerForMethods(grpc.GenericRpcHandler): |
|
|
|
|
|
|
|
|
|
def service(self, handler_details): |
|
|
|
|
if handler_details.method == _TEST_CLIENT_TO_SERVER: |
|
|
|
|
return grpc.unary_unary_rpc_method_handler(self._test_client_to_server) |
|
|
|
|
return grpc.unary_unary_rpc_method_handler( |
|
|
|
|
self._test_client_to_server) |
|
|
|
|
if handler_details.method == _TEST_SERVER_TO_CLIENT: |
|
|
|
|
return grpc.unary_unary_rpc_method_handler(self._test_server_to_client) |
|
|
|
|
return grpc.unary_unary_rpc_method_handler( |
|
|
|
|
self._test_server_to_client) |
|
|
|
|
if handler_details.method == _TEST_TRAILING_METADATA: |
|
|
|
|
return grpc.unary_unary_rpc_method_handler(self._test_trailing_metadata) |
|
|
|
|
return grpc.unary_unary_rpc_method_handler( |
|
|
|
|
self._test_trailing_metadata) |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _TestGenericHandlerItself(grpc.GenericRpcHandler): |
|
|
|
|
|
|
|
|
|
async def _method(self, request, unused_context): |
|
|
|
|
assert _REQUEST == request |
|
|
|
|
return _RESPONSE |
|
|
|
|
|
|
|
|
|
def service(self, handler_details): |
|
|
|
|
assert _seen_metadata(_INITIAL_METADATA_FOR_GENERIC_HANDLER, handler_details.invocation_metadata()) |
|
|
|
|
assert _seen_metadata(_INITIAL_METADATA_FOR_GENERIC_HANDLER, |
|
|
|
|
handler_details.invocation_metadata()) |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -103,7 +108,8 @@ class TestMetadata(AioTestBase): |
|
|
|
|
|
|
|
|
|
async def setUp(self): |
|
|
|
|
address, self._server = await _start_test_server() |
|
|
|
|
self._client = aio.secure_channel(address, grpc.local_channel_credentials()) |
|
|
|
|
self._client = aio.secure_channel(address, |
|
|
|
|
grpc.local_channel_credentials()) |
|
|
|
|
|
|
|
|
|
async def tearDown(self): |
|
|
|
|
await self._client.close() |
|
|
|
@ -111,32 +117,36 @@ class TestMetadata(AioTestBase): |
|
|
|
|
|
|
|
|
|
async def test_from_client_to_server(self): |
|
|
|
|
multicallable = self._client.unary_unary(_TEST_CLIENT_TO_SERVER) |
|
|
|
|
call = multicallable(_REQUEST, metadata=_INITIAL_METADATA_FROM_CLIENT_TO_SERVER) |
|
|
|
|
call = multicallable(_REQUEST, |
|
|
|
|
metadata=_INITIAL_METADATA_FROM_CLIENT_TO_SERVER) |
|
|
|
|
self.assertEqual(_RESPONSE, await call) |
|
|
|
|
self.assertEqual(grpc.StatusCode.OK, await call.code()) |
|
|
|
|
|
|
|
|
|
async def test_from_server_to_client(self): |
|
|
|
|
multicallable = self._client.unary_unary(_TEST_SERVER_TO_CLIENT) |
|
|
|
|
call = multicallable(_REQUEST) |
|
|
|
|
self.assertEqual(_INITIAL_METADATA_FROM_SERVER_TO_CLIENT, |
|
|
|
|
await call.initial_metadata) |
|
|
|
|
self.assertEqual(_INITIAL_METADATA_FROM_SERVER_TO_CLIENT, await |
|
|
|
|
call.initial_metadata) |
|
|
|
|
self.assertEqual(_RESPONSE, await call) |
|
|
|
|
self.assertEqual(grpc.StatusCode.OK, await call.code()) |
|
|
|
|
|
|
|
|
|
async def test_trailing_metadata(self): |
|
|
|
|
multicallable = self._client.unary_unary(_TEST_SERVER_TO_CLIENT) |
|
|
|
|
call = multicallable(_REQUEST) |
|
|
|
|
self.assertEqual(_TEST_TRAILING_METADATA, |
|
|
|
|
await call.trailing_metadata) |
|
|
|
|
self.assertEqual(_TEST_TRAILING_METADATA, await call.trailing_metadata) |
|
|
|
|
self.assertEqual(_RESPONSE, await call) |
|
|
|
|
self.assertEqual(grpc.StatusCode.OK, await call.code()) |
|
|
|
|
|
|
|
|
|
async def test_binary_metadata(self): |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
async def test_invalid_metadata(self): |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
async def test_binary_metadata(self): pass |
|
|
|
|
async def test_invalid_metadata(self): pass |
|
|
|
|
async def test_generic_handler(self): |
|
|
|
|
multicallable = self._client.unary_unary(_TEST_GENERIC_HANDLER) |
|
|
|
|
call = multicallable(_REQUEST, metadata=_INITIAL_METADATA_FOR_GENERIC_HANDLER) |
|
|
|
|
call = multicallable(_REQUEST, |
|
|
|
|
metadata=_INITIAL_METADATA_FOR_GENERIC_HANDLER) |
|
|
|
|
self.assertEqual(_RESPONSE, await call) |
|
|
|
|
self.assertEqual(grpc.StatusCode.OK, await call.code()) |
|
|
|
|
|
|
|
|
|