Skip to content

Commit ae17256

Browse files
authored
Merge pull request #964 from skalenetwork/fix-migration-from-v4
fix dynamic containers rm function after v4 migration
2 parents eb81b84 + 91ed895 commit ae17256

2 files changed

Lines changed: 75 additions & 9 deletions

File tree

node_cli/utils/docker_utils.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,26 +125,32 @@ def get_containers(container_name_filter=None, _all=True) -> list:
125125
return docker_client().containers.list(all=_all, filters=filters)
126126

127127

128-
def get_all_schain_containers(_all=True) -> list:
129-
return docker_client().containers.list(all=_all, filters={'name': 'sk_skaled_*'})
128+
def get_all_skaled_containers(_all=True) -> list:
129+
dc = docker_client()
130+
return dc.containers.list(all=_all, filters={'name': 'sk_skaled_'}) + dc.containers.list(
131+
all=_all, filters={'name': 'skale_schain_'}
132+
)
130133

131134

132135
def get_all_ima_containers(_all=True) -> list:
133-
return docker_client().containers.list(all=_all, filters={'name': 'sk_ima_*'})
136+
dc = docker_client()
137+
return dc.containers.list(all=_all, filters={'name': 'sk_ima_'}) + dc.containers.list(
138+
all=_all, filters={'name': 'skale_ima_'}
139+
)
134140

135141

136142
def remove_dynamic_containers() -> None:
137-
logger.info('Removing sChains containers')
138-
rm_all_schain_containers()
143+
logger.info('Removing skaled containers')
144+
rm_all_skaled_containers()
139145
logger.info('Removing IMA containers')
140146
rm_all_ima_containers()
141147
logger.info('Removing telegraf (if exists)')
142148
remove_telegraf()
143149

144150

145-
def rm_all_schain_containers():
146-
schain_containers = get_all_schain_containers()
147-
remove_containers(schain_containers, timeout=SCHAIN_REMOVE_TIMEOUT)
151+
def rm_all_skaled_containers():
152+
skaled_containers = get_all_skaled_containers()
153+
remove_containers(skaled_containers, timeout=SCHAIN_REMOVE_TIMEOUT)
148154

149155

150156
def rm_all_ima_containers():

tests/docker_utils_test.py

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
import os
22
import time
33
from time import sleep
4+
from unittest.mock import MagicMock
45

56
import mock
67
import pytest
78

8-
from node_cli.utils.docker_utils import docker_cleanup, save_container_logs, safe_rm
9+
from node_cli.utils.docker_utils import (
10+
docker_cleanup,
11+
get_all_ima_containers,
12+
get_all_skaled_containers,
13+
save_container_logs,
14+
safe_rm,
15+
)
916
from node_cli.configs import REMOVED_CONTAINERS_FOLDER_PATH
1017

1118

@@ -95,3 +102,56 @@ def test_docker_cleanup(dclient, simple_container):
95102

96103
with mock.patch('node_cli.utils.docker_utils.run_cmd', side_effect=ValueError):
97104
docker_cleanup(dclient=dclient)
105+
106+
107+
def _make_container(name: str) -> MagicMock:
108+
c = MagicMock()
109+
c.name = name
110+
c.id = name
111+
return c
112+
113+
114+
def test_get_all_skaled_containers_both_prefixes():
115+
new_container = _make_container('sk_skaled_chain1')
116+
legacy_container = _make_container('skale_schain_chain2')
117+
118+
def fake_list(all=True, filters=None):
119+
prefix = filters['name']
120+
if prefix == 'sk_skaled_':
121+
return [new_container]
122+
if prefix == 'skale_schain_':
123+
return [legacy_container]
124+
return []
125+
126+
mock_dc = MagicMock()
127+
mock_dc.containers.list.side_effect = fake_list
128+
129+
with mock.patch('node_cli.utils.docker_utils.docker_client', return_value=mock_dc):
130+
result = get_all_skaled_containers()
131+
132+
assert len(result) == 2
133+
names = {c.name for c in result}
134+
assert names == {'sk_skaled_chain1', 'skale_schain_chain2'}
135+
136+
137+
def test_get_all_ima_containers_both_prefixes():
138+
new_container = _make_container('sk_ima_chain1')
139+
legacy_container = _make_container('skale_ima_chain2')
140+
141+
def fake_list(all=True, filters=None):
142+
prefix = filters['name']
143+
if prefix == 'sk_ima_':
144+
return [new_container]
145+
if prefix == 'skale_ima_':
146+
return [legacy_container]
147+
return []
148+
149+
mock_dc = MagicMock()
150+
mock_dc.containers.list.side_effect = fake_list
151+
152+
with mock.patch('node_cli.utils.docker_utils.docker_client', return_value=mock_dc):
153+
result = get_all_ima_containers()
154+
155+
assert len(result) == 2
156+
names = {c.name for c in result}
157+
assert names == {'sk_ima_chain1', 'skale_ima_chain2'}

0 commit comments

Comments
 (0)