Skip to content

Commit 6a293e6

Browse files
authored
Fixes to allow --redis-url to pass through all tests (#1700)
1 parent ec172e7 commit 6a293e6

File tree

6 files changed

+97
-16
lines changed

6 files changed

+97
-16
lines changed

tests/conftest.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ def pytest_addoption(parser):
3131
def _get_info(redis_url):
3232
client = redis.Redis.from_url(redis_url)
3333
info = client.info()
34+
try:
35+
client.execute_command("CONFIG SET maxmemory 5555555")
36+
client.execute_command("CONFIG SET maxmemory 0")
37+
info["enterprise"] = False
38+
except redis.exceptions.ResponseError:
39+
info["enterprise"] = True
3440
client.connection_pool.disconnect()
3541
return info
3642

@@ -42,6 +48,7 @@ def pytest_sessionstart(session):
4248
arch_bits = info["arch_bits"]
4349
REDIS_INFO["version"] = version
4450
REDIS_INFO["arch_bits"] = arch_bits
51+
REDIS_INFO["enterprise"] = info["enterprise"]
4552

4653
# module info, if the second redis is running
4754
try:
@@ -92,6 +99,17 @@ def skip_ifmodversion_lt(min_version: str, module_name: str):
9299
raise AttributeError("No redis module named {}".format(module_name))
93100

94101

102+
def skip_if_redis_enterprise(func):
103+
check = REDIS_INFO["enterprise"] is True
104+
return pytest.mark.skipif(check, reason="Redis enterprise"
105+
)
106+
107+
108+
def skip_ifnot_redis_enterprise(func):
109+
check = REDIS_INFO["enterprise"] is False
110+
return pytest.mark.skipif(check, reason="Redis enterprise")
111+
112+
95113
def _get_client(cls, request, single_connection_client=True, flushdb=True,
96114
from_url=None,
97115
**kwargs):

tests/test_commands.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
_get_client,
1414
skip_if_server_version_gte,
1515
skip_if_server_version_lt,
16+
skip_if_redis_enterprise,
1617
skip_unless_arch_bits,
1718
)
1819

@@ -80,6 +81,7 @@ def test_acl_cat_with_category(self, r):
8081
assert 'get' in commands
8182

8283
@skip_if_server_version_lt("6.0.0")
84+
@skip_if_redis_enterprise
8385
def test_acl_deluser(self, r, request):
8486
username = 'redis-py-user'
8587

@@ -104,6 +106,7 @@ def teardown():
104106
assert r.acl_getuser(users[4]) is None
105107

106108
@skip_if_server_version_lt("6.0.0")
109+
@skip_if_redis_enterprise
107110
def test_acl_genpass(self, r):
108111
password = r.acl_genpass()
109112
assert isinstance(password, str)
@@ -117,6 +120,7 @@ def test_acl_genpass(self, r):
117120
assert isinstance(password, str)
118121

119122
@skip_if_server_version_lt("6.0.0")
123+
@skip_if_redis_enterprise
120124
def test_acl_getuser_setuser(self, r, request):
121125
username = 'redis-py-user'
122126

@@ -210,6 +214,7 @@ def test_acl_help(self, r):
210214
assert len(res) != 0
211215

212216
@skip_if_server_version_lt("6.0.0")
217+
@skip_if_redis_enterprise
213218
def test_acl_list(self, r, request):
214219
username = 'redis-py-user'
215220

@@ -222,6 +227,7 @@ def teardown():
222227
assert len(users) == 2
223228

224229
@skip_if_server_version_lt("6.0.0")
230+
@skip_if_redis_enterprise
225231
def test_acl_log(self, r, request):
226232
username = 'redis-py-user'
227233

@@ -257,6 +263,7 @@ def teardown():
257263
assert r.acl_log_reset()
258264

259265
@skip_if_server_version_lt("6.0.0")
266+
@skip_if_redis_enterprise
260267
def test_acl_setuser_categories_without_prefix_fails(self, r, request):
261268
username = 'redis-py-user'
262269

@@ -268,6 +275,7 @@ def teardown():
268275
r.acl_setuser(username, categories=['list'])
269276

270277
@skip_if_server_version_lt("6.0.0")
278+
@skip_if_redis_enterprise
271279
def test_acl_setuser_commands_without_prefix_fails(self, r, request):
272280
username = 'redis-py-user'
273281

@@ -279,6 +287,7 @@ def teardown():
279287
r.acl_setuser(username, commands=['get'])
280288

281289
@skip_if_server_version_lt("6.0.0")
290+
@skip_if_redis_enterprise
282291
def test_acl_setuser_add_passwords_and_nopass_fails(self, r, request):
283292
username = 'redis-py-user'
284293

@@ -312,13 +321,18 @@ def test_client_info(self, r):
312321
assert 'addr' in info
313322

314323
@skip_if_server_version_lt('5.0.0')
315-
def test_client_list_type(self, r):
324+
def test_client_list_types_not_replica(self, r):
316325
with pytest.raises(exceptions.RedisError):
317326
r.client_list(_type='not a client type')
318-
for client_type in ['normal', 'master', 'replica', 'pubsub']:
327+
for client_type in ['normal', 'master', 'pubsub']:
319328
clients = r.client_list(_type=client_type)
320329
assert isinstance(clients, list)
321330

331+
@skip_if_redis_enterprise
332+
def test_client_list_replica(self, r):
333+
clients = r.client_list(_type='replica')
334+
assert isinstance(clients, list)
335+
322336
@skip_if_server_version_lt('6.2.0')
323337
def test_client_list_client_id(self, r, request):
324338
clients = r.client_list()
@@ -454,6 +468,7 @@ def test_client_kill_filter_by_laddr(self, r, r2):
454468
assert r.client_kill_filter(laddr=client_2_addr)
455469

456470
@skip_if_server_version_lt('6.0.0')
471+
@skip_if_redis_enterprise
457472
def test_client_kill_filter_by_user(self, r, request):
458473
killuser = 'user_to_kill'
459474
r.acl_setuser(killuser, enabled=True, reset=True,
@@ -467,13 +482,15 @@ def test_client_kill_filter_by_user(self, r, request):
467482
r.acl_deluser(killuser)
468483

469484
@skip_if_server_version_lt('2.9.50')
485+
@skip_if_redis_enterprise
470486
def test_client_pause(self, r):
471487
assert r.client_pause(1)
472488
assert r.client_pause(timeout=1)
473489
with pytest.raises(exceptions.RedisError):
474490
r.client_pause(timeout='not an integer')
475491

476492
@skip_if_server_version_lt('6.2.0')
493+
@skip_if_redis_enterprise
477494
def test_client_unpause(self, r):
478495
assert r.client_unpause() == b'OK'
479496

@@ -491,15 +508,18 @@ def test_client_reply(self, r, r_timeout):
491508
assert r.get('foo') == b'bar'
492509

493510
@skip_if_server_version_lt('6.0.0')
511+
@skip_if_redis_enterprise
494512
def test_client_getredir(self, r):
495513
assert isinstance(r.client_getredir(), int)
496514
assert r.client_getredir() == -1
497515

498516
def test_config_get(self, r):
499517
data = r.config_get()
500-
assert 'maxmemory' in data
501-
assert data['maxmemory'].isdigit()
518+
assert len(data.keys()) > 10
519+
# # assert 'maxmemory' in data
520+
# assert data['maxmemory'].isdigit()
502521

522+
@skip_if_redis_enterprise
503523
def test_config_resetstat(self, r):
504524
r.ping()
505525
prior_commands_processed = int(r.info()['total_commands_processed'])
@@ -508,14 +528,12 @@ def test_config_resetstat(self, r):
508528
reset_commands_processed = int(r.info()['total_commands_processed'])
509529
assert reset_commands_processed < prior_commands_processed
510530

531+
@skip_if_redis_enterprise
511532
def test_config_set(self, r):
512-
data = r.config_get()
513-
rdbname = data['dbfilename']
514-
try:
515-
assert r.config_set('dbfilename', 'redis_py_test.rdb')
516-
assert r.config_get()['dbfilename'] == 'redis_py_test.rdb'
517-
finally:
518-
assert r.config_set('dbfilename', rdbname)
533+
r.config_set('timeout', 70)
534+
assert r.config_get()['timeout'] == '70'
535+
assert r.config_set('timeout', 0)
536+
assert r.config_get()['timeout'] == '0'
519537

520538
def test_dbsize(self, r):
521539
r['a'] = 'foo'
@@ -530,8 +548,10 @@ def test_info(self, r):
530548
r['b'] = 'bar'
531549
info = r.info()
532550
assert isinstance(info, dict)
533-
assert info['db9']['keys'] == 2
551+
assert 'arch_bits' in info.keys()
552+
assert 'redis_version' in info.keys()
534553

554+
@skip_if_redis_enterprise
535555
def test_lastsave(self, r):
536556
assert isinstance(r.lastsave(), datetime.datetime)
537557

@@ -625,6 +645,7 @@ def test_time(self, r):
625645
assert isinstance(t[0], int)
626646
assert isinstance(t[1], int)
627647

648+
@skip_if_redis_enterprise
628649
def test_bgsave(self, r):
629650
assert r.bgsave()
630651
time.sleep(0.3)
@@ -2433,6 +2454,7 @@ def test_cluster_slaves(self, mock_cluster_resp_slaves):
24332454
'slaves', 'nodeid'), dict)
24342455

24352456
@skip_if_server_version_lt('3.0.0')
2457+
@skip_if_redis_enterprise
24362458
def test_readwrite(self, r):
24372459
assert r.readwrite()
24382460

@@ -3614,6 +3636,7 @@ def test_memory_usage(self, r):
36143636
assert isinstance(r.memory_usage('foo'), int)
36153637

36163638
@skip_if_server_version_lt('4.0.0')
3639+
@skip_if_redis_enterprise
36173640
def test_module_list(self, r):
36183641
assert isinstance(r.module_list(), list)
36193642
for x in r.module_list():
@@ -3626,6 +3649,7 @@ def test_command_count(self, r):
36263649
assert res >= 100
36273650

36283651
@skip_if_server_version_lt('4.0.0')
3652+
@skip_if_redis_enterprise
36293653
def test_module(self, r):
36303654
with pytest.raises(redis.exceptions.ModuleError) as excinfo:
36313655
r.module_load('/some/fake/path')
@@ -3680,6 +3704,7 @@ def test_restore_frequency(self, r):
36803704
assert r.get(key) == b'blee!'
36813705

36823706
@skip_if_server_version_lt('5.0.0')
3707+
@skip_if_redis_enterprise
36833708
def test_replicaof(self, r):
36843709
with pytest.raises(redis.ResponseError):
36853710
assert r.replicaof("NO ONE")
@@ -3756,6 +3781,7 @@ def test_22_info(self, r):
37563781
assert '6' in parsed['allocation_stats']
37573782
assert '>=256' in parsed['allocation_stats']
37583783

3784+
@skip_if_redis_enterprise
37593785
def test_large_responses(self, r):
37603786
"The PythonParser has some special cases for return values > 1MB"
37613787
# load up 5MB of data into a key

tests/test_connection_pool.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77

88
from threading import Thread
99
from redis.connection import ssl_available, to_bool
10-
from .conftest import skip_if_server_version_lt, _get_client
10+
from .conftest import (
11+
skip_if_server_version_lt,
12+
skip_if_redis_enterprise,
13+
_get_client
14+
)
1115
from .test_pubsub import wait_for_message
1216

1317

@@ -481,6 +485,7 @@ def test_on_connect_error(self):
481485
assert not pool._available_connections[0]._sock
482486

483487
@skip_if_server_version_lt('2.8.8')
488+
@skip_if_redis_enterprise
484489
def test_busy_loading_disconnects_socket(self, r):
485490
"""
486491
If Redis raises a LOADING error, the connection should be
@@ -491,6 +496,7 @@ def test_busy_loading_disconnects_socket(self, r):
491496
assert not r.connection._sock
492497

493498
@skip_if_server_version_lt('2.8.8')
499+
@skip_if_redis_enterprise
494500
def test_busy_loading_from_pipeline_immediate_command(self, r):
495501
"""
496502
BusyLoadingErrors should raise from Pipelines that execute a
@@ -506,6 +512,7 @@ def test_busy_loading_from_pipeline_immediate_command(self, r):
506512
assert not pool._available_connections[0]._sock
507513

508514
@skip_if_server_version_lt('2.8.8')
515+
@skip_if_redis_enterprise
509516
def test_busy_loading_from_pipeline(self, r):
510517
"""
511518
BusyLoadingErrors should be raised from a pipeline execution
@@ -521,6 +528,7 @@ def test_busy_loading_from_pipeline(self, r):
521528
assert not pool._available_connections[0]._sock
522529

523530
@skip_if_server_version_lt('2.8.8')
531+
@skip_if_redis_enterprise
524532
def test_read_only_error(self, r):
525533
"READONLY errors get turned in ReadOnlyError exceptions"
526534
with pytest.raises(redis.ReadOnlyError):
@@ -546,6 +554,7 @@ def test_connect_from_url_unix(self):
546554
'path=/path/to/socket,db=0',
547555
)
548556

557+
@skip_if_redis_enterprise
549558
def test_connect_no_auth_supplied_when_required(self, r):
550559
"""
551560
AuthenticationError should be raised when the server requires a
@@ -555,6 +564,7 @@ def test_connect_no_auth_supplied_when_required(self, r):
555564
r.execute_command('DEBUG', 'ERROR',
556565
'ERR Client sent AUTH, but no password is set')
557566

567+
@skip_if_redis_enterprise
558568
def test_connect_invalid_password_supplied(self, r):
559569
"AuthenticationError should be raised when sending the wrong password"
560570
with pytest.raises(redis.AuthenticationError):

tests/test_monitor.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
from .conftest import wait_for_command
1+
from .conftest import (
2+
skip_if_redis_enterprise,
3+
skip_ifnot_redis_enterprise,
4+
wait_for_command
5+
)
26

37

48
class TestMonitor:
@@ -40,6 +44,7 @@ def test_command_with_escaped_data(self, r):
4044
response = wait_for_command(r, m, 'GET foo\\\\x92')
4145
assert response['command'] == 'GET foo\\\\x92'
4246

47+
@skip_if_redis_enterprise
4348
def test_lua_script(self, r):
4449
with r.monitor() as m:
4550
script = 'return redis.call("GET", "foo")'
@@ -49,3 +54,11 @@ def test_lua_script(self, r):
4954
assert response['client_type'] == 'lua'
5055
assert response['client_address'] == 'lua'
5156
assert response['client_port'] == ''
57+
58+
@skip_ifnot_redis_enterprise
59+
def test_lua_script_in_enterprise(self, r):
60+
with r.monitor() as m:
61+
script = 'return redis.call("GET", "foo")'
62+
assert r.eval(script, 0) is None
63+
response = wait_for_command(r, m, 'GET foo')
64+
assert response is None

tests/test_pubsub.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
import redis
88
from redis.exceptions import ConnectionError
99

10-
from .conftest import _get_client, skip_if_server_version_lt
10+
from .conftest import (
11+
_get_client,
12+
skip_if_redis_enterprise,
13+
skip_if_server_version_lt
14+
)
1115

1216

1317
def wait_for_message(pubsub, timeout=0.1, ignore_subscribe_messages=False):
@@ -528,6 +532,7 @@ def test_send_pubsub_ping_message(self, r):
528532
class TestPubSubConnectionKilled:
529533

530534
@skip_if_server_version_lt('3.0.0')
535+
@skip_if_redis_enterprise
531536
def test_connection_error_raised_when_connection_dies(self, r):
532537
p = r.pubsub()
533538
p.subscribe('foo')

0 commit comments

Comments
 (0)