From 6bf27d49aa980cda6f0ec431b886764d541dec21 Mon Sep 17 00:00:00 2001 From: Yossi Gottlieb Date: Tue, 19 May 2015 10:21:18 +0300 Subject: [PATCH 1/4] Add basic config_set / config_get support. --- mockredis/client.py | 20 ++++++++++++++++++++ mockredis/tests/test_config.py | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 mockredis/tests/test_config.py diff --git a/mockredis/client.py b/mockredis/client.py index 998d3c5..20fea37 100644 --- a/mockredis/client.py +++ b/mockredis/client.py @@ -8,6 +8,7 @@ import re import sys import time +import fnmatch from mockredis.clock import SystemClock from mockredis.lock import MockRedisLock @@ -51,6 +52,7 @@ def __init__(self, self.blocking_sleep_interval = blocking_sleep_interval # The 'Redis' store self.redis = defaultdict(dict) + self.redis_config = defaultdict(dict) self.timeouts = defaultdict(dict) # The 'PubSub' store self.pubsub = defaultdict(list) @@ -1354,6 +1356,24 @@ def _normalize_command_response(self, command, response): return response + # Config Set/Get commands # + + def config_set(self, name, value): + """ + Set a configuration parameter. + """ + self.redis_config[name] = value + + def config_get(self, pattern='*'): + """ + Get one or more configuration parameters. + """ + result = {} + for name, value in self.redis_config.items(): + if fnmatch.fnmatch(name, pattern): + result[name] = value + return result + # PubSub commands # def publish(self, channel, message): diff --git a/mockredis/tests/test_config.py b/mockredis/tests/test_config.py new file mode 100644 index 0000000..24a7f94 --- /dev/null +++ b/mockredis/tests/test_config.py @@ -0,0 +1,20 @@ +from nose.tools import eq_, ok_ + +from mockredis.tests.fixtures import setup, teardown + + +class TestRedisConfig(object): + """Redis config set/get tests""" + + def setup(self): + setup(self) + + def teardown(self): + teardown(self) + + def test_config_set(self): + eq_(self.redis.config_get('config-param'), {}) + self.redis.config_set('config-param', 'value') + eq_(self.redis.config_get('config-param'), {'config-param': 'value'}) + eq_(self.redis.config_get('config*'), {'config-param': 'value'}) + From 31223d18b0454ceaa97254650d5427af5ccd60ee Mon Sep 17 00:00:00 2001 From: Yossi Gottlieb Date: Sat, 15 Aug 2015 17:24:16 +0300 Subject: [PATCH 2/4] CONFIG GET should return int values where possible. --- mockredis/client.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mockredis/client.py b/mockredis/client.py index 20fea37..3f65ed5 100644 --- a/mockredis/client.py +++ b/mockredis/client.py @@ -1371,7 +1371,10 @@ def config_get(self, pattern='*'): result = {} for name, value in self.redis_config.items(): if fnmatch.fnmatch(name, pattern): - result[name] = value + try: + result[name] = int(value) + except ValueError: + result[name] = value return result # PubSub commands # From 7f3d910d52c110b7795201a8dad6195f7454e32a Mon Sep 17 00:00:00 2001 From: Yossi Gottlieb Date: Wed, 9 Nov 2016 12:37:55 +0200 Subject: [PATCH 3/4] Add config_set int value test. --- mockredis/tests/test_config.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mockredis/tests/test_config.py b/mockredis/tests/test_config.py index 24a7f94..47c733b 100644 --- a/mockredis/tests/test_config.py +++ b/mockredis/tests/test_config.py @@ -18,3 +18,9 @@ def test_config_set(self): eq_(self.redis.config_get('config-param'), {'config-param': 'value'}) eq_(self.redis.config_get('config*'), {'config-param': 'value'}) + def test_config_set_int_value(self): + eq_(self.redis.config_get('config-param-int'), {}) + self.redis.config_set('config-param-int', 123) + eq_(self.redis.config_get('config-param-int'), + {'config-param-int': 123}) + From 96fac04887706d8ae2a3e90b20399e16f3979475 Mon Sep 17 00:00:00 2001 From: Yossi Gottlieb Date: Thu, 16 Feb 2017 08:49:20 +0200 Subject: [PATCH 4/4] CONFIG SET/GET compatibility fixes. --- mockredis/client.py | 8 +++----- mockredis/tests/test_config.py | 17 +++++++++-------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/mockredis/client.py b/mockredis/client.py index 3f65ed5..fd5e927 100644 --- a/mockredis/client.py +++ b/mockredis/client.py @@ -1362,7 +1362,8 @@ def config_set(self, name, value): """ Set a configuration parameter. """ - self.redis_config[name] = value + self.redis_config[name] = str(value) + return True def config_get(self, pattern='*'): """ @@ -1371,10 +1372,7 @@ def config_get(self, pattern='*'): result = {} for name, value in self.redis_config.items(): if fnmatch.fnmatch(name, pattern): - try: - result[name] = int(value) - except ValueError: - result[name] = value + result[name] = value return result # PubSub commands # diff --git a/mockredis/tests/test_config.py b/mockredis/tests/test_config.py index 47c733b..0b06836 100644 --- a/mockredis/tests/test_config.py +++ b/mockredis/tests/test_config.py @@ -13,14 +13,15 @@ def teardown(self): teardown(self) def test_config_set(self): - eq_(self.redis.config_get('config-param'), {}) - self.redis.config_set('config-param', 'value') - eq_(self.redis.config_get('config-param'), {'config-param': 'value'}) - eq_(self.redis.config_get('config*'), {'config-param': 'value'}) + ok_(self.redis.config_set('loglevel', 'debug')) + eq_(self.redis.config_get('loglevel'), {'loglevel': 'debug'}) + ok_(self.redis.config_set('loglevel', 'notice')) + eq_(self.redis.config_get('loglevel'), {'loglevel': 'notice'}) + eq_(self.redis.config_get('loglev*'), {'loglevel': 'notice'}) def test_config_set_int_value(self): - eq_(self.redis.config_get('config-param-int'), {}) - self.redis.config_set('config-param-int', 123) - eq_(self.redis.config_get('config-param-int'), - {'config-param-int': 123}) + ok_(self.redis.config_set('hz', 12)) + eq_(self.redis.config_get('hz'), {'hz': '12'}) + ok_(self.redis.config_set('hz', 10)) + eq_(self.redis.config_get('hz'), {'hz': '10'})