Skip to content

Commit 849aa77

Browse files
committed
Use a common "master_host" test fixture
1 parent 126e5fd commit 849aa77

File tree

7 files changed

+27
-69
lines changed

7 files changed

+27
-69
lines changed

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ def mock_cluster_resp_slaves(request, **kwargs):
441441
def master_host(request):
442442
url = request.config.getoption("--redis-url")
443443
parts = urlparse(url)
444-
yield parts.hostname, parts.port
444+
return parts.hostname, (parts.port or 6379)
445445

446446

447447
@pytest.fixture()

tests/test_asyncio/conftest.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import random
22
from contextlib import asynccontextmanager as _asynccontextmanager
33
from typing import Union
4-
from urllib.parse import urlparse
54

65
import pytest
76
import pytest_asyncio
@@ -209,13 +208,6 @@ async def mock_cluster_resp_slaves(create_redis, **kwargs):
209208
return _gen_cluster_mock_resp(r, response)
210209

211210

212-
@pytest_asyncio.fixture(scope="session")
213-
def master_host(request):
214-
url = request.config.getoption("--redis-url")
215-
parts = urlparse(url)
216-
return parts.hostname
217-
218-
219211
async def wait_for_command(
220212
client: redis.Redis, monitor: Monitor, command: str, key: Union[str, None] = None
221213
):

tests/test_asyncio/test_cluster.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,6 @@ async def pipe(
102102
await writer.drain()
103103

104104

105-
@pytest.fixture
106-
def redis_addr(request):
107-
redis_url = request.config.getoption("--redis-url")
108-
scheme, netloc = urlparse(redis_url)[:2]
109-
assert scheme == "redis"
110-
if ":" in netloc:
111-
host, port = netloc.split(":")
112-
return host, int(port)
113-
else:
114-
return netloc, 6379
115-
116-
117105
@pytest_asyncio.fixture()
118106
async def slowlog(r: RedisCluster) -> None:
119107
"""
@@ -874,15 +862,16 @@ async def test_default_node_is_replaced_after_exception(self, r):
874862
# Rollback to the old default node
875863
r.replace_default_node(curr_default_node)
876864

877-
async def test_address_remap(self, create_redis, redis_addr):
865+
async def test_address_remap(self, create_redis, master_host):
878866
"""Test that we can create a rediscluster object with
879867
a host-port remapper and map connections through proxy objects
880868
"""
881869

882870
# we remap the first n nodes
883871
offset = 1000
884872
n = 6
885-
ports = [redis_addr[1] + i for i in range(n)]
873+
hostname, master_port = master_host
874+
ports = [master_port + i for i in range(n)]
886875

887876
def address_remap(address):
888877
# remap first three nodes to our local proxy
@@ -895,8 +884,7 @@ def address_remap(address):
895884

896885
# create the proxies
897886
proxies = [
898-
NodeProxy(("127.0.0.1", port + offset), (redis_addr[0], port))
899-
for port in ports
887+
NodeProxy(("127.0.0.1", port + offset), (hostname, port)) for port in ports
900888
]
901889
await asyncio.gather(*[p.start() for p in proxies])
902890
try:

tests/test_asyncio/test_connection_pool.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,14 @@ async def test_connection_creation(self):
136136
assert connection.kwargs == connection_kwargs
137137

138138
async def test_multiple_connections(self, master_host):
139-
connection_kwargs = {"host": master_host}
139+
connection_kwargs = {"host": master_host[0]}
140140
async with self.get_pool(connection_kwargs=connection_kwargs) as pool:
141141
c1 = await pool.get_connection("_")
142142
c2 = await pool.get_connection("_")
143143
assert c1 != c2
144144

145145
async def test_max_connections(self, master_host):
146-
connection_kwargs = {"host": master_host}
146+
connection_kwargs = {"host": master_host[0]}
147147
async with self.get_pool(
148148
max_connections=2, connection_kwargs=connection_kwargs
149149
) as pool:
@@ -153,7 +153,7 @@ async def test_max_connections(self, master_host):
153153
await pool.get_connection("_")
154154

155155
async def test_reuse_previously_released_connection(self, master_host):
156-
connection_kwargs = {"host": master_host}
156+
connection_kwargs = {"host": master_host[0]}
157157
async with self.get_pool(connection_kwargs=connection_kwargs) as pool:
158158
c1 = await pool.get_connection("_")
159159
await pool.release(c1)
@@ -237,7 +237,7 @@ async def test_multiple_connections(self, master_host):
237237

238238
async def test_connection_pool_blocks_until_timeout(self, master_host):
239239
"""When out of connections, block for timeout seconds, then raise"""
240-
connection_kwargs = {"host": master_host}
240+
connection_kwargs = {"host": master_host[0]}
241241
async with self.get_pool(
242242
max_connections=1, timeout=0.1, connection_kwargs=connection_kwargs
243243
) as pool:
@@ -270,7 +270,7 @@ async def target():
270270
assert asyncio.get_running_loop().time() - start >= 0.1
271271

272272
async def test_reuse_previously_released_connection(self, master_host):
273-
connection_kwargs = {"host": master_host}
273+
connection_kwargs = {"host": master_host[0]}
274274
async with self.get_pool(connection_kwargs=connection_kwargs) as pool:
275275
c1 = await pool.get_connection("_")
276276
await pool.release(c1)

tests/test_asyncio/test_cwe_404.py

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import asyncio
22
import contextlib
3-
import urllib.parse
43

54
import pytest
65

@@ -9,23 +8,14 @@
98
from redis.asyncio.connection import async_timeout
109

1110

12-
@pytest.fixture
13-
def redis_addr(request):
14-
redis_url = request.config.getoption("--redis-url")
15-
scheme, netloc = urllib.parse.urlparse(redis_url)[:2]
16-
assert scheme == "redis"
17-
if ":" in netloc:
18-
return netloc.split(":")
19-
else:
20-
return netloc, "6379"
21-
22-
2311
class DelayProxy:
2412
def __init__(self, addr, redis_addr, delay: float = 0.0):
2513
self.addr = addr
2614
self.redis_addr = redis_addr
2715
self.delay = delay
2816
self.send_event = asyncio.Event()
17+
self.server = None
18+
self.task = None
2919

3020
async def __aenter__(self):
3121
await self.start()
@@ -42,7 +32,7 @@ async def start(self):
4232
self.server = await asyncio.start_server(
4333
self.handle, *self.addr, reuse_address=True
4434
)
45-
self.ROUTINE = asyncio.create_task(self.server.serve_forever())
35+
self.task = asyncio.create_task(self.server.serve_forever())
4636

4737
@contextlib.contextmanager
4838
def set_delay(self, delay: float = 0.0):
@@ -71,9 +61,9 @@ async def handle(self, reader, writer):
7161

7262
async def stop(self):
7363
# clean up enough so that we can reuse the looper
74-
self.ROUTINE.cancel()
64+
self.task.cancel()
7565
try:
76-
await self.ROUTINE
66+
await self.task
7767
except asyncio.CancelledError:
7868
pass
7969
loop = self.server.get_loop()
@@ -100,11 +90,11 @@ async def pipe(
10090

10191
@pytest.mark.onlynoncluster
10292
@pytest.mark.parametrize("delay", argvalues=[0.05, 0.5, 1, 2])
103-
async def test_standalone(delay, redis_addr):
93+
async def test_standalone(delay, master_host):
10494

10595
# create a tcp socket proxy that relays data to Redis and back,
10696
# inserting 0.1 seconds of delay
107-
async with DelayProxy(addr=("127.0.0.1", 5380), redis_addr=redis_addr) as dp:
97+
async with DelayProxy(addr=("127.0.0.1", 5380), redis_addr=master_host) as dp:
10898

10999
for b in [True, False]:
110100
# note that we connect to proxy, rather than to Redis directly
@@ -141,8 +131,8 @@ async def op(r):
141131
@pytest.mark.xfail(reason="cancel does not cause disconnect")
142132
@pytest.mark.onlynoncluster
143133
@pytest.mark.parametrize("delay", argvalues=[0.05, 0.5, 1, 2])
144-
async def test_standalone_pipeline(delay, redis_addr):
145-
async with DelayProxy(addr=("127.0.0.1", 5380), redis_addr=redis_addr) as dp:
134+
async def test_standalone_pipeline(delay, master_host):
135+
async with DelayProxy(addr=("127.0.0.1", 5380), redis_addr=master_host) as dp:
146136
for b in [True, False]:
147137
async with Redis(
148138
host="127.0.0.1", port=5380, single_connection_client=b
@@ -191,12 +181,13 @@ async def op(pipe):
191181

192182

193183
@pytest.mark.onlycluster
194-
async def test_cluster(request, redis_addr):
184+
async def test_cluster(master_host):
195185

196186
delay = 0.1
197187
cluster_port = 6372
198188
remap_base = 7372
199189
n_nodes = 6
190+
hostname, _ = master_host
200191

201192
def remap(address):
202193
host, port = address
@@ -206,7 +197,7 @@ def remap(address):
206197
for i in range(n_nodes):
207198
port = cluster_port + i
208199
remapped = remap_base + i
209-
forward_addr = redis_addr[0], port
200+
forward_addr = hostname, port
210201
proxy = DelayProxy(addr=("127.0.0.1", remapped), redis_addr=forward_addr)
211202
proxies.append(proxy)
212203

tests/test_asyncio/test_sentinel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
@pytest_asyncio.fixture(scope="module")
1717
def master_ip(master_host):
18-
yield socket.gethostbyname(master_host)
18+
yield socket.gethostbyname(master_host[0])
1919

2020

2121
class SentinelTestClient:

tests/test_cluster.py

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from queue import LifoQueue, Queue
99
from time import sleep
1010
from unittest.mock import DEFAULT, Mock, call, patch
11-
from urllib.parse import urlparse
1211

1312
import pytest
1413

@@ -125,18 +124,6 @@ def close(self):
125124
self.server.shutdown()
126125

127126

128-
@pytest.fixture
129-
def redis_addr(request):
130-
redis_url = request.config.getoption("--redis-url")
131-
scheme, netloc = urlparse(redis_url)[:2]
132-
assert scheme == "redis"
133-
if ":" in netloc:
134-
host, port = netloc.split(":")
135-
return host, int(port)
136-
else:
137-
return netloc, 6379
138-
139-
140127
@pytest.fixture()
141128
def slowlog(request, r):
142129
"""
@@ -907,15 +894,16 @@ def raise_connection_error():
907894
assert "myself" not in nodes.get(curr_default_node.name).get("flags")
908895
assert r.get_default_node() != curr_default_node
909896

910-
def test_address_remap(self, request, redis_addr):
897+
def test_address_remap(self, request, master_host):
911898
"""Test that we can create a rediscluster object with
912899
a host-port remapper and map connections through proxy objects
913900
"""
914901

915902
# we remap the first n nodes
916903
offset = 1000
917904
n = 6
918-
ports = [redis_addr[1] + i for i in range(n)]
905+
hostname, master_port = master_host
906+
ports = [master_port + i for i in range(n)]
919907

920908
def address_remap(address):
921909
# remap first three nodes to our local proxy
@@ -928,8 +916,7 @@ def address_remap(address):
928916

929917
# create the proxies
930918
proxies = [
931-
NodeProxy(("127.0.0.1", port + offset), (redis_addr[0], port))
932-
for port in ports
919+
NodeProxy(("127.0.0.1", port + offset), (hostname, port)) for port in ports
933920
]
934921
for p in proxies:
935922
p.start()

0 commit comments

Comments
 (0)