Skip to content

Commit fa915f2

Browse files
authored
fix(redis): Prevent redis service from always using server isolation mode (#96)
1 parent 3c4351f commit fa915f2

File tree

4 files changed

+22
-43
lines changed

4 files changed

+22
-43
lines changed

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ dev = [
8484
"pytest-mock",
8585
"pytest-click",
8686
"pytest-xdist",
87-
"pytest-sugar",
8887
"slotscheck",
8988
"psycopg-binary", # This fixes tests failing on M series CPUs.
9089
# lint

src/pytest_databases/docker/redis.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ def redis_service(
6262
db = 0
6363
if worker_num is not None:
6464
if xdist_redis_isolation_level == "database":
65-
container_num = worker_num // 1
66-
name += f"_{container_num + 1}"
6765
db = worker_num
6866
else:
6967
name += f"_{worker_num + 1}"
@@ -94,8 +92,6 @@ def dragonfly_service(
9492
db = 0
9593
if worker_num is not None:
9694
if xdist_redis_isolation_level == "database":
97-
container_num = worker_num // 1
98-
name += f"_{container_num + 1}"
9995
db = worker_num
10096
else:
10197
name += f"_{worker_num + 1}"
@@ -136,8 +132,6 @@ def keydb_service(
136132
db = 0
137133
if worker_num is not None:
138134
if xdist_redis_isolation_level == "database":
139-
container_num = worker_num // 1
140-
name += f"_{container_num + 1}"
141135
db = worker_num
142136
else:
143137
name += f"_{worker_num + 1}"

tests/test_redis.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def redis_image():
4646
return "{redis_image_name}"
4747
4848
def test_redis_service(redis_service: RedisService) -> None:
49-
assert redis.Redis.from_url("redis://", host=redis_service.host, port=redis_service.port).ping()
49+
assert redis.Redis(host=redis_service.host, port=redis_service.port).ping()
5050
""")
5151
result = pytester.runpytest()
5252
result.assert_outcomes(passed=1)
@@ -64,7 +64,7 @@ def test_default_no_xdist(pytester: pytest.Pytester, redis_compatible_service: s
6464
]
6565
6666
def test_redis_service({redis_compatible_service}: RedisService) -> None:
67-
assert redis.Redis.from_url("redis://", host={redis_compatible_service}.host, port={redis_compatible_service}.port).ping()
67+
assert redis.Redis(host={redis_compatible_service}.host, port={redis_compatible_service}.port).ping()
6868
""")
6969
result = pytester.runpytest()
7070
result.assert_outcomes(passed=1)
@@ -82,20 +82,31 @@ def test_xdist_isolate_database(pytester: pytest.Pytester, redis_compatible_serv
8282
]
8383
8484
def test_one({redis_compatible_service}: RedisService) -> None:
85-
client = redis.Redis.from_url("redis://", host={redis_compatible_service}.host, port={redis_compatible_service}.port, db={redis_compatible_service}.db)
86-
assert not client.get("one")
87-
client.set("one", "1")
85+
client = redis.Redis(host={redis_compatible_service}.host, port={redis_compatible_service}.port, db={redis_compatible_service}.db)
8886
assert {redis_compatible_service}.db == get_xdist_worker_num()
87+
assert not client.get("one")
88+
client.set("one", "0")
89+
assert client.get("one") == b"0"
8990
9091
9192
def test_two({redis_compatible_service}: RedisService) -> None:
92-
client = redis.Redis.from_url("redis://", host={redis_compatible_service}.host, port={redis_compatible_service}.port, db={redis_compatible_service}.db)
93+
client = redis.Redis(host={redis_compatible_service}.host, port={redis_compatible_service}.port, db={redis_compatible_service}.db)
94+
assert {redis_compatible_service}.db == get_xdist_worker_num()
9395
assert not client.get("one")
9496
client.set("one", "1")
95-
assert {redis_compatible_service}.db == get_xdist_worker_num()
97+
assert client.get("one") == b"1"
98+
99+
100+
def test_use_same_db({redis_compatible_service}: RedisService) -> None:
101+
client_0 = redis.Redis(host={redis_compatible_service}.host, port={redis_compatible_service}.port, db=0)
102+
client_1 = redis.Redis(host={redis_compatible_service}.host, port={redis_compatible_service}.port, db=1)
103+
client_0.set("foo", "0")
104+
client_1.set("foo", "1")
105+
assert client_0.get("foo") == b"0"
106+
assert client_1.get("foo") == b"1"
96107
""")
97108
result = pytester.runpytest("-n", "2")
98-
result.assert_outcomes(passed=2)
109+
result.assert_outcomes(passed=3)
99110

100111

101112
def test_xdist_isolate_server(pytester: pytest.Pytester, redis_compatible_service: str) -> None:
@@ -115,14 +126,14 @@ def xdist_redis_isolation_level():
115126
116127
117128
def test_one({redis_compatible_service}: RedisService) -> None:
118-
client = redis.Redis.from_url("redis://", host={redis_compatible_service}.host, port={redis_compatible_service}.port, db={redis_compatible_service}.db)
129+
client = redis.Redis(host={redis_compatible_service}.host, port={redis_compatible_service}.port, db={redis_compatible_service}.db)
119130
assert not client.get("one")
120131
client.set("one", "1")
121132
assert {redis_compatible_service}.db == 0
122133
123134
124135
def test_two({redis_compatible_service}: RedisService) -> None:
125-
client = redis.Redis.from_url("redis://", host={redis_compatible_service}.host, port={redis_compatible_service}.port, db={redis_compatible_service}.db)
136+
client = redis.Redis(host={redis_compatible_service}.host, port={redis_compatible_service}.port, db={redis_compatible_service}.db)
126137
assert not client.get("one")
127138
client.set("one", "1")
128139
assert {redis_compatible_service}.db == 0

uv.lock

Lines changed: 1 addition & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)