Skip to content

Commit 6d7e6e1

Browse files
committed
issue fixed
1 parent b52f522 commit 6d7e6e1

File tree

2 files changed

+40
-18
lines changed

2 files changed

+40
-18
lines changed

services/autoscaling/src/simcore_service_autoscaling/utils/utils_docker.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,14 @@ async def find_node_with_name(
414414
list_of_nodes = await docker_client.nodes.list(filters={"name": name})
415415
if not list_of_nodes:
416416
return None
417-
return parse_obj_as(Node, list_of_nodes[0])
417+
# note that there might be several nodes with a common_prefixed name. so now we want exact matching
418+
list_of_nodes = parse_obj_as(list[Node], list_of_nodes)
419+
for node in list_of_nodes:
420+
assert node.Description # nosec
421+
if node.Description.Hostname == name:
422+
return node
423+
424+
return None
418425

419426

420427
async def tag_node(

services/autoscaling/tests/unit/test_utils_docker.py

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import random
99
from copy import deepcopy
1010
from typing import Any, AsyncIterator, Awaitable, Callable
11-
from unittest import mock
1211

1312
import aiodocker
1413
import pytest
@@ -792,26 +791,42 @@ async def test_try_get_node_with_name_fake(
792791
assert received_node is None
793792

794793

795-
@pytest.fixture
796-
async def mocked_docker_list_nodes(
797-
mocker: MockerFixture, create_fake_node: Callable[..., Node]
798-
) -> mock.Mock:
794+
async def test_find_node_with_name_with_common_prefixed_nodes(
795+
autoscaling_docker: AutoscalingDocker,
796+
mocker: MockerFixture,
797+
create_fake_node: Callable[..., Node],
798+
):
799799
common_prefix = "ip-10-0-1-"
800-
return mocker.patch(
801-
"simcore_service_autoscaling.utils.utils_docker.AutoscalingDocker.nodes.list",
802-
return_value=[
803-
create_fake_node(
804-
Description=NodeDescription(Hostname=f"{common_prefix}{'1'*(i+1)}")
805-
)
806-
for i in range(3)
807-
],
808-
)
800+
mocked_aiodocker = mocker.patch.object(autoscaling_docker, "nodes", autospec=True)
801+
mocked_aiodocker.list.return_value = [
802+
create_fake_node(
803+
Description=NodeDescription(Hostname=f"{common_prefix}{'1'*(i+1)}")
804+
)
805+
for i in range(3)
806+
]
807+
needed_host_name = f"{common_prefix}11"
808+
found_node = await find_node_with_name(autoscaling_docker, needed_host_name)
809+
assert found_node
810+
assert found_node.Description
811+
assert found_node.Description.Hostname == needed_host_name
809812

810813

811-
async def test_find_node_with_name_with_common_prefixed_nodes(
812-
autoscaling_docker: AutoscalingDocker, mocked_docker_list_nodes: mock.Mock
814+
async def test_find_node_with_smaller_name_with_common_prefixed_nodes_returns_none(
815+
autoscaling_docker: AutoscalingDocker,
816+
mocker: MockerFixture,
817+
create_fake_node: Callable[..., Node],
813818
):
814-
...
819+
common_prefix = "ip-10-0-1-"
820+
mocked_aiodocker = mocker.patch.object(autoscaling_docker, "nodes", autospec=True)
821+
mocked_aiodocker.list.return_value = [
822+
create_fake_node(
823+
Description=NodeDescription(Hostname=f"{common_prefix}{'1'*(i+1)}")
824+
)
825+
for i in range(3)
826+
]
827+
needed_host_name = f"{common_prefix}"
828+
found_node = await find_node_with_name(autoscaling_docker, needed_host_name)
829+
assert found_node is None
815830

816831

817832
async def test_tag_node(

0 commit comments

Comments
 (0)