Skip to content

Commit

Permalink
Fix config
Browse files Browse the repository at this point in the history
  • Loading branch information
cunla committed May 19, 2023
1 parent 5517976 commit 6ce5dea
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 23 deletions.
28 changes: 13 additions & 15 deletions test/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Callable
from typing import Callable, Union

import pytest
import pytest_asyncio
Expand All @@ -9,14 +9,15 @@


@pytest_asyncio.fixture(scope="session")
def is_redis_running():
def real_redis_version() -> Union[None, str]:
"""Returns server version or None if server is not running"""
client = None
try:
client = redis.StrictRedis('localhost', port=6379)
client.ping()
return True
server_version = client.info()['redis_version']
return server_version
except redis.ConnectionError:
return False
return None
finally:
if hasattr(client, 'close'):
client.close() # Absent in older versions of redis-py
Expand Down Expand Up @@ -62,27 +63,24 @@ def _marker_version_value(request, marker_name: str):
)
def _create_redis(request) -> Callable[[int], redis.Redis]:
cls_name = request.param
if (not cls_name.startswith('Fake')
and not request.getfixturevalue('is_redis_running')):
server_version = request.getfixturevalue('real_redis_version')
if not cls_name.startswith('Fake') and not server_version:
pytest.skip('Redis is not running')
min_server = _marker_version_value(request, 'min_server')
max_server = _marker_version_value(request, 'max_server')
if Version(server_version) < min_server:
pytest.skip(f'Redis server {min_server.base_version} or more required but {server_version} found')
if Version(server_version) > max_server:
pytest.skip(f'Redis server {max_server.base_version} or less required but {server_version} found')
decode_responses = request.node.get_closest_marker('decode_responses') is not None

def factory(db=0):
if cls_name.startswith('Fake'):
fake_server = request.getfixturevalue('fake_server')
cls = getattr(fakeredis, cls_name)
return cls(db=db, decode_responses=decode_responses, server=fake_server)

# Real
cls = getattr(redis, cls_name)
conn = cls('localhost', port=6379, db=db, decode_responses=decode_responses)
server_version = conn.info()['redis_version']
if Version(server_version) < min_server:
pytest.skip(f'Redis server {min_server.base_version} or more required but {server_version} found')
if Version(server_version) > max_server:
pytest.skip(f'Redis server {max_server.base_version} or less required but {server_version} found')
return conn
return cls('localhost', port=6379, db=db, decode_responses=decode_responses)

return factory
14 changes: 6 additions & 8 deletions test/test_redis_asyncio.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
pytestmark.extend([
pytest.mark.asyncio,
])
server_version = None


@pytest_asyncio.fixture(
Expand All @@ -38,21 +37,20 @@
]
)
async def _req_aioredis2(request) -> redis.asyncio.Redis:
global server_version
server_version = request.getfixturevalue('real_redis_version')
min_server_marker = _marker_version_value(request, 'min_server')
max_server_marker = _marker_version_value(request, 'max_server')
if Version(server_version) < min_server_marker:
pytest.skip(f'Redis server {min_server_marker.base_version} or more required but {server_version} found')
if Version(server_version) > max_server_marker:
pytest.skip(f'Redis server {max_server_marker.base_version} or less required but {server_version} found')
if request.param == 'fake':
fake_server = request.getfixturevalue('fake_server')
ret = aioredis.FakeRedis(server=fake_server)
else:
if not request.getfixturevalue('is_redis_running'):
if not server_version:
pytest.skip('Redis is not running')
ret = redis.asyncio.Redis()
server_version = server_version or (await ret.info())['redis_version']
if Version(server_version) < min_server_marker:
pytest.skip(f'Redis server {min_server_marker.base_version} or more required but {server_version} found')
if Version(server_version) > max_server_marker:
pytest.skip(f'Redis server {max_server_marker.base_version} or less required but {server_version} found')
fake_server = None
if not fake_server or fake_server.connected:
await ret.flushall()
Expand Down

0 comments on commit 6ce5dea

Please sign in to comment.