Skip to content

Commit 5945ea7

Browse files
GitHKAndrei Neagu
andauthored
šŸ› Fixed flaky tests in services/dynamic-sidecar/tests/unit/test_modules_outputs_event_filter.py (#6795)
Co-authored-by: Andrei Neagu <[email protected]>
1 parent a87de46 commit 5945ea7

File tree

2 files changed

+22
-25
lines changed

2 files changed

+22
-25
lines changed

ā€Žservices/dynamic-sidecar/src/simcore_service_dynamic_sidecar/modules/outputs/_event_filter.pyā€Ž

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
PortEvent: TypeAlias = str | None
2626

27-
logger = logging.getLogger(__name__)
27+
_logger = logging.getLogger(__name__)
2828

2929

3030
_1_MB: Final[PositiveInt] = TypeAdapter(ByteSize).validate_python("1mib")
@@ -164,14 +164,14 @@ async def _worker_upload_events(self) -> None:
164164
if port_key is None:
165165
break
166166

167-
logger.debug("Request upload for port_key %s", port_key)
167+
_logger.debug("Request upload for port_key %s", port_key)
168168
await self.outputs_manager.port_key_content_changed(port_key)
169169

170170
async def enqueue(self, port_key: str) -> None:
171171
await self._incoming_events_queue.put(port_key)
172172

173173
async def start(self) -> None:
174-
with log_context(logger, logging.INFO, f"{EventFilter.__name__} start"):
174+
with log_context(_logger, logging.INFO, f"{EventFilter.__name__} start"):
175175
self._task_incoming_event_ingestion = create_task(
176176
self._worker_incoming_event_ingestion(),
177177
name=self._worker_incoming_event_ingestion.__name__,
@@ -195,7 +195,7 @@ async def _cancel_task(task: Task | None) -> None:
195195
with suppress(CancelledError):
196196
await task
197197

198-
with log_context(logger, logging.INFO, f"{EventFilter.__name__} shutdown"):
198+
with log_context(_logger, logging.INFO, f"{EventFilter.__name__} shutdown"):
199199
await self._incoming_events_queue.put(None)
200200
await _cancel_task(self._task_incoming_event_ingestion)
201201

ā€Žservices/dynamic-sidecar/tests/unit/test_modules_outputs_event_filter.pyā€Ž

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import asyncio
55
from pathlib import Path
6-
from typing import AsyncIterator, Iterator
6+
from typing import AsyncIterator
77
from unittest.mock import AsyncMock
88

99
import pytest
@@ -24,12 +24,12 @@
2424
from tenacity.stop import stop_after_delay
2525
from tenacity.wait import wait_fixed
2626

27-
_TENACITY_RETRY_PARAMS = dict(
28-
reraise=True,
29-
retry=retry_if_exception_type(AssertionError),
30-
stop=stop_after_delay(10),
31-
wait=wait_fixed(0.01),
32-
)
27+
_TENACITY_RETRY_PARAMS = {
28+
"reraise": True,
29+
"retry": retry_if_exception_type(AssertionError),
30+
"stop": stop_after_delay(10),
31+
"wait": wait_fixed(0.01),
32+
}
3333

3434
# FIXTURES
3535

@@ -75,11 +75,11 @@ async def outputs_manager(
7575
@pytest.fixture
7676
def mocked_port_key_content_changed(
7777
mocker: MockerFixture, outputs_manager: OutputsManager
78-
) -> Iterator[AsyncMock]:
78+
) -> AsyncMock:
7979
async def _mock_upload_outputs(*args, **kwargs) -> None:
8080
pass
8181

82-
yield mocker.patch.object(
82+
return mocker.patch.object(
8383
outputs_manager, "port_key_content_changed", side_effect=_mock_upload_outputs
8484
)
8585

@@ -101,8 +101,8 @@ def get_wait_interval(self, dir_size: NonNegativeInt) -> NonNegativeFloat:
101101

102102

103103
@pytest.fixture
104-
def mock_get_directory_total_size(mocker: MockerFixture) -> Iterator[AsyncMock]:
105-
yield mocker.patch(
104+
def mock_get_directory_total_size(mocker: MockerFixture) -> AsyncMock:
105+
return mocker.patch(
106106
"simcore_service_dynamic_sidecar.modules.outputs._event_filter.get_directory_total_size",
107107
return_value=1,
108108
)
@@ -127,10 +127,6 @@ async def _wait_for_event_to_trigger(event_filter: EventFilter) -> None:
127127
await asyncio.sleep(event_filter.delay_policy.get_min_interval() * 5)
128128

129129

130-
async def _wait_for_event_to_trigger_big_directory(event_filter: EventFilter) -> None:
131-
await asyncio.sleep(event_filter.delay_policy.get_wait_interval(1) * 2)
132-
133-
134130
# TESTS
135131

136132

@@ -170,8 +166,9 @@ async def test_always_trigger_after_delay(
170166
# event trigger after correct interval delay correctly
171167
for expected_call_count in range(1, 10):
172168
await event_filter.enqueue(port_key_1)
173-
await _wait_for_event_to_trigger_big_directory(event_filter)
174-
assert mocked_port_key_content_changed.call_count == expected_call_count
169+
async for attempt in AsyncRetrying(**_TENACITY_RETRY_PARAMS):
170+
with attempt:
171+
assert mocked_port_key_content_changed.call_count == expected_call_count
175172

176173

177174
async def test_minimum_amount_of_get_directory_total_size_calls(
@@ -190,7 +187,6 @@ async def test_minimum_amount_of_get_directory_total_size_calls(
190187
assert mocked_port_key_content_changed.call_count == 0
191188

192189
# event finished processing and was dispatched
193-
await _wait_for_event_to_trigger_big_directory(event_filter)
194190
async for attempt in AsyncRetrying(**_TENACITY_RETRY_PARAMS):
195191
with attempt:
196192
assert mock_get_directory_total_size.call_count == 2
@@ -221,9 +217,10 @@ async def test_minimum_amount_of_get_directory_total_size_calls_with_continuous_
221217
assert mocked_port_key_content_changed.call_count == 0
222218

223219
# event finished processing and was dispatched
224-
await _wait_for_event_to_trigger_big_directory(event_filter)
225-
assert mock_get_directory_total_size.call_count == 2
226-
assert mocked_port_key_content_changed.call_count == 1
220+
async for attempt in AsyncRetrying(**_TENACITY_RETRY_PARAMS):
221+
with attempt:
222+
assert mock_get_directory_total_size.call_count == 2
223+
assert mocked_port_key_content_changed.call_count == 1
227224

228225

229226
def test_default_delay_policy():

0 commit comments

Comments
Ā (0)