mock_redis 0.19.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +161 -0
- data/LICENSE.md +21 -0
- data/README.md +41 -17
- data/lib/mock_redis/connection_method.rb +13 -0
- data/lib/mock_redis/database.rb +116 -41
- data/lib/mock_redis/expire_wrapper.rb +1 -1
- data/lib/mock_redis/future.rb +1 -1
- data/lib/mock_redis/geospatial_methods.rb +13 -21
- data/lib/mock_redis/hash_methods.rb +34 -15
- data/lib/mock_redis/indifferent_hash.rb +0 -8
- data/lib/mock_redis/info_method.rb +2 -2
- data/lib/mock_redis/list_methods.rb +39 -4
- data/lib/mock_redis/memory_method.rb +11 -0
- data/lib/mock_redis/multi_db_wrapper.rb +4 -4
- data/lib/mock_redis/pipelined_wrapper.rb +32 -15
- data/lib/mock_redis/set_methods.rb +34 -6
- data/lib/mock_redis/stream/id.rb +58 -0
- data/lib/mock_redis/stream.rb +88 -0
- data/lib/mock_redis/stream_methods.rb +102 -0
- data/lib/mock_redis/string_methods.rb +81 -30
- data/lib/mock_redis/transaction_wrapper.rb +32 -21
- data/lib/mock_redis/utility_methods.rb +9 -4
- data/lib/mock_redis/version.rb +1 -1
- data/lib/mock_redis/zset.rb +5 -8
- data/lib/mock_redis/zset_methods.rb +64 -12
- data/lib/mock_redis.rb +38 -10
- metadata +40 -336
- data/.gitignore +0 -5
- data/.mailmap +0 -2
- data/.overcommit.yml +0 -21
- data/.rspec +0 -1
- data/.rubocop.yml +0 -121
- data/.rubocop_todo.yml +0 -35
- data/.simplecov +0 -4
- data/.travis.yml +0 -33
- data/Gemfile +0 -12
- data/LICENSE +0 -19
- data/Rakefile +0 -2
- data/mock_redis.gemspec +0 -30
- data/spec/client_spec.rb +0 -17
- data/spec/cloning_spec.rb +0 -95
- data/spec/commands/append_spec.rb +0 -24
- data/spec/commands/auth_spec.rb +0 -7
- data/spec/commands/bgrewriteaof_spec.rb +0 -7
- data/spec/commands/bgsave_spec.rb +0 -7
- data/spec/commands/bitcount_spec.rb +0 -25
- data/spec/commands/bitfield_spec.rb +0 -169
- data/spec/commands/blpop_spec.rb +0 -59
- data/spec/commands/brpop_spec.rb +0 -58
- data/spec/commands/brpoplpush_spec.rb +0 -52
- data/spec/commands/connected_spec.rb +0 -7
- data/spec/commands/dbsize_spec.rb +0 -18
- data/spec/commands/decr_spec.rb +0 -34
- data/spec/commands/decrby_spec.rb +0 -34
- data/spec/commands/del_spec.rb +0 -35
- data/spec/commands/disconnect_spec.rb +0 -7
- data/spec/commands/echo_spec.rb +0 -11
- data/spec/commands/eval_spec.rb +0 -7
- data/spec/commands/evalsha_spec.rb +0 -10
- data/spec/commands/exists_spec.rb +0 -14
- data/spec/commands/expire_spec.rb +0 -111
- data/spec/commands/expireat_spec.rb +0 -47
- data/spec/commands/flushall_spec.rb +0 -38
- data/spec/commands/flushdb_spec.rb +0 -38
- data/spec/commands/future_spec.rb +0 -20
- data/spec/commands/geoadd_spec.rb +0 -58
- data/spec/commands/geodist_spec.rb +0 -114
- data/spec/commands/geohash_spec.rb +0 -52
- data/spec/commands/geopos_spec.rb +0 -55
- data/spec/commands/get_spec.rb +0 -30
- data/spec/commands/getbit_spec.rb +0 -34
- data/spec/commands/getrange_spec.rb +0 -22
- data/spec/commands/getset_spec.rb +0 -23
- data/spec/commands/hash_operator_spec.rb +0 -21
- data/spec/commands/hdel_spec.rb +0 -54
- data/spec/commands/hexists_spec.rb +0 -27
- data/spec/commands/hget_spec.rb +0 -28
- data/spec/commands/hgetall_spec.rb +0 -32
- data/spec/commands/hincrby_spec.rb +0 -58
- data/spec/commands/hincrbyfloat_spec.rb +0 -58
- data/spec/commands/hkeys_spec.rb +0 -19
- data/spec/commands/hlen_spec.rb +0 -19
- data/spec/commands/hmget_spec.rb +0 -40
- data/spec/commands/hmset_spec.rb +0 -43
- data/spec/commands/hscan_each_spec.rb +0 -48
- data/spec/commands/hscan_spec.rb +0 -27
- data/spec/commands/hset_spec.rb +0 -38
- data/spec/commands/hsetnx_spec.rb +0 -44
- data/spec/commands/hvals_spec.rb +0 -19
- data/spec/commands/incr_spec.rb +0 -34
- data/spec/commands/incrby_spec.rb +0 -44
- data/spec/commands/incrbyfloat_spec.rb +0 -44
- data/spec/commands/info_spec.rb +0 -62
- data/spec/commands/keys_spec.rb +0 -122
- data/spec/commands/lastsave_spec.rb +0 -8
- data/spec/commands/lindex_spec.rb +0 -49
- data/spec/commands/linsert_spec.rb +0 -68
- data/spec/commands/llen_spec.rb +0 -16
- data/spec/commands/lpop_spec.rb +0 -34
- data/spec/commands/lpush_spec.rb +0 -43
- data/spec/commands/lpushx_spec.rb +0 -46
- data/spec/commands/lrange_spec.rb +0 -51
- data/spec/commands/lrem_spec.rb +0 -80
- data/spec/commands/lset_spec.rb +0 -43
- data/spec/commands/ltrim_spec.rb +0 -45
- data/spec/commands/mapped_hmget_spec.rb +0 -29
- data/spec/commands/mapped_hmset_spec.rb +0 -47
- data/spec/commands/mapped_mget_spec.rb +0 -22
- data/spec/commands/mapped_mset_spec.rb +0 -19
- data/spec/commands/mapped_msetnx_spec.rb +0 -26
- data/spec/commands/mget_spec.rb +0 -34
- data/spec/commands/move_spec.rb +0 -147
- data/spec/commands/mset_spec.rb +0 -29
- data/spec/commands/msetnx_spec.rb +0 -40
- data/spec/commands/persist_spec.rb +0 -48
- data/spec/commands/pexpire_spec.rb +0 -86
- data/spec/commands/pexpireat_spec.rb +0 -48
- data/spec/commands/ping_spec.rb +0 -7
- data/spec/commands/pipelined_spec.rb +0 -42
- data/spec/commands/pttl_spec.rb +0 -41
- data/spec/commands/quit_spec.rb +0 -7
- data/spec/commands/randomkey_spec.rb +0 -20
- data/spec/commands/rename_spec.rb +0 -42
- data/spec/commands/renamenx_spec.rb +0 -41
- data/spec/commands/rpop_spec.rb +0 -34
- data/spec/commands/rpoplpush_spec.rb +0 -50
- data/spec/commands/rpush_spec.rb +0 -43
- data/spec/commands/rpushx_spec.rb +0 -46
- data/spec/commands/sadd_spec.rb +0 -45
- data/spec/commands/save_spec.rb +0 -7
- data/spec/commands/scan_each_spec.rb +0 -39
- data/spec/commands/scan_spec.rb +0 -55
- data/spec/commands/scard_spec.rb +0 -18
- data/spec/commands/script_spec.rb +0 -9
- data/spec/commands/sdiff_spec.rb +0 -47
- data/spec/commands/sdiffstore_spec.rb +0 -58
- data/spec/commands/select_spec.rb +0 -61
- data/spec/commands/set_spec.rb +0 -63
- data/spec/commands/setbit_spec.rb +0 -54
- data/spec/commands/setex_spec.rb +0 -22
- data/spec/commands/setnx_spec.rb +0 -25
- data/spec/commands/setrange_spec.rb +0 -30
- data/spec/commands/sinter_spec.rb +0 -39
- data/spec/commands/sinterstore_spec.rb +0 -53
- data/spec/commands/sismember_spec.rb +0 -29
- data/spec/commands/smembers_spec.rb +0 -28
- data/spec/commands/smove_spec.rb +0 -41
- data/spec/commands/sort_list_spec.rb +0 -21
- data/spec/commands/sort_set_spec.rb +0 -21
- data/spec/commands/sort_zset_spec.rb +0 -21
- data/spec/commands/spop_spec.rb +0 -25
- data/spec/commands/srandmember_spec.rb +0 -49
- data/spec/commands/srem_spec.rb +0 -40
- data/spec/commands/sscan_each_spec.rb +0 -48
- data/spec/commands/sscan_spec.rb +0 -39
- data/spec/commands/strlen_spec.rb +0 -18
- data/spec/commands/sunion_spec.rb +0 -42
- data/spec/commands/sunionstore_spec.rb +0 -59
- data/spec/commands/ttl_spec.rb +0 -40
- data/spec/commands/type_spec.rb +0 -36
- data/spec/commands/unwatch_spec.rb +0 -7
- data/spec/commands/watch_spec.rb +0 -16
- data/spec/commands/zadd_spec.rb +0 -123
- data/spec/commands/zcard_spec.rb +0 -19
- data/spec/commands/zcount_spec.rb +0 -39
- data/spec/commands/zincrby_spec.rb +0 -31
- data/spec/commands/zinterstore_spec.rb +0 -96
- data/spec/commands/zrange_spec.rb +0 -80
- data/spec/commands/zrangebyscore_spec.rb +0 -83
- data/spec/commands/zrank_spec.rb +0 -29
- data/spec/commands/zrem_spec.rb +0 -43
- data/spec/commands/zremrangebyrank_spec.rb +0 -27
- data/spec/commands/zremrangebyscore_spec.rb +0 -35
- data/spec/commands/zrevrange_spec.rb +0 -56
- data/spec/commands/zrevrangebyscore_spec.rb +0 -58
- data/spec/commands/zrevrank_spec.rb +0 -29
- data/spec/commands/zscan_each_spec.rb +0 -48
- data/spec/commands/zscan_spec.rb +0 -26
- data/spec/commands/zscore_spec.rb +0 -22
- data/spec/commands/zunionstore_spec.rb +0 -104
- data/spec/mock_redis_spec.rb +0 -86
- data/spec/spec_helper.rb +0 -63
- data/spec/support/redis_multiplexer.rb +0 -106
- data/spec/support/shared_examples/only_operates_on_hashes.rb +0 -13
- data/spec/support/shared_examples/only_operates_on_lists.rb +0 -13
- data/spec/support/shared_examples/only_operates_on_sets.rb +0 -13
- data/spec/support/shared_examples/only_operates_on_strings.rb +0 -13
- data/spec/support/shared_examples/only_operates_on_zsets.rb +0 -57
- data/spec/support/shared_examples/sorts_enumerables.rb +0 -56
- data/spec/transactions_spec.rb +0 -159
data/spec/commands/move_spec.rb
DELETED
@@ -1,147 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#move(key, db)' do
|
4
|
-
before do
|
5
|
-
@srcdb = 0
|
6
|
-
@destdb = 1
|
7
|
-
|
8
|
-
@key = 'mock-redis-test:move'
|
9
|
-
end
|
10
|
-
|
11
|
-
context 'when key exists in destdb' do
|
12
|
-
before do
|
13
|
-
@redises.set(@key, 'srcvalue')
|
14
|
-
@redises.select(@destdb)
|
15
|
-
@redises.set(@key, 'destvalue')
|
16
|
-
@redises.select(@srcdb)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'returns false' do
|
20
|
-
@redises.move(@key, @destdb).should == false
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'leaves destdb/key alone' do
|
24
|
-
@redises.select(@destdb)
|
25
|
-
@redises.get(@key).should == 'destvalue'
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'leaves srcdb/key alone' do
|
29
|
-
@redises.get(@key).should == 'srcvalue'
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'when key does not exist in srcdb' do
|
34
|
-
before do
|
35
|
-
@redises.select(@destdb)
|
36
|
-
@redises.set(@key, 'destvalue')
|
37
|
-
@redises.select(@srcdb)
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'returns false' do
|
41
|
-
@redises.move(@key, @destdb).should == false
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'leaves destdb/key alone' do
|
45
|
-
@redises.select(@destdb)
|
46
|
-
@redises.get(@key).should == 'destvalue'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context 'when key exists in the currently-selected DB and not in db' do
|
51
|
-
before do
|
52
|
-
@redises.set(@key, 'value')
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'returns true' do
|
56
|
-
@redises.move(@key, @destdb).should == true
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context 'on a string' do
|
61
|
-
before do
|
62
|
-
@redises.set(@key, 'value')
|
63
|
-
@redises.move(@key, @destdb)
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'removes key from srcdb' do
|
67
|
-
@redises.exists(@key).should == false
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'copies key to destdb' do
|
71
|
-
@redises.select(@destdb)
|
72
|
-
@redises.get(@key).should == 'value'
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context 'on a list' do
|
77
|
-
before do
|
78
|
-
@redises.rpush(@key, 'bert')
|
79
|
-
@redises.rpush(@key, 'ernie')
|
80
|
-
@redises.move(@key, @destdb)
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'removes key from srcdb' do
|
84
|
-
@redises.exists(@key).should == false
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'copies key to destdb' do
|
88
|
-
@redises.select(@destdb)
|
89
|
-
@redises.lrange(@key, 0, -1).should == %w[bert ernie]
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context 'on a hash' do
|
94
|
-
before do
|
95
|
-
@redises.hset(@key, 'a', 1)
|
96
|
-
@redises.hset(@key, 'b', 2)
|
97
|
-
|
98
|
-
@redises.move(@key, @destdb)
|
99
|
-
end
|
100
|
-
|
101
|
-
it 'removes key from srcdb' do
|
102
|
-
@redises.exists(@key).should == false
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'copies key to destdb' do
|
106
|
-
@redises.select(@destdb)
|
107
|
-
@redises.hgetall(@key).should == { 'a' => '1', 'b' => '2' }
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context 'on a set' do
|
112
|
-
before do
|
113
|
-
@redises.sadd(@key, 'beer')
|
114
|
-
@redises.sadd(@key, 'wine')
|
115
|
-
|
116
|
-
@redises.move(@key, @destdb)
|
117
|
-
end
|
118
|
-
|
119
|
-
it 'removes key from srcdb' do
|
120
|
-
@redises.exists(@key).should == false
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'copies key to destdb' do
|
124
|
-
@redises.select(@destdb)
|
125
|
-
@redises.smembers(@key).should == %w[wine beer]
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
context 'on a zset' do
|
130
|
-
before do
|
131
|
-
@redises.zadd(@key, 1, 'beer')
|
132
|
-
@redises.zadd(@key, 2, 'wine')
|
133
|
-
|
134
|
-
@redises.move(@key, @destdb)
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'removes key from srcdb' do
|
138
|
-
@redises.exists(@key).should == false
|
139
|
-
end
|
140
|
-
|
141
|
-
it 'copies key to destdb' do
|
142
|
-
@redises.select(@destdb)
|
143
|
-
@redises.zrange(@key, 0, -1, :with_scores => true).should ==
|
144
|
-
[['beer', 1.0], ['wine', 2.0]]
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
data/spec/commands/mset_spec.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#mset(key, value [, key, value, ...])' do
|
4
|
-
before do
|
5
|
-
@key1 = 'mock-redis-test:mset1'
|
6
|
-
@key2 = 'mock-redis-test:mset2'
|
7
|
-
end
|
8
|
-
|
9
|
-
it "responds with 'OK'" do
|
10
|
-
@redises.mset(@key1, 1).should == 'OK'
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'sets the values' do
|
14
|
-
@redises.mset(@key1, 'value1', @key2, 'value2')
|
15
|
-
@redises.mget(@key1, @key2).should == %w[value1 value2]
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'raises an error if given an odd number of arguments' do
|
19
|
-
lambda do
|
20
|
-
@redises.mset(@key1, 'value1', @key2)
|
21
|
-
end.should raise_error(Redis::CommandError)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'raises an error if given 0 arguments' do
|
25
|
-
lambda do
|
26
|
-
@redises.mset
|
27
|
-
end.should raise_error(Redis::CommandError)
|
28
|
-
end
|
29
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#msetnx(key, value [, key, value, ...])' do
|
4
|
-
before do
|
5
|
-
@key1 = 'mock-redis-test:msetnx1'
|
6
|
-
@key2 = 'mock-redis-test:msetnx2'
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'responds with 1 if any keys were set' do
|
10
|
-
@redises.msetnx(@key1, 1).should == true
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'sets the values' do
|
14
|
-
@redises.msetnx(@key1, 'value1', @key2, 'value2')
|
15
|
-
@redises.mget(@key1, @key2).should == %w[value1 value2]
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'does nothing if any value is already set' do
|
19
|
-
@redises.set(@key1, 'old1')
|
20
|
-
@redises.msetnx(@key1, 'value1', @key2, 'value2')
|
21
|
-
@redises.mget(@key1, @key2).should == ['old1', nil]
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'responds with 0 if any value is already set' do
|
25
|
-
@redises.set(@key1, 'old1')
|
26
|
-
@redises.msetnx(@key1, 'value1', @key2, 'value2').should == false
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'raises an error if given an odd number of arguments' do
|
30
|
-
lambda do
|
31
|
-
@redises.msetnx(@key1, 'value1', @key2)
|
32
|
-
end.should raise_error(Redis::CommandError)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'raises an error if given 0 arguments' do
|
36
|
-
lambda do
|
37
|
-
@redises.msetnx
|
38
|
-
end.should raise_error(Redis::CommandError)
|
39
|
-
end
|
40
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#persist(key)' do
|
4
|
-
before do
|
5
|
-
@key = 'mock-redis-test:persist'
|
6
|
-
@redises.set(@key, 'spork')
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'returns true for a key with a timeout' do
|
10
|
-
@redises.expire(@key, 10_000)
|
11
|
-
@redises.persist(@key).should == true
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'returns false for a key with no timeout' do
|
15
|
-
@redises.persist(@key).should == false
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'returns false for a key that does not exist' do
|
19
|
-
@redises.persist('mock-redis-test:nonesuch').should == false
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'removes the timeout' do
|
23
|
-
@redises.expire(@key, 10_000)
|
24
|
-
@redises.persist(@key)
|
25
|
-
@redises.persist(@key).should == false
|
26
|
-
end
|
27
|
-
|
28
|
-
context '[mock only]' do
|
29
|
-
# These are mock-only since we can't actually manipulate time in
|
30
|
-
# the real Redis.
|
31
|
-
|
32
|
-
before(:all) do
|
33
|
-
@mock = @redises.mock
|
34
|
-
end
|
35
|
-
|
36
|
-
before do
|
37
|
-
@now = Time.now
|
38
|
-
Time.stub(:now).and_return(@now)
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'makes keys stay around' do
|
42
|
-
@mock.expire(@key, 5)
|
43
|
-
@mock.persist(@key)
|
44
|
-
Time.stub(:now).and_return(@now + 5)
|
45
|
-
@mock.get(@key).should_not be_nil
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#pexpire(key, ms)' do
|
4
|
-
before do
|
5
|
-
@key = 'mock-redis-test:pexpire'
|
6
|
-
@redises.set(@key, 'spork')
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'returns true for a key that exists' do
|
10
|
-
@redises.pexpire(@key, 1).should == true
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'returns false for a key that does not exist' do
|
14
|
-
@redises.pexpire('mock-redis-test:nonesuch', 1).should == false
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'removes a key immediately when ms==0' do
|
18
|
-
@redises.pexpire(@key, 0)
|
19
|
-
@redises.get(@key).should be_nil
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'raises an error if ms is bogus' do
|
23
|
-
lambda do
|
24
|
-
@redises.pexpireat(@key, 'a couple minutes or so')
|
25
|
-
end.should raise_error(Redis::CommandError)
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'stringifies key' do
|
29
|
-
@redises.pexpire(@key.to_sym, 9).should == true
|
30
|
-
end
|
31
|
-
|
32
|
-
context '[mock only]' do
|
33
|
-
# These are mock-only since we can't actually manipulate time in
|
34
|
-
# the real Redis.
|
35
|
-
|
36
|
-
before(:all) do
|
37
|
-
@mock = @redises.mock
|
38
|
-
end
|
39
|
-
|
40
|
-
before do
|
41
|
-
@now = Time.now.round
|
42
|
-
Time.stub(:now).and_return(@now)
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'removes keys after enough time has passed' do
|
46
|
-
@mock.pexpire(@key, 5)
|
47
|
-
Time.stub(:now).and_return(@now + Rational(6, 1000))
|
48
|
-
@mock.get(@key).should be_nil
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'updates an existing pexpire time' do
|
52
|
-
@mock.pexpire(@key, 5)
|
53
|
-
@mock.pexpire(@key, 6)
|
54
|
-
|
55
|
-
Time.stub(:now).and_return(@now + Rational(5, 1000))
|
56
|
-
@mock.get(@key).should_not be_nil
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'expirations on a deleted key' do
|
60
|
-
before { @mock.del(@key) }
|
61
|
-
|
62
|
-
it 'cleans up the expiration once the key is gone (string)' do
|
63
|
-
@mock.set(@key, 'string')
|
64
|
-
@mock.pexpire(@key, 2)
|
65
|
-
@mock.del(@key)
|
66
|
-
@mock.set(@key, 'string')
|
67
|
-
|
68
|
-
Time.stub(:now).and_return(@now + 0.003)
|
69
|
-
|
70
|
-
@mock.get(@key).should_not be_nil
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'cleans up the expiration once the key is gone (list)' do
|
74
|
-
@mock.rpush(@key, 'coconuts')
|
75
|
-
@mock.pexpire(@key, 2)
|
76
|
-
@mock.rpop(@key)
|
77
|
-
|
78
|
-
@mock.rpush(@key, 'coconuts')
|
79
|
-
|
80
|
-
Time.stub(:now).and_return(@now + 0.003)
|
81
|
-
|
82
|
-
@mock.lindex(@key, 0).should_not be_nil
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#pexpireat(key, timestamp_ms)' do
|
4
|
-
before do
|
5
|
-
@key = 'mock-redis-test:pexpireat'
|
6
|
-
@redises.set(@key, 'spork')
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'returns true for a key that exists' do
|
10
|
-
@redises.pexpireat(@key, (Time.now.to_f * 1000).to_i + 1).should == true
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'returns false for a key that does not exist' do
|
14
|
-
@redises.pexpireat('mock-redis-test:nonesuch',
|
15
|
-
(Time.now.to_f * 1000).to_i + 1).should == false
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'removes a key immediately when timestamp is now' do
|
19
|
-
@redises.pexpireat(@key, (Time.now.to_f * 1000).to_i)
|
20
|
-
@redises.get(@key).should be_nil
|
21
|
-
end
|
22
|
-
|
23
|
-
it "raises an error if you don't give it a Unix timestamp" do
|
24
|
-
lambda do
|
25
|
-
@redises.pexpireat(@key, Time.now) # oops, forgot .to_i
|
26
|
-
end.should raise_error(Redis::CommandError)
|
27
|
-
end
|
28
|
-
|
29
|
-
context '[mock only]' do
|
30
|
-
# These are mock-only since we can't actually manipulate time in
|
31
|
-
# the real Redis.
|
32
|
-
|
33
|
-
before(:all) do
|
34
|
-
@mock = @redises.mock
|
35
|
-
end
|
36
|
-
|
37
|
-
before do
|
38
|
-
@now = Time.now
|
39
|
-
Time.stub(:now).and_return(@now)
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'removes keys after enough time has passed' do
|
43
|
-
@mock.pexpireat(@key, (@now.to_f * 1000).to_i + 5)
|
44
|
-
Time.stub(:now).and_return(@now + 0.006)
|
45
|
-
@mock.get(@key).should be_nil
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
data/spec/commands/ping_spec.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#pipelined' do
|
4
|
-
it 'yields to its block' do
|
5
|
-
res = false
|
6
|
-
@redises.pipelined do
|
7
|
-
res = true
|
8
|
-
end
|
9
|
-
res.should == true
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'with a few added data' do
|
13
|
-
let(:key1) { 'hello' }
|
14
|
-
let(:key2) { 'world' }
|
15
|
-
let(:value1) { 'foo' }
|
16
|
-
let(:value2) { 'bar' }
|
17
|
-
|
18
|
-
before do
|
19
|
-
@redises.set key1, value1
|
20
|
-
@redises.set key2, value2
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'returns results of pipelined operations' do
|
24
|
-
results = @redises.pipelined do |redis|
|
25
|
-
redis.get key1
|
26
|
-
redis.get key2
|
27
|
-
end
|
28
|
-
|
29
|
-
results.should == [value1, value2]
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns futures' do
|
33
|
-
future = nil
|
34
|
-
|
35
|
-
@redises.mock.pipelined do |redis|
|
36
|
-
future = redis.get key1
|
37
|
-
end
|
38
|
-
|
39
|
-
future.class.should be MockRedis::Future
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/spec/commands/pttl_spec.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#pttl(key)' do
|
4
|
-
before do
|
5
|
-
@key = 'mock-redis-test:persist'
|
6
|
-
@redises.set(@key, 'spork')
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'returns -1 for a key with no expiration' do
|
10
|
-
@redises.pttl(@key).should == -1
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'returns -2 for a key that does not exist' do
|
14
|
-
@redises.pttl('mock-redis-test:nonesuch').should == -2
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'stringifies key' do
|
18
|
-
@redises.expire(@key, 8)
|
19
|
-
# Don't check against Redis since millisecond timing differences are likely
|
20
|
-
@redises.send_without_checking(:pttl, @key.to_sym).should > 0
|
21
|
-
end
|
22
|
-
|
23
|
-
context '[mock only]' do
|
24
|
-
# These are mock-only since we can't actually manipulate time in
|
25
|
-
# the real Redis.
|
26
|
-
|
27
|
-
before(:all) do
|
28
|
-
@mock = @redises.mock
|
29
|
-
end
|
30
|
-
|
31
|
-
before do
|
32
|
-
@now = Time.now.round
|
33
|
-
Time.stub(:now).and_return(@now)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "gives you the key's remaining lifespan in milliseconds" do
|
37
|
-
@mock.expire(@key, 5)
|
38
|
-
@mock.pttl(@key).should == 5000
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
data/spec/commands/quit_spec.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#randomkey [mock only]' do
|
4
|
-
before { @mock = @redises.mock }
|
5
|
-
|
6
|
-
it 'finds a random key' do
|
7
|
-
@keys = ['mock-redis-test:1', 'mock-redis-test:2', 'mock-redis-test:3']
|
8
|
-
|
9
|
-
@keys.each do |k|
|
10
|
-
@mock.set(k, 1)
|
11
|
-
end
|
12
|
-
|
13
|
-
@keys.should include(@mock.randomkey)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'returns nil when there are no keys' do
|
17
|
-
@mock.keys('*').each { |k| @mock.del(k) }
|
18
|
-
@mock.randomkey.should be_nil
|
19
|
-
end
|
20
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#rename(key, newkey)' do
|
4
|
-
before do
|
5
|
-
@key = 'mock-redis-test:rename:key'
|
6
|
-
@newkey = 'mock-redis-test:rename:newkey'
|
7
|
-
|
8
|
-
@redises.set(@key, 'oof')
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'responds with "OK"' do
|
12
|
-
@redises.rename(@key, @newkey).should == 'OK'
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'moves the data' do
|
16
|
-
@redises.rename(@key, @newkey)
|
17
|
-
@redises.get(@newkey).should == 'oof'
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'raises an error when the source key is nonexistant' do
|
21
|
-
@redises.del(@key)
|
22
|
-
lambda do
|
23
|
-
@redises.rename(@key, @newkey)
|
24
|
-
end.should raise_error(Redis::CommandError)
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'responds with "OK" when key == newkey' do
|
28
|
-
@redises.rename(@key, @key).should == 'OK'
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'overwrites any existing value at newkey' do
|
32
|
-
@redises.set(@newkey, 'rab')
|
33
|
-
@redises.rename(@key, @newkey)
|
34
|
-
@redises.get(@newkey).should == 'oof'
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'keeps expiration' do
|
38
|
-
@redises.expire(@key, 1000)
|
39
|
-
@redises.rename(@key, @newkey)
|
40
|
-
@redises.ttl(@newkey).should be > 0
|
41
|
-
end
|
42
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#renamenx(key, newkey)' do
|
4
|
-
before do
|
5
|
-
@key = 'mock-redis-test:renamenx:key'
|
6
|
-
@newkey = 'mock-redis-test:renamenx:newkey'
|
7
|
-
|
8
|
-
@redises.set(@key, 'oof')
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'responds with true when newkey does not exist' do
|
12
|
-
@redises.renamenx(@key, @newkey).should == true
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'responds with false when newkey exists' do
|
16
|
-
@redises.set(@newkey, 'monkey')
|
17
|
-
@redises.renamenx(@key, @newkey).should == false
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'moves the data' do
|
21
|
-
@redises.renamenx(@key, @newkey)
|
22
|
-
@redises.get(@newkey).should == 'oof'
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'raises an error when the source key is nonexistant' do
|
26
|
-
@redises.del(@key)
|
27
|
-
lambda do
|
28
|
-
@redises.rename(@key, @newkey)
|
29
|
-
end.should raise_error(Redis::CommandError)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns false when key == newkey' do
|
33
|
-
@redises.renamenx(@key, @key).should == false
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'leaves any existing value at newkey alone' do
|
37
|
-
@redises.set(@newkey, 'rab')
|
38
|
-
@redises.renamenx(@key, @newkey)
|
39
|
-
@redises.get(@newkey).should == 'rab'
|
40
|
-
end
|
41
|
-
end
|
data/spec/commands/rpop_spec.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#rpop(key)' do
|
4
|
-
before { @key = 'mock-redis-test:43093' }
|
5
|
-
|
6
|
-
it 'returns and removes the first element of a list' do
|
7
|
-
@redises.lpush(@key, 1)
|
8
|
-
@redises.lpush(@key, 2)
|
9
|
-
|
10
|
-
@redises.rpop(@key).should == '1'
|
11
|
-
|
12
|
-
@redises.llen(@key).should == 1
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'returns nil if the list is empty' do
|
16
|
-
@redises.lpush(@key, 'foo')
|
17
|
-
@redises.rpop(@key)
|
18
|
-
|
19
|
-
@redises.rpop(@key).should be_nil
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'returns nil for nonexistent values' do
|
23
|
-
@redises.rpop(@key).should be_nil
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'removes empty lists' do
|
27
|
-
@redises.lpush(@key, 'foo')
|
28
|
-
@redises.rpop(@key)
|
29
|
-
|
30
|
-
@redises.get(@key).should be_nil
|
31
|
-
end
|
32
|
-
|
33
|
-
it_should_behave_like 'a list-only command'
|
34
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe '#rpoplpush(source, destination)' do
|
4
|
-
before do
|
5
|
-
@list1 = 'mock-redis-test:rpoplpush-list1'
|
6
|
-
@list2 = 'mock-redis-test:rpoplpush-list2'
|
7
|
-
|
8
|
-
@redises.lpush(@list1, 'b')
|
9
|
-
@redises.lpush(@list1, 'a')
|
10
|
-
|
11
|
-
@redises.lpush(@list2, 'y')
|
12
|
-
@redises.lpush(@list2, 'x')
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'returns the value moved' do
|
16
|
-
@redises.rpoplpush(@list1, @list2).should == 'b'
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns false and doesn't append if source empty" do
|
20
|
-
@redises.rpoplpush('empty', @list1).should be_nil
|
21
|
-
@redises.lrange(@list1, 0, -1).should == %w[a b]
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'takes the last element of destination and prepends it to source' do
|
25
|
-
@redises.rpoplpush(@list1, @list2)
|
26
|
-
|
27
|
-
@redises.lrange(@list1, 0, -1).should == %w[a]
|
28
|
-
@redises.lrange(@list2, 0, -1).should == %w[b x y]
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'rotates a list when source and destination are the same' do
|
32
|
-
@redises.rpoplpush(@list1, @list1)
|
33
|
-
@redises.lrange(@list1, 0, -1).should == %w[b a]
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'removes empty lists' do
|
37
|
-
@redises.llen(@list1).times { @redises.rpoplpush(@list1, @list2) }
|
38
|
-
@redises.get(@list1).should be_nil
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'raises an error for non-list source value' do
|
42
|
-
@redises.set(@list1, 'string value')
|
43
|
-
|
44
|
-
lambda do
|
45
|
-
@redises.rpoplpush(@list1, @list2)
|
46
|
-
end.should raise_error(Redis::CommandError)
|
47
|
-
end
|
48
|
-
|
49
|
-
it_should_behave_like 'a list-only command'
|
50
|
-
end
|