Skip to content

Commit abbce6a

Browse files
committed
rm app_cfg and monkeypatch_setenv_from_app_config
1 parent 927e17f commit abbce6a

File tree

8 files changed

+194
-270
lines changed

8 files changed

+194
-270
lines changed

services/web/server/tests/unit/with_dbs/01/test_groups_handlers_classifers.py

Lines changed: 38 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,50 @@
1-
# pylint:disable=unused-variable
2-
# pylint:disable=unused-argument
3-
# pylint:disable=redefined-outer-name
1+
# pylint: disable=redefined-outer-name
2+
# pylint: disable=unused-argument
3+
# pylint: disable=unused-variable
4+
# pylint: disable=too-many-arguments
45

56
import re
6-
from copy import deepcopy
77

88
import pytest
99
from aiohttp import web_exceptions
1010
from aioresponses.core import aioresponses
11-
from simcore_service_webserver.application_settings_utils import AppConfigDict
11+
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict
12+
from pytest_simcore.helpers.typing_env import EnvVarsDict
1213

1314

1415
@pytest.fixture
15-
def app_cfg(default_app_cfg: AppConfigDict, unused_tcp_port_factory):
16-
"""App's configuration used for every test in this module
17-
18-
NOTE: Overrides services/web/server/tests/unit/with_dbs/conftest.py::app_cfg to influence app setup
19-
"""
20-
cfg = deepcopy(default_app_cfg)
21-
22-
cfg["main"]["port"] = unused_tcp_port_factory()
23-
cfg["main"]["studies_access_enabled"] = True
24-
25-
exclude = {
26-
"tracing",
27-
"smtp",
28-
"storage",
29-
"activity",
30-
"diagnostics",
31-
"tags",
32-
"publications",
33-
"catalog",
34-
"computation",
35-
"products",
36-
"socketio",
37-
"resource_manager",
38-
"projects",
39-
"login",
40-
"users",
41-
}
42-
include = {
43-
"db",
44-
"rest",
45-
"groups",
46-
}
47-
48-
assert include.intersection(exclude) == set()
49-
50-
for section in include:
51-
cfg[section]["enabled"] = True
52-
for section in exclude:
53-
cfg[section]["enabled"] = False
54-
55-
# NOTE: To see logs, use pytest -s --log-cli-level=DEBUG
56-
## setup_logging(level=logging.DEBUG)
57-
58-
return cfg
16+
def app_environment(
17+
monkeypatch: pytest.MonkeyPatch,
18+
app_environment: EnvVarsDict,
19+
) -> EnvVarsDict:
20+
21+
monkeypatch.delenv("WEBSERVER_STUDIES_DISPATCHER", raising=False)
22+
app_environment.pop("WEBSERVER_STUDIES_DISPATCHER", None)
23+
24+
return app_environment | setenvs_from_dict(
25+
monkeypatch,
26+
{
27+
# exclude
28+
"WEBSERVER_ACTIVITY": "null",
29+
"WEBSERVER_CATALOG": "null",
30+
"WEBSERVER_CLUSTERS": "null",
31+
"WEBSERVER_COMPUTATION": "null",
32+
"WEBSERVER_DIAGNOSTICS": "null",
33+
"WEBSERVER_EMAIL": "null",
34+
"WEBSERVER_GARBAGE_COLLECTOR": "null",
35+
"WEBSERVER_GROUPS": "0",
36+
"WEBSERVER_LOGIN": "null",
37+
"WEBSERVER_PRODUCTS": "0",
38+
"WEBSERVER_PROJECTS": "null",
39+
"WEBSERVER_PUBLICATIONS": "0",
40+
"WEBSERVER_SOCKETIO": "0",
41+
"WEBSERVER_STORAGE": "null",
42+
"WEBSERVER_RESOURCE_MANAGER": "null",
43+
"WEBSERVER_TAGS": "0",
44+
"WEBSERVER_TRACING": "null",
45+
"WEBSERVER_USERS": "null",
46+
},
47+
)
5948

6049

6150
@pytest.mark.skip(reason="UNDER DEV: test_group_handlers")

services/web/server/tests/unit/with_dbs/01/test_statics.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
from servicelib.aiohttp import status
1717
from servicelib.aiohttp.application import create_safe_application
1818
from simcore_postgres_database.models.products import products
19-
from simcore_service_webserver._meta import API_VTAG
2019
from simcore_service_webserver.application_settings import setup_settings
2120
from simcore_service_webserver.application_settings_utils import AppConfigDict
2221
from simcore_service_webserver.db.plugin import setup_db
@@ -55,25 +54,18 @@ def client(
5554
aiohttp_client: Callable,
5655
app_cfg: AppConfigDict,
5756
postgres_db: sa.engine.Engine,
58-
monkeypatch_setenv_from_app_config: Callable,
5957
) -> TestClient:
6058
cfg = deepcopy(app_cfg)
61-
6259
port = cfg["main"]["port"]
6360

64-
assert cfg["rest"]["version"] == API_VTAG
65-
monkeypatch_setenv_from_app_config(cfg)
66-
67-
# fake config
68-
app = create_safe_application(cfg)
61+
app = create_safe_application()
6962

7063
settings = setup_settings(app)
71-
print(settings.model_dump_json(indent=1))
72-
64+
assert settings.WEBSERVER_STATICWEB
7365
setup_rest(app)
7466
setup_db(app)
7567
setup_products(app)
76-
setup_statics(app)
68+
assert setup_statics(app)
7769

7870
return event_loop.run_until_complete(
7971
aiohttp_client(app, server_kwargs={"port": port, "host": "localhost"})
Lines changed: 29 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,43 @@
11
# pylint: disable=redefined-outer-name
22
# pylint: disable=unused-argument
33
# pylint: disable=unused-variable
4-
5-
import logging
6-
from copy import deepcopy
7-
from typing import Any
8-
4+
# pylint: disable=too-many-arguments
95
import pytest
6+
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict
7+
from pytest_simcore.helpers.typing_env import EnvVarsDict
108
from simcore_postgres_database.models.users import UserRole
11-
from simcore_service_webserver.log import setup_logging
129

1310

1411
@pytest.fixture
1512
def user_role() -> UserRole:
16-
# TODO: user rights still not in place
1713
return UserRole.TESTER
1814

1915

2016
@pytest.fixture
21-
def app_cfg(default_app_cfg, unused_tcp_port_factory, monkeypatch) -> dict[str, Any]:
22-
"""App's configuration used for every test in this module
23-
24-
NOTE: Overrides services/web/server/tests/unit/with_dbs/conftest.py::app_cfg to influence app setup
25-
"""
26-
cfg = deepcopy(default_app_cfg)
27-
28-
monkeypatch.setenv("WEBSERVER_DEV_FEATURES_ENABLED", "1")
29-
30-
cfg["main"]["port"] = unused_tcp_port_factory()
31-
cfg["main"]["studies_access_enabled"] = True
32-
33-
exclude = {
34-
"activity",
35-
"clusters",
36-
"computation",
37-
"diagnostics",
38-
"garbage_collector",
39-
"groups",
40-
"publications",
41-
"smtp",
42-
"socketio",
43-
"storage",
44-
"studies_dispatcher",
45-
"tags",
46-
"tracing",
47-
}
48-
include = {
49-
"catalog",
50-
"db",
51-
"login",
52-
"meta_modeling", # MODULE UNDER TEST
53-
"products",
54-
"projects",
55-
"redis",
56-
"resource_manager",
57-
"rest",
58-
"users",
59-
"version_control",
60-
}
61-
62-
assert include.intersection(exclude) == set()
63-
64-
for section in include:
65-
cfg[section]["enabled"] = True
66-
for section in exclude:
67-
cfg[section]["enabled"] = False
68-
69-
# NOTE: To see logs, use pytest -s --log-cli-level=DEBUG
70-
setup_logging(
71-
level=logging.DEBUG,
72-
log_format_local_dev_enabled=True,
73-
logger_filter_mapping={},
74-
tracing_settings=None,
17+
def app_environment(
18+
monkeypatch: pytest.MonkeyPatch,
19+
app_environment: EnvVarsDict,
20+
) -> EnvVarsDict:
21+
return app_environment | setenvs_from_dict(
22+
monkeypatch,
23+
{
24+
# exclude
25+
"WEBSERVER_ACTIVITY": "null",
26+
"WEBSERVER_CLUSTERS": "null",
27+
"WEBSERVER_COMPUTATION": "null",
28+
"WEBSERVER_DIAGNOSTICS": "null",
29+
"WEBSERVER_GROUPS": "0",
30+
"WEBSERVER_PUBLICATIONS": "0",
31+
"WEBSERVER_GARBAGE_COLLECTOR": "null",
32+
"WEBSERVER_EMAIL": "null",
33+
"WEBSERVER_SOCKETIO": "0",
34+
"WEBSERVER_STORAGE": "null",
35+
"WEBSERVER_STUDIES_DISPATCHER": "null",
36+
"WEBSERVER_TAGS": "0",
37+
"WEBSERVER_TRACING": "null",
38+
# Module under test
39+
"WEBSERVER_DEV_FEATURES_ENABLED": "1",
40+
"WEBSERVER_VERSION_CONTROL": "1",
41+
"WEBSERVER_META_MODELING": "1",
42+
},
7543
)
76-
77-
# Enforces smallest GC in the background task
78-
cfg["resource_manager"]["garbage_collection_interval_seconds"] = 1
79-
80-
return cfg

services/web/server/tests/unit/with_dbs/03/tags/conftest.py

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22
# pylint:disable=unused-argument
33
# pylint:disable=redefined-outer-name
44

5+
import asyncio
56
from collections.abc import AsyncIterator, Callable
67
from copy import deepcopy
78
from pathlib import Path
89

910
import pytest
1011
from aioresponses import aioresponses
12+
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict
13+
from pytest_simcore.helpers.typing_env import EnvVarsDict
1114
from pytest_simcore.helpers.webserver_login import UserInfoDict
1215
from pytest_simcore.helpers.webserver_projects import NewProject, delete_all_projects
1316
from servicelib.aiohttp.application import create_safe_application
1417
from simcore_service_webserver.application_settings import setup_settings
18+
from simcore_service_webserver.application_settings_utils import AppConfigDict
1519
from simcore_service_webserver.db.plugin import setup_db
1620
from simcore_service_webserver.director_v2.plugin import setup_director_v2
1721
from simcore_service_webserver.login.plugin import setup_login
@@ -34,33 +38,45 @@
3438
DEFAULT_GARBAGE_COLLECTOR_DELETION_TIMEOUT_SECONDS: int = 3
3539

3640

41+
@pytest.fixture
42+
def app_environment(
43+
monkeypatch: pytest.MonkeyPatch,
44+
app_environment: EnvVarsDict,
45+
) -> EnvVarsDict:
46+
# NOTE: undos some app_environment settings
47+
monkeypatch.delenv("WEBSERVER_GARBAGE_COLLECTOR", raising=False)
48+
app_environment.pop("WEBSERVER_GARBAGE_COLLECTOR", None)
49+
50+
return app_environment | setenvs_from_dict(
51+
monkeypatch,
52+
{
53+
# reduce deletion delay
54+
"RESOURCE_MANAGER_RESOURCE_TTL_S": f"{DEFAULT_GARBAGE_COLLECTOR_INTERVAL_SECONDS}",
55+
# increase speed of garbage collection
56+
"GARBAGE_COLLECTOR_INTERVAL_S": f"{DEFAULT_GARBAGE_COLLECTOR_DELETION_TIMEOUT_SECONDS}",
57+
},
58+
)
59+
60+
3761
@pytest.fixture
3862
def client(
39-
event_loop,
40-
aiohttp_client,
41-
app_cfg,
63+
event_loop: asyncio.AbstractEventLoop,
64+
aiohttp_client: Callable,
65+
app_cfg: AppConfigDict,
66+
app_environment: EnvVarsDict,
4267
postgres_db,
4368
mocked_dynamic_services_interface,
4469
mock_orphaned_services,
4570
redis_client, # this ensure redis is properly cleaned
46-
monkeypatch_setenv_from_app_config: Callable,
4771
):
48-
# config app
49-
cfg = deepcopy(app_cfg)
50-
port = cfg["main"]["port"]
51-
cfg["projects"]["enabled"] = True
52-
cfg["resource_manager"][
53-
"garbage_collection_interval_seconds"
54-
] = DEFAULT_GARBAGE_COLLECTOR_INTERVAL_SECONDS # increase speed of garbage collection
55-
cfg["resource_manager"][
56-
"resource_deletion_timeout_seconds"
57-
] = DEFAULT_GARBAGE_COLLECTOR_DELETION_TIMEOUT_SECONDS # reduce deletion delay
58-
59-
monkeypatch_setenv_from_app_config(cfg)
72+
app = create_safe_application()
6073

61-
app = create_safe_application(cfg)
74+
assert "WEBSERVER_GARBAGE_COLLECTOR" not in app_environment
6275

63-
assert setup_settings(app)
76+
settings = setup_settings(app)
77+
assert settings.WEBSERVER_GARBAGE_COLLECTOR is not None
78+
assert settings.WEBSERVER_PROJECTS is not None
79+
assert settings.WEBSERVER_TAGS is not None
6480

6581
# setup app
6682
setup_db(app)
@@ -71,14 +87,16 @@ def client(
7187
setup_resource_manager(app)
7288
setup_socketio(app)
7389
setup_director_v2(app)
74-
setup_tags(app)
75-
assert setup_projects(app)
90+
assert setup_tags(app)
91+
setup_projects(app)
7692
setup_products(app)
7793
setup_wallets(app)
7894

7995
# server and client
8096
return event_loop.run_until_complete(
81-
aiohttp_client(app, server_kwargs={"port": port, "host": "localhost"})
97+
aiohttp_client(
98+
app, server_kwargs={"port": app_cfg["main"]["port"], "host": "localhost"}
99+
)
82100
)
83101

84102
# teardown here ...

0 commit comments

Comments
 (0)