mirror of https://github.com/grpc/grpc.git
* Both server and client should be fine with utf-8 error messages now * Adding an interop test: special status messagepull/16946/head
parent
e4faafa5eb
commit
b8a9989005
5 changed files with 126 additions and 23 deletions
@ -0,0 +1,86 @@ |
||||
# Copyright 2018 gRPC authors. |
||||
# |
||||
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||
# you may not use this file except in compliance with the License. |
||||
# You may obtain a copy of the License at |
||||
# |
||||
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
# |
||||
# Unless required by applicable law or agreed to in writing, software |
||||
# distributed under the License is distributed on an "AS IS" BASIS, |
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
# See the License for the specific language governing permissions and |
||||
# limitations under the License. |
||||
"""Tests 'utf-8' encoded error message.""" |
||||
|
||||
import unittest |
||||
import weakref |
||||
|
||||
import grpc |
||||
|
||||
from tests.unit import test_common |
||||
from tests.unit.framework.common import test_constants |
||||
|
||||
_UNICODE_ERROR_MESSAGES = [ |
||||
b'\xe2\x80\x9d'.decode('utf-8'), |
||||
b'abc\x80\xd0\xaf'.decode('latin-1'), |
||||
b'\xc3\xa9'.decode('utf-8'), |
||||
] |
||||
|
||||
_REQUEST = b'\x00\x00\x00' |
||||
_RESPONSE = b'\x00\x00\x00' |
||||
|
||||
_UNARY_UNARY = '/test/UnaryUnary' |
||||
|
||||
|
||||
class _MethodHandler(grpc.RpcMethodHandler): |
||||
|
||||
def __init__(self, request_streaming=None, response_streaming=None): |
||||
self.request_streaming = request_streaming |
||||
self.response_streaming = response_streaming |
||||
self.request_deserializer = None |
||||
self.response_serializer = None |
||||
self.unary_stream = None |
||||
self.stream_unary = None |
||||
self.stream_stream = None |
||||
|
||||
def unary_unary(self, request, servicer_context): |
||||
servicer_context.set_code(grpc.StatusCode.UNKNOWN) |
||||
servicer_context.set_details(request.decode('utf-8')) |
||||
return _RESPONSE |
||||
|
||||
|
||||
class _GenericHandler(grpc.GenericRpcHandler): |
||||
|
||||
def __init__(self, test): |
||||
self._test = test |
||||
|
||||
def service(self, handler_call_details): |
||||
return _MethodHandler() |
||||
|
||||
|
||||
class ErrorMessageEncodingTest(unittest.TestCase): |
||||
|
||||
def setUp(self): |
||||
self._server = test_common.test_server() |
||||
self._server.add_generic_rpc_handlers((_GenericHandler( |
||||
weakref.proxy(self)),)) |
||||
port = self._server.add_insecure_port('[::]:0') |
||||
self._server.start() |
||||
self._channel = grpc.insecure_channel('localhost:%d' % port) |
||||
|
||||
def tearDown(self): |
||||
self._server.stop(0) |
||||
|
||||
def testMessageEncoding(self): |
||||
for message in _UNICODE_ERROR_MESSAGES: |
||||
multi_callable = self._channel.unary_unary(_UNARY_UNARY) |
||||
with self.assertRaises(grpc.RpcError) as cm: |
||||
multi_callable(message.encode('utf-8')) |
||||
|
||||
self.assertEqual(cm.exception.code(), grpc.StatusCode.UNKNOWN) |
||||
self.assertEqual(cm.exception.details(), message) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
unittest.main(verbosity=2) |
Loading…
Reference in new issue