Skip to content

Commit f72d38c

Browse files
committed
adapted test to SSM
1 parent b56aacd commit f72d38c

File tree

1 file changed

+64
-22
lines changed

1 file changed

+64
-22
lines changed

services/clusters-keeper/tests/unit/test_utils_clusters.py

Lines changed: 64 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from simcore_service_clusters_keeper.utils.clusters import (
3030
_prepare_environment_variables,
3131
create_cluster_from_ec2_instance,
32+
create_deploy_cluster_stack_script,
3233
create_startup_script,
3334
)
3435
from types_aiobotocore_ec2.literals import InstanceStateNameType
@@ -51,16 +52,26 @@ def ec2_boot_specs(app_settings: ApplicationSettings) -> EC2InstanceBootSpecific
5152
return ec2_boot_specs
5253

5354

55+
@pytest.fixture(params=[TLSAuthentication, NoAuthentication])
56+
def backend_cluster_auth(
57+
request: pytest.FixtureRequest,
58+
) -> InternalClusterAuthentication:
59+
return request.param
60+
61+
5462
@pytest.fixture
5563
def app_environment(
5664
app_environment: EnvVarsDict,
5765
monkeypatch: pytest.MonkeyPatch,
66+
backend_cluster_auth: InternalClusterAuthentication,
5867
) -> EnvVarsDict:
5968
return app_environment | setenvs_from_dict(
6069
monkeypatch,
6170
{
6271
"CLUSTERS_KEEPER_COMPUTATIONAL_BACKEND_DEFAULT_CLUSTER_AUTH": json_dumps(
6372
TLSAuthentication.Config.schema_extra["examples"][0]
73+
if isinstance(backend_cluster_auth, TLSAuthentication)
74+
else NoAuthentication.Config.schema_extra["examples"][0]
6475
)
6576
},
6677
)
@@ -72,36 +83,49 @@ def test_create_startup_script(
7283
mocked_ssm_server_envs: EnvVarsDict,
7384
mocked_redis_server: None,
7485
app_settings: ApplicationSettings,
75-
cluster_machines_name_prefix: str,
76-
clusters_keeper_docker_compose: dict[str, Any],
7786
ec2_boot_specs: EC2InstanceBootSpecific,
7887
):
79-
additional_custom_tags = {
80-
AWSTagKey("pytest-tag-key"): AWSTagValue("pytest-tag-value")
81-
}
8288
startup_script = create_startup_script(
8389
app_settings,
84-
cluster_machines_name_prefix=cluster_machines_name_prefix,
8590
ec2_boot_specific=ec2_boot_specs,
86-
additional_custom_tags=additional_custom_tags,
8791
)
8892
assert isinstance(startup_script, str)
8993
assert len(ec2_boot_specs.custom_boot_scripts) > 0
9094
for boot_script in ec2_boot_specs.custom_boot_scripts:
9195
assert boot_script in startup_script
96+
97+
98+
def test_create_deploy_cluster_stack_script(
99+
disabled_rabbitmq: None,
100+
mocked_ec2_server_envs: EnvVarsDict,
101+
mocked_ssm_server_envs: EnvVarsDict,
102+
mocked_redis_server: None,
103+
app_settings: ApplicationSettings,
104+
cluster_machines_name_prefix: str,
105+
clusters_keeper_docker_compose: dict[str, Any],
106+
):
107+
additional_custom_tags = {
108+
AWSTagKey("pytest-tag-key"): AWSTagValue("pytest-tag-value")
109+
}
110+
deploy_script = create_deploy_cluster_stack_script(
111+
app_settings,
112+
cluster_machines_name_prefix=cluster_machines_name_prefix,
113+
additional_custom_tags=additional_custom_tags,
114+
)
115+
assert isinstance(deploy_script, str)
92116
# we have commands to pipe into a docker-compose file
93-
assert " | base64 -d > /docker-compose.yml" in startup_script
117+
assert " | base64 -d > /docker-compose.yml" in deploy_script
94118
# we have commands to init a docker-swarm
95-
assert "docker swarm init" in startup_script
119+
assert "docker swarm init --default-addr-pool" in deploy_script
96120
# we have commands to deploy a stack
97121
assert (
98122
"docker stack deploy --with-registry-auth --compose-file=/docker-compose.yml dask_stack"
99-
in startup_script
123+
in deploy_script
100124
)
101125
# before that we have commands that setup ENV variables, let's check we have all of them as defined in the docker-compose
102126
# let's get what was set in the startup script and compare with the expected one of the docker-compose
103127
startup_script_envs_definition = (
104-
startup_script.splitlines()[-1].split("docker stack deploy")[0].strip()
128+
deploy_script.splitlines()[-1].split("docker stack deploy")[0].strip()
105129
)
106130
assert startup_script_envs_definition
107131
# Use regular expression to split the string into key-value pairs (courtesy of chatGPT)
@@ -138,7 +162,7 @@ def test_create_startup_script(
138162
"WORKERS_EC2_INSTANCES_SECURITY_GROUP_IDS",
139163
]
140164
assert all(
141-
re.search(rf"{i}=\[(\\\".+\\\")*\]", startup_script) for i in list_settings
165+
re.search(rf"{i}=\[(\\\".+\\\")*\]", deploy_script) for i in list_settings
142166
)
143167

144168
# check dicts have \' in front
@@ -147,36 +171,55 @@ def test_create_startup_script(
147171
"WORKERS_EC2_INSTANCES_CUSTOM_TAGS",
148172
]
149173
assert all(
150-
re.search(rf"{i}=\'{{(\".+\":\s\".*\")+}}\'", startup_script)
174+
re.search(rf"{i}=\'{{(\".+\":\s\".*\")+}}\'", deploy_script)
151175
for i in dict_settings
152176
)
153177

154178
# check the additional tags are in
155179
assert all(
156-
f'"{key}": "{value}"' in startup_script
180+
f'"{key}": "{value}"' in deploy_script
157181
for key, value in additional_custom_tags.items()
158182
)
159183

160184

161-
def test_create_startup_script_script_size_below_16kb(
185+
def test_create_deploy_cluster_stack_script_below_64kb(
162186
disabled_rabbitmq: None,
163187
mocked_ec2_server_envs: EnvVarsDict,
164188
mocked_ssm_server_envs: EnvVarsDict,
165189
mocked_redis_server: None,
166190
app_settings: ApplicationSettings,
167191
cluster_machines_name_prefix: str,
168192
clusters_keeper_docker_compose: dict[str, Any],
169-
ec2_boot_specs: EC2InstanceBootSpecific,
170193
):
171194
additional_custom_tags = {
172195
AWSTagKey("pytest-tag-key"): AWSTagValue("pytest-tag-value")
173196
}
174-
startup_script = create_startup_script(
197+
deploy_script = create_deploy_cluster_stack_script(
175198
app_settings,
176199
cluster_machines_name_prefix=cluster_machines_name_prefix,
177-
ec2_boot_specific=ec2_boot_specs,
178200
additional_custom_tags=additional_custom_tags,
179201
)
202+
deploy_script_size_in_bytes = len(deploy_script.encode("utf-8"))
203+
assert deploy_script_size_in_bytes < 64000, (
204+
f"script size is {deploy_script_size_in_bytes} bytes that exceeds the SSM command of 64KB. "
205+
"TIP: split commands or reduce size."
206+
)
207+
208+
209+
def test_create_startup_script_script_size_below_16kb(
210+
disabled_rabbitmq: None,
211+
mocked_ec2_server_envs: EnvVarsDict,
212+
mocked_ssm_server_envs: EnvVarsDict,
213+
mocked_redis_server: None,
214+
app_settings: ApplicationSettings,
215+
cluster_machines_name_prefix: str,
216+
clusters_keeper_docker_compose: dict[str, Any],
217+
ec2_boot_specs: EC2InstanceBootSpecific,
218+
):
219+
startup_script = create_startup_script(
220+
app_settings,
221+
ec2_boot_specific=ec2_boot_specs,
222+
)
180223
script_size_in_bytes = len(startup_script.encode("utf-8"))
181224

182225
print(
@@ -186,14 +229,13 @@ def test_create_startup_script_script_size_below_16kb(
186229
assert script_size_in_bytes < 15 * 1024
187230

188231

189-
def test_startup_script_defines_all_envs_for_docker_compose(
232+
def test__prepare_environment_variables_defines_all_envs_for_docker_compose(
190233
disabled_rabbitmq: None,
191234
mocked_ec2_server_envs: EnvVarsDict,
192235
mocked_ssm_server_envs: EnvVarsDict,
193236
mocked_redis_server: None,
194237
app_settings: ApplicationSettings,
195238
cluster_machines_name_prefix: str,
196-
ec2_boot_specs: EC2InstanceBootSpecific,
197239
clusters_keeper_docker_compose_file: Path,
198240
):
199241
additional_custom_tags = {
@@ -205,8 +247,8 @@ def test_startup_script_defines_all_envs_for_docker_compose(
205247
additional_custom_tags=additional_custom_tags,
206248
)
207249
assert environment_variables
208-
process = subprocess.run(
209-
[ # noqa: S603, S607
250+
process = subprocess.run( # noqa: S603
251+
[ # noqa: S607
210252
"docker",
211253
"compose",
212254
"--dry-run",

0 commit comments

Comments
 (0)