Skip to content

Commit 591af8a

Browse files
author
Andrei Neagu
committed
fixed tests
1 parent 4ef3f22 commit 591af8a

File tree

3 files changed

+72
-28
lines changed

3 files changed

+72
-28
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# pylint: disable=protected-access
2+
3+
import pytest
4+
from fastapi import FastAPI
5+
from servicelib.long_running_tasks.errors import TaskNotFoundError
6+
from servicelib.long_running_tasks.manager import (
7+
LongRunningManager,
8+
)
9+
from servicelib.long_running_tasks.models import TaskContext
10+
from servicelib.long_running_tasks.task import TaskId
11+
from tenacity import (
12+
AsyncRetrying,
13+
TryAgain,
14+
retry_if_exception_type,
15+
stop_after_delay,
16+
wait_fixed,
17+
)
18+
19+
20+
def get_fastapi_long_running_manager(app: FastAPI) -> LongRunningManager:
21+
manager = app.state.long_running_manager
22+
assert isinstance(manager, LongRunningManager)
23+
return manager
24+
25+
26+
async def assert_task_is_no_longer_present(
27+
manager: LongRunningManager, task_id: TaskId, task_context: TaskContext
28+
) -> None:
29+
async for attempt in AsyncRetrying(
30+
reraise=True,
31+
wait=wait_fixed(0.1),
32+
stop=stop_after_delay(60),
33+
retry=retry_if_exception_type((AssertionError, TryAgain)),
34+
):
35+
with attempt: # noqa: SIM117
36+
with pytest.raises(TaskNotFoundError): # noqa: PT012
37+
# use internals to detirmine when it's no longer here
38+
await manager._tasks_manager._get_tracked_task( # noqa: SLF001
39+
task_id, task_context
40+
)
41+
raise TryAgain

packages/service-library/tests/long_running_tasks/test_long_running_tasks_lrt_api.py

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@
1010
import pytest
1111
from models_library.api_schemas_long_running_tasks.base import TaskProgress
1212
from pydantic import NonNegativeInt
13+
from pytest_simcore.helpers.long_running_tasks import assert_task_is_no_longer_present
1314
from servicelib.long_running_tasks import lrt_api
14-
from servicelib.long_running_tasks.errors import TaskNotFoundError
15-
from servicelib.long_running_tasks.manager import (
16-
LongRunningManager,
17-
)
15+
from servicelib.long_running_tasks.manager import LongRunningManager
1816
from servicelib.long_running_tasks.models import LRTNamespace, TaskContext
1917
from servicelib.long_running_tasks.task import TaskId, TaskRegistry
2018
from servicelib.rabbitmq._client_rpc import RabbitMQRPCClient
@@ -161,22 +159,6 @@ async def _assert_list_tasks_from_all_managers(
161159
assert len(tasks) == task_count
162160

163161

164-
async def _assert_task_is_no_longer_present(
165-
long_running_managers: list[LongRunningManager],
166-
task_context: TaskContext,
167-
task_id: TaskId,
168-
) -> None:
169-
manager = _get_long_running_manager(long_running_managers)
170-
async for attempt in AsyncRetrying(**_RETRY_PARAMS):
171-
with attempt: # noqa: SIM117
172-
with pytest.raises(TaskNotFoundError): # noqa: PT012
173-
# use internals to detirmine when it's no longer here
174-
await manager._tasks_manager._get_tracked_task( # noqa: SLF001
175-
task_id, task_context
176-
)
177-
raise TryAgain
178-
179-
180162
_TASK_CONTEXT: Final[list[TaskContext | None]] = [{"a": "context"}, None]
181163
_IS_UNIQUE: Final[list[bool]] = [False, True]
182164
_TASK_COUNT: Final[list[int]] = [5]
@@ -188,6 +170,7 @@ async def _assert_task_is_no_longer_present(
188170
@pytest.mark.parametrize("to_return", [{"key": "value"}])
189171
async def test_workflow_with_result(
190172
disable_stale_tasks_monitor: None,
173+
fast_long_running_tasks_cancellation: None,
191174
long_running_managers: list[LongRunningManager],
192175
rabbitmq_rpc_client: RabbitMQRPCClient,
193176
task_count: int,
@@ -235,8 +218,8 @@ async def test_workflow_with_result(
235218
)
236219
assert result == to_return
237220

238-
await _assert_task_is_no_longer_present(
239-
long_running_managers, saved_context, task_id
221+
await assert_task_is_no_longer_present(
222+
_get_long_running_manager(long_running_managers), task_id, saved_context
240223
)
241224

242225

@@ -245,6 +228,7 @@ async def test_workflow_with_result(
245228
@pytest.mark.parametrize("is_unique", _IS_UNIQUE)
246229
async def test_workflow_raises_error(
247230
disable_stale_tasks_monitor: None,
231+
fast_long_running_tasks_cancellation: None,
248232
long_running_managers: list[LongRunningManager],
249233
rabbitmq_rpc_client: RabbitMQRPCClient,
250234
task_count: int,
@@ -290,15 +274,16 @@ async def test_workflow_raises_error(
290274
task_id,
291275
)
292276

293-
await _assert_task_is_no_longer_present(
294-
long_running_managers, saved_context, task_id
277+
await assert_task_is_no_longer_present(
278+
_get_long_running_manager(long_running_managers), task_id, saved_context
295279
)
296280

297281

298282
@pytest.mark.parametrize("task_context", _TASK_CONTEXT)
299283
@pytest.mark.parametrize("is_unique", _IS_UNIQUE)
300284
async def test_remove_task(
301285
disable_stale_tasks_monitor: None,
286+
fast_long_running_tasks_cancellation: None,
302287
long_running_managers: list[LongRunningManager],
303288
rabbitmq_rpc_client: RabbitMQRPCClient,
304289
is_unique: bool,
@@ -326,6 +311,6 @@ async def test_remove_task(
326311
task_id,
327312
)
328313

329-
await _assert_task_is_no_longer_present(
330-
long_running_managers, saved_context, task_id
314+
await assert_task_is_no_longer_present(
315+
_get_long_running_manager(long_running_managers), task_id, saved_context
331316
)

services/dynamic-sidecar/tests/unit/test_api_rest_workflow_service_metrics.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
from models_library.services_creation import CreateServiceMetricsAdditionalParams
3737
from pydantic import AnyHttpUrl, TypeAdapter
3838
from pytest_mock import MockerFixture
39+
from pytest_simcore.helpers.long_running_tasks import (
40+
assert_task_is_no_longer_present,
41+
get_fastapi_long_running_manager,
42+
)
3943
from pytest_simcore.helpers.monkeypatch_envs import EnvVarsDict, setenvs_from_dict
4044
from servicelib.fastapi.long_running_tasks.client import (
4145
HttpClient,
@@ -61,6 +65,11 @@
6165
_CREATE_SERVICE_CONTAINERS_TIMEOUT: Final[float] = 60
6266
_BASE_HEART_BEAT_INTERVAL: Final[float] = 0.1
6367

68+
_RETRY_PRAMS: Final[dict[str, Any]] = {
69+
"wait": wait_fixed(0.1),
70+
"stop": stop_after_delay(5),
71+
}
72+
6473

6574
@pytest.fixture(params=[1, 2])
6675
def container_names(request: pytest.FixtureRequest) -> list[str]:
@@ -92,6 +101,7 @@ def backend_url() -> AnyHttpUrl:
92101

93102
@pytest.fixture
94103
async def mock_environment(
104+
fast_long_running_tasks_cancellation: None,
95105
mock_postgres_check: None,
96106
mock_registry_service: AsyncMock,
97107
mock_environment: EnvVarsDict,
@@ -351,14 +361,18 @@ async def test_user_services_fail_to_stop_or_save_data(
351361
# in case of manual intervention multiple stops will be sent
352362
_EXPECTED_STOP_MESSAGES = 4
353363
for _ in range(_EXPECTED_STOP_MESSAGES):
364+
task_id = await _get_task_id_docker_compose_down(httpx_async_client)
354365
with pytest.raises(TaskExceptionError):
355366
async with periodic_task_result(
356367
client=http_client,
357-
task_id=await _get_task_id_docker_compose_down(httpx_async_client),
368+
task_id=task_id,
358369
task_timeout=_CREATE_SERVICE_CONTAINERS_TIMEOUT,
359370
status_poll_interval=_FAST_STATUS_POLL,
360371
):
361372
...
373+
await assert_task_is_no_longer_present(
374+
get_fastapi_long_running_manager(app), task_id, {}
375+
)
362376

363377
# Ensure messages arrive in the expected order
364378
resource_tracking_messages = _get_resource_tracking_messages(
@@ -482,13 +496,17 @@ async def test_user_services_crash_when_running(
482496
# will be sent due to manual intervention
483497
_EXPECTED_STOP_MESSAGES = 4
484498
for _ in range(_EXPECTED_STOP_MESSAGES):
499+
task_id = await _get_task_id_docker_compose_down(httpx_async_client)
485500
async with periodic_task_result(
486501
client=http_client,
487-
task_id=await _get_task_id_docker_compose_down(httpx_async_client),
502+
task_id=task_id,
488503
task_timeout=_CREATE_SERVICE_CONTAINERS_TIMEOUT,
489504
status_poll_interval=_FAST_STATUS_POLL,
490505
) as result:
491506
assert result is None
507+
await assert_task_is_no_longer_present(
508+
get_fastapi_long_running_manager(app), task_id, {}
509+
)
492510

493511
resource_tracking_messages = _get_resource_tracking_messages(
494512
mock_post_rabbit_message

0 commit comments

Comments
 (0)