From 91ed8957179ab70ad087d2bd8703717dff57126d Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 3 Mar 2026 15:57:35 +0000 Subject: [PATCH 1/2] fix dynamic containers rm function after v4 migration --- node_cli/utils/docker_utils.py | 22 +++++++----- tests/docker_utils_test.py | 62 +++++++++++++++++++++++++++++++++- 2 files changed, 75 insertions(+), 9 deletions(-) diff --git a/node_cli/utils/docker_utils.py b/node_cli/utils/docker_utils.py index 98a4946c..4c72405f 100644 --- a/node_cli/utils/docker_utils.py +++ b/node_cli/utils/docker_utils.py @@ -125,26 +125,32 @@ def get_containers(container_name_filter=None, _all=True) -> list: return docker_client().containers.list(all=_all, filters=filters) -def get_all_schain_containers(_all=True) -> list: - return docker_client().containers.list(all=_all, filters={'name': 'sk_skaled_*'}) +def get_all_skaled_containers(_all=True) -> list: + dc = docker_client() + return dc.containers.list(all=_all, filters={'name': 'sk_skaled_'}) + dc.containers.list( + all=_all, filters={'name': 'skale_schain_'} + ) def get_all_ima_containers(_all=True) -> list: - return docker_client().containers.list(all=_all, filters={'name': 'sk_ima_*'}) + dc = docker_client() + return dc.containers.list(all=_all, filters={'name': 'sk_ima_'}) + dc.containers.list( + all=_all, filters={'name': 'skale_ima_'} + ) def remove_dynamic_containers() -> None: - logger.info('Removing sChains containers') - rm_all_schain_containers() + logger.info('Removing skaled containers') + rm_all_skaled_containers() logger.info('Removing IMA containers') rm_all_ima_containers() logger.info('Removing telegraf (if exists)') remove_telegraf() -def rm_all_schain_containers(): - schain_containers = get_all_schain_containers() - remove_containers(schain_containers, timeout=SCHAIN_REMOVE_TIMEOUT) +def rm_all_skaled_containers(): + skaled_containers = get_all_skaled_containers() + remove_containers(skaled_containers, timeout=SCHAIN_REMOVE_TIMEOUT) def rm_all_ima_containers(): diff --git a/tests/docker_utils_test.py b/tests/docker_utils_test.py index fd3e8d3f..c4a25ee4 100644 --- a/tests/docker_utils_test.py +++ b/tests/docker_utils_test.py @@ -1,11 +1,18 @@ import os import time from time import sleep +from unittest.mock import MagicMock import mock import pytest -from node_cli.utils.docker_utils import docker_cleanup, save_container_logs, safe_rm +from node_cli.utils.docker_utils import ( + docker_cleanup, + get_all_ima_containers, + get_all_skaled_containers, + save_container_logs, + safe_rm, +) from node_cli.configs import REMOVED_CONTAINERS_FOLDER_PATH @@ -95,3 +102,56 @@ def test_docker_cleanup(dclient, simple_container): with mock.patch('node_cli.utils.docker_utils.run_cmd', side_effect=ValueError): docker_cleanup(dclient=dclient) + + +def _make_container(name: str) -> MagicMock: + c = MagicMock() + c.name = name + c.id = name + return c + + +def test_get_all_skaled_containers_both_prefixes(): + new_container = _make_container('sk_skaled_chain1') + legacy_container = _make_container('skale_schain_chain2') + + def fake_list(all=True, filters=None): + prefix = filters['name'] + if prefix == 'sk_skaled_': + return [new_container] + if prefix == 'skale_schain_': + return [legacy_container] + return [] + + mock_dc = MagicMock() + mock_dc.containers.list.side_effect = fake_list + + with mock.patch('node_cli.utils.docker_utils.docker_client', return_value=mock_dc): + result = get_all_skaled_containers() + + assert len(result) == 2 + names = {c.name for c in result} + assert names == {'sk_skaled_chain1', 'skale_schain_chain2'} + + +def test_get_all_ima_containers_both_prefixes(): + new_container = _make_container('sk_ima_chain1') + legacy_container = _make_container('skale_ima_chain2') + + def fake_list(all=True, filters=None): + prefix = filters['name'] + if prefix == 'sk_ima_': + return [new_container] + if prefix == 'skale_ima_': + return [legacy_container] + return [] + + mock_dc = MagicMock() + mock_dc.containers.list.side_effect = fake_list + + with mock.patch('node_cli.utils.docker_utils.docker_client', return_value=mock_dc): + result = get_all_ima_containers() + + assert len(result) == 2 + names = {c.name for c in result} + assert names == {'sk_ima_chain1', 'skale_ima_chain2'} From c73557519cd2fee51685bc566f87afe0ed3e68ed Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 3 Mar 2026 16:18:40 +0000 Subject: [PATCH 2/2] update skale.py --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4ab3258d..b2c09ef8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ dependencies = [ "requests-mock==1.12.1", "redis==7.1.1", "PyInstaller==6.18.0", - "skale.py-core==7.13.dev1", + "skale.py-core==7.13.dev4", ] [project.urls]