Skip to content

Commit 2e93a7e

Browse files
committed
check also datcore now
1 parent b868446 commit 2e93a7e

File tree

4 files changed

+80
-23
lines changed

4 files changed

+80
-23
lines changed

packages/pytest-simcore/src/pytest_simcore/helpers/storage_utils.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import logging
2-
import os
32
from dataclasses import dataclass
43
from pathlib import Path
54
from typing import Any, TypedDict
@@ -14,14 +13,6 @@
1413
log = logging.getLogger(__name__)
1514

1615

17-
def has_datcore_tokens() -> bool:
18-
api_key = os.environ.get("BF_API_KEY")
19-
api_secret = os.environ.get("BF_API_SECRET")
20-
if not api_key or not api_secret:
21-
return False
22-
return not (api_key == "none" or api_secret == "none") # noqa: S105
23-
24-
2516
async def get_updated_project(
2617
sqlalchemy_async_engine: AsyncEngine, project_id: str
2718
) -> dict[str, Any]:

packages/pytest-simcore/src/pytest_simcore/simcore_storage_datcore_adapter.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import re
2+
from collections.abc import Iterator
23

34
import pytest
45
import respx
6+
from faker import Faker
57
from servicelib.aiohttp import status
68
from simcore_service_storage.modules.datcore_adapter.datcore_adapter_settings import (
79
DatcoreAdapterSettings,
810
)
911

1012

1113
@pytest.fixture
12-
def datcore_adapter_service_mock() -> respx.MockRouter:
14+
def datcore_adapter_service_mock(faker: Faker) -> Iterator[respx.MockRouter]:
1315
dat_core_settings = DatcoreAdapterSettings.create_from_envs()
1416
datcore_adapter_base_url = dat_core_settings.endpoint
1517
# mock base endpoint
@@ -22,11 +24,14 @@ def datcore_adapter_service_mock() -> respx.MockRouter:
2224
datcore_adapter_base_url,
2325
name="healthcheck",
2426
).respond(status.HTTP_200_OK)
27+
respx_mocker.get(
28+
f"{datcore_adapter_base_url}/user/profile", name="get_user_profile"
29+
).respond(status.HTTP_200_OK, json=faker.pydict(allowed_types=(str,)))
2530
list_datasets_re = re.compile(rf"^{datcore_adapter_base_url}/datasets")
2631
respx_mocker.get(list_datasets_re, name="list_datasets").respond(
2732
status.HTTP_200_OK
2833
)
2934
respx_mocker.get(datcore_adapter_base_url, name="base_endpoint").respond(
3035
status.HTTP_200_OK, json={}
3136
)
32-
return respx_mocker
37+
yield respx_mocker

services/storage/tests/conftest.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@
5757
from pytest_simcore.helpers.typing_env import EnvVarsDict
5858
from servicelib.aiohttp import status
5959
from servicelib.utils import limited_gather
60+
from simcore_postgres_database.models.tokens import tokens
6061
from simcore_postgres_database.storage_models import file_meta_data, projects, users
6162
from simcore_service_storage.core.application import create_app
6263
from simcore_service_storage.core.settings import ApplicationSettings
64+
from simcore_service_storage.datcore_dsm import DatCoreDataManager
6365
from simcore_service_storage.dsm import get_dsm_provider
6466
from simcore_service_storage.models import FileMetaData, FileMetaDataAtDB, S3BucketName
6567
from simcore_service_storage.modules.long_running_tasks import (
@@ -242,9 +244,11 @@ def simcore_file_id(
242244
@pytest.fixture(
243245
params=[
244246
SimcoreS3DataManager.get_location_id(),
247+
DatCoreDataManager.get_location_id(),
245248
],
246249
ids=[
247250
SimcoreS3DataManager.get_location_name(),
251+
DatCoreDataManager.get_location_name(),
248252
],
249253
)
250254
def location_id(request: pytest.FixtureRequest) -> LocationID:
@@ -895,3 +899,34 @@ async def output_file(
895899
result = await conn.execute(
896900
file_meta_data.delete().where(file_meta_data.c.file_id == row.file_id)
897901
)
902+
903+
904+
@pytest.fixture
905+
async def fake_datcore_tokens(
906+
user_id: UserID, sqlalchemy_async_engine: AsyncEngine, faker: Faker
907+
) -> AsyncIterator[tuple[str, str]]:
908+
token_key = cast(str, faker.uuid4())
909+
token_secret = cast(str, faker.uuid4())
910+
created_token_ids = []
911+
async with sqlalchemy_async_engine.begin() as conn:
912+
result = await conn.execute(
913+
tokens.insert()
914+
.values(
915+
user_id=user_id,
916+
token_service="pytest", # noqa: S106
917+
token_data={
918+
"service": "pytest",
919+
"token_secret": token_secret,
920+
"token_key": token_key,
921+
},
922+
)
923+
.returning(tokens.c.token_id)
924+
)
925+
row = result.one()
926+
created_token_ids.append(row.token_id)
927+
yield token_key, token_secret
928+
929+
async with sqlalchemy_async_engine.begin() as conn:
930+
await conn.execute(
931+
tokens.delete().where(tokens.c.token_id.in_(created_token_ids))
932+
)

services/storage/tests/unit/test_handlers_locations.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,53 @@
77

88
import httpx
99
from fastapi import FastAPI, status
10+
from models_library.api_schemas_storage.storage_schemas import FileLocation
1011
from models_library.users import UserID
1112
from pytest_simcore.helpers.fastapi import url_from_operation_id
12-
from pytest_simcore.helpers.storage_utils import has_datcore_tokens
13+
from pytest_simcore.helpers.httpx_assert_checks import assert_status
14+
from simcore_service_storage.datcore_dsm import DatCoreDataManager
15+
from simcore_service_storage.simcore_s3_dsm import SimcoreS3DataManager
1316

1417
pytest_simcore_core_services_selection = ["postgres"]
1518
pytest_simcore_ops_services_selection = ["adminer"]
1619

1720

1821
async def test_locations(
19-
initialized_app: FastAPI, client: httpx.AsyncClient, user_id: UserID
22+
initialized_app: FastAPI,
23+
client: httpx.AsyncClient,
24+
user_id: UserID,
25+
fake_datcore_tokens: tuple[str, str],
2026
):
2127
url = url_from_operation_id(
2228
client, initialized_app, "list_storage_locations"
2329
).with_query(user_id=user_id)
24-
resp = await client.get(f"{url}")
25-
26-
payload = resp.json()
27-
assert resp.status_code == status.HTTP_200_OK, str(payload)
28-
29-
data, error = tuple(payload.get(k) for k in ("data", "error"))
30-
31-
_locs = 2 if has_datcore_tokens() else 1
32-
assert len(data) == _locs
33-
assert not error
30+
response = await client.get(f"{url}")
31+
data, _ = assert_status(response, status.HTTP_200_OK, list[FileLocation])
32+
assert data
33+
assert len(data) == 2
34+
assert data[0] == FileLocation(
35+
id=SimcoreS3DataManager.get_location_id(),
36+
name=SimcoreS3DataManager.get_location_name(),
37+
)
38+
assert data[1] == FileLocation(
39+
id=DatCoreDataManager.get_location_id(),
40+
name=DatCoreDataManager.get_location_name(),
41+
)
42+
43+
44+
async def test_locations_without_tokens(
45+
initialized_app: FastAPI,
46+
client: httpx.AsyncClient,
47+
user_id: UserID,
48+
):
49+
url = url_from_operation_id(
50+
client, initialized_app, "list_storage_locations"
51+
).with_query(user_id=user_id)
52+
response = await client.get(f"{url}")
53+
data, _ = assert_status(response, status.HTTP_200_OK, list[FileLocation])
54+
assert data
55+
assert len(data) == 1
56+
assert data[0] == FileLocation(
57+
id=SimcoreS3DataManager.get_location_id(),
58+
name=SimcoreS3DataManager.get_location_name(),
59+
)

0 commit comments

Comments
 (0)