11import asyncio
22import contextlib
3- import urllib .parse
43
54import pytest
65
98from 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-
2311class 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
0 commit comments