40 lines
1,020 B
Python
40 lines
1,020 B
Python
from typing import List
|
|
|
|
from grpclib.client import Channel
|
|
|
|
|
|
class MockChannel(Channel):
|
|
# noinspection PyMissingConstructor
|
|
def __init__(self, responses=None) -> None:
|
|
self.responses = responses or []
|
|
self.requests = []
|
|
self._loop = None
|
|
|
|
def request(self, route, cardinality, request, response_type, **kwargs):
|
|
self.requests.append(
|
|
{
|
|
"route": route,
|
|
"cardinality": cardinality,
|
|
"request": request,
|
|
"response_type": response_type,
|
|
}
|
|
)
|
|
return MockStream(self.responses)
|
|
|
|
|
|
class MockStream:
|
|
def __init__(self, responses: List) -> None:
|
|
super().__init__()
|
|
self.responses = responses
|
|
|
|
async def recv_message(self):
|
|
return self.responses.pop(0)
|
|
|
|
async def send_message(self, *args, **kwargs):
|
|
pass
|
|
|
|
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
|
return True
|
|
|
|
async def __aenter__(self):
|
|
return self
|