Skip to content

Commit 8ad88e5

Browse files
committed
allow additional settings in the crate_layer factory fixture
1 parent f5772a6 commit 8ad88e5

File tree

3 files changed

+36
-11
lines changed

3 files changed

+36
-11
lines changed

CHANGES.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ Changelog for pytest-crate
55
Unreleased
66
==========
77

8+
- Allow additional CrateDB settings in the ``crate_layer`` factory fixture
9+
which are applied on node start.
10+
811
- Expose addresses of started CrateDB nodes
912

1013
2019/04/05 0.1.0

pytest_crate/plugin.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ class CrateLayer:
1919
crate_dir: str
2020
tmp: str
2121

22-
def __init__(self, name: str, version: str) -> None:
22+
def __init__(self, name: str, version: str, **settings) -> None:
2323
self.name = name
2424
self.crate_dir = get_crate(version)
25+
self.settings = settings
2526

2627
def __repr__(self) -> str:
27-
return self.name
28+
return f"<CrateDB {self.name}>"
2829

2930
def __enter__(self):
3031
self._start()
@@ -34,24 +35,26 @@ def __exit__(self, exception_type, exception_value, traceback):
3435
self._stop()
3536

3637
def _start(self) -> None:
37-
print(f"Starting CrateDB {self} ...")
38+
print(f"Starting {self} ...")
3839
self.tmp = tempfile.mkdtemp()
3940
settings = {
4041
"cluster.name": self.name,
42+
"node.name": f"{self.name}-0",
4143
"path.data": self.tmp,
4244
}
45+
settings.update(self.settings)
4346
env = {"CRATE_HOME": self.crate_dir}
4447
self.node = CrateNode(
4548
crate_dir=self.crate_dir, keep_data=False, settings=settings, env=env
4649
)
4750
self.node.start()
48-
print(f"CrateDB {self} started")
51+
print(f"{self} started")
4952

5053
def _stop(self) -> None:
51-
print(f"Stopping CrateDB {self} ...")
54+
print(f"Stopping {self} ...")
5255
self.node.stop()
5356
shutil.rmtree(self.tmp, ignore_errors=True)
54-
print(f"CrateDB {self} stopped")
57+
print(f"{self} stopped")
5558

5659
def dsn(self) -> str:
5760
return self.node.http_url
@@ -92,8 +95,8 @@ def crate_version(self, pytestconfig) -> Generator[str, None, None]:
9295

9396
@pytest.fixture(scope="session")
9497
def crate_layer(self) -> CrateLayerFactoryGenerator:
95-
def layer_factory(name: str, version: str):
96-
with CrateLayer(name, version) as layer:
98+
def layer_factory(name: str, version: str, **settings):
99+
with CrateLayer(name, version, **settings) as layer:
97100
yield layer
98101
yield layer_factory
99102

tests/test_layer.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pytest
2+
from crate.client import connect
23

34

45
@pytest.fixture(scope="session")
@@ -7,8 +8,11 @@ def custom_crate_a(crate_layer):
78

89

910
@pytest.fixture(scope="session")
10-
def custom_crate_b(crate_layer):
11-
yield from crate_layer("crate_b", "3.2.x")
11+
def custom_crate_b(crate_layer, crate_version):
12+
settings = {
13+
"node.name": "custom-node-name",
14+
}
15+
yield from crate_layer("crate_b", crate_version, **settings)
1216

1317

1418
def test_crate(crate):
@@ -40,6 +44,21 @@ def test_execute(crate_execute, crate_cursor):
4044
assert crate_cursor.fetchall() == [["test_execute", 1]]
4145

4246

43-
def test_custom_crate(custom_crate_a, custom_crate_b):
47+
def test_custom_crates(custom_crate_a, custom_crate_b):
4448
assert custom_crate_a.name == "crate_a"
4549
assert custom_crate_b.name == "crate_b"
50+
51+
52+
def test_crate_with_custom_settings(custom_crate_b):
53+
assert custom_crate_b.name == "crate_b"
54+
assert custom_crate_b.settings == {
55+
"node.name": "custom-node-name",
56+
}
57+
with connect(custom_crate_b.dsn()) as conn:
58+
cursor = conn.cursor()
59+
for stmt, expected in [
60+
["SELECT name FROM sys.cluster", ["crate_b"]],
61+
["SELECT name FROM sys.nodes", ["custom-node-name"]],
62+
]:
63+
cursor.execute(stmt)
64+
assert cursor.fetchone() == expected

0 commit comments

Comments
 (0)