diff options
author | Konstantin Merenkov <kmerenkov@gmail.com> | 2010-04-01 02:14:03 +0400 |
---|---|---|
committer | Konstantin Merenkov <kmerenkov@gmail.com> | 2010-04-01 02:14:03 +0400 |
commit | 9a4ee548b8066214fec0cbbb40fcd9812c3d17c7 (patch) | |
tree | b777cc23fb8dfe2d48d5c483040fde14d77f45c7 /tests/server_commands.py | |
parent | e2772738e249ea47e5424627eca28f8689ab1dd8 (diff) | |
download | redis-py-9a4ee548b8066214fec0cbbb40fcd9812c3d17c7.tar.gz |
Move towards binary-safeness of keys and values.
* Dropped support of all protocols except multi-bulk
the only protocol that yet to be released redis 2.0 is able
understand
* As a side-effect there is an 'execute_command' function exposed
to the library user. As for now it is pretty useless :)
* Added (only) two tests
Diffstat (limited to 'tests/server_commands.py')
-rw-r--r-- | tests/server_commands.py | 223 |
1 files changed, 129 insertions, 94 deletions
diff --git a/tests/server_commands.py b/tests/server_commands.py index 2811ee9..da328ac 100644 --- a/tests/server_commands.py +++ b/tests/server_commands.py @@ -4,20 +4,20 @@ import datetime from distutils.version import StrictVersion class ServerCommandsTestCase(unittest.TestCase): - + def setUp(self): self.client = redis.Redis(host='localhost', port=6379, db=9) self.client.flushdb() - + def tearDown(self): self.client.flushdb() - + # GENERAL SERVER COMMANDS def test_dbsize(self): self.client['a'] = 'foo' self.client['b'] = 'bar' self.assertEquals(self.client.dbsize(), 2) - + def test_get_and_set(self): # get and set can't be tested independently of each other self.assertEquals(self.client.get('a'), None) @@ -30,35 +30,35 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.get('byte_string'), byte_string) self.assertEquals(self.client.get('integer'), str(integer)) self.assertEquals(self.client.get('unicode_string').decode('utf-8'), unicode_string) - + def test_getitem_and_setitem(self): self.client['a'] = 'bar' self.assertEquals(self.client['a'], 'bar') - + def test_delete(self): self.assertEquals(self.client.delete('a'), False) self.client['a'] = 'foo' self.assertEquals(self.client.delete('a'), True) - + def test_delitem(self): self.client['a'] = 'foo' del self.client['a'] self.assertEquals(self.client['a'], None) - + def test_info(self): self.client['a'] = 'foo' self.client['b'] = 'bar' info = self.client.info() self.assert_(isinstance(info, dict)) self.assertEquals(info['db9']['keys'], 2) - + def test_lastsave(self): self.assert_(isinstance(self.client.lastsave(), datetime.datetime)) - + def test_ping(self): self.assertEquals(self.client.ping(), True) - - + + # KEYS def test_decr(self): self.assertEquals(self.client.decr('a'), -1) @@ -67,21 +67,21 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client['a'], '-2') self.assertEquals(self.client.decr('a', amount=5), -7) self.assertEquals(self.client['a'], '-7') - + def test_exists(self): self.assertEquals(self.client.exists('a'), False) self.client['a'] = 'foo' self.assertEquals(self.client.exists('a'), True) - + def expire(self): self.assertEquals(self.client.expire('a'), False) self.client['a'] = 'foo' self.assertEquals(self.client.expire('a'), True) - + def test_getset(self): self.assertEquals(self.client.getset('a', 'foo'), None) self.assertEquals(self.client.getset('a', 'bar'), 'foo') - + def test_incr(self): self.assertEquals(self.client.incr('a'), 1) self.assertEquals(self.client['a'], '1') @@ -89,30 +89,30 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client['a'], '2') self.assertEquals(self.client.incr('a', amount=5), 7) self.assertEquals(self.client['a'], '7') - + def test_keys(self): self.assertEquals(self.client.keys(), []) keys = set(['test_a', 'test_b', 'testc']) for key in keys: self.client[key] = 1 - self.assertEquals(set(self.client.keys(pattern='test_*')), + self.assertEquals(set(self.client.keys(pattern='test_*')), keys - set(['testc'])) self.assertEquals(set(self.client.keys(pattern='test*')), keys) - + def test_mget(self): self.assertEquals(self.client.mget(['a', 'b']), [None, None]) self.client['a'] = '1' self.client['b'] = '2' self.client['c'] = '3' - self.assertEquals(self.client.mget(['a', 'other', 'b', 'c']), + self.assertEquals(self.client.mget(['a', 'other', 'b', 'c']), ['1', None, '2', '3']) - + def test_mset(self): d = {'a': '1', 'b': '2', 'c': '3'} self.assert_(self.client.mset(d)) for k,v in d.iteritems(): self.assertEquals(self.client[k], v) - + def test_msetnx(self): d = {'a': '1', 'b': '2', 'c': '3'} self.assert_(self.client.msetnx(d)) @@ -121,33 +121,33 @@ class ServerCommandsTestCase(unittest.TestCase): for k,v in d.iteritems(): self.assertEquals(self.client[k], v) self.assertEquals(self.client['d'], None) - + def test_randomkey(self): self.assertEquals(self.client.randomkey(), None) self.client['a'] = '1' self.client['b'] = '2' self.client['c'] = '3' self.assert_(self.client.randomkey() in ('a', 'b', 'c')) - + def test_rename(self): self.client['a'] = '1' self.assert_(self.client.rename('a', 'b')) self.assertEquals(self.client['a'], None) self.assertEquals(self.client['b'], '1') - + def test_renamenx(self): self.client['a'] = '1' self.client['b'] = '2' self.assert_(not self.client.renamenx('a', 'b')) self.assertEquals(self.client['a'], '1') self.assertEquals(self.client['b'], '2') - + def test_setnx(self): self.assert_(self.client.setnx('a', '1')) self.assertEquals(self.client['a'], '1') self.assert_(not self.client.setnx('a', '2')) self.assertEquals(self.client['a'], '1') - + def test_ttl(self): self.assertEquals(self.client.ttl('a'), None) self.client['a'] = '1' @@ -156,7 +156,7 @@ class ServerCommandsTestCase(unittest.TestCase): # this could potentially fail if for some reason there's a gap of # time between these commands. self.assertEquals(self.client.ttl('a'), 10) - + def test_type(self): self.assertEquals(self.client.type('a'), 'none') self.client['a'] = '1' @@ -170,12 +170,12 @@ class ServerCommandsTestCase(unittest.TestCase): del self.client['a'] self.client.zadd('a', '1', 1) self.assertEquals(self.client.type('a'), 'zset') - + # LISTS def make_list(self, name, l): for i in l: self.client.rpush(name, i) - + def test_blpop(self): self.make_list('a', 'ab') self.make_list('b', 'cd') @@ -184,7 +184,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.blpop(['b', 'a'], timeout=1), ['a', 'a']) self.assertEquals(self.client.blpop(['b', 'a'], timeout=1), ['a', 'b']) self.assertEquals(self.client.blpop(['b', 'a'], timeout=1), None) - + def test_brpop(self): self.make_list('a', 'ab') self.make_list('b', 'cd') @@ -193,7 +193,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.brpop(['b', 'a'], timeout=1), ['a', 'b']) self.assertEquals(self.client.brpop(['b', 'a'], timeout=1), ['a', 'a']) self.assertEquals(self.client.brpop(['b', 'a'], timeout=1), None) - + def test_lindex(self): # no key self.assertEquals(self.client.lindex('a', '0'), None) @@ -206,7 +206,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.lindex('a', '0'), 'a') self.assertEquals(self.client.lindex('a', '1'), 'b') self.assertEquals(self.client.lindex('a', '2'), 'c') - + def test_llen(self): # no key self.assertEquals(self.client.llen('a'), 0) @@ -217,7 +217,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.make_list('a', 'abc') self.assertEquals(self.client.llen('a'), 3) - + def test_lpop(self): # no key self.assertEquals(self.client.lpop('a'), None) @@ -231,7 +231,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.lpop('a'), 'b') self.assertEquals(self.client.lpop('a'), 'c') self.assertEquals(self.client.lpop('a'), None) - + def test_lpush(self): # key is not a list self.client['a'] = 'b' @@ -247,7 +247,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assert_(self.client.lpush('a', 'a')) self.assertEquals(self.client.lindex('a', 0), 'a') self.assertEquals(self.client.lindex('a', 1), 'b') - + def test_lrange(self): # no key self.assertEquals(self.client.lrange('a', 0, 1), None) @@ -259,7 +259,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.make_list('a', 'abcde') self.assertEquals(self.client.lrange('a', 0, 2), ['a', 'b', 'c']) self.assertEquals(self.client.lrange('a', 2, 10), ['c', 'd', 'e']) - + def test_lrem(self): # no key self.assertEquals(self.client.lrem('a', 'foo'), 0) @@ -274,7 +274,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.lrem('a', 'a'), 3) # remove all the elements in the list means the key is deleted self.assertEquals(self.client.lrange('a', 0, 1), None) - + def test_lset(self): # no key self.assertRaises(redis.ResponseError, self.client.lset, 'a', 1, 'b') @@ -287,7 +287,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.lrange('a', 0, 2), ['a', 'b', 'c']) self.assert_(self.client.lset('a', 1, 'd')) self.assertEquals(self.client.lrange('a', 0, 2), ['a', 'd', 'c']) - + def test_ltrim(self): # no key -- TODO: Not sure why this is actually true. self.assert_(self.client.ltrim('a', 0, 2)) @@ -299,7 +299,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.make_list('a', 'abc') self.assert_(self.client.ltrim('a', 0, 1)) self.assertEquals(self.client.lrange('a', 0, 5), ['a', 'b']) - + def test_lpop(self): # no key self.assertEquals(self.client.lpop('a'), None) @@ -313,7 +313,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.lpop('a'), 'b') self.assertEquals(self.client.lpop('a'), 'c') self.assertEquals(self.client.lpop('a'), None) - + def test_rpop(self): # no key self.assertEquals(self.client.rpop('a'), None) @@ -327,7 +327,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.rpop('a'), 'b') self.assertEquals(self.client.rpop('a'), 'a') self.assertEquals(self.client.rpop('a'), None) - + def test_rpoplpush(self): # no src key self.make_list('b', ['b1']) @@ -354,7 +354,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.lrange('a', 0, 2), ['a1', 'a2']) self.assertEquals(self.client.lrange('b', 0, 4), ['a3', 'b1', 'b2', 'b3']) - + def test_rpush(self): # key is not a list self.client['a'] = 'b' @@ -370,12 +370,12 @@ class ServerCommandsTestCase(unittest.TestCase): self.assert_(self.client.rpush('a', 'b')) self.assertEquals(self.client.lindex('a', 0), 'a') self.assertEquals(self.client.lindex('a', 1), 'b') - + # Set commands def make_set(self, name, l): for i in l: self.client.sadd(name, i) - + def test_sadd(self): # key is not a set self.client['a'] = 'a' @@ -385,7 +385,7 @@ class ServerCommandsTestCase(unittest.TestCase): members = set(['a1', 'a2', 'a3']) self.make_set('a', members) self.assertEquals(self.client.smembers('a'), members) - + def test_scard(self): # key is not a set self.client['a'] = 'a' @@ -394,7 +394,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.make_set('a', 'abc') self.assertEquals(self.client.scard('a'), 3) - + def test_sdiff(self): # some key is not a set self.make_set('a', ['a1', 'a2', 'a3']) @@ -404,7 +404,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.make_set('b', ['b1', 'a2', 'b3']) self.assertEquals(self.client.sdiff(['a', 'b']), set(['a1', 'a3'])) - + def test_sdiffstore(self): # some key is not a set self.make_set('a', ['a1', 'a2', 'a3']) @@ -418,7 +418,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.assertEquals(self.client.sdiffstore('c', ['a', 'b']), 2) self.assertEquals(self.client.smembers('c'), set(['a1', 'a3'])) - + def test_sinter(self): # some key is not a set self.make_set('a', ['a1', 'a2', 'a3']) @@ -428,7 +428,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.make_set('b', ['a1', 'b2', 'a3']) self.assertEquals(self.client.sinter(['a', 'b']), set(['a1', 'a3'])) - + def test_sinterstore(self): # some key is not a set self.make_set('a', ['a1', 'a2', 'a3']) @@ -442,7 +442,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.assertEquals(self.client.sinterstore('c', ['a', 'b']), 2) self.assertEquals(self.client.smembers('c'), set(['a1', 'a3'])) - + def test_sismember(self): # key is not a set self.client['a'] = 'a' @@ -454,7 +454,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.sismember('a', 'b'), True) self.assertEquals(self.client.sismember('a', 'c'), True) self.assertEquals(self.client.sismember('a', 'd'), False) - + def test_smembers(self): # key is not a set self.client['a'] = 'a' @@ -463,7 +463,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.make_set('a', 'abc') self.assertEquals(self.client.smembers('a'), set(['a', 'b', 'c'])) - + def test_smove(self): # src key is not set self.make_set('b', ['b1', 'b2']) @@ -485,7 +485,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assert_(self.client.smove('a', 'b', 'a1')) self.assertEquals(self.client.smembers('a'), set(['a2'])) self.assertEquals(self.client.smembers('b'), set(['b1', 'b2', 'a1'])) - + def test_spop(self): # key is not set self.assertEquals(self.client.spop('a'), None) @@ -498,7 +498,7 @@ class ServerCommandsTestCase(unittest.TestCase): value = self.client.spop('a') self.assert_(value in 'abc') self.assertEquals(self.client.smembers('a'), set('abc') - set(value)) - + def test_srandmember(self): # key is not set self.assertEquals(self.client.srandmember('a'), None) @@ -509,7 +509,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.make_set('a', 'abc') self.assert_(self.client.srandmember('a') in 'abc') - + def test_srem(self): # key is not set self.assertEquals(self.client.srem('a', 'a'), False) @@ -522,7 +522,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.srem('a', 'd'), False) self.assertEquals(self.client.srem('a', 'b'), True) self.assertEquals(self.client.smembers('a'), set('ac')) - + def test_sunion(self): # some key is not a set self.make_set('a', ['a1', 'a2', 'a3']) @@ -533,7 +533,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.make_set('b', ['a1', 'b2', 'a3']) self.assertEquals(self.client.sunion(['a', 'b']), set(['a1', 'a2', 'a3', 'b2'])) - + def test_sunionstore(self): # some key is not a set self.make_set('a', ['a1', 'a2', 'a3']) @@ -548,16 +548,16 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.sunionstore('c', ['a', 'b']), 4) self.assertEquals(self.client.smembers('c'), set(['a1', 'a2', 'a3', 'b2'])) - + # SORTED SETS def make_zset(self, name, d): for k,v in d.items(): self.client.zadd(name, k, v) - + def test_zadd(self): self.make_zset('a', {'a1': 1, 'a2': 2, 'a3': 3}) self.assertEquals(self.client.zrange('a', 0, 3), ['a1', 'a2', 'a3']) - + def test_zcard(self): # key is not a zset self.client['a'] = 'a' @@ -566,7 +566,7 @@ class ServerCommandsTestCase(unittest.TestCase): # real logic self.make_zset('a', {'a1': 1, 'a2': 2, 'a3': 3}) self.assertEquals(self.client.zcard('a'), 3) - + def test_zincrby(self): # key is not a zset self.client['a'] = 'a' @@ -578,7 +578,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.zincrby('a', 'a3', amount=5), 8.0) self.assertEquals(self.client.zscore('a', 'a2'), 3.0) self.assertEquals(self.client.zscore('a', 'a3'), 8.0) - + def test_zrange(self): # key is not a zset self.client['a'] = 'a' @@ -594,8 +594,8 @@ class ServerCommandsTestCase(unittest.TestCase): [('a2', 2.0), ('a3', 3.0)]) # a non existant key should return None self.assertEquals(self.client.zrange('b', 0, 1, withscores=True), None) - - + + def test_zrangebyscore(self): # key is not a zset self.client['a'] = 'a' @@ -612,7 +612,7 @@ class ServerCommandsTestCase(unittest.TestCase): [('a2', 2.0), ('a3', 3.0), ('a4', 4.0)]) # a non existant key should return None self.assertEquals(self.client.zrangebyscore('b', 0, 1, withscores=True), None) - + def test_zrank(self): # key is not a zset self.client['a'] = 'a' @@ -625,7 +625,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.zrank('a', 'a3'), 2) self.assertEquals(self.client.zrank('a', 'a4'), 3) self.assertEquals(self.client.zrank('a', 'a5'), 4) - + def test_zrem(self): # key is not a zset self.client['a'] = 'a' @@ -637,7 +637,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.zrange('a', 0, 5), ['a1', 'a3']) self.assertEquals(self.client.zrem('a', 'b'), False) self.assertEquals(self.client.zrange('a', 0, 5), ['a1', 'a3']) - + def test_zremrangebyscore(self): # key is not a zset self.client['a'] = 'a' @@ -650,7 +650,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.zrange('a', 0, 5), ['a1', 'a5']) self.assertEquals(self.client.zremrangebyscore('a', 2, 4), 0) self.assertEquals(self.client.zrange('a', 0, 5), ['a1', 'a5']) - + def test_zrevrange(self): # key is not a zset self.client['a'] = 'a' @@ -667,7 +667,7 @@ class ServerCommandsTestCase(unittest.TestCase): [('a2', 2.0), ('a1', 1.0)]) # a non existant key should return None self.assertEquals(self.client.zrange('b', 0, 1, withscores=True), None) - + def test_zrevrank(self): # key is not a zset self.client['a'] = 'a' @@ -680,7 +680,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.zrevrank('a', 'a3'), 2) self.assertEquals(self.client.zrevrank('a', 'a4'), 3) self.assertEquals(self.client.zrevrank('a', 'a5'), 4) - + def test_zscore(self): # key is not a zset self.client['a'] = 'a' @@ -691,12 +691,12 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.zscore('a', 'a2'), 2.0) # test a non-existant member self.assertEquals(self.client.zscore('a', 'a4'), None) - + # HASHES def make_hash(self, key, d): for k,v in d.iteritems(): self.client.hset(key, k, v) - + def test_hget_and_hset(self): # key is not a hash self.client['a'] = 'a' @@ -715,7 +715,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.hget('a', 'a4'), '4') # key inside of hash that doesn't exist returns null value self.assertEquals(self.client.hget('a', 'b'), None) - + def test_hdel(self): # key is not a hash self.client['a'] = 'a' @@ -728,7 +728,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.hget('a', 'a2'), '2') self.assert_(self.client.hdel('a', 'a2')) self.assertEquals(self.client.hget('a', 'a2'), None) - + def test_hexists(self): # key is not a hash self.client['a'] = 'a' @@ -742,7 +742,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.hexists('a', 'a4'), False) self.client.hdel('a', 'a1') self.assertEquals(self.client.hexists('a', 'a1'), False) - + def test_hgetall(self): # key is not a hash self.client['a'] = 'a' @@ -755,7 +755,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.make_hash('a', h) remote_hash = self.client.hgetall('a') self.assertEquals(h, remote_hash) - + def test_hincrby(self): # key is not a hash self.client['a'] = 'a' @@ -773,9 +773,9 @@ class ServerCommandsTestCase(unittest.TestCase): # finally a key that's not an int self.client.hset('a', 'a3', 'foo') self.assertEquals(self.client.hincrby('a', 'a3'), 1) - - - + + + def test_hkeys(self): # key is not a hash self.client['a'] = 'a' @@ -791,7 +791,7 @@ class ServerCommandsTestCase(unittest.TestCase): remote_keys = self.client.hkeys('a') remote_keys.sort() self.assertEquals(keys, remote_keys) - + def test_hlen(self): # key is not a hash self.client['a'] = 'a' @@ -804,7 +804,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.hlen('a'), 3) self.client.hdel('a', 'a3') self.assertEquals(self.client.hlen('a'), 2) - + def test_hvals(self): # key is not a hash self.client['a'] = 'a' @@ -820,7 +820,7 @@ class ServerCommandsTestCase(unittest.TestCase): remote_vals = self.client.hvals('a') remote_vals.sort() self.assertEquals(vals, remote_vals) - + # SORT def test_sort_bad_key(self): # key is not set @@ -829,15 +829,15 @@ class ServerCommandsTestCase(unittest.TestCase): self.client['a'] = 'a' self.assertRaises(redis.ResponseError, self.client.sort, 'a') del self.client['a'] - + def test_sort_basic(self): self.make_list('a', '3214') self.assertEquals(self.client.sort('a'), ['1', '2', '3', '4']) - + def test_sort_limited(self): self.make_list('a', '3214') self.assertEquals(self.client.sort('a', start=1, num=2), ['2', '3']) - + def test_sort_by(self): self.client['score:1'] = 8 self.client['score:2'] = 3 @@ -845,7 +845,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.make_list('a_values', '123') self.assertEquals(self.client.sort('a_values', by='score:*'), ['2', '3', '1']) - + def test_sort_get(self): self.client['user:1'] = 'u1' self.client['user:2'] = 'u2' @@ -853,22 +853,22 @@ class ServerCommandsTestCase(unittest.TestCase): self.make_list('a', '231') self.assertEquals(self.client.sort('a', get='user:*'), ['u1', 'u2', 'u3']) - + def test_sort_desc(self): self.make_list('a', '231') self.assertEquals(self.client.sort('a', desc=True), ['3', '2', '1']) - + def test_sort_alpha(self): self.make_list('a', 'ecbda') self.assertEquals(self.client.sort('a', alpha=True), ['a', 'b', 'c', 'd', 'e']) - + def test_sort_store(self): self.make_list('a', '231') self.assertEquals(self.client.sort('a', store='sorted_values'), 3) self.assertEquals(self.client.lrange('sorted_values', 0, 5), ['1', '2', '3']) - + def test_sort_all_options(self): self.client['user:1:username'] = 'zeus' self.client['user:2:username'] = 'titan' @@ -878,7 +878,7 @@ class ServerCommandsTestCase(unittest.TestCase): self.client['user:6:username'] = 'athena' self.client['user:7:username'] = 'hades' self.client['user:8:username'] = 'dionysus' - + self.client['user:1:favorite_drink'] = 'yuengling' self.client['user:2:favorite_drink'] = 'rum' self.client['user:3:favorite_drink'] = 'vodka' @@ -887,11 +887,46 @@ class ServerCommandsTestCase(unittest.TestCase): self.client['user:6:favorite_drink'] = 'water' self.client['user:7:favorite_drink'] = 'gin' self.client['user:8:favorite_drink'] = 'apple juice' - + self.make_list('gods', '12345678') num = self.client.sort('gods', start=2, num=4, by='user:*:username', get='user:*:favorite_drink', desc=True, alpha=True, store='sorted') self.assertEquals(num, 4) self.assertEquals(self.client.lrange('sorted', 0, 10), ['vodka', 'milk', 'gin', 'apple juice']) - + + + ## BINARY SAFE + # TODO add more tests + def test_binary_get_set(self): + self.assertTrue(self.client.set(' foo bar ', '123')) + self.assertEqual(self.client.get(' foo bar '), '123') + + self.assertTrue(self.client.set(' foo\r\nbar\r\n ', '456')) + self.assertEqual(self.client.get(' foo\r\nbar\r\n '), '456') + + self.assertTrue(self.client.set(' \r\n\t\x07\x13 ', '789')) + self.assertEqual(self.client.get(' \r\n\t\x07\x13 '), '789') + + self.assertEqual(sorted(self.client.keys('*')), [' \r\n\t\x07\x13 ', ' foo\r\nbar\r\n ', ' foo bar ']) + + self.assertTrue(self.client.delete(' foo bar ')) + self.assertTrue(self.client.delete(' foo\r\nbar\r\n ')) + self.assertTrue(self.client.delete(' \r\n\t\x07\x13 ')) + + def test_binary_lists(self): + mapping = {'foo bar': '123', + 'foo\r\nbar\r\n': '456', + 'foo\tbar\x07': '789', + } + # fill in lists + for key, value in mapping.iteritems(): + for c in value: + self.assertTrue(self.client.rpush(key, c)) + + # check that KEYS returns all the keys as they are + self.assertEqual(sorted(self.client.keys('*')), sorted(mapping.keys())) + + # check that it is possible to get list content by key name + for key in mapping.keys(): + self.assertEqual(self.client.lrange(key, 0, -1), list(mapping[key])) |