Skip to content

Commit 99fc1af

Browse files
ojomioStephen Kwong
authored andcommitted
Mset should fail on empty kwargs/args (#146)
* Replicates redis library error 'wrong number of arguments for 'mset' command'
1 parent 994865c commit 99fc1af

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

mockredis/client.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -408,12 +408,15 @@ def mset(self, *args, **kwargs):
408408
Sets key/values based on a mapping. Mapping can be supplied as a single
409409
dictionary argument or as kwargs.
410410
"""
411+
mapping = kwargs
411412
if args:
412413
if len(args) != 1 or not isinstance(args[0], dict):
413414
raise RedisError('MSET requires **kwargs or a single dict arg')
414-
mapping = args[0]
415-
else:
416-
mapping = kwargs
415+
mapping.update(args[0])
416+
417+
if len(mapping) == 0:
418+
raise ResponseError("wrong number of arguments for 'mset' command")
419+
417420
for key, value in mapping.items():
418421
self.set(key, value)
419422
return True

mockredis/tests/test_string.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
from nose.tools import eq_, ok_
44

55
from mockredis.client import get_total_milliseconds
6-
from mockredis.tests.fixtures import raises_response_error, setup, teardown
6+
from mockredis.tests.fixtures import (
7+
raises_response_error,
8+
setup,
9+
teardown,
10+
)
711

812

913
class TestRedisString(object):
@@ -203,7 +207,21 @@ def test_strict_setex_zero_expiration(self):
203207
def test_mset(self):
204208
ok_(self.redis.mset({"key1": "hello", "key2": ""}))
205209
ok_(self.redis.mset(**{"key3": "world", "key2": "there"}))
206-
eq_([b"hello", b"there", b"world"], self.redis.mget("key1", "key2", "key3"))
210+
ok_(self.redis.mset(
211+
{"key4": "ican"}, **{"key4": "haz", "key5": "cheezburger"})
212+
)
213+
eq_(
214+
[b"hello", b"there", b"world", b"ican", b"cheezburger"],
215+
self.redis.mget("key1", "key2", "key3", "key4", "key5")
216+
)
217+
218+
@raises_response_error
219+
def test_mset_empty_kwargs(self):
220+
self.redis.mset(**{})
221+
222+
@raises_response_error
223+
def test_mset_empty_args(self):
224+
self.redis.mset({})
207225

208226
def test_msetnx(self):
209227
ok_(self.redis.msetnx({"key1": "hello", "key2": "there"}))

0 commit comments

Comments
 (0)