Skip to content

Commit cf5f013

Browse files
committed
drafts tests
1 parent e27bc46 commit cf5f013

File tree

2 files changed

+93
-7
lines changed

2 files changed

+93
-7
lines changed

services/catalog/tests/unit/conftest.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,10 @@ def mocked_director_rest_api_base(
407407

408408
@pytest.fixture
409409
def get_mocked_service_labels() -> Callable[[str, str], dict]:
410-
def _(service_key: str, service_version: str) -> dict:
411-
return {
410+
def _(
411+
service_key: str, service_version: str, *, include_org_labels: bool = True
412+
) -> dict:
413+
base_labels = {
412414
"io.simcore.authors": '{"authors": [{"name": "John Smith", "email": "[email protected]", "affiliation": "ACME\'IS Foundation"}]}',
413415
"io.simcore.contact": '{"contact": "[email protected]"}',
414416
"io.simcore.description": '{"description": "Autonomous Nervous System Network model"}',
@@ -423,14 +425,22 @@ def _(service_key: str, service_version: str) -> dict:
423425
"xxxxx", service_version
424426
),
425427
"maintainer": "johnsmith",
426-
"org.label-schema.build-date": "2023-04-17T08:04:15Z",
427-
"org.label-schema.schema-version": "1.0",
428-
"org.label-schema.vcs-ref": "4d79449a2e79f8a3b3b2e1dd0290af9f3d1a8792",
429-
"org.label-schema.vcs-url": "https://github.com/ITISFoundation/jupyter-math.git",
430428
"simcore.service.restart-policy": "no-restart",
431429
"simcore.service.settings": '[{"name": "Resources", "type": "Resources", "value": {"Limits": {"NanoCPUs": 1000000000, "MemoryBytes": 4194304}, "Reservations": {"NanoCPUs": 4000000000, "MemoryBytes": 2147483648}}}]',
432430
}
433431

432+
if include_org_labels:
433+
base_labels.update(
434+
{
435+
"org.label-schema.build-date": "2023-04-17T08:04:15Z",
436+
"org.label-schema.schema-version": "1.0",
437+
"org.label-schema.vcs-ref": "4d79449a2e79f8a3b3b2e1dd0290af9f3d1a8792",
438+
"org.label-schema.vcs-url": "https://github.com/ITISFoundation/jupyter-math.git",
439+
}
440+
)
441+
442+
return base_labels
443+
434444
return _
435445

436446

services/catalog/tests/unit/test_clients_director.py

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77

88

99
import urllib.parse
10+
from collections.abc import Callable
1011
from typing import Any
1112

13+
import httpx
1214
import pytest
1315
from fastapi import FastAPI
1416
from models_library.services_metadata_published import ServiceMetaDataPublished
@@ -57,7 +59,6 @@ async def test_director_client_high_level_api(
5759
await director_api.get_service(expected_service.key, expected_service.version)
5860
== expected_service
5961
)
60-
# TODO: error handling!
6162

6263

6364
async def test_director_client_low_level_api(
@@ -84,3 +85,78 @@ async def test_director_client_low_level_api(
8485
f"/services/{urllib.parse.quote_plus(key)}/{version}"
8586
)
8687
assert service
88+
89+
90+
async def test_director_client_get_service_extras_with_org_labels(
91+
repository_lifespan_disabled: None,
92+
background_task_lifespan_disabled: None,
93+
rabbitmq_and_rpc_setup_disabled: None,
94+
mocked_director_rest_api: MockRouter,
95+
expected_director_rest_api_list_services: list[dict[str, Any]],
96+
app: FastAPI,
97+
):
98+
director_api = get_director_client(app)
99+
100+
expected_service = expected_director_rest_api_list_services[0]
101+
key = expected_service["key"]
102+
version = expected_service["version"]
103+
104+
service_extras = await director_api.get_service_extras(key, version)
105+
106+
# Check node requirements are present
107+
assert service_extras.node_requirements is not None
108+
assert service_extras.node_requirements.cpu > 0
109+
assert service_extras.node_requirements.ram > 0
110+
111+
# Check service build details are present (since we have org.label-schema labels)
112+
assert service_extras.service_build_details is not None
113+
assert service_extras.service_build_details.build_date == "2023-04-17T08:04:15Z"
114+
assert (
115+
service_extras.service_build_details.vcs_ref
116+
== "4d79449a2e79f8a3b3b2e1dd0290af9f3d1a8792"
117+
)
118+
assert (
119+
service_extras.service_build_details.vcs_url
120+
== "https://github.com/ITISFoundation/jupyter-math.git"
121+
)
122+
123+
124+
async def test_director_client_get_service_extras_without_org_labels(
125+
repository_lifespan_disabled: None,
126+
background_task_lifespan_disabled: None,
127+
rabbitmq_and_rpc_setup_disabled: None,
128+
mocked_director_rest_api_base: MockRouter,
129+
expected_director_rest_api_list_services: list[dict[str, Any]],
130+
get_mocked_service_labels: Callable[[str, str, bool], dict],
131+
app: FastAPI,
132+
):
133+
# Setup mock without org.label-schema labels
134+
expected_service = expected_director_rest_api_list_services[0]
135+
service_key = expected_service["key"]
136+
service_version = expected_service["version"]
137+
138+
# Mock the labels endpoint without org labels
139+
@mocked_director_rest_api_base.get(
140+
path__regex=r"^/services/(?P<service_key>[/\w-]+)/(?P<service_version>[0-9\.]+)/labels$",
141+
name="get_service_labels_no_org",
142+
)
143+
def _get_service_labels_no_org(request, service_key, service_version):
144+
return httpx.Response(
145+
status_code=200,
146+
json={
147+
"data": get_mocked_service_labels(
148+
service_key, service_version, include_org_labels=False
149+
)
150+
},
151+
)
152+
153+
director_api = get_director_client(app)
154+
service_extras = await director_api.get_service_extras(service_key, service_version)
155+
156+
# Check node requirements are present
157+
assert service_extras.node_requirements is not None
158+
assert service_extras.node_requirements.cpu > 0
159+
assert service_extras.node_requirements.ram > 0
160+
161+
# Check service build details are NOT present (since we don't have org.label-schema labels)
162+
assert service_extras.service_build_details is None

0 commit comments

Comments
 (0)