redis 3.3.5 → 5.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +290 -2
  3. data/README.md +146 -146
  4. data/lib/redis/client.rb +79 -541
  5. data/lib/redis/commands/bitmaps.rb +66 -0
  6. data/lib/redis/commands/cluster.rb +28 -0
  7. data/lib/redis/commands/connection.rb +53 -0
  8. data/lib/redis/commands/geo.rb +84 -0
  9. data/lib/redis/commands/hashes.rb +254 -0
  10. data/lib/redis/commands/hyper_log_log.rb +37 -0
  11. data/lib/redis/commands/keys.rb +437 -0
  12. data/lib/redis/commands/lists.rb +339 -0
  13. data/lib/redis/commands/pubsub.rb +54 -0
  14. data/lib/redis/commands/scripting.rb +114 -0
  15. data/lib/redis/commands/server.rb +188 -0
  16. data/lib/redis/commands/sets.rb +214 -0
  17. data/lib/redis/commands/sorted_sets.rb +884 -0
  18. data/lib/redis/commands/streams.rb +402 -0
  19. data/lib/redis/commands/strings.rb +314 -0
  20. data/lib/redis/commands/transactions.rb +115 -0
  21. data/lib/redis/commands.rb +237 -0
  22. data/lib/redis/distributed.rb +328 -108
  23. data/lib/redis/errors.rb +23 -1
  24. data/lib/redis/hash_ring.rb +36 -79
  25. data/lib/redis/pipeline.rb +69 -83
  26. data/lib/redis/subscribe.rb +26 -19
  27. data/lib/redis/version.rb +3 -1
  28. data/lib/redis.rb +115 -2695
  29. metadata +38 -218
  30. data/.gitignore +0 -16
  31. data/.travis/Gemfile +0 -11
  32. data/.travis.yml +0 -89
  33. data/.yardopts +0 -3
  34. data/Gemfile +0 -4
  35. data/Rakefile +0 -87
  36. data/benchmarking/logging.rb +0 -71
  37. data/benchmarking/pipeline.rb +0 -51
  38. data/benchmarking/speed.rb +0 -21
  39. data/benchmarking/suite.rb +0 -24
  40. data/benchmarking/worker.rb +0 -71
  41. data/examples/basic.rb +0 -15
  42. data/examples/consistency.rb +0 -114
  43. data/examples/dist_redis.rb +0 -43
  44. data/examples/incr-decr.rb +0 -17
  45. data/examples/list.rb +0 -26
  46. data/examples/pubsub.rb +0 -37
  47. data/examples/sentinel/sentinel.conf +0 -9
  48. data/examples/sentinel/start +0 -49
  49. data/examples/sentinel.rb +0 -41
  50. data/examples/sets.rb +0 -36
  51. data/examples/unicorn/config.ru +0 -3
  52. data/examples/unicorn/unicorn.rb +0 -20
  53. data/lib/redis/connection/command_helper.rb +0 -44
  54. data/lib/redis/connection/hiredis.rb +0 -66
  55. data/lib/redis/connection/registry.rb +0 -12
  56. data/lib/redis/connection/ruby.rb +0 -429
  57. data/lib/redis/connection/synchrony.rb +0 -133
  58. data/lib/redis/connection.rb +0 -9
  59. data/redis.gemspec +0 -44
  60. data/test/bitpos_test.rb +0 -69
  61. data/test/blocking_commands_test.rb +0 -42
  62. data/test/client_test.rb +0 -59
  63. data/test/command_map_test.rb +0 -30
  64. data/test/commands_on_hashes_test.rb +0 -21
  65. data/test/commands_on_hyper_log_log_test.rb +0 -21
  66. data/test/commands_on_lists_test.rb +0 -20
  67. data/test/commands_on_sets_test.rb +0 -77
  68. data/test/commands_on_sorted_sets_test.rb +0 -137
  69. data/test/commands_on_strings_test.rb +0 -101
  70. data/test/commands_on_value_types_test.rb +0 -133
  71. data/test/connection_handling_test.rb +0 -277
  72. data/test/connection_test.rb +0 -57
  73. data/test/db/.gitkeep +0 -0
  74. data/test/distributed_blocking_commands_test.rb +0 -46
  75. data/test/distributed_commands_on_hashes_test.rb +0 -10
  76. data/test/distributed_commands_on_hyper_log_log_test.rb +0 -33
  77. data/test/distributed_commands_on_lists_test.rb +0 -22
  78. data/test/distributed_commands_on_sets_test.rb +0 -83
  79. data/test/distributed_commands_on_sorted_sets_test.rb +0 -18
  80. data/test/distributed_commands_on_strings_test.rb +0 -59
  81. data/test/distributed_commands_on_value_types_test.rb +0 -95
  82. data/test/distributed_commands_requiring_clustering_test.rb +0 -164
  83. data/test/distributed_connection_handling_test.rb +0 -23
  84. data/test/distributed_internals_test.rb +0 -79
  85. data/test/distributed_key_tags_test.rb +0 -52
  86. data/test/distributed_persistence_control_commands_test.rb +0 -26
  87. data/test/distributed_publish_subscribe_test.rb +0 -92
  88. data/test/distributed_remote_server_control_commands_test.rb +0 -66
  89. data/test/distributed_scripting_test.rb +0 -102
  90. data/test/distributed_sorting_test.rb +0 -20
  91. data/test/distributed_test.rb +0 -58
  92. data/test/distributed_transactions_test.rb +0 -32
  93. data/test/encoding_test.rb +0 -18
  94. data/test/error_replies_test.rb +0 -59
  95. data/test/fork_safety_test.rb +0 -65
  96. data/test/helper.rb +0 -232
  97. data/test/helper_test.rb +0 -24
  98. data/test/internals_test.rb +0 -417
  99. data/test/lint/blocking_commands.rb +0 -150
  100. data/test/lint/hashes.rb +0 -162
  101. data/test/lint/hyper_log_log.rb +0 -60
  102. data/test/lint/lists.rb +0 -143
  103. data/test/lint/sets.rb +0 -140
  104. data/test/lint/sorted_sets.rb +0 -316
  105. data/test/lint/strings.rb +0 -260
  106. data/test/lint/value_types.rb +0 -122
  107. data/test/persistence_control_commands_test.rb +0 -26
  108. data/test/pipelining_commands_test.rb +0 -242
  109. data/test/publish_subscribe_test.rb +0 -282
  110. data/test/remote_server_control_commands_test.rb +0 -118
  111. data/test/scanning_test.rb +0 -413
  112. data/test/scripting_test.rb +0 -78
  113. data/test/sentinel_command_test.rb +0 -80
  114. data/test/sentinel_test.rb +0 -255
  115. data/test/sorting_test.rb +0 -59
  116. data/test/ssl_test.rb +0 -73
  117. data/test/support/connection/hiredis.rb +0 -1
  118. data/test/support/connection/ruby.rb +0 -1
  119. data/test/support/connection/synchrony.rb +0 -17
  120. data/test/support/redis_mock.rb +0 -130
  121. data/test/support/ssl/gen_certs.sh +0 -31
  122. data/test/support/ssl/trusted-ca.crt +0 -25
  123. data/test/support/ssl/trusted-ca.key +0 -27
  124. data/test/support/ssl/trusted-cert.crt +0 -81
  125. data/test/support/ssl/trusted-cert.key +0 -28
  126. data/test/support/ssl/untrusted-ca.crt +0 -26
  127. data/test/support/ssl/untrusted-ca.key +0 -27
  128. data/test/support/ssl/untrusted-cert.crt +0 -82
  129. data/test/support/ssl/untrusted-cert.key +0 -28
  130. data/test/support/wire/synchrony.rb +0 -24
  131. data/test/support/wire/thread.rb +0 -5
  132. data/test/synchrony_driver.rb +0 -88
  133. data/test/test.conf.erb +0 -9
  134. data/test/thread_safety_test.rb +0 -62
  135. data/test/transactions_test.rb +0 -264
  136. data/test/unknown_commands_test.rb +0 -14
  137. data/test/url_param_test.rb +0 -138
@@ -1,413 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require File.expand_path("helper", File.dirname(__FILE__))
4
-
5
- unless defined?(Enumerator)
6
- Enumerator = Enumerable::Enumerator
7
- end
8
-
9
- class TestScanning < Test::Unit::TestCase
10
-
11
- include Helper::Client
12
-
13
- def test_scan_basic
14
- target_version "2.7.105" do
15
- r.debug :populate, 1000
16
-
17
- cursor = 0
18
- all_keys = []
19
- loop {
20
- cursor, keys = r.scan cursor
21
- all_keys += keys
22
- break if cursor == "0"
23
- }
24
-
25
- assert_equal 1000, all_keys.uniq.size
26
- end
27
- end
28
-
29
- def test_scan_count
30
- target_version "2.7.105" do
31
- r.debug :populate, 1000
32
-
33
- cursor = 0
34
- all_keys = []
35
- loop {
36
- cursor, keys = r.scan cursor, :count => 5
37
- all_keys += keys
38
- break if cursor == "0"
39
- }
40
-
41
- assert_equal 1000, all_keys.uniq.size
42
- end
43
- end
44
-
45
- def test_scan_match
46
- target_version "2.7.105" do
47
- r.debug :populate, 1000
48
-
49
- cursor = 0
50
- all_keys = []
51
- loop {
52
- cursor, keys = r.scan cursor, :match => "key:1??"
53
- all_keys += keys
54
- break if cursor == "0"
55
- }
56
-
57
- assert_equal 100, all_keys.uniq.size
58
- end
59
- end
60
-
61
- def test_scan_each_enumerator
62
- target_version "2.7.105" do
63
-
64
- r.debug :populate, 1000
65
-
66
- scan_enumerator = r.scan_each
67
- assert_equal true, scan_enumerator.is_a?(::Enumerator)
68
-
69
- keys_from_scan = scan_enumerator.to_a.uniq
70
- all_keys = r.keys "*"
71
-
72
- assert all_keys.sort == keys_from_scan.sort
73
- end
74
- end
75
-
76
- def test_scan_each_enumerator_match
77
- target_version "2.7.105" do
78
-
79
- r.debug :populate, 1000
80
-
81
- keys_from_scan = r.scan_each(:match => "key:1??").to_a.uniq
82
- all_keys = r.keys "key:1??"
83
-
84
- assert all_keys.sort == keys_from_scan.sort
85
- end
86
- end
87
-
88
- def test_scan_each_block
89
- target_version "2.7.105" do
90
-
91
- r.debug :populate, 100
92
-
93
- keys_from_scan = []
94
- r.scan_each {|key|
95
- keys_from_scan << key
96
- }
97
-
98
- all_keys = r.keys "*"
99
-
100
- assert all_keys.sort == keys_from_scan.uniq.sort
101
- end
102
- end
103
-
104
- def test_scan_each_block_match
105
- target_version "2.7.105" do
106
-
107
- r.debug :populate, 100
108
-
109
- keys_from_scan = []
110
- r.scan_each(:match => "key:1?") {|key|
111
- keys_from_scan << key
112
- }
113
-
114
- all_keys = r.keys "key:1?"
115
-
116
- assert all_keys.sort == keys_from_scan.uniq.sort
117
- end
118
- end
119
-
120
- def test_sscan_with_encoding
121
- target_version "2.7.105" do
122
- [:intset, :hashtable].each do |enc|
123
- r.del "set"
124
-
125
- prefix = ""
126
- prefix = "ele:" if enc == :hashtable
127
-
128
- elements = []
129
- 100.times { |j| elements << "#{prefix}#{j}" }
130
-
131
- r.sadd "set", elements
132
-
133
- assert_equal enc.to_s, r.object("encoding", "set")
134
-
135
- cursor = 0
136
- all_keys = []
137
- loop {
138
- cursor, keys = r.sscan "set", cursor
139
- all_keys += keys
140
- break if cursor == "0"
141
- }
142
-
143
- assert_equal 100, all_keys.uniq.size
144
- end
145
- end
146
- end
147
-
148
- def test_sscan_each_enumerator
149
- target_version "2.7.105" do
150
- elements = []
151
- 100.times { |j| elements << "ele:#{j}" }
152
- r.sadd "set", elements
153
-
154
- scan_enumerator = r.sscan_each("set")
155
- assert_equal true, scan_enumerator.is_a?(::Enumerator)
156
-
157
- keys_from_scan = scan_enumerator.to_a.uniq
158
- all_keys = r.smembers("set")
159
-
160
- assert all_keys.sort == keys_from_scan.sort
161
- end
162
- end
163
-
164
- def test_sscan_each_enumerator_match
165
- target_version "2.7.105" do
166
- elements = []
167
- 100.times { |j| elements << "ele:#{j}" }
168
- r.sadd "set", elements
169
-
170
- keys_from_scan = r.sscan_each("set", :match => "ele:1?").to_a.uniq
171
-
172
- all_keys = r.smembers("set").grep(/^ele:1.$/)
173
-
174
- assert all_keys.sort == keys_from_scan.sort
175
- end
176
- end
177
-
178
- def test_sscan_each_enumerator_block
179
- target_version "2.7.105" do
180
- elements = []
181
- 100.times { |j| elements << "ele:#{j}" }
182
- r.sadd "set", elements
183
-
184
- keys_from_scan = []
185
- r.sscan_each("set") do |key|
186
- keys_from_scan << key
187
- end
188
-
189
- all_keys = r.smembers("set")
190
-
191
- assert all_keys.sort == keys_from_scan.uniq.sort
192
- end
193
- end
194
-
195
- def test_sscan_each_enumerator_block_match
196
- target_version "2.7.105" do
197
- elements = []
198
- 100.times { |j| elements << "ele:#{j}" }
199
- r.sadd "set", elements
200
-
201
- keys_from_scan = []
202
- r.sscan_each("set", :match => "ele:1?") do |key|
203
- keys_from_scan << key
204
- end
205
-
206
- all_keys = r.smembers("set").grep(/^ele:1.$/)
207
-
208
- assert all_keys.sort == keys_from_scan.uniq.sort
209
- end
210
- end
211
-
212
- def test_hscan_with_encoding
213
- target_version "2.7.105" do
214
- [:ziplist, :hashtable].each do |enc|
215
- r.del "set"
216
-
217
- count = 1000
218
- count = 30 if enc == :ziplist
219
-
220
- elements = []
221
- count.times { |j| elements << "key:#{j}" << j.to_s }
222
-
223
- r.hmset "hash", *elements
224
-
225
- assert_equal enc.to_s, r.object("encoding", "hash")
226
-
227
- cursor = 0
228
- all_key_values = []
229
- loop {
230
- cursor, key_values = r.hscan "hash", cursor
231
- all_key_values.concat key_values
232
- break if cursor == "0"
233
- }
234
-
235
- keys2 = []
236
- all_key_values.each do |k, v|
237
- assert_equal "key:#{v}", k
238
- keys2 << k
239
- end
240
-
241
- assert_equal count, keys2.uniq.size
242
- end
243
- end
244
- end
245
-
246
- def test_hscan_each_enumerator
247
- target_version "2.7.105" do
248
- count = 1000
249
- elements = []
250
- count.times { |j| elements << "key:#{j}" << j.to_s }
251
- r.hmset "hash", *elements
252
-
253
- scan_enumerator = r.hscan_each("hash")
254
- assert_equal true, scan_enumerator.is_a?(::Enumerator)
255
-
256
- keys_from_scan = scan_enumerator.to_a.uniq
257
- all_keys = r.hgetall("hash").to_a
258
-
259
- assert all_keys.sort == keys_from_scan.sort
260
- end
261
- end
262
-
263
- def test_hscan_each_enumerator_match
264
- target_version "2.7.105" do
265
- count = 100
266
- elements = []
267
- count.times { |j| elements << "key:#{j}" << j.to_s }
268
- r.hmset "hash", *elements
269
-
270
- keys_from_scan = r.hscan_each("hash", :match => "key:1?").to_a.uniq
271
- all_keys = r.hgetall("hash").to_a.select{|k,v| k =~ /^key:1.$/}
272
-
273
- assert all_keys.sort == keys_from_scan.sort
274
- end
275
- end
276
-
277
- def test_hscan_each_block
278
- target_version "2.7.105" do
279
- count = 1000
280
- elements = []
281
- count.times { |j| elements << "key:#{j}" << j.to_s }
282
- r.hmset "hash", *elements
283
-
284
- keys_from_scan = []
285
- r.hscan_each("hash") do |field, value|
286
- keys_from_scan << [field, value]
287
- end
288
- all_keys = r.hgetall("hash").to_a
289
-
290
- assert all_keys.sort == keys_from_scan.uniq.sort
291
- end
292
- end
293
-
294
- def test_hscan_each_block_match
295
- target_version "2.7.105" do
296
- count = 1000
297
- elements = []
298
- count.times { |j| elements << "key:#{j}" << j.to_s }
299
- r.hmset "hash", *elements
300
-
301
- keys_from_scan = []
302
- r.hscan_each("hash", :match => "key:1?") do |field, value|
303
- keys_from_scan << [field, value]
304
- end
305
- all_keys = r.hgetall("hash").to_a.select{|k,v| k =~ /^key:1.$/}
306
-
307
- assert all_keys.sort == keys_from_scan.uniq.sort
308
- end
309
- end
310
-
311
- def test_zscan_with_encoding
312
- target_version "2.7.105" do
313
- [:ziplist, :skiplist].each do |enc|
314
- r.del "zset"
315
-
316
- count = 1000
317
- count = 30 if enc == :ziplist
318
-
319
- elements = []
320
- count.times { |j| elements << j << "key:#{j}" }
321
-
322
- r.zadd "zset", elements
323
-
324
- assert_equal enc.to_s, r.object("encoding", "zset")
325
-
326
- cursor = 0
327
- all_key_scores = []
328
- loop {
329
- cursor, key_scores = r.zscan "zset", cursor
330
- all_key_scores.concat key_scores
331
- break if cursor == "0"
332
- }
333
-
334
- keys2 = []
335
- all_key_scores.each do |k, v|
336
- assert_equal true, v.is_a?(Float)
337
- assert_equal "key:#{Integer(v)}", k
338
- keys2 << k
339
- end
340
-
341
- assert_equal count, keys2.uniq.size
342
- end
343
- end
344
- end
345
-
346
- def test_zscan_each_enumerator
347
- target_version "2.7.105" do
348
- count = 1000
349
- elements = []
350
- count.times { |j| elements << j << "key:#{j}" }
351
- r.zadd "zset", elements
352
-
353
- scan_enumerator = r.zscan_each "zset"
354
- assert_equal true, scan_enumerator.is_a?(::Enumerator)
355
-
356
- scores_from_scan = scan_enumerator.to_a.uniq
357
- member_scores = r.zrange("zset", 0, -1, :with_scores => true)
358
-
359
- assert member_scores.sort == scores_from_scan.sort
360
- end
361
- end
362
-
363
- def test_zscan_each_enumerator_match
364
- target_version "2.7.105" do
365
- count = 1000
366
- elements = []
367
- count.times { |j| elements << j << "key:#{j}" }
368
- r.zadd "zset", elements
369
-
370
- scores_from_scan = r.zscan_each("zset", :match => "key:1??").to_a.uniq
371
- member_scores = r.zrange("zset", 0, -1, :with_scores => true)
372
- filtered_members = member_scores.select{|k,s| k =~ /^key:1..$/}
373
-
374
- assert filtered_members.sort == scores_from_scan.sort
375
- end
376
- end
377
-
378
- def test_zscan_each_block
379
- target_version "2.7.105" do
380
- count = 1000
381
- elements = []
382
- count.times { |j| elements << j << "key:#{j}" }
383
- r.zadd "zset", elements
384
-
385
- scores_from_scan = []
386
- r.zscan_each("zset") do |member, score|
387
- scores_from_scan << [member, score]
388
- end
389
- member_scores = r.zrange("zset", 0, -1, :with_scores => true)
390
-
391
- assert member_scores.sort == scores_from_scan.sort
392
- end
393
- end
394
-
395
- def test_zscan_each_block_match
396
- target_version "2.7.105" do
397
- count = 1000
398
- elements = []
399
- count.times { |j| elements << j << "key:#{j}" }
400
- r.zadd "zset", elements
401
-
402
- scores_from_scan = []
403
- r.zscan_each("zset", :match => "key:1??") do |member, score|
404
- scores_from_scan << [member, score]
405
- end
406
- member_scores = r.zrange("zset", 0, -1, :with_scores => true)
407
- filtered_members = member_scores.select{|k,s| k =~ /^key:1..$/}
408
-
409
- assert filtered_members.sort == scores_from_scan.sort
410
- end
411
- end
412
-
413
- end
@@ -1,78 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require File.expand_path("helper", File.dirname(__FILE__))
4
-
5
- class TestScripting < Test::Unit::TestCase
6
-
7
- include Helper::Client
8
-
9
- def to_sha(script)
10
- r.script(:load, script)
11
- end
12
-
13
- def test_script_exists
14
- target_version "2.5.9" do # 2.6-rc1
15
- a = to_sha("return 1")
16
- b = a.succ
17
-
18
- assert_equal true, r.script(:exists, a)
19
- assert_equal false, r.script(:exists, b)
20
- assert_equal [true], r.script(:exists, [a])
21
- assert_equal [false], r.script(:exists, [b])
22
- assert_equal [true, false], r.script(:exists, [a, b])
23
- end
24
- end
25
-
26
- def test_script_flush
27
- target_version "2.5.9" do # 2.6-rc1
28
- sha = to_sha("return 1")
29
- assert r.script(:exists, sha)
30
- assert_equal "OK", r.script(:flush)
31
- assert !r.script(:exists, sha)
32
- end
33
- end
34
-
35
- def test_script_kill
36
- target_version "2.5.9" do # 2.6-rc1
37
- redis_mock(:script => lambda { |arg| "+#{arg.upcase}" }) do |redis|
38
- assert_equal "KILL", redis.script(:kill)
39
- end
40
- end
41
- end
42
-
43
- def test_eval
44
- target_version "2.5.9" do # 2.6-rc1
45
- assert_equal 0, r.eval("return #KEYS")
46
- assert_equal 0, r.eval("return #ARGV")
47
- assert_equal ["k1", "k2"], r.eval("return KEYS", ["k1", "k2"])
48
- assert_equal ["a1", "a2"], r.eval("return ARGV", [], ["a1", "a2"])
49
- end
50
- end
51
-
52
- def test_eval_with_options_hash
53
- target_version "2.5.9" do # 2.6-rc1
54
- assert_equal 0, r.eval("return #KEYS", {})
55
- assert_equal 0, r.eval("return #ARGV", {})
56
- assert_equal ["k1", "k2"], r.eval("return KEYS", { :keys => ["k1", "k2"] })
57
- assert_equal ["a1", "a2"], r.eval("return ARGV", { :argv => ["a1", "a2"] })
58
- end
59
- end
60
-
61
- def test_evalsha
62
- target_version "2.5.9" do # 2.6-rc1
63
- assert_equal 0, r.evalsha(to_sha("return #KEYS"))
64
- assert_equal 0, r.evalsha(to_sha("return #ARGV"))
65
- assert_equal ["k1", "k2"], r.evalsha(to_sha("return KEYS"), ["k1", "k2"])
66
- assert_equal ["a1", "a2"], r.evalsha(to_sha("return ARGV"), [], ["a1", "a2"])
67
- end
68
- end
69
-
70
- def test_evalsha_with_options_hash
71
- target_version "2.5.9" do # 2.6-rc1
72
- assert_equal 0, r.evalsha(to_sha("return #KEYS"), {})
73
- assert_equal 0, r.evalsha(to_sha("return #ARGV"), {})
74
- assert_equal ["k1", "k2"], r.evalsha(to_sha("return KEYS"), { :keys => ["k1", "k2"] })
75
- assert_equal ["a1", "a2"], r.evalsha(to_sha("return ARGV"), { :argv => ["a1", "a2"] })
76
- end
77
- end
78
- end
@@ -1,80 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require File.expand_path("helper", File.dirname(__FILE__))
4
-
5
- class SentinelCommandsTest < Test::Unit::TestCase
6
-
7
- include Helper::Client
8
-
9
- def test_sentinel_command_master
10
-
11
- handler = lambda do |id|
12
- {
13
- :sentinel => lambda do |command, *args|
14
- ["name", "master1", "ip", "127.0.0.1"]
15
- end
16
- }
17
- end
18
-
19
- RedisMock.start(handler.call(:s1)) do |port|
20
- redis = Redis.new(:host => "127.0.0.1", :port => port)
21
-
22
- result = redis.sentinel('master', 'master1')
23
- assert_equal result, { "name" => "master1", "ip" => "127.0.0.1" }
24
- end
25
- end
26
-
27
- def test_sentinel_command_masters
28
-
29
- handler = lambda do |id|
30
- {
31
- :sentinel => lambda do |command, *args|
32
- [%w[name master1 ip 127.0.0.1 port 6381], %w[name master1 ip 127.0.0.1 port 6382]]
33
- end
34
- }
35
- end
36
-
37
- RedisMock.start(handler.call(:s1)) do |port|
38
- redis = Redis.new(:host => "127.0.0.1", :port => port)
39
-
40
- result = redis.sentinel('masters')
41
- assert_equal result[0], { "name" => "master1", "ip" => "127.0.0.1", "port" => "6381" }
42
- assert_equal result[1], { "name" => "master1", "ip" => "127.0.0.1", "port" => "6382" }
43
- end
44
- end
45
-
46
- def test_sentinel_command_get_master_by_name
47
-
48
- handler = lambda do |id|
49
- {
50
- :sentinel => lambda do |command, *args|
51
- ["127.0.0.1", "6381"]
52
- end
53
- }
54
- end
55
-
56
- RedisMock.start(handler.call(:s1)) do |port|
57
- redis = Redis.new(:host => "127.0.0.1", :port => port)
58
-
59
- result = redis.sentinel('get-master-addr-by-name', 'master1')
60
- assert_equal result, ["127.0.0.1", "6381"]
61
- end
62
- end
63
-
64
- def test_sentinel_command_ckquorum
65
- handler = lambda do |id|
66
- {
67
- :sentinel => lambda do |command, *args|
68
- "+OK 2 usable Sentinels. Quorum and failover authorization can be reached"
69
- end
70
- }
71
- end
72
-
73
- RedisMock.start(handler.call(:s1)) do |port|
74
- redis = Redis.new(:host => "127.0.0.1", :port => port)
75
-
76
- result = redis.sentinel('ckquorum', 'master1')
77
- assert_equal result, "OK 2 usable Sentinels. Quorum and failover authorization can be reached"
78
- end
79
- end
80
- end