mock_redis 0.36.0 → 0.37.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.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +1 -1
  4. data/lib/mock_redis/database.rb +1 -1
  5. data/lib/mock_redis/hash_methods.rb +1 -1
  6. data/lib/mock_redis/list_methods.rb +7 -2
  7. data/lib/mock_redis/multi_db_wrapper.rb +1 -1
  8. data/lib/mock_redis/pipelined_wrapper.rb +12 -14
  9. data/lib/mock_redis/set_methods.rb +6 -1
  10. data/lib/mock_redis/stream.rb +3 -3
  11. data/lib/mock_redis/string_methods.rb +3 -3
  12. data/lib/mock_redis/transaction_wrapper.rb +5 -7
  13. data/lib/mock_redis/utility_methods.rb +4 -2
  14. data/lib/mock_redis/version.rb +1 -1
  15. data/lib/mock_redis/zset.rb +4 -2
  16. data/lib/mock_redis/zset_methods.rb +3 -3
  17. data/lib/mock_redis.rb +1 -2
  18. metadata +19 -360
  19. data/.github/workflows/lint.yml +0 -31
  20. data/.github/workflows/tests.yml +0 -63
  21. data/.gitignore +0 -5
  22. data/.mailmap +0 -2
  23. data/.overcommit.yml +0 -21
  24. data/.rspec +0 -1
  25. data/.rubocop.yml +0 -148
  26. data/.rubocop_todo.yml +0 -35
  27. data/.simplecov +0 -4
  28. data/Gemfile +0 -13
  29. data/Rakefile +0 -2
  30. data/mock_redis.gemspec +0 -32
  31. data/spec/client_spec.rb +0 -36
  32. data/spec/cloning_spec.rb +0 -95
  33. data/spec/commands/append_spec.rb +0 -24
  34. data/spec/commands/auth_spec.rb +0 -7
  35. data/spec/commands/bgrewriteaof_spec.rb +0 -7
  36. data/spec/commands/bgsave_spec.rb +0 -7
  37. data/spec/commands/bitcount_spec.rb +0 -25
  38. data/spec/commands/bitfield_spec.rb +0 -169
  39. data/spec/commands/blmove_spec.rb +0 -52
  40. data/spec/commands/blpop_spec.rb +0 -53
  41. data/spec/commands/brpop_spec.rb +0 -59
  42. data/spec/commands/brpoplpush_spec.rb +0 -52
  43. data/spec/commands/connected_spec.rb +0 -7
  44. data/spec/commands/connection_spec.rb +0 -15
  45. data/spec/commands/dbsize_spec.rb +0 -18
  46. data/spec/commands/decr_spec.rb +0 -34
  47. data/spec/commands/decrby_spec.rb +0 -34
  48. data/spec/commands/del_spec.rb +0 -52
  49. data/spec/commands/disconnect_spec.rb +0 -7
  50. data/spec/commands/dump_spec.rb +0 -19
  51. data/spec/commands/echo_spec.rb +0 -11
  52. data/spec/commands/eval_spec.rb +0 -7
  53. data/spec/commands/evalsha_spec.rb +0 -10
  54. data/spec/commands/exists_spec.rb +0 -43
  55. data/spec/commands/expire_spec.rb +0 -111
  56. data/spec/commands/expireat_spec.rb +0 -47
  57. data/spec/commands/flushall_spec.rb +0 -38
  58. data/spec/commands/flushdb_spec.rb +0 -38
  59. data/spec/commands/future_spec.rb +0 -30
  60. data/spec/commands/geoadd_spec.rb +0 -58
  61. data/spec/commands/geodist_spec.rb +0 -118
  62. data/spec/commands/geohash_spec.rb +0 -52
  63. data/spec/commands/geopos_spec.rb +0 -55
  64. data/spec/commands/get_spec.rb +0 -31
  65. data/spec/commands/getbit_spec.rb +0 -34
  66. data/spec/commands/getdel.rb +0 -24
  67. data/spec/commands/getrange_spec.rb +0 -22
  68. data/spec/commands/getset_spec.rb +0 -23
  69. data/spec/commands/hdel_spec.rb +0 -77
  70. data/spec/commands/hexists_spec.rb +0 -27
  71. data/spec/commands/hget_spec.rb +0 -28
  72. data/spec/commands/hgetall_spec.rb +0 -32
  73. data/spec/commands/hincrby_spec.rb +0 -58
  74. data/spec/commands/hincrbyfloat_spec.rb +0 -58
  75. data/spec/commands/hkeys_spec.rb +0 -19
  76. data/spec/commands/hlen_spec.rb +0 -19
  77. data/spec/commands/hmget_spec.rb +0 -46
  78. data/spec/commands/hmset_spec.rb +0 -69
  79. data/spec/commands/hscan_each_spec.rb +0 -48
  80. data/spec/commands/hscan_spec.rb +0 -27
  81. data/spec/commands/hset_spec.rb +0 -42
  82. data/spec/commands/hsetnx_spec.rb +0 -44
  83. data/spec/commands/hvals_spec.rb +0 -19
  84. data/spec/commands/incr_spec.rb +0 -34
  85. data/spec/commands/incrby_spec.rb +0 -44
  86. data/spec/commands/incrbyfloat_spec.rb +0 -44
  87. data/spec/commands/info_spec.rb +0 -62
  88. data/spec/commands/keys_spec.rb +0 -139
  89. data/spec/commands/lastsave_spec.rb +0 -8
  90. data/spec/commands/lindex_spec.rb +0 -49
  91. data/spec/commands/linsert_spec.rb +0 -68
  92. data/spec/commands/llen_spec.rb +0 -16
  93. data/spec/commands/lmove_spec.rb +0 -72
  94. data/spec/commands/lpop_spec.rb +0 -35
  95. data/spec/commands/lpush_spec.rb +0 -43
  96. data/spec/commands/lpushx_spec.rb +0 -46
  97. data/spec/commands/lrange_spec.rb +0 -51
  98. data/spec/commands/lrem_spec.rb +0 -80
  99. data/spec/commands/lset_spec.rb +0 -43
  100. data/spec/commands/ltrim_spec.rb +0 -45
  101. data/spec/commands/mapped_hmget_spec.rb +0 -29
  102. data/spec/commands/mapped_hmset_spec.rb +0 -47
  103. data/spec/commands/mapped_mget_spec.rb +0 -22
  104. data/spec/commands/mapped_mset_spec.rb +0 -19
  105. data/spec/commands/mapped_msetnx_spec.rb +0 -26
  106. data/spec/commands/mget_spec.rb +0 -65
  107. data/spec/commands/move_spec.rb +0 -147
  108. data/spec/commands/mset_spec.rb +0 -43
  109. data/spec/commands/msetnx_spec.rb +0 -40
  110. data/spec/commands/persist_spec.rb +0 -48
  111. data/spec/commands/pexpire_spec.rb +0 -86
  112. data/spec/commands/pexpireat_spec.rb +0 -48
  113. data/spec/commands/ping_spec.rb +0 -11
  114. data/spec/commands/pipelined_spec.rb +0 -114
  115. data/spec/commands/psetex_spec.rb +0 -44
  116. data/spec/commands/pttl_spec.rb +0 -41
  117. data/spec/commands/quit_spec.rb +0 -7
  118. data/spec/commands/randomkey_spec.rb +0 -20
  119. data/spec/commands/rename_spec.rb +0 -42
  120. data/spec/commands/renamenx_spec.rb +0 -41
  121. data/spec/commands/restore_spec.rb +0 -47
  122. data/spec/commands/rpop_spec.rb +0 -35
  123. data/spec/commands/rpoplpush_spec.rb +0 -50
  124. data/spec/commands/rpush_spec.rb +0 -43
  125. data/spec/commands/rpushx_spec.rb +0 -46
  126. data/spec/commands/sadd_spec.rb +0 -45
  127. data/spec/commands/save_spec.rb +0 -7
  128. data/spec/commands/scan_each_spec.rb +0 -39
  129. data/spec/commands/scan_spec.rb +0 -64
  130. data/spec/commands/scard_spec.rb +0 -18
  131. data/spec/commands/script_spec.rb +0 -9
  132. data/spec/commands/sdiff_spec.rb +0 -47
  133. data/spec/commands/sdiffstore_spec.rb +0 -58
  134. data/spec/commands/select_spec.rb +0 -61
  135. data/spec/commands/set_spec.rb +0 -134
  136. data/spec/commands/setbit_spec.rb +0 -55
  137. data/spec/commands/setex_spec.rb +0 -38
  138. data/spec/commands/setnx_spec.rb +0 -25
  139. data/spec/commands/setrange_spec.rb +0 -30
  140. data/spec/commands/sinter_spec.rb +0 -39
  141. data/spec/commands/sinterstore_spec.rb +0 -53
  142. data/spec/commands/sismember_spec.rb +0 -29
  143. data/spec/commands/smembers_spec.rb +0 -28
  144. data/spec/commands/smismember_spec.rb +0 -34
  145. data/spec/commands/smove_spec.rb +0 -41
  146. data/spec/commands/sort_list_spec.rb +0 -21
  147. data/spec/commands/sort_set_spec.rb +0 -21
  148. data/spec/commands/sort_zset_spec.rb +0 -21
  149. data/spec/commands/spop_spec.rb +0 -40
  150. data/spec/commands/srandmember_spec.rb +0 -49
  151. data/spec/commands/srem_spec.rb +0 -45
  152. data/spec/commands/sscan_each_spec.rb +0 -48
  153. data/spec/commands/sscan_spec.rb +0 -39
  154. data/spec/commands/strlen_spec.rb +0 -18
  155. data/spec/commands/sunion_spec.rb +0 -42
  156. data/spec/commands/sunionstore_spec.rb +0 -59
  157. data/spec/commands/ttl_spec.rb +0 -40
  158. data/spec/commands/type_spec.rb +0 -36
  159. data/spec/commands/unwatch_spec.rb +0 -7
  160. data/spec/commands/watch_spec.rb +0 -21
  161. data/spec/commands/xadd_spec.rb +0 -122
  162. data/spec/commands/xlen_spec.rb +0 -22
  163. data/spec/commands/xrange_spec.rb +0 -164
  164. data/spec/commands/xread_spec.rb +0 -66
  165. data/spec/commands/xrevrange_spec.rb +0 -130
  166. data/spec/commands/xtrim_spec.rb +0 -36
  167. data/spec/commands/zadd_spec.rb +0 -129
  168. data/spec/commands/zcard_spec.rb +0 -19
  169. data/spec/commands/zcount_spec.rb +0 -39
  170. data/spec/commands/zincrby_spec.rb +0 -31
  171. data/spec/commands/zinterstore_spec.rb +0 -130
  172. data/spec/commands/zpopmax_spec.rb +0 -60
  173. data/spec/commands/zpopmin_spec.rb +0 -60
  174. data/spec/commands/zrange_spec.rb +0 -80
  175. data/spec/commands/zrangebyscore_spec.rb +0 -83
  176. data/spec/commands/zrank_spec.rb +0 -29
  177. data/spec/commands/zrem_spec.rb +0 -50
  178. data/spec/commands/zremrangebyrank_spec.rb +0 -27
  179. data/spec/commands/zremrangebyscore_spec.rb +0 -35
  180. data/spec/commands/zrevrange_spec.rb +0 -56
  181. data/spec/commands/zrevrangebyscore_spec.rb +0 -58
  182. data/spec/commands/zrevrank_spec.rb +0 -29
  183. data/spec/commands/zscan_each_spec.rb +0 -48
  184. data/spec/commands/zscan_spec.rb +0 -26
  185. data/spec/commands/zscore_spec.rb +0 -22
  186. data/spec/commands/zunionstore_spec.rb +0 -137
  187. data/spec/mock_redis_spec.rb +0 -93
  188. data/spec/spec_helper.rb +0 -74
  189. data/spec/support/redis_multiplexer.rb +0 -123
  190. data/spec/support/shared_examples/does_not_cleanup_empty_strings.rb +0 -14
  191. data/spec/support/shared_examples/only_operates_on_hashes.rb +0 -15
  192. data/spec/support/shared_examples/only_operates_on_lists.rb +0 -15
  193. data/spec/support/shared_examples/only_operates_on_sets.rb +0 -15
  194. data/spec/support/shared_examples/only_operates_on_strings.rb +0 -13
  195. data/spec/support/shared_examples/only_operates_on_zsets.rb +0 -59
  196. data/spec/support/shared_examples/sorts_enumerables.rb +0 -56
  197. data/spec/transactions_spec.rb +0 -163
@@ -1,122 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#xadd("mystream", { f1: "v1", f2: "v2" }, id: "0-0", maxlen: 1000, approximate: true)' do
4
- before :all do
5
- sleep 1 - (Time.now.to_f % 1)
6
- @key = 'mock-redis-test:xadd'
7
- end
8
-
9
- before :each do
10
- # TODO: Redis appears to be returning a timestamp a few seconds in the future
11
- # so we're ignoring the last 5 digits (time in milliseconds)
12
- @redises._gsub(/\d{5}-\d/, '....-.')
13
- end
14
-
15
- it 'returns an id based on the timestamp' do
16
- t = Time.now.to_i
17
- id = @redises.xadd(@key, { key: 'value' })
18
- expect(id).to match(/#{t}\d{3}-0/)
19
- end
20
-
21
- it 'adds data with symbols' do
22
- @redises.xadd(@key, { symbol_key: :symbol_value })
23
- expect(@redises.xrange(@key, '-', '+').last[1])
24
- .to eq('symbol_key' => 'symbol_value')
25
- end
26
-
27
- it 'increments the sequence number with the same timestamp' do
28
- Timecop.freeze do
29
- @redises.xadd(@key, { key: 'value' })
30
- expect(@redises.xadd(@key, { key: 'value' })).to match(/\d+-1/)
31
- end
32
- end
33
-
34
- it 'sets the id if it is given' do
35
- expect(@redises.xadd(@key, { key: 'value' }, id: '1234567891234-2'))
36
- .to eq '1234567891234-2'
37
- end
38
-
39
- it 'accepts is as an integer' do
40
- expect(@redises.xadd(@key, { key: 'value' }, id: 1_234_567_891_234))
41
- .to eq '1234567891234-0'
42
- end
43
-
44
- it 'raises exception if id is less that stream top item' do
45
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
46
- expect { @redises.xadd(@key, { key: 'value' }, id: '1234567891233-0') }
47
- .to raise_error(
48
- Redis::CommandError,
49
- 'ERR The ID specified in XADD is equal or smaller than the target ' \
50
- 'stream top item'
51
- )
52
- end
53
-
54
- it 'raises exception if id of 0 is added to an empty stream' do
55
- expect { @redises.xadd('mock-redis-test:unknown-stream', { key: 'value' }, id: '0') }
56
- .to raise_error(
57
- Redis::CommandError,
58
- 'ERR The ID specified in XADD must be greater than 0-0'
59
- )
60
- end
61
-
62
- it 'does not raise exception on empty stream with id of 0 and positive sequence number' do
63
- expect { @redises.xadd('mock-redis-test:unknown-stream', { key: 'value' }, id: '0-1') }
64
- .to_not raise_error
65
- end
66
-
67
- it 'caters for the current time being before the last time' do
68
- t = (Time.now.to_f * 1000).to_i + 2000
69
- @redises.xadd(@key, { key: 'value' }, id: "#{t}-0")
70
- expect(@redises.xadd(@key, { key: 'value' })).to match(/#{t}-1/)
71
- end
72
-
73
- it 'appends a sequence number if it is missing' do
74
- expect(@redises.xadd(@key, { key: 'value' }, id: '1234567891234'))
75
- .to eq '1234567891234-0'
76
- end
77
-
78
- it 'raises an invalid stream id error' do
79
- expect { @redises.xadd(@key, { key: 'value' }, id: 'X') }
80
- .to raise_error(
81
- Redis::CommandError,
82
- 'ERR Invalid stream ID specified as stream command argument'
83
- )
84
- end
85
-
86
- it 'caps the stream to 5 elements' do
87
- @redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
88
- @redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0')
89
- @redises.xadd(@key, { key3: 'value3' }, id: '1234567891245-1')
90
- @redises.xadd(@key, { key4: 'value4' }, id: '1234567891278-0')
91
- @redises.xadd(@key, { key5: 'value5' }, id: '1234567891278-1')
92
- @redises.xadd(@key, { key6: 'value6' }, id: '1234567891299-0')
93
- @redises.xadd(@key, { key7: 'value7' }, id: '1234567891300-0', maxlen: 5)
94
- expect(@redises.xrange(@key, '-', '+')).to eq(
95
- [
96
- ['1234567891245-1', { 'key3' => 'value3' }],
97
- ['1234567891278-0', { 'key4' => 'value4' }],
98
- ['1234567891278-1', { 'key5' => 'value5' }],
99
- ['1234567891299-0', { 'key6' => 'value6' }],
100
- ['1234567891300-0', { 'key7' => 'value7' }]
101
- ]
102
- )
103
- end
104
-
105
- it 'supports a maxlen greater than the current size' do
106
- @redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
107
- @redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0', maxlen: 1000)
108
- expect(@redises.xrange(@key, '-', '+')).to eq(
109
- [
110
- ['1234567891234-0', { 'key1' => 'value1' }],
111
- ['1234567891245-0', { 'key2' => 'value2' }],
112
- ]
113
- )
114
- end
115
-
116
- it 'creates an empty stream with maxlen of 0' do
117
- @redises.xadd(@key, { key: 'value' }, maxlen: 0)
118
- expect(@redises.xlen(@key)).to eq 0
119
- expect(@redises.xrange(@key, '-', '+')).to eq([])
120
- expect(@redises.exists?(@key)).to eq true
121
- end
122
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#xlen(key)' do
4
- before :all do
5
- sleep 1 - (Time.now.to_f % 1)
6
- @key = 'mock-redis-test:xlen'
7
- end
8
-
9
- before :each do
10
- # TODO: Redis appears to be returning a timestamp a few seconds in the future
11
- # so we're ignoring the last 5 digits (time in milliseconds)
12
- @redises._gsub(/\d{5}-\d/, '...-.')
13
- end
14
-
15
- it 'returns the number of items in the stream' do
16
- expect(@redises.xlen(@key)).to eq 0
17
- @redises.xadd(@key, { key: 'value' })
18
- expect(@redises.xlen(@key)).to eq 1
19
- 3.times { @redises.xadd(@key, { key: 'value' }) }
20
- expect(@redises.xlen(@key)).to eq 4
21
- end
22
- end
@@ -1,164 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#xrange("mystream", first: "0-1", last: "0-3", count: 10)' do
4
- before { @key = 'mock-redis-test:xrange' }
5
-
6
- it 'finds an empty range' do
7
- expect(@redises.xrange(@key, '-', '+')).to eq []
8
- end
9
-
10
- it 'finds a single entry with a full range' do
11
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
12
- expect(@redises.xrange(@key, '-', '+'))
13
- .to eq [['1234567891234-0', { 'key' => 'value' }]]
14
- end
15
-
16
- it 'finds multiple key/value pairs with a full range' do
17
- @redises.xadd(@key, { key1: 'value1', key2: 'value2', key3: 'value3' }, id: '1234567891234-0')
18
- expect(@redises.xrange(@key, '-', '+'))
19
- .to eq [['1234567891234-0', { 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }]]
20
- end
21
-
22
- context 'six items on the list' do
23
- before :each do
24
- @redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
25
- @redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0')
26
- @redises.xadd(@key, { key3: 'value3' }, id: '1234567891245-1')
27
- @redises.xadd(@key, { key4: 'value4' }, id: '1234567891278-0')
28
- @redises.xadd(@key, { key5: 'value5' }, id: '1234567891278-1')
29
- @redises.xadd(@key, { key6: 'value6' }, id: '1234567891299-0')
30
- end
31
-
32
- it 'returns entries in sequential order' do
33
- expect(@redises.xrange(@key, '-', '+')).to eq(
34
- [
35
- ['1234567891234-0', { 'key1' => 'value1' }],
36
- ['1234567891245-0', { 'key2' => 'value2' }],
37
- ['1234567891245-1', { 'key3' => 'value3' }],
38
- ['1234567891278-0', { 'key4' => 'value4' }],
39
- ['1234567891278-1', { 'key5' => 'value5' }],
40
- ['1234567891299-0', { 'key6' => 'value6' }]
41
- ]
42
- )
43
- end
44
-
45
- it 'returns entries with a lower limit' do
46
- expect(@redises.xrange(@key, '1234567891239-0', '+')).to eq(
47
- [
48
- ['1234567891245-0', { 'key2' => 'value2' }],
49
- ['1234567891245-1', { 'key3' => 'value3' }],
50
- ['1234567891278-0', { 'key4' => 'value4' }],
51
- ['1234567891278-1', { 'key5' => 'value5' }],
52
- ['1234567891299-0', { 'key6' => 'value6' }]
53
- ]
54
- )
55
- end
56
-
57
- it 'returns all entries with a lower limit of 0-0' do
58
- expect(@redises.xrange(@key, '0-0', '+')).to eq(
59
- [
60
- ['1234567891234-0', { 'key1' => 'value1' }],
61
- ['1234567891245-0', { 'key2' => 'value2' }],
62
- ['1234567891245-1', { 'key3' => 'value3' }],
63
- ['1234567891278-0', { 'key4' => 'value4' }],
64
- ['1234567891278-1', { 'key5' => 'value5' }],
65
- ['1234567891299-0', { 'key6' => 'value6' }]
66
- ]
67
- )
68
- end
69
-
70
- it 'returns entries with an upper limit' do
71
- expect(@redises.xrange(@key, '-', '1234567891285-0')).to eq(
72
- [
73
- ['1234567891234-0', { 'key1' => 'value1' }],
74
- ['1234567891245-0', { 'key2' => 'value2' }],
75
- ['1234567891245-1', { 'key3' => 'value3' }],
76
- ['1234567891278-0', { 'key4' => 'value4' }],
77
- ['1234567891278-1', { 'key5' => 'value5' }]
78
- ]
79
- )
80
- end
81
-
82
- it 'returns entries with both a lower and an upper limit inclusive' do
83
- expect(@redises.xrange(@key, '1234567891245-0', '1234567891278-0')).to eq(
84
- [
85
- ['1234567891245-0', { 'key2' => 'value2' }],
86
- ['1234567891245-1', { 'key3' => 'value3' }],
87
- ['1234567891278-0', { 'key4' => 'value4' }]
88
- ]
89
- )
90
- end
91
-
92
- it 'returns entries with both a lower and an upper limit exclusive' do
93
- expect(@redises.xrange(@key, '(1234567891245-0', '1234567891285-1')).to eq(
94
- [
95
- # We no longer get '1234567891245-0'
96
- ['1234567891245-1', { 'key3' => 'value3' }],
97
- ['1234567891278-0', { 'key4' => 'value4' }],
98
- ['1234567891278-1', { 'key5' => 'value5' }] # Note sequence -1
99
- ]
100
- )
101
- end
102
-
103
- it 'finds the list with sequence numbers' do
104
- expect(@redises.xrange(@key, '1234567891245-1', '1234567891278-0')).to eq(
105
- [
106
- ['1234567891245-1', { 'key3' => 'value3' }],
107
- ['1234567891278-0', { 'key4' => 'value4' }]
108
- ]
109
- )
110
- end
111
-
112
- it 'finds the list with lower bound without sequence numbers' do
113
- expect(@redises.xrange(@key, '1234567891245', '+')).to eq(
114
- [
115
- ['1234567891245-0', { 'key2' => 'value2' }],
116
- ['1234567891245-1', { 'key3' => 'value3' }],
117
- ['1234567891278-0', { 'key4' => 'value4' }],
118
- ['1234567891278-1', { 'key5' => 'value5' }],
119
- ['1234567891299-0', { 'key6' => 'value6' }]
120
- ]
121
- )
122
- end
123
-
124
- it 'finds the list with upper bound without sequence numbers' do
125
- expect(@redises.xrange(@key, '-', '1234567891278')).to eq(
126
- [
127
- ['1234567891234-0', { 'key1' => 'value1' }],
128
- ['1234567891245-0', { 'key2' => 'value2' }],
129
- ['1234567891245-1', { 'key3' => 'value3' }],
130
- ['1234567891278-0', { 'key4' => 'value4' }],
131
- ['1234567891278-1', { 'key5' => 'value5' }]
132
- ]
133
- )
134
- end
135
-
136
- it 'accepts limits as integers' do
137
- expect(@redises.xrange(@key, 1_234_567_891_245, 1_234_567_891_278)).to eq(
138
- [
139
- ['1234567891245-0', { 'key2' => 'value2' }],
140
- ['1234567891245-1', { 'key3' => 'value3' }],
141
- ['1234567891278-0', { 'key4' => 'value4' }],
142
- ['1234567891278-1', { 'key5' => 'value5' }]
143
- ]
144
- )
145
- end
146
-
147
- it 'returns a limited number of items' do
148
- expect(@redises.xrange(@key, '-', '+', count: 2)).to eq(
149
- [
150
- ['1234567891234-0', { 'key1' => 'value1' }],
151
- ['1234567891245-0', { 'key2' => 'value2' }]
152
- ]
153
- )
154
- end
155
- end
156
-
157
- it 'raises an invalid stream id error' do
158
- expect { @redises.xrange(@key, 'X', '+') }
159
- .to raise_error(
160
- Redis::CommandError,
161
- 'ERR Invalid stream ID specified as stream command argument'
162
- )
163
- end
164
- end
@@ -1,66 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#xread(keys, ids)' do
4
- before :all do
5
- sleep 1 - (Time.now.to_f % 1)
6
- @key = 'mock-redis-test:xread'
7
- @key1 = 'mock-redis-test:xread1'
8
- end
9
-
10
- it 'reads a single entry' do
11
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
12
- expect(@redises.xread(@key, '0-0'))
13
- .to eq({ @key => [['1234567891234-0', { 'key' => 'value' }]] })
14
- end
15
-
16
- it 'reads multiple entries from the beginning of the stream' do
17
- @redises.xadd(@key, { key0: 'value0' }, id: '1234567891234-0')
18
- @redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-1')
19
- expect(@redises.xread(@key, '0-0'))
20
- .to eq({ @key => [['1234567891234-0', { 'key0' => 'value0' }],
21
- ['1234567891234-1', { 'key1' => 'value1' }]] })
22
- end
23
-
24
- it 'reads entries greater than the ID passed' do
25
- @redises.xadd(@key, { key0: 'value0' }, id: '1234567891234-0')
26
- @redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-1')
27
- expect(@redises.xread(@key, '1234567891234-0'))
28
- .to eq({ @key => [['1234567891234-1', { 'key1' => 'value1' }]] })
29
- end
30
-
31
- it 'reads from multiple streams' do
32
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
33
- @redises.xadd(@key1, { key1: 'value1' }, id: '1234567891234-0')
34
- expect(@redises.xread([@key, @key1], %w[0-0 0-0]))
35
- .to eq({ @key => [['1234567891234-0', { 'key' => 'value' }]],
36
- @key1 => [['1234567891234-0', { 'key1' => 'value1' }]] })
37
- end
38
-
39
- it 'reads from multiple streams at the given IDs' do
40
- @redises.xadd(@key, { key: 'value0' }, id: '1234567891234-0')
41
- @redises.xadd(@key, { key: 'value1' }, id: '1234567891234-1')
42
- @redises.xadd(@key, { key: 'value2' }, id: '1234567891234-2')
43
- @redises.xadd(@key1, { key1: 'value0' }, id: '1234567891234-0')
44
- @redises.xadd(@key1, { key1: 'value1' }, id: '1234567891234-1')
45
- @redises.xadd(@key1, { key1: 'value2' }, id: '1234567891234-2')
46
- # The first stream won't return anything since we specify the last ID
47
- expect(@redises.xread([@key, @key1], %w[1234567891234-2 1234567891234-1]))
48
- .to eq({ @key1 => [['1234567891234-2', { 'key1' => 'value2' }]] })
49
- end
50
-
51
- it 'supports the block parameter' do
52
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
53
- expect(@redises.xread(@key, '0-0', block: 1000))
54
- .to eq({ @key => [['1234567891234-0', { 'key' => 'value' }]] })
55
- end
56
-
57
- it 'limits results with count' do
58
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
59
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-1')
60
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-2')
61
- expect(@redises.xread(@key, '0-0', count: 1))
62
- .to eq({ @key => [['1234567891234-0', { 'key' => 'value' }]] })
63
- expect(@redises.xread(@key, '1234567891234-0', count: 1))
64
- .to eq({ @key => [['1234567891234-1', { 'key' => 'value' }]] })
65
- end
66
- end
@@ -1,130 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#xrevrange(key, start, end)' do
4
- before { @key = 'mock-redis-test:xrevrange' }
5
-
6
- it 'finds an empty range' do
7
- expect(@redises.xrevrange(@key, '-', '+')).to eq []
8
- end
9
-
10
- it 'finds a single entry with a full range' do
11
- @redises.xadd(@key, { key: 'value' }, id: '1234567891234-0')
12
- expect(@redises.xrevrange(@key, '+', '-'))
13
- .to eq [['1234567891234-0', { 'key' => 'value' }]]
14
- end
15
-
16
- it 'finds multiple key/value pairs with a full range' do
17
- @redises.xadd(@key, { key1: 'value1', key2: 'value2', key3: 'value3' }, id: '1234567891234-0')
18
- expect(@redises.xrevrange(@key, '+', '-'))
19
- .to eq [['1234567891234-0', { 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }]]
20
- end
21
-
22
- context 'six items on the list' do
23
- before :each do
24
- @redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
25
- @redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0')
26
- @redises.xadd(@key, { key3: 'value3' }, id: '1234567891245-1')
27
- @redises.xadd(@key, { key4: 'value4' }, id: '1234567891278-0')
28
- @redises.xadd(@key, { key5: 'value5' }, id: '1234567891278-1')
29
- @redises.xadd(@key, { key6: 'value6' }, id: '1234567891299-0')
30
- end
31
-
32
- it 'returns entries in sequential order' do
33
- expect(@redises.xrevrange(@key, '+', '-')).to eq(
34
- [
35
- ['1234567891299-0', { 'key6' => 'value6' }],
36
- ['1234567891278-1', { 'key5' => 'value5' }],
37
- ['1234567891278-0', { 'key4' => 'value4' }],
38
- ['1234567891245-1', { 'key3' => 'value3' }],
39
- ['1234567891245-0', { 'key2' => 'value2' }],
40
- ['1234567891234-0', { 'key1' => 'value1' }],
41
- ]
42
- )
43
- end
44
-
45
- it 'returns entries with a lower limit' do
46
- expect(@redises.xrevrange(@key, '+', '1234567891239-0')).to eq(
47
- [
48
- ['1234567891299-0', { 'key6' => 'value6' }],
49
- ['1234567891278-1', { 'key5' => 'value5' }],
50
- ['1234567891278-0', { 'key4' => 'value4' }],
51
- ['1234567891245-1', { 'key3' => 'value3' }],
52
- ['1234567891245-0', { 'key2' => 'value2' }],
53
- ]
54
- )
55
- end
56
-
57
- it 'returns entries with an upper limit' do
58
- expect(@redises.xrevrange(@key, '1234567891285-0', '-')).to eq(
59
- [
60
- ['1234567891278-1', { 'key5' => 'value5' }],
61
- ['1234567891278-0', { 'key4' => 'value4' }],
62
- ['1234567891245-1', { 'key3' => 'value3' }],
63
- ['1234567891245-0', { 'key2' => 'value2' }],
64
- ['1234567891234-0', { 'key1' => 'value1' }],
65
- ]
66
- )
67
- end
68
-
69
- it 'returns entries with both a lower and an upper limit' do
70
- expect(@redises.xrevrange(@key, '1234567891285-0', '1234567891239-0')).to eq(
71
- [
72
- ['1234567891278-1', { 'key5' => 'value5' }],
73
- ['1234567891278-0', { 'key4' => 'value4' }],
74
- ['1234567891245-1', { 'key3' => 'value3' }],
75
- ['1234567891245-0', { 'key2' => 'value2' }],
76
- ]
77
- )
78
- end
79
-
80
- it 'finds the list with sequence numbers' do
81
- expect(@redises.xrevrange(@key, '1234567891278-0', '1234567891245-1')).to eq(
82
- [
83
- ['1234567891278-0', { 'key4' => 'value4' }],
84
- ['1234567891245-1', { 'key3' => 'value3' }],
85
- ]
86
- )
87
- end
88
-
89
- it 'finds the list with lower bound without sequence numbers' do
90
- expect(@redises.xrevrange(@key, '+', '1234567891245')).to eq(
91
- [
92
- ['1234567891299-0', { 'key6' => 'value6' }],
93
- ['1234567891278-1', { 'key5' => 'value5' }],
94
- ['1234567891278-0', { 'key4' => 'value4' }],
95
- ['1234567891245-1', { 'key3' => 'value3' }],
96
- ['1234567891245-0', { 'key2' => 'value2' }],
97
- ]
98
- )
99
- end
100
-
101
- it 'finds the list with upper bound without sequence numbers' do
102
- expect(@redises.xrevrange(@key, '1234567891278', '-')).to eq(
103
- [
104
- ['1234567891278-1', { 'key5' => 'value5' }],
105
- ['1234567891278-0', { 'key4' => 'value4' }],
106
- ['1234567891245-1', { 'key3' => 'value3' }],
107
- ['1234567891245-0', { 'key2' => 'value2' }],
108
- ['1234567891234-0', { 'key1' => 'value1' }],
109
- ]
110
- )
111
- end
112
-
113
- it 'returns a limited number of items' do
114
- expect(@redises.xrevrange(@key, count: 2)).to eq(
115
- [
116
- ['1234567891299-0', { 'key6' => 'value6' }],
117
- ['1234567891278-1', { 'key5' => 'value5' }],
118
- ]
119
- )
120
- end
121
- end
122
-
123
- it 'raises an invalid stream id error' do
124
- expect { @redises.xrevrange(@key, 'X', '-') }
125
- .to raise_error(
126
- Redis::CommandError,
127
- 'ERR Invalid stream ID specified as stream command argument'
128
- )
129
- end
130
- end
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#xtrim("mystream", 1000, approximate: true)' do
4
- before { @key = 'mock-redis-test:xtrim' }
5
-
6
- before :each do
7
- @redises.xadd(@key, { key1: 'value1' }, id: '1234567891234-0')
8
- @redises.xadd(@key, { key2: 'value2' }, id: '1234567891245-0')
9
- @redises.xadd(@key, { key3: 'value3' }, id: '1234567891245-1')
10
- @redises.xadd(@key, { key4: 'value4' }, id: '1234567891278-0')
11
- @redises.xadd(@key, { key5: 'value5' }, id: '1234567891278-1')
12
- @redises.xadd(@key, { key6: 'value6' }, id: '1234567891299-0')
13
- end
14
-
15
- it 'returns the number of elements deleted' do
16
- expect(@redises.xtrim(@key, 4)).to eq 2
17
- end
18
-
19
- it 'returns 0 if count is greater than size' do
20
- initial = @redises.xrange(@key, '-', '+')
21
- expect(@redises.xtrim(@key, 1000)).to eq 0
22
- expect(@redises.xrange(@key, '-', '+')).to eql(initial)
23
- end
24
-
25
- it 'deletes the oldes elements' do
26
- @redises.xtrim(@key, 4)
27
- expect(@redises.xrange(@key, '-', '+')).to eq(
28
- [
29
- ['1234567891245-1', { 'key3' => 'value3' }],
30
- ['1234567891278-0', { 'key4' => 'value4' }],
31
- ['1234567891278-1', { 'key5' => 'value5' }],
32
- ['1234567891299-0', { 'key6' => 'value6' }]
33
- ]
34
- )
35
- end
36
- end
@@ -1,129 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#zadd(key, score, member)' do
4
- before { @key = 'mock-redis-test:zadd' }
5
-
6
- it "returns true if member wasn't present in the set" do
7
- @redises.zadd(@key, 1, 'foo').should == true
8
- end
9
-
10
- it 'returns false if member was present in the set' do
11
- @redises.zadd(@key, 1, 'foo')
12
- @redises.zadd(@key, 1, 'foo').should == false
13
- end
14
-
15
- it 'adds member to the set' do
16
- @redises.zadd(@key, 1, 'foo')
17
- @redises.zrange(@key, 0, -1).should == ['foo']
18
- end
19
-
20
- it 'treats integer members as strings' do
21
- member = 11
22
- @redises.zadd(@key, 1, member)
23
- @redises.zrange(@key, 0, -1).should == [member.to_s]
24
- end
25
-
26
- it 'allows scores to be set to Float::INFINITY' do
27
- member = '1'
28
- @redises.zadd(@key, Float::INFINITY, member)
29
- @redises.zrange(@key, 0, -1).should == [member]
30
- end
31
-
32
- it 'updates the score' do
33
- @redises.zadd(@key, 1, 'foo')
34
- @redises.zadd(@key, 2, 'foo')
35
-
36
- @redises.zscore(@key, 'foo').should == 2.0
37
- end
38
-
39
- it 'with XX option command do nothing if element not exist' do
40
- @redises.zadd(@key, 1, 'foo')
41
- @redises.zadd(@key, 2, 'bar', xx: true)
42
- @redises.zrange(@key, 0, -1).should_not include 'bar'
43
- end
44
-
45
- it 'with XX option command update index on exist element' do
46
- @redises.zadd(@key, 1, 'foo')
47
- @redises.zadd(@key, 2, 'foo', xx: true)
48
- @redises.zscore(@key, 'foo').should == 2.0
49
- end
50
-
51
- it 'with XX option and multiple elements command update index on exist element' do
52
- @redises.zadd(@key, 1, 'foo')
53
- added_count = @redises.zadd(@key, [[2, 'foo'], [2, 'bar']], xx: true)
54
- added_count.should == 0
55
-
56
- @redises.zscore(@key, 'foo').should == 2.0
57
- @redises.zrange(@key, 0, -1).should_not include 'bar'
58
- end
59
-
60
- it "with NX option don't update current element" do
61
- @redises.zadd(@key, 1, 'foo')
62
- @redises.zadd(@key, 2, 'foo', nx: true)
63
- @redises.zscore(@key, 'foo').should == 1.0
64
- end
65
-
66
- it 'with NX option create new element' do
67
- @redises.zadd(@key, 1, 'foo')
68
- @redises.zadd(@key, 2, 'bar', nx: true)
69
- @redises.zrange(@key, 0, -1).should include 'bar'
70
- end
71
-
72
- it 'with NX option and multiple elements command only create element' do
73
- @redises.zadd(@key, 1, 'foo')
74
- added_count = @redises.zadd(@key, [[2, 'foo'], [2, 'bar']], nx: true)
75
- added_count.should == 1
76
- @redises.zscore(@key, 'bar').should == 2.0
77
- @redises.zrange(@key, 0, -1).should eq %w[foo bar]
78
- end
79
-
80
- it 'XX and NX options in same time raise error' do
81
- lambda do
82
- @redises.zadd(@key, 1, 'foo', nx: true, xx: true)
83
- end.should raise_error(Redis::CommandError)
84
- end
85
-
86
- it 'with INCR is act like zincrby' do
87
- @redises.zadd(@key, 10, 'bert', incr: true).should == 10.0
88
- @redises.zadd(@key, 3, 'bert', incr: true).should == 13.0
89
- end
90
-
91
- it 'with INCR and XX not create element' do
92
- @redises.zadd(@key, 10, 'bert', xx: true, incr: true).should be_nil
93
- end
94
-
95
- it 'with INCR and XX increase score for exist element' do
96
- @redises.zadd(@key, 2, 'bert')
97
- @redises.zadd(@key, 10, 'bert', xx: true, incr: true).should == 12.0
98
- end
99
-
100
- it 'with INCR and NX create element with score' do
101
- @redises.zadd(@key, 11, 'bert', nx: true, incr: true).should == 11.0
102
- end
103
-
104
- it 'with INCR and NX not update element' do
105
- @redises.zadd(@key, 1, 'bert')
106
- @redises.zadd(@key, 10, 'bert', nx: true, incr: true).should be_nil
107
- end
108
-
109
- it 'with INCR with variable number of arguments raise error' do
110
- lambda do
111
- @redises.zadd(@key, [[1, 'one'], [2, 'two']], incr: true)
112
- end.should raise_error(Redis::CommandError)
113
- end
114
-
115
- it 'supports a variable number of arguments' do
116
- @redises.zadd(@key, [[1, 'one'], [2, 'two']])
117
- @redises.zadd(@key, [[3, 'three']])
118
- @redises.zrange(@key, 0, -1).should == %w[one two three]
119
- end
120
-
121
- it 'raises an error if an empty array is given' do
122
- lambda do
123
- @redises.zadd(@key, [])
124
- end.should raise_error(Redis::CommandError)
125
- end
126
-
127
- it_should_behave_like 'arg 1 is a score'
128
- it_should_behave_like 'a zset-only command'
129
- end