|
7 | 7 | import asyncio |
8 | 8 | import time |
9 | 9 | import uuid |
| 10 | +from dataclasses import dataclass |
10 | 11 |
|
11 | 12 | import docker |
12 | 13 | import pytest |
@@ -77,7 +78,7 @@ async def push_start_services(number_comp, number_dyn, dependant=False): |
77 | 78 | start_time = time.perf_counter() |
78 | 79 | max_time = 2 * 60 |
79 | 80 | while node_details["service_state"] != "running": |
80 | | - asyncio.sleep(2) |
| 81 | + await asyncio.sleep(2) |
81 | 82 | if (time.perf_counter() - start_time) > max_time: |
82 | 83 | assert True, "waiting too long to start service" |
83 | 84 | node_details = await producer.get_service_details( |
@@ -254,3 +255,76 @@ async def test_dependent_services_have_common_network(run_services): |
254 | 255 | list_of_services[0].attrs["Spec"]["Networks"][0]["Target"] |
255 | 256 | == list_of_services[1].attrs["Spec"]["Networks"][0]["Target"] |
256 | 257 | ) |
| 258 | + |
| 259 | + |
| 260 | +@dataclass |
| 261 | +class FakeDockerService: |
| 262 | + service_str: str |
| 263 | + expected_key: str |
| 264 | + expected_tag: str |
| 265 | + |
| 266 | + |
| 267 | +@pytest.mark.parametrize( |
| 268 | + "fake_service", |
| 269 | + [ |
| 270 | + FakeDockerService( |
| 271 | + "/simcore/services/dynamic/some/sub/folder/my_service-key:123.456.3214", |
| 272 | + "simcore/services/dynamic/some/sub/folder/my_service-key", |
| 273 | + "123.456.3214", |
| 274 | + ), |
| 275 | + FakeDockerService( |
| 276 | + "/simcore/services/dynamic/some/sub/folder/my_service-key:123.456.3214@sha256:2aef165ab4f30fbb109e88959271d8b57489790ea13a77d27c02d8adb8feb20f", |
| 277 | + "simcore/services/dynamic/some/sub/folder/my_service-key", |
| 278 | + "123.456.3214", |
| 279 | + ), |
| 280 | + ], |
| 281 | +) |
| 282 | +async def test_get_service_key_version_from_docker_service( |
| 283 | + fake_service: FakeDockerService, |
| 284 | +): |
| 285 | + docker_service_partial_inspect = { |
| 286 | + "Spec": { |
| 287 | + "TaskTemplate": { |
| 288 | + "ContainerSpec": { |
| 289 | + "Image": f"{config.REGISTRY_PATH}{fake_service.service_str}" |
| 290 | + } |
| 291 | + } |
| 292 | + } |
| 293 | + } |
| 294 | + ( |
| 295 | + service_key, |
| 296 | + service_tag, |
| 297 | + ) = await producer._get_service_key_version_from_docker_service( |
| 298 | + docker_service_partial_inspect |
| 299 | + ) |
| 300 | + assert service_key == fake_service.expected_key |
| 301 | + assert service_tag == fake_service.expected_tag |
| 302 | + |
| 303 | + |
| 304 | +@pytest.mark.parametrize( |
| 305 | + "fake_service_str", |
| 306 | + [ |
| 307 | + "postgres:10.11@sha256:2aef165ab4f30fbb109e88959271d8b57489790ea13a77d27c02d8adb8feb20f", |
| 308 | + "/simcore/postgres:10.11@sha256:2aef165ab4f30fbb109e88959271d8b57489790ea13a77d27c02d8adb8feb20f", |
| 309 | + "itisfoundation/postgres:10.11@sha256:2aef165ab4f30fbb109e88959271d8b57489790ea13a77d27c02d8adb8feb20f", |
| 310 | + "/simcore/services/stuff/postgres:10.11", |
| 311 | + "/simcore/services/dynamic/postgres:10.11", |
| 312 | + "/simcore/services/dynamic/postgres:10", |
| 313 | + ], |
| 314 | +) |
| 315 | +async def test_get_service_key_version_from_docker_service_except_invalid_keys( |
| 316 | + fake_service_str: str, |
| 317 | +): |
| 318 | + docker_service_partial_inspect = { |
| 319 | + "Spec": { |
| 320 | + "TaskTemplate": { |
| 321 | + "ContainerSpec": { |
| 322 | + "Image": f"{config.REGISTRY_PATH if fake_service_str.startswith('/') else ''}{fake_service_str}" |
| 323 | + } |
| 324 | + } |
| 325 | + } |
| 326 | + } |
| 327 | + with pytest.raises(exceptions.DirectorException): |
| 328 | + await producer._get_service_key_version_from_docker_service( |
| 329 | + docker_service_partial_inspect |
| 330 | + ) |
0 commit comments