| Index: third_party/grpc/src/python/grpcio/tests/unit/framework/interfaces/face/_service.py
|
| diff --git a/third_party/grpc/src/python/grpcio/tests/unit/framework/interfaces/face/_service.py b/third_party/grpc/src/python/grpcio/tests/unit/framework/interfaces/face/_service.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..28941e2ad0319c02a74b49668044f67419d1dbb3
|
| --- /dev/null
|
| +++ b/third_party/grpc/src/python/grpcio/tests/unit/framework/interfaces/face/_service.py
|
| @@ -0,0 +1,332 @@
|
| +# Copyright 2015, Google Inc.
|
| +# All rights reserved.
|
| +#
|
| +# Redistribution and use in source and binary forms, with or without
|
| +# modification, are permitted provided that the following conditions are
|
| +# met:
|
| +#
|
| +# * Redistributions of source code must retain the above copyright
|
| +# notice, this list of conditions and the following disclaimer.
|
| +# * Redistributions in binary form must reproduce the above
|
| +# copyright notice, this list of conditions and the following disclaimer
|
| +# in the documentation and/or other materials provided with the
|
| +# distribution.
|
| +# * Neither the name of Google Inc. nor the names of its
|
| +# contributors may be used to endorse or promote products derived from
|
| +# this software without specific prior written permission.
|
| +#
|
| +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| +
|
| +"""Private interfaces implemented by data sets used in Face-layer tests."""
|
| +
|
| +import abc
|
| +
|
| +# face is referenced from specification in this module.
|
| +from grpc.framework.interfaces.face import face # pylint: disable=unused-import
|
| +from tests.unit.framework.interfaces.face import test_interfaces
|
| +
|
| +
|
| +class UnaryUnaryTestMethodImplementation(test_interfaces.Method):
|
| + """A controllable implementation of a unary-unary method."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def service(self, request, response_callback, context, control):
|
| + """Services an RPC that accepts one message and produces one message.
|
| +
|
| + Args:
|
| + request: The single request message for the RPC.
|
| + response_callback: A callback to be called to accept the response message
|
| + of the RPC.
|
| + context: An face.ServicerContext object.
|
| + control: A test_control.Control to control execution of this method.
|
| +
|
| + Raises:
|
| + abandonment.Abandoned: May or may not be raised when the RPC has been
|
| + aborted.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| +
|
| +class UnaryUnaryTestMessages(object):
|
| + """A type for unary-request-unary-response message pairings."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def request(self):
|
| + """Affords a request message.
|
| +
|
| + Implementations of this method should return a different message with each
|
| + call so that multiple test executions of the test method may be made with
|
| + different inputs.
|
| +
|
| + Returns:
|
| + A request message.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| + @abc.abstractmethod
|
| + def verify(self, request, response, test_case):
|
| + """Verifies that the computed response matches the given request.
|
| +
|
| + Args:
|
| + request: A request message.
|
| + response: A response message.
|
| + test_case: A unittest.TestCase object affording useful assertion methods.
|
| +
|
| + Raises:
|
| + AssertionError: If the request and response do not match, indicating that
|
| + there was some problem executing the RPC under test.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| +
|
| +class UnaryStreamTestMethodImplementation(test_interfaces.Method):
|
| + """A controllable implementation of a unary-stream method."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def service(self, request, response_consumer, context, control):
|
| + """Services an RPC that takes one message and produces a stream of messages.
|
| +
|
| + Args:
|
| + request: The single request message for the RPC.
|
| + response_consumer: A stream.Consumer to be called to accept the response
|
| + messages of the RPC.
|
| + context: A face.ServicerContext object.
|
| + control: A test_control.Control to control execution of this method.
|
| +
|
| + Raises:
|
| + abandonment.Abandoned: May or may not be raised when the RPC has been
|
| + aborted.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| +
|
| +class UnaryStreamTestMessages(object):
|
| + """A type for unary-request-stream-response message pairings."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def request(self):
|
| + """Affords a request message.
|
| +
|
| + Implementations of this method should return a different message with each
|
| + call so that multiple test executions of the test method may be made with
|
| + different inputs.
|
| +
|
| + Returns:
|
| + A request message.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| + @abc.abstractmethod
|
| + def verify(self, request, responses, test_case):
|
| + """Verifies that the computed responses match the given request.
|
| +
|
| + Args:
|
| + request: A request message.
|
| + responses: A sequence of response messages.
|
| + test_case: A unittest.TestCase object affording useful assertion methods.
|
| +
|
| + Raises:
|
| + AssertionError: If the request and responses do not match, indicating that
|
| + there was some problem executing the RPC under test.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| +
|
| +class StreamUnaryTestMethodImplementation(test_interfaces.Method):
|
| + """A controllable implementation of a stream-unary method."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def service(self, response_callback, context, control):
|
| + """Services an RPC that takes a stream of messages and produces one message.
|
| +
|
| + Args:
|
| + response_callback: A callback to be called to accept the response message
|
| + of the RPC.
|
| + context: A face.ServicerContext object.
|
| + control: A test_control.Control to control execution of this method.
|
| +
|
| + Returns:
|
| + A stream.Consumer with which to accept the request messages of the RPC.
|
| + The consumer returned from this method may or may not be invoked to
|
| + completion: in the case of RPC abortion, RPC Framework will simply stop
|
| + passing messages to this object. Implementations must not assume that
|
| + this object will be called to completion of the request stream or even
|
| + called at all.
|
| +
|
| + Raises:
|
| + abandonment.Abandoned: May or may not be raised when the RPC has been
|
| + aborted.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| +
|
| +class StreamUnaryTestMessages(object):
|
| + """A type for stream-request-unary-response message pairings."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def requests(self):
|
| + """Affords a sequence of request messages.
|
| +
|
| + Implementations of this method should return a different sequences with each
|
| + call so that multiple test executions of the test method may be made with
|
| + different inputs.
|
| +
|
| + Returns:
|
| + A sequence of request messages.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| + @abc.abstractmethod
|
| + def verify(self, requests, response, test_case):
|
| + """Verifies that the computed response matches the given requests.
|
| +
|
| + Args:
|
| + requests: A sequence of request messages.
|
| + response: A response message.
|
| + test_case: A unittest.TestCase object affording useful assertion methods.
|
| +
|
| + Raises:
|
| + AssertionError: If the requests and response do not match, indicating that
|
| + there was some problem executing the RPC under test.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| +
|
| +class StreamStreamTestMethodImplementation(test_interfaces.Method):
|
| + """A controllable implementation of a stream-stream method."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def service(self, response_consumer, context, control):
|
| + """Services an RPC that accepts and produces streams of messages.
|
| +
|
| + Args:
|
| + response_consumer: A stream.Consumer to be called to accept the response
|
| + messages of the RPC.
|
| + context: A face.ServicerContext object.
|
| + control: A test_control.Control to control execution of this method.
|
| +
|
| + Returns:
|
| + A stream.Consumer with which to accept the request messages of the RPC.
|
| + The consumer returned from this method may or may not be invoked to
|
| + completion: in the case of RPC abortion, RPC Framework will simply stop
|
| + passing messages to this object. Implementations must not assume that
|
| + this object will be called to completion of the request stream or even
|
| + called at all.
|
| +
|
| + Raises:
|
| + abandonment.Abandoned: May or may not be raised when the RPC has been
|
| + aborted.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| +
|
| +class StreamStreamTestMessages(object):
|
| + """A type for stream-request-stream-response message pairings."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def requests(self):
|
| + """Affords a sequence of request messages.
|
| +
|
| + Implementations of this method should return a different sequences with each
|
| + call so that multiple test executions of the test method may be made with
|
| + different inputs.
|
| +
|
| + Returns:
|
| + A sequence of request messages.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| + @abc.abstractmethod
|
| + def verify(self, requests, responses, test_case):
|
| + """Verifies that the computed response matches the given requests.
|
| +
|
| + Args:
|
| + requests: A sequence of request messages.
|
| + responses: A sequence of response messages.
|
| + test_case: A unittest.TestCase object affording useful assertion methods.
|
| +
|
| + Raises:
|
| + AssertionError: If the requests and responses do not match, indicating
|
| + that there was some problem executing the RPC under test.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| +
|
| +class TestService(object):
|
| + """A specification of implemented methods to use in tests."""
|
| +
|
| + __metaclass__ = abc.ABCMeta
|
| +
|
| + @abc.abstractmethod
|
| + def unary_unary_scenarios(self):
|
| + """Affords unary-request-unary-response test methods and their messages.
|
| +
|
| + Returns:
|
| + A dict from method group-name pair to implementation/messages pair. The
|
| + first element of the pair is a UnaryUnaryTestMethodImplementation object
|
| + and the second element is a sequence of UnaryUnaryTestMethodMessages
|
| + objects.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| + @abc.abstractmethod
|
| + def unary_stream_scenarios(self):
|
| + """Affords unary-request-stream-response test methods and their messages.
|
| +
|
| + Returns:
|
| + A dict from method group-name pair to implementation/messages pair. The
|
| + first element of the pair is a UnaryStreamTestMethodImplementation
|
| + object and the second element is a sequence of
|
| + UnaryStreamTestMethodMessages objects.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| + @abc.abstractmethod
|
| + def stream_unary_scenarios(self):
|
| + """Affords stream-request-unary-response test methods and their messages.
|
| +
|
| + Returns:
|
| + A dict from method group-name pair to implementation/messages pair. The
|
| + first element of the pair is a StreamUnaryTestMethodImplementation
|
| + object and the second element is a sequence of
|
| + StreamUnaryTestMethodMessages objects.
|
| + """
|
| + raise NotImplementedError()
|
| +
|
| + @abc.abstractmethod
|
| + def stream_stream_scenarios(self):
|
| + """Affords stream-request-stream-response test methods and their messages.
|
| +
|
| + Returns:
|
| + A dict from method group-name pair to implementation/messages pair. The
|
| + first element of the pair is a StreamStreamTestMethodImplementation
|
| + object and the second element is a sequence of
|
| + StreamStreamTestMethodMessages objects.
|
| + """
|
| + raise NotImplementedError()
|
|
|