Skip to content

Commit 2abe555

Browse files
committed
Add Mock for initial_metadata() for base-clients GrpcStreamer
Signed-off-by: Mathias L. Baumann <[email protected]>
1 parent 0d41be4 commit 2abe555

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

src/frequenz/client/dispatch/test/_service.py

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from dataclasses import dataclass, replace
1010
from datetime import datetime, timezone
1111
from typing import AsyncIterator
12+
from unittest.mock import AsyncMock, MagicMock
1213

1314
import grpc
1415
import grpc.aio
@@ -109,7 +110,7 @@ async def ListMicrogridDispatches(
109110
),
110111
)
111112

112-
async def StreamMicrogridDispatches(
113+
def StreamMicrogridDispatches(
113114
self,
114115
request: StreamMicrogridDispatchesRequest,
115116
timeout: int = 5, # pylint: disable=unused-argument
@@ -122,20 +123,37 @@ async def StreamMicrogridDispatches(
122123
123124
Returns:
124125
An async generator for dispatch changes.
125-
126-
Yields:
127-
An event for each dispatch change.
128126
"""
129-
receiver = self._stream_channel.new_receiver()
130-
131-
async for message in receiver:
132-
_logger.debug("Received message: %s", message)
133-
if message.microgrid_id == MicrogridId(request.microgrid_id):
134-
response = StreamMicrogridDispatchesResponse(
135-
event=message.event.event.value,
136-
dispatch=message.event.dispatch.to_protobuf(),
137-
)
138-
yield response
127+
128+
async def stream() -> AsyncIterator[StreamMicrogridDispatchesResponse]:
129+
"""Stream microgrid dispatches changes."""
130+
_logger.debug("Starting stream for microgrid %s", request.microgrid_id)
131+
receiver = self._stream_channel.new_receiver()
132+
133+
async for message in receiver:
134+
_logger.debug("Received message: %s", message)
135+
if message.microgrid_id == MicrogridId(request.microgrid_id):
136+
response = StreamMicrogridDispatchesResponse(
137+
event=message.event.event.value,
138+
dispatch=message.event.dispatch.to_protobuf(),
139+
)
140+
yield response
141+
else:
142+
_logger.debug(
143+
"Skipping message for microgrid %s",
144+
message.microgrid_id,
145+
)
146+
147+
_logger.debug("Creating mock stream for microgrid %s", request.microgrid_id)
148+
149+
mock_stream = MagicMock(name="StreamMicrogridDispatches")
150+
mock_stream.__aiter__.side_effect = stream
151+
mock_stream.initial_metadata = AsyncMock(
152+
side_effect=lambda: _logger.debug(
153+
"Initial metadata requested for microgrid %s", request.microgrid_id
154+
)
155+
)
156+
return mock_stream
139157

140158
# pylint: disable=too-many-branches
141159
@staticmethod

0 commit comments

Comments
 (0)