Skip to content

Commit a10a9c7

Browse files
committed
clean
1 parent b11333d commit a10a9c7

File tree

1 file changed

+75
-97
lines changed

1 file changed

+75
-97
lines changed

services/autoscaling/tests/unit/test_utils_rabbitmq.py

Lines changed: 75 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77

88
from collections.abc import Awaitable, Callable
99
from typing import Any
10+
from unittest.mock import AsyncMock
1011

1112
import aiodocker
13+
import pytest
1214
from faker import Faker
1315
from fastapi import FastAPI
1416
from models_library.docker import DockerLabelKey, StandardSimcoreDockerLabels
@@ -48,45 +50,80 @@
4850
pytest_simcore_ops_services_selection = []
4951

5052

51-
async def test_post_task_log_message(
52-
disable_autoscaling_background_task,
53-
enabled_rabbitmq: RabbitSettings,
54-
disabled_ec2: None,
55-
disabled_ssm: None,
56-
mocked_redis_server: None,
57-
initialized_app: FastAPI,
53+
@pytest.fixture
54+
async def logs_rabbitmq_consumer(
5855
create_rabbitmq_client: Callable[[str], RabbitMQClient],
5956
mocker: MockerFixture,
60-
async_docker_client: aiodocker.Docker,
61-
create_service: Callable[
62-
[dict[str, Any], dict[DockerLabelKey, str], str], Awaitable[Service]
63-
],
64-
task_template: dict[str, Any],
65-
osparc_docker_label_keys: StandardSimcoreDockerLabels,
66-
faker: Faker,
67-
):
57+
) -> AsyncMock:
6858
mocked_message_handler = mocker.AsyncMock(return_value=True)
6959
client = create_rabbitmq_client("pytest_consumer")
7060
await client.subscribe(
7161
LoggerRabbitMessage.get_channel_name(),
7262
mocked_message_handler,
7363
topics=[BIND_TO_ALL_TOPICS],
7464
)
65+
return mocked_message_handler
7566

76-
service_with_labels = await create_service(
77-
task_template,
78-
osparc_docker_label_keys.to_simcore_runtime_docker_labels(),
79-
"running",
67+
68+
@pytest.fixture
69+
async def progress_rabbitmq_consumer(
70+
create_rabbitmq_client: Callable[[str], RabbitMQClient],
71+
mocker: MockerFixture,
72+
) -> AsyncMock:
73+
mocked_message_handler = mocker.AsyncMock(return_value=True)
74+
client = create_rabbitmq_client("pytest_consumer")
75+
await client.subscribe(
76+
ProgressRabbitMessageNode.get_channel_name(),
77+
mocked_message_handler,
78+
topics=[BIND_TO_ALL_TOPICS],
8079
)
81-
assert service_with_labels.spec
82-
service_tasks = TypeAdapter(list[Task]).validate_python(
83-
await async_docker_client.tasks.list(
84-
filters={"service": service_with_labels.spec.name}
80+
return mocked_message_handler
81+
82+
83+
@pytest.fixture
84+
async def running_service_tasks(
85+
create_service: Callable[
86+
[dict[str, Any], dict[DockerLabelKey, str], str], Awaitable[Service]
87+
],
88+
task_template: dict[str, Any],
89+
async_docker_client: aiodocker.Docker,
90+
) -> Callable[[dict[DockerLabelKey, str]], Awaitable[list[Task]]]:
91+
async def _(labels: dict[DockerLabelKey, str]) -> list[Task]:
92+
# Simulate a running service
93+
service = await create_service(
94+
task_template,
95+
labels,
96+
"running",
8597
)
98+
assert service.spec
99+
100+
service_tasks = TypeAdapter(list[Task]).validate_python(
101+
await async_docker_client.tasks.list(filters={"service": service.spec.name})
102+
)
103+
assert service_tasks
104+
assert len(service_tasks) == 1
105+
return service_tasks
106+
107+
return _
108+
109+
110+
async def test_post_task_log_message(
111+
disable_autoscaling_background_task,
112+
disable_buffers_pool_background_task,
113+
enabled_rabbitmq: RabbitSettings,
114+
disabled_ec2: None,
115+
disabled_ssm: None,
116+
mocked_redis_server: None,
117+
initialized_app: FastAPI,
118+
running_service_tasks: Callable[[dict[DockerLabelKey, str]], Awaitable[list[Task]]],
119+
osparc_docker_label_keys: StandardSimcoreDockerLabels,
120+
faker: Faker,
121+
logs_rabbitmq_consumer: AsyncMock,
122+
):
123+
service_tasks = await running_service_tasks(
124+
osparc_docker_label_keys.to_simcore_runtime_docker_labels()
86125
)
87-
assert service_tasks
88126
assert len(service_tasks) == 1
89-
90127
log_message = faker.pystr()
91128
await post_tasks_log_message(
92129
initialized_app, tasks=service_tasks, message=log_message, level=0
@@ -97,7 +134,7 @@ async def test_post_task_log_message(
97134
print(
98135
f"--> checking for message in rabbit exchange {LoggerRabbitMessage.get_channel_name()}, {attempt.retry_state.retry_object.statistics}"
99136
)
100-
mocked_message_handler.assert_called_once_with(
137+
logs_rabbitmq_consumer.assert_called_once_with(
101138
LoggerRabbitMessage(
102139
node_id=osparc_docker_label_keys.node_id,
103140
project_id=osparc_docker_label_keys.project_id,
@@ -111,74 +148,22 @@ async def test_post_task_log_message(
111148
print("... message received")
112149

113150

114-
async def test_post_task_log_message_does_not_raise_if_service_has_no_labels(
115-
disable_autoscaling_background_task,
116-
enabled_rabbitmq: RabbitSettings,
117-
disabled_ec2: None,
118-
disabled_ssm: None,
119-
mocked_redis_server: None,
120-
initialized_app: FastAPI,
121-
async_docker_client: aiodocker.Docker,
122-
create_service: Callable[
123-
[dict[str, Any], dict[DockerLabelKey, str], str], Awaitable[Service]
124-
],
125-
task_template: dict[str, Any],
126-
faker: Faker,
127-
):
128-
service_without_labels = await create_service(task_template, {}, "running")
129-
assert service_without_labels.spec
130-
service_tasks = TypeAdapter(list[Task]).validate_python(
131-
await async_docker_client.tasks.list(
132-
filters={"service": service_without_labels.spec.name}
133-
)
134-
)
135-
assert service_tasks
136-
assert len(service_tasks) == 1
137-
138-
# this shall not raise any exception even if the task does not contain
139-
# the necessary labels
140-
await post_tasks_log_message(
141-
initialized_app, tasks=service_tasks, message=faker.pystr(), level=0
142-
)
143-
144-
145151
async def test_post_task_progress_message(
146152
disable_autoscaling_background_task,
153+
disable_buffers_pool_background_task,
147154
enabled_rabbitmq: RabbitSettings,
148155
disabled_ec2: None,
149156
disabled_ssm: None,
150157
mocked_redis_server: None,
151158
initialized_app: FastAPI,
152-
create_rabbitmq_client: Callable[[str], RabbitMQClient],
153-
mocker: MockerFixture,
154-
async_docker_client: aiodocker.Docker,
155-
create_service: Callable[
156-
[dict[str, Any], dict[DockerLabelKey, str], str], Awaitable[Service]
157-
],
158-
task_template: dict[str, Any],
159+
running_service_tasks: Callable[[dict[DockerLabelKey, str]], Awaitable[list[Task]]],
159160
osparc_docker_label_keys: StandardSimcoreDockerLabels,
160161
faker: Faker,
162+
progress_rabbitmq_consumer: AsyncMock,
161163
):
162-
mocked_message_handler = mocker.AsyncMock(return_value=True)
163-
client = create_rabbitmq_client("pytest_consumer")
164-
await client.subscribe(
165-
ProgressRabbitMessageNode.get_channel_name(),
166-
mocked_message_handler,
167-
topics=[BIND_TO_ALL_TOPICS],
168-
)
169-
170-
service_with_labels = await create_service(
171-
task_template,
164+
service_tasks = await running_service_tasks(
172165
osparc_docker_label_keys.to_simcore_runtime_docker_labels(),
173-
"running",
174166
)
175-
assert service_with_labels.spec
176-
service_tasks = TypeAdapter(list[Task]).validate_python(
177-
await async_docker_client.tasks.list(
178-
filters={"service": service_with_labels.spec.name}
179-
)
180-
)
181-
assert service_tasks
182167
assert len(service_tasks) == 1
183168

184169
progress_value = faker.pyfloat(min_value=0)
@@ -194,7 +179,7 @@ async def test_post_task_progress_message(
194179
print(
195180
f"--> checking for message in rabbit exchange {ProgressRabbitMessageNode.get_channel_name()}, {attempt.retry_state.retry_object.statistics}"
196181
)
197-
mocked_message_handler.assert_called_once_with(
182+
progress_rabbitmq_consumer.assert_called_once_with(
198183
ProgressRabbitMessageNode(
199184
node_id=osparc_docker_label_keys.node_id,
200185
project_id=osparc_docker_label_keys.project_id,
@@ -208,32 +193,25 @@ async def test_post_task_progress_message(
208193
print("... message received")
209194

210195

211-
async def test_post_task_progress_does_not_raise_if_service_has_no_labels(
196+
async def test_post_task_messages_does_not_raise_if_service_has_no_labels(
212197
disable_autoscaling_background_task,
198+
disable_buffers_pool_background_task,
213199
enabled_rabbitmq: RabbitSettings,
214200
disabled_ec2: None,
215201
disabled_ssm: None,
216202
mocked_redis_server: None,
217203
initialized_app: FastAPI,
218-
async_docker_client: aiodocker.Docker,
219-
create_service: Callable[
220-
[dict[str, Any], dict[DockerLabelKey, str], str], Awaitable[Service]
221-
],
222-
task_template: dict[str, Any],
204+
running_service_tasks: Callable[[dict[DockerLabelKey, str]], Awaitable[list[Task]]],
223205
faker: Faker,
224206
):
225-
service_without_labels = await create_service(task_template, {}, "running")
226-
assert service_without_labels.spec
227-
service_tasks = TypeAdapter(list[Task]).validate_python(
228-
await async_docker_client.tasks.list(
229-
filters={"service": service_without_labels.spec.name}
230-
)
231-
)
232-
assert service_tasks
207+
service_tasks = await running_service_tasks({})
233208
assert len(service_tasks) == 1
234209

235210
# this shall not raise any exception even if the task does not contain
236211
# the necessary labels
212+
await post_tasks_log_message(
213+
initialized_app, tasks=service_tasks, message=faker.pystr(), level=0
214+
)
237215
await post_tasks_progress_message(
238216
initialized_app,
239217
tasks=service_tasks,

0 commit comments

Comments
 (0)