Skip to content

Commit 94e0a4c

Browse files
authored
Use session-wide containers for session and db (#1157)
avoid restarting containers on switching packages
1 parent af04dfa commit 94e0a4c

4 files changed

Lines changed: 21 additions & 38 deletions

File tree

tests/integration/conftest.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def _current_container_id() -> Optional[str]:
9191
return str(container.id)
9292

9393

94-
@pytest.fixture(scope="package")
94+
@pytest.fixture(scope="session")
9595
def network() -> Generator[Network, None, None]:
9696
with Network() as network:
9797
self_id = _current_container_id()
@@ -297,7 +297,7 @@ def create_arrow_client(session_uri: GdsSessionConnectionInfo) -> AuthenticatedA
297297
)
298298

299299

300-
@pytest.fixture(scope="package")
300+
@pytest.fixture(scope="session")
301301
def session_connection(
302302
network: Network,
303303
tmp_path_factory: pytest.TempPathFactory,
@@ -341,7 +341,7 @@ def start_database(
341341

342342
advertise_address = "neo4j-db" if inside_ci() else "localhost"
343343

344-
db_logs_dir = logs_dir / request.node.name / "db_logs"
344+
db_logs_dir = logs_dir / request.node.name / "neo4j_db_logs"
345345
db_logs_dir.mkdir(parents=True, exist_ok=True)
346346
db_logs_dir.chmod(0o777)
347347
db_container = (
@@ -387,6 +387,18 @@ def create_db_query_runner(neo4j_connection: DbmsConnectionInfo) -> Generator[Ne
387387
query_runner.close()
388388

389389

390+
@pytest.fixture(scope="session")
391+
def neo4j_connection(
392+
network: Network, logs_dir: Path, request: pytest.FixtureRequest
393+
) -> Generator[DbmsConnectionInfo, None, None]:
394+
"""Shared plain Neo4j (no GDS) database, reused across all packages that need a bare DB.
395+
396+
Packages that need a Neo4j+GDS-plugin database instead override this fixture (see
397+
procedure_surface/plugin/conftest.py).
398+
"""
399+
yield from start_database(logs_dir, network, request)
400+
401+
390402
# --------------------------------------------------------------------------- #
391403
# Neo4j + GDS plugin container
392404
# --------------------------------------------------------------------------- #
@@ -403,8 +415,8 @@ def start_gds_plugin_database(
403415
if GDS_LICENSE_KEY is None:
404416
raise ValueError("Trying to start a Plugin database, but no GDS_LICENSE_KEY environment variable was set")
405417

406-
db_logs_dir = logs_dir / request.node.name / "db_logs"
407-
db_logs_dir.mkdir(parents=True)
418+
db_logs_dir = logs_dir / request.node.name / "gds_plugin_db_logs"
419+
db_logs_dir.mkdir(parents=True, exist_ok=True)
408420
db_logs_dir.chmod(0o777)
409421

410422
models_dir = tmp_path_factory.mktemp("models")
@@ -475,7 +487,7 @@ def create_gds_arrow_client(container: Neo4jContainer) -> Generator[GdsArrowClie
475487
yield client
476488

477489

478-
@pytest.fixture(scope="package")
490+
@pytest.fixture(scope="session")
479491
def gds_plugin_container(
480492
logs_dir: Path, tmp_path_factory: pytest.TempPathFactory, request: pytest.FixtureRequest
481493
) -> Generator[Neo4jContainer, None, None]:

tests/integration/procedure_surface/conftest.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55
from typing import Generator
66

77
import pytest
8-
from testcontainers.core.network import Network
98

109
from graphdatascience.query_runner import QueryRunner
1110
from graphdatascience.session.dbms_connection_info import DbmsConnectionInfo
12-
from tests.integration.conftest import create_db_query_runner, start_database
11+
from tests.integration.conftest import create_db_query_runner
1312
from tests.integration.procedure_surface.gds_api_spec import (
1413
EndpointWithModesSpec,
1514
resolve_spec_from_file,
@@ -61,13 +60,6 @@ def download_gds_api_spec(destination: Path) -> None:
6160
f.write(response.content)
6261

6362

64-
@pytest.fixture(scope="package")
65-
def neo4j_connection(
66-
network: Network, logs_dir: Path, request: pytest.FixtureRequest
67-
) -> Generator[DbmsConnectionInfo, None, None]:
68-
yield from start_database(logs_dir, network, request)
69-
70-
7163
@pytest.fixture(scope="package")
7264
def query_runner(neo4j_connection: DbmsConnectionInfo) -> Generator[QueryRunner, None, None]:
7365
yield from create_db_query_runner(neo4j_connection)

tests/integration/query_runner/conftest.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
1-
from pathlib import Path
21
from typing import Generator
32

43
import pytest
5-
from testcontainers.core.network import Network
64

75
from graphdatascience.query_runner.neo4j_query_runner import Neo4jQueryRunner
86
from graphdatascience.session.dbms_connection_info import DbmsConnectionInfo
9-
from tests.integration.conftest import create_db_query_runner, start_database
10-
11-
12-
@pytest.fixture(scope="package")
13-
def neo4j_connection(
14-
network: Network, logs_dir: Path, request: pytest.FixtureRequest
15-
) -> Generator[DbmsConnectionInfo, None, None]:
16-
yield from start_database(logs_dir, network, request)
7+
from tests.integration.conftest import create_db_query_runner
178

189

1910
@pytest.fixture(scope="package")

tests/integration/session/conftest.py

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,10 @@
1-
from pathlib import Path
21
from typing import Generator
32

43
import pytest
5-
from testcontainers.core.network import Network
64

75
from graphdatascience.query_runner.neo4j_query_runner import Neo4jQueryRunner
86
from graphdatascience.session.dbms_connection_info import DbmsConnectionInfo
9-
from tests.integration.conftest import (
10-
create_db_query_runner,
11-
start_database,
12-
)
13-
14-
15-
@pytest.fixture(scope="package")
16-
def neo4j_connection(
17-
network: Network, logs_dir: Path, request: pytest.FixtureRequest
18-
) -> Generator[DbmsConnectionInfo, None, None]:
19-
yield from start_database(logs_dir, network, request)
7+
from tests.integration.conftest import create_db_query_runner
208

219

2210
@pytest.fixture(scope="package")

0 commit comments

Comments
 (0)