Skip to content

Commit 94ae3e0

Browse files
Fix resource usage and cleanup Mocks in the unit tests (#2936)
* Fix resource missing awaits in test_cwe_404 * Unpatch mocked client after use * Fix sync unix connect test
1 parent 46b736e commit 94ae3e0

File tree

5 files changed

+36
-30
lines changed

5 files changed

+36
-30
lines changed

tests/conftest.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
import random
33
import time
44
from typing import Callable, TypeVar
5+
from unittest import mock
56
from unittest.mock import Mock
67
from urllib.parse import urlparse
78

89
import pytest
910
import redis
1011
from packaging.version import Version
1112
from redis.backoff import NoBackoff
12-
from redis.connection import parse_url
13+
from redis.connection import Connection, parse_url
1314
from redis.exceptions import RedisClusterException
1415
from redis.retry import Retry
1516

@@ -39,7 +40,6 @@ def __init__(
3940
help=None,
4041
metavar=None,
4142
):
42-
4343
_option_strings = []
4444
for option_string in option_strings:
4545
_option_strings.append(option_string)
@@ -72,7 +72,6 @@ def format_usage(self):
7272

7373

7474
def pytest_addoption(parser):
75-
7675
parser.addoption(
7776
"--redis-url",
7877
default=default_redis_url,
@@ -354,23 +353,23 @@ def sslclient(request):
354353

355354

356355
def _gen_cluster_mock_resp(r, response):
357-
connection = Mock()
356+
connection = Mock(spec=Connection)
358357
connection.retry = Retry(NoBackoff(), 0)
359358
connection.read_response.return_value = response
360-
r.connection = connection
361-
return r
359+
with mock.patch.object(r, "connection", connection):
360+
yield r
362361

363362

364363
@pytest.fixture()
365364
def mock_cluster_resp_ok(request, **kwargs):
366365
r = _get_client(redis.Redis, request, **kwargs)
367-
return _gen_cluster_mock_resp(r, "OK")
366+
yield from _gen_cluster_mock_resp(r, "OK")
368367

369368

370369
@pytest.fixture()
371370
def mock_cluster_resp_int(request, **kwargs):
372371
r = _get_client(redis.Redis, request, **kwargs)
373-
return _gen_cluster_mock_resp(r, 2)
372+
yield from _gen_cluster_mock_resp(r, 2)
374373

375374

376375
@pytest.fixture()
@@ -384,7 +383,7 @@ def mock_cluster_resp_info(request, **kwargs):
384383
"cluster_my_epoch:2\r\ncluster_stats_messages_sent:170262\r\n"
385384
"cluster_stats_messages_received:105653\r\n"
386385
)
387-
return _gen_cluster_mock_resp(r, response)
386+
yield from _gen_cluster_mock_resp(r, response)
388387

389388

390389
@pytest.fixture()
@@ -408,7 +407,7 @@ def mock_cluster_resp_nodes(request, **kwargs):
408407
"fbb23ed8cfa23f17eaf27ff7d0c410492a1093d6 172.17.0.7:7002 "
409408
"master,fail - 1447829446956 1447829444948 1 disconnected\n"
410409
)
411-
return _gen_cluster_mock_resp(r, response)
410+
yield from _gen_cluster_mock_resp(r, response)
412411

413412

414413
@pytest.fixture()
@@ -419,7 +418,7 @@ def mock_cluster_resp_slaves(request, **kwargs):
419418
"slave 19efe5a631f3296fdf21a5441680f893e8cc96ec 0 "
420419
"1447836789290 3 connected']"
421420
)
422-
return _gen_cluster_mock_resp(r, response)
421+
yield from _gen_cluster_mock_resp(r, response)
423422

424423

425424
@pytest.fixture(scope="session")

tests/test_asyncio/conftest.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from packaging.version import Version
99
from redis._parsers import _AsyncHiredisParser, _AsyncRESP2Parser
1010
from redis.asyncio.client import Monitor
11-
from redis.asyncio.connection import parse_url
11+
from redis.asyncio.connection import Connection, parse_url
1212
from redis.asyncio.retry import Retry
1313
from redis.backoff import NoBackoff
1414
from redis.utils import HIREDIS_AVAILABLE
@@ -138,23 +138,25 @@ async def decoded_r(create_redis):
138138

139139

140140
def _gen_cluster_mock_resp(r, response):
141-
connection = mock.AsyncMock()
141+
connection = mock.AsyncMock(spec=Connection)
142142
connection.retry = Retry(NoBackoff(), 0)
143143
connection.read_response.return_value = response
144-
r.connection = connection
145-
return r
144+
with mock.patch.object(r, "connection", connection):
145+
yield r
146146

147147

148148
@pytest_asyncio.fixture()
149149
async def mock_cluster_resp_ok(create_redis, **kwargs):
150150
r = await create_redis(**kwargs)
151-
return _gen_cluster_mock_resp(r, "OK")
151+
for mocked in _gen_cluster_mock_resp(r, "OK"):
152+
yield mocked
152153

153154

154155
@pytest_asyncio.fixture()
155156
async def mock_cluster_resp_int(create_redis, **kwargs):
156157
r = await create_redis(**kwargs)
157-
return _gen_cluster_mock_resp(r, 2)
158+
for mocked in _gen_cluster_mock_resp(r, 2):
159+
yield mocked
158160

159161

160162
@pytest_asyncio.fixture()
@@ -168,7 +170,8 @@ async def mock_cluster_resp_info(create_redis, **kwargs):
168170
"cluster_my_epoch:2\r\ncluster_stats_messages_sent:170262\r\n"
169171
"cluster_stats_messages_received:105653\r\n"
170172
)
171-
return _gen_cluster_mock_resp(r, response)
173+
for mocked in _gen_cluster_mock_resp(r, response):
174+
yield mocked
172175

173176

174177
@pytest_asyncio.fixture()
@@ -192,7 +195,8 @@ async def mock_cluster_resp_nodes(create_redis, **kwargs):
192195
"fbb23ed8cfa23f17eaf27ff7d0c410492a1093d6 172.17.0.7:7002 "
193196
"master,fail - 1447829446956 1447829444948 1 disconnected\n"
194197
)
195-
return _gen_cluster_mock_resp(r, response)
198+
for mocked in _gen_cluster_mock_resp(r, response):
199+
yield mocked
196200

197201

198202
@pytest_asyncio.fixture()
@@ -203,7 +207,8 @@ async def mock_cluster_resp_slaves(create_redis, **kwargs):
203207
"slave 19efe5a631f3296fdf21a5441680f893e8cc96ec 0 "
204208
"1447836789290 3 connected']"
205209
)
206-
return _gen_cluster_mock_resp(r, response)
210+
for mocked in _gen_cluster_mock_resp(r, response):
211+
yield mocked
207212

208213

209214
async def wait_for_command(

tests/test_asyncio/test_cluster.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ def cmd_init_mock(self, r: ClusterNode) -> None:
175175

176176

177177
def mock_node_resp(node: ClusterNode, response: Any) -> ClusterNode:
178-
connection = mock.AsyncMock()
178+
connection = mock.AsyncMock(spec=Connection)
179179
connection.is_connected = True
180180
connection.read_response.return_value = response
181181
while node._free:
@@ -185,7 +185,7 @@ def mock_node_resp(node: ClusterNode, response: Any) -> ClusterNode:
185185

186186

187187
def mock_node_resp_exc(node: ClusterNode, exc: Exception) -> ClusterNode:
188-
connection = mock.AsyncMock()
188+
connection = mock.AsyncMock(spec=Connection)
189189
connection.is_connected = True
190190
connection.read_response.side_effect = exc
191191
while node._free:

tests/test_asyncio/test_cwe_404.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,9 @@ def all_clear():
213213
p.send_event.clear()
214214

215215
async def wait_for_send():
216-
asyncio.wait(
217-
[p.send_event.wait() for p in proxies], return_when=asyncio.FIRST_COMPLETED
216+
await asyncio.wait(
217+
[asyncio.Task(p.send_event.wait()) for p in proxies],
218+
return_when=asyncio.FIRST_COMPLETED,
218219
)
219220

220221
@contextlib.contextmanager
@@ -228,11 +229,10 @@ def set_delay(delay: float):
228229
for p in proxies:
229230
await stack.enter_async_context(p)
230231

231-
with contextlib.closing(
232-
RedisCluster.from_url(
233-
f"redis://127.0.0.1:{remap_base}", address_remap=remap
234-
)
235-
) as r:
232+
r = RedisCluster.from_url(
233+
f"redis://127.0.0.1:{remap_base}", address_remap=remap
234+
)
235+
try:
236236
await r.initialize()
237237
await r.set("foo", "foo")
238238
await r.set("bar", "bar")
@@ -257,3 +257,5 @@ async def doit():
257257
assert await r.get("foo") == b"foo"
258258

259259
await asyncio.gather(*[doit() for _ in range(10)])
260+
finally:
261+
await r.close()

tests/test_connect.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def get_request(self):
115115
return connstream, fromaddr
116116

117117

118-
if hasattr(socket, "UnixStreamServer"):
118+
if hasattr(socketserver, "UnixStreamServer"):
119119

120120
class _RedisUDSServer(socketserver.UnixStreamServer):
121121
def __init__(self, *args, **kw) -> None:

0 commit comments

Comments
 (0)