redis 4.1.0.beta1 → 4.1.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 (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -2
  3. data/README.md +45 -0
  4. data/lib/redis.rb +497 -20
  5. data/lib/redis/client.rb +14 -6
  6. data/lib/redis/cluster.rb +1 -0
  7. data/lib/redis/cluster/command_loader.rb +2 -0
  8. data/lib/redis/cluster/node_loader.rb +2 -0
  9. data/lib/redis/cluster/option.rb +1 -0
  10. data/lib/redis/cluster/slot_loader.rb +2 -0
  11. data/lib/redis/distributed.rb +3 -4
  12. data/lib/redis/version.rb +1 -1
  13. metadata +20 -243
  14. data/.gitignore +0 -19
  15. data/.travis.yml +0 -61
  16. data/.travis/Gemfile +0 -18
  17. data/.yardopts +0 -3
  18. data/Gemfile +0 -8
  19. data/benchmarking/logging.rb +0 -71
  20. data/benchmarking/pipeline.rb +0 -51
  21. data/benchmarking/speed.rb +0 -21
  22. data/benchmarking/suite.rb +0 -24
  23. data/benchmarking/worker.rb +0 -71
  24. data/bin/build +0 -71
  25. data/bors.toml +0 -14
  26. data/examples/basic.rb +0 -15
  27. data/examples/consistency.rb +0 -114
  28. data/examples/dist_redis.rb +0 -43
  29. data/examples/incr-decr.rb +0 -17
  30. data/examples/list.rb +0 -26
  31. data/examples/pubsub.rb +0 -37
  32. data/examples/sentinel.rb +0 -41
  33. data/examples/sentinel/start +0 -49
  34. data/examples/sets.rb +0 -36
  35. data/examples/unicorn/config.ru +0 -3
  36. data/examples/unicorn/unicorn.rb +0 -20
  37. data/makefile +0 -74
  38. data/redis.gemspec +0 -42
  39. data/test/bitpos_test.rb +0 -63
  40. data/test/blocking_commands_test.rb +0 -40
  41. data/test/client_test.rb +0 -76
  42. data/test/cluster_abnormal_state_test.rb +0 -38
  43. data/test/cluster_blocking_commands_test.rb +0 -15
  44. data/test/cluster_client_internals_test.rb +0 -77
  45. data/test/cluster_client_key_hash_tags_test.rb +0 -88
  46. data/test/cluster_client_options_test.rb +0 -147
  47. data/test/cluster_client_pipelining_test.rb +0 -59
  48. data/test/cluster_client_replicas_test.rb +0 -36
  49. data/test/cluster_client_slots_test.rb +0 -94
  50. data/test/cluster_client_transactions_test.rb +0 -71
  51. data/test/cluster_commands_on_cluster_test.rb +0 -165
  52. data/test/cluster_commands_on_connection_test.rb +0 -40
  53. data/test/cluster_commands_on_geo_test.rb +0 -74
  54. data/test/cluster_commands_on_hashes_test.rb +0 -11
  55. data/test/cluster_commands_on_hyper_log_log_test.rb +0 -17
  56. data/test/cluster_commands_on_keys_test.rb +0 -134
  57. data/test/cluster_commands_on_lists_test.rb +0 -15
  58. data/test/cluster_commands_on_pub_sub_test.rb +0 -101
  59. data/test/cluster_commands_on_scripting_test.rb +0 -56
  60. data/test/cluster_commands_on_server_test.rb +0 -221
  61. data/test/cluster_commands_on_sets_test.rb +0 -39
  62. data/test/cluster_commands_on_sorted_sets_test.rb +0 -35
  63. data/test/cluster_commands_on_streams_test.rb +0 -196
  64. data/test/cluster_commands_on_strings_test.rb +0 -15
  65. data/test/cluster_commands_on_transactions_test.rb +0 -41
  66. data/test/cluster_commands_on_value_types_test.rb +0 -14
  67. data/test/command_map_test.rb +0 -28
  68. data/test/commands_on_geo_test.rb +0 -116
  69. data/test/commands_on_hashes_test.rb +0 -7
  70. data/test/commands_on_hyper_log_log_test.rb +0 -7
  71. data/test/commands_on_lists_test.rb +0 -7
  72. data/test/commands_on_sets_test.rb +0 -7
  73. data/test/commands_on_sorted_sets_test.rb +0 -7
  74. data/test/commands_on_strings_test.rb +0 -7
  75. data/test/commands_on_value_types_test.rb +0 -207
  76. data/test/connection_handling_test.rb +0 -275
  77. data/test/connection_test.rb +0 -57
  78. data/test/distributed_blocking_commands_test.rb +0 -52
  79. data/test/distributed_commands_on_hashes_test.rb +0 -21
  80. data/test/distributed_commands_on_hyper_log_log_test.rb +0 -26
  81. data/test/distributed_commands_on_lists_test.rb +0 -19
  82. data/test/distributed_commands_on_sets_test.rb +0 -105
  83. data/test/distributed_commands_on_sorted_sets_test.rb +0 -59
  84. data/test/distributed_commands_on_strings_test.rb +0 -79
  85. data/test/distributed_commands_on_value_types_test.rb +0 -129
  86. data/test/distributed_commands_requiring_clustering_test.rb +0 -162
  87. data/test/distributed_connection_handling_test.rb +0 -21
  88. data/test/distributed_internals_test.rb +0 -68
  89. data/test/distributed_key_tags_test.rb +0 -50
  90. data/test/distributed_persistence_control_commands_test.rb +0 -24
  91. data/test/distributed_publish_subscribe_test.rb +0 -90
  92. data/test/distributed_remote_server_control_commands_test.rb +0 -64
  93. data/test/distributed_scripting_test.rb +0 -100
  94. data/test/distributed_sorting_test.rb +0 -18
  95. data/test/distributed_test.rb +0 -56
  96. data/test/distributed_transactions_test.rb +0 -30
  97. data/test/encoding_test.rb +0 -14
  98. data/test/error_replies_test.rb +0 -57
  99. data/test/fork_safety_test.rb +0 -60
  100. data/test/helper.rb +0 -344
  101. data/test/helper_test.rb +0 -22
  102. data/test/internals_test.rb +0 -395
  103. data/test/lint/blocking_commands.rb +0 -174
  104. data/test/lint/hashes.rb +0 -203
  105. data/test/lint/hyper_log_log.rb +0 -74
  106. data/test/lint/lists.rb +0 -159
  107. data/test/lint/sets.rb +0 -282
  108. data/test/lint/sorted_sets.rb +0 -497
  109. data/test/lint/strings.rb +0 -348
  110. data/test/lint/value_types.rb +0 -130
  111. data/test/persistence_control_commands_test.rb +0 -24
  112. data/test/pipelining_commands_test.rb +0 -246
  113. data/test/publish_subscribe_test.rb +0 -280
  114. data/test/remote_server_control_commands_test.rb +0 -175
  115. data/test/scanning_test.rb +0 -407
  116. data/test/scripting_test.rb +0 -76
  117. data/test/sentinel_command_test.rb +0 -78
  118. data/test/sentinel_test.rb +0 -253
  119. data/test/sorting_test.rb +0 -57
  120. data/test/ssl_test.rb +0 -69
  121. data/test/support/cluster/orchestrator.rb +0 -199
  122. data/test/support/connection/hiredis.rb +0 -1
  123. data/test/support/connection/ruby.rb +0 -1
  124. data/test/support/connection/synchrony.rb +0 -17
  125. data/test/support/redis_mock.rb +0 -130
  126. data/test/support/ssl/gen_certs.sh +0 -31
  127. data/test/support/ssl/trusted-ca.crt +0 -25
  128. data/test/support/ssl/trusted-ca.key +0 -27
  129. data/test/support/ssl/trusted-cert.crt +0 -81
  130. data/test/support/ssl/trusted-cert.key +0 -28
  131. data/test/support/ssl/untrusted-ca.crt +0 -26
  132. data/test/support/ssl/untrusted-ca.key +0 -27
  133. data/test/support/ssl/untrusted-cert.crt +0 -82
  134. data/test/support/ssl/untrusted-cert.key +0 -28
  135. data/test/support/wire/synchrony.rb +0 -24
  136. data/test/support/wire/thread.rb +0 -5
  137. data/test/synchrony_driver.rb +0 -85
  138. data/test/test.conf.erb +0 -9
  139. data/test/thread_safety_test.rb +0 -60
  140. data/test/transactions_test.rb +0 -272
  141. data/test/unknown_commands_test.rb +0 -12
  142. data/test/url_param_test.rb +0 -136
@@ -1,175 +0,0 @@
1
- require_relative "helper"
2
-
3
- class TestRemoteServerControlCommands < Test::Unit::TestCase
4
-
5
- include Helper::Client
6
-
7
- def test_info
8
- keys = [
9
- "redis_version",
10
- "uptime_in_seconds",
11
- "uptime_in_days",
12
- "connected_clients",
13
- "used_memory",
14
- "total_connections_received",
15
- "total_commands_processed",
16
- ]
17
-
18
- info = r.info
19
-
20
- keys.each do |k|
21
- msg = "expected #info to include #{k}"
22
- assert info.keys.include?(k), msg
23
- end
24
- end
25
-
26
- def test_info_commandstats
27
- target_version "2.5.7" do
28
- r.config(:resetstat)
29
- r.ping
30
-
31
- result = r.info(:commandstats)
32
- assert_equal "1", result["ping"]["calls"]
33
- end
34
- end
35
-
36
- def test_monitor_redis_lt_2_5_0
37
- return unless version < "2.5.0"
38
-
39
- log = []
40
-
41
- wire = Wire.new do
42
- Redis.new(OPTIONS).monitor do |line|
43
- log << line
44
- break if log.size == 3
45
- end
46
- end
47
-
48
- Wire.pass while log.empty? # Faster than sleep
49
-
50
- r.set "foo", "s1"
51
-
52
- wire.join
53
-
54
- assert log[-1][%q{(db 15) "set" "foo" "s1"}]
55
- end
56
-
57
- def test_monitor_redis_gte_2_5_0
58
- return unless version >= "2.5.0"
59
-
60
- log = []
61
-
62
- wire = Wire.new do
63
- Redis.new(OPTIONS).monitor do |line|
64
- log << line
65
- break if line =~ /set/
66
- end
67
- end
68
-
69
- Wire.pass while log.empty? # Faster than sleep
70
-
71
- r.set "foo", "s1"
72
-
73
- wire.join
74
-
75
- assert log[-1] =~ /\b15\b.* "set" "foo" "s1"/
76
- end
77
-
78
- def test_monitor_returns_value_for_break
79
- result = r.monitor do |line|
80
- break line
81
- end
82
-
83
- assert_equal "OK", result
84
- end
85
-
86
- def test_echo
87
- assert_equal "foo bar baz\n", r.echo("foo bar baz\n")
88
- end
89
-
90
- def test_debug
91
- r.set "foo", "s1"
92
-
93
- assert r.debug(:object, "foo").kind_of?(String)
94
- end
95
-
96
- def test_object
97
- r.lpush "list", "value"
98
-
99
- assert_equal 1, r.object(:refcount, "list")
100
- encoding = r.object(:encoding, "list")
101
- assert "ziplist" == encoding || "quicklist" == encoding, "Wrong encoding for list"
102
- assert r.object(:idletime, "list").kind_of?(Integer)
103
- end
104
-
105
- def test_sync
106
- redis_mock(:sync => lambda { "+OK" }) do |redis|
107
- assert_equal "OK", redis.sync
108
- end
109
- end
110
-
111
- def test_slowlog
112
- r.slowlog(:reset)
113
- result = r.slowlog(:len)
114
- assert_equal 0, result
115
- end
116
-
117
- def test_client
118
- assert_equal r.instance_variable_get(:@client), r._client
119
- end
120
-
121
- def test_client_list
122
- return if version < "2.4.0"
123
-
124
- keys = [
125
- "addr",
126
- "fd",
127
- "name",
128
- "age",
129
- "idle",
130
- "flags",
131
- "db",
132
- "sub",
133
- "psub",
134
- "multi",
135
- "qbuf",
136
- "qbuf-free",
137
- "obl",
138
- "oll",
139
- "omem",
140
- "events",
141
- "cmd"
142
- ]
143
-
144
- clients = r.client(:list)
145
- clients.each do |client|
146
- keys.each do |k|
147
- msg = "expected #client(:list) to include #{k}"
148
- assert client.keys.include?(k), msg
149
- end
150
- end
151
- end
152
-
153
- def test_client_kill
154
- return if version < "2.6.9"
155
-
156
- r.client(:setname, 'redis-rb')
157
- clients = r.client(:list)
158
- i = clients.index {|client| client['name'] == 'redis-rb'}
159
- assert_equal "OK", r.client(:kill, clients[i]["addr"])
160
-
161
- clients = r.client(:list)
162
- i = clients.index {|client| client['name'] == 'redis-rb'}
163
- assert_equal nil, i
164
- end
165
-
166
- def test_client_getname_and_setname
167
- return if version < "2.6.9"
168
-
169
- assert_equal nil, r.client(:getname)
170
-
171
- r.client(:setname, 'redis-rb')
172
- name = r.client(:getname)
173
- assert_equal 'redis-rb', name
174
- end
175
- end
@@ -1,407 +0,0 @@
1
- require_relative "helper"
2
-
3
- class TestScanning < Test::Unit::TestCase
4
-
5
- include Helper::Client
6
-
7
- def test_scan_basic
8
- target_version "2.7.105" do
9
- r.debug :populate, 1000
10
-
11
- cursor = 0
12
- all_keys = []
13
- loop {
14
- cursor, keys = r.scan cursor
15
- all_keys += keys
16
- break if cursor == "0"
17
- }
18
-
19
- assert_equal 1000, all_keys.uniq.size
20
- end
21
- end
22
-
23
- def test_scan_count
24
- target_version "2.7.105" do
25
- r.debug :populate, 1000
26
-
27
- cursor = 0
28
- all_keys = []
29
- loop {
30
- cursor, keys = r.scan cursor, :count => 5
31
- all_keys += keys
32
- break if cursor == "0"
33
- }
34
-
35
- assert_equal 1000, all_keys.uniq.size
36
- end
37
- end
38
-
39
- def test_scan_match
40
- target_version "2.7.105" do
41
- r.debug :populate, 1000
42
-
43
- cursor = 0
44
- all_keys = []
45
- loop {
46
- cursor, keys = r.scan cursor, :match => "key:1??"
47
- all_keys += keys
48
- break if cursor == "0"
49
- }
50
-
51
- assert_equal 100, all_keys.uniq.size
52
- end
53
- end
54
-
55
- def test_scan_each_enumerator
56
- target_version "2.7.105" do
57
-
58
- r.debug :populate, 1000
59
-
60
- scan_enumerator = r.scan_each
61
- assert_equal true, scan_enumerator.is_a?(::Enumerator)
62
-
63
- keys_from_scan = scan_enumerator.to_a.uniq
64
- all_keys = r.keys "*"
65
-
66
- assert all_keys.sort == keys_from_scan.sort
67
- end
68
- end
69
-
70
- def test_scan_each_enumerator_match
71
- target_version "2.7.105" do
72
-
73
- r.debug :populate, 1000
74
-
75
- keys_from_scan = r.scan_each(:match => "key:1??").to_a.uniq
76
- all_keys = r.keys "key:1??"
77
-
78
- assert all_keys.sort == keys_from_scan.sort
79
- end
80
- end
81
-
82
- def test_scan_each_block
83
- target_version "2.7.105" do
84
-
85
- r.debug :populate, 100
86
-
87
- keys_from_scan = []
88
- r.scan_each {|key|
89
- keys_from_scan << key
90
- }
91
-
92
- all_keys = r.keys "*"
93
-
94
- assert all_keys.sort == keys_from_scan.uniq.sort
95
- end
96
- end
97
-
98
- def test_scan_each_block_match
99
- target_version "2.7.105" do
100
-
101
- r.debug :populate, 100
102
-
103
- keys_from_scan = []
104
- r.scan_each(:match => "key:1?") {|key|
105
- keys_from_scan << key
106
- }
107
-
108
- all_keys = r.keys "key:1?"
109
-
110
- assert all_keys.sort == keys_from_scan.uniq.sort
111
- end
112
- end
113
-
114
- def test_sscan_with_encoding
115
- target_version "2.7.105" do
116
- [:intset, :hashtable].each do |enc|
117
- r.del "set"
118
-
119
- prefix = ""
120
- prefix = "ele:" if enc == :hashtable
121
-
122
- elements = []
123
- 100.times { |j| elements << "#{prefix}#{j}" }
124
-
125
- r.sadd "set", elements
126
-
127
- assert_equal enc.to_s, r.object("encoding", "set")
128
-
129
- cursor = 0
130
- all_keys = []
131
- loop {
132
- cursor, keys = r.sscan "set", cursor
133
- all_keys += keys
134
- break if cursor == "0"
135
- }
136
-
137
- assert_equal 100, all_keys.uniq.size
138
- end
139
- end
140
- end
141
-
142
- def test_sscan_each_enumerator
143
- target_version "2.7.105" do
144
- elements = []
145
- 100.times { |j| elements << "ele:#{j}" }
146
- r.sadd "set", elements
147
-
148
- scan_enumerator = r.sscan_each("set")
149
- assert_equal true, scan_enumerator.is_a?(::Enumerator)
150
-
151
- keys_from_scan = scan_enumerator.to_a.uniq
152
- all_keys = r.smembers("set")
153
-
154
- assert all_keys.sort == keys_from_scan.sort
155
- end
156
- end
157
-
158
- def test_sscan_each_enumerator_match
159
- target_version "2.7.105" do
160
- elements = []
161
- 100.times { |j| elements << "ele:#{j}" }
162
- r.sadd "set", elements
163
-
164
- keys_from_scan = r.sscan_each("set", :match => "ele:1?").to_a.uniq
165
-
166
- all_keys = r.smembers("set").grep(/^ele:1.$/)
167
-
168
- assert all_keys.sort == keys_from_scan.sort
169
- end
170
- end
171
-
172
- def test_sscan_each_enumerator_block
173
- target_version "2.7.105" do
174
- elements = []
175
- 100.times { |j| elements << "ele:#{j}" }
176
- r.sadd "set", elements
177
-
178
- keys_from_scan = []
179
- r.sscan_each("set") do |key|
180
- keys_from_scan << key
181
- end
182
-
183
- all_keys = r.smembers("set")
184
-
185
- assert all_keys.sort == keys_from_scan.uniq.sort
186
- end
187
- end
188
-
189
- def test_sscan_each_enumerator_block_match
190
- target_version "2.7.105" do
191
- elements = []
192
- 100.times { |j| elements << "ele:#{j}" }
193
- r.sadd "set", elements
194
-
195
- keys_from_scan = []
196
- r.sscan_each("set", :match => "ele:1?") do |key|
197
- keys_from_scan << key
198
- end
199
-
200
- all_keys = r.smembers("set").grep(/^ele:1.$/)
201
-
202
- assert all_keys.sort == keys_from_scan.uniq.sort
203
- end
204
- end
205
-
206
- def test_hscan_with_encoding
207
- target_version "2.7.105" do
208
- [:ziplist, :hashtable].each do |enc|
209
- r.del "set"
210
-
211
- count = 1000
212
- count = 30 if enc == :ziplist
213
-
214
- elements = []
215
- count.times { |j| elements << "key:#{j}" << j.to_s }
216
-
217
- r.hmset "hash", *elements
218
-
219
- assert_equal enc.to_s, r.object("encoding", "hash")
220
-
221
- cursor = 0
222
- all_key_values = []
223
- loop {
224
- cursor, key_values = r.hscan "hash", cursor
225
- all_key_values.concat key_values
226
- break if cursor == "0"
227
- }
228
-
229
- keys2 = []
230
- all_key_values.each do |k, v|
231
- assert_equal "key:#{v}", k
232
- keys2 << k
233
- end
234
-
235
- assert_equal count, keys2.uniq.size
236
- end
237
- end
238
- end
239
-
240
- def test_hscan_each_enumerator
241
- target_version "2.7.105" do
242
- count = 1000
243
- elements = []
244
- count.times { |j| elements << "key:#{j}" << j.to_s }
245
- r.hmset "hash", *elements
246
-
247
- scan_enumerator = r.hscan_each("hash")
248
- assert_equal true, scan_enumerator.is_a?(::Enumerator)
249
-
250
- keys_from_scan = scan_enumerator.to_a.uniq
251
- all_keys = r.hgetall("hash").to_a
252
-
253
- assert all_keys.sort == keys_from_scan.sort
254
- end
255
- end
256
-
257
- def test_hscan_each_enumerator_match
258
- target_version "2.7.105" do
259
- count = 100
260
- elements = []
261
- count.times { |j| elements << "key:#{j}" << j.to_s }
262
- r.hmset "hash", *elements
263
-
264
- keys_from_scan = r.hscan_each("hash", :match => "key:1?").to_a.uniq
265
- all_keys = r.hgetall("hash").to_a.select{|k,v| k =~ /^key:1.$/}
266
-
267
- assert all_keys.sort == keys_from_scan.sort
268
- end
269
- end
270
-
271
- def test_hscan_each_block
272
- target_version "2.7.105" do
273
- count = 1000
274
- elements = []
275
- count.times { |j| elements << "key:#{j}" << j.to_s }
276
- r.hmset "hash", *elements
277
-
278
- keys_from_scan = []
279
- r.hscan_each("hash") do |field, value|
280
- keys_from_scan << [field, value]
281
- end
282
- all_keys = r.hgetall("hash").to_a
283
-
284
- assert all_keys.sort == keys_from_scan.uniq.sort
285
- end
286
- end
287
-
288
- def test_hscan_each_block_match
289
- target_version "2.7.105" do
290
- count = 1000
291
- elements = []
292
- count.times { |j| elements << "key:#{j}" << j.to_s }
293
- r.hmset "hash", *elements
294
-
295
- keys_from_scan = []
296
- r.hscan_each("hash", :match => "key:1?") do |field, value|
297
- keys_from_scan << [field, value]
298
- end
299
- all_keys = r.hgetall("hash").to_a.select{|k,v| k =~ /^key:1.$/}
300
-
301
- assert all_keys.sort == keys_from_scan.uniq.sort
302
- end
303
- end
304
-
305
- def test_zscan_with_encoding
306
- target_version "2.7.105" do
307
- [:ziplist, :skiplist].each do |enc|
308
- r.del "zset"
309
-
310
- count = 1000
311
- count = 30 if enc == :ziplist
312
-
313
- elements = []
314
- count.times { |j| elements << j << "key:#{j}" }
315
-
316
- r.zadd "zset", elements
317
-
318
- assert_equal enc.to_s, r.object("encoding", "zset")
319
-
320
- cursor = 0
321
- all_key_scores = []
322
- loop {
323
- cursor, key_scores = r.zscan "zset", cursor
324
- all_key_scores.concat key_scores
325
- break if cursor == "0"
326
- }
327
-
328
- keys2 = []
329
- all_key_scores.each do |k, v|
330
- assert_equal true, v.is_a?(Float)
331
- assert_equal "key:#{Integer(v)}", k
332
- keys2 << k
333
- end
334
-
335
- assert_equal count, keys2.uniq.size
336
- end
337
- end
338
- end
339
-
340
- def test_zscan_each_enumerator
341
- target_version "2.7.105" do
342
- count = 1000
343
- elements = []
344
- count.times { |j| elements << j << "key:#{j}" }
345
- r.zadd "zset", elements
346
-
347
- scan_enumerator = r.zscan_each "zset"
348
- assert_equal true, scan_enumerator.is_a?(::Enumerator)
349
-
350
- scores_from_scan = scan_enumerator.to_a.uniq
351
- member_scores = r.zrange("zset", 0, -1, :with_scores => true)
352
-
353
- assert member_scores.sort == scores_from_scan.sort
354
- end
355
- end
356
-
357
- def test_zscan_each_enumerator_match
358
- target_version "2.7.105" do
359
- count = 1000
360
- elements = []
361
- count.times { |j| elements << j << "key:#{j}" }
362
- r.zadd "zset", elements
363
-
364
- scores_from_scan = r.zscan_each("zset", :match => "key:1??").to_a.uniq
365
- member_scores = r.zrange("zset", 0, -1, :with_scores => true)
366
- filtered_members = member_scores.select{|k,s| k =~ /^key:1..$/}
367
-
368
- assert filtered_members.sort == scores_from_scan.sort
369
- end
370
- end
371
-
372
- def test_zscan_each_block
373
- target_version "2.7.105" do
374
- count = 1000
375
- elements = []
376
- count.times { |j| elements << j << "key:#{j}" }
377
- r.zadd "zset", elements
378
-
379
- scores_from_scan = []
380
- r.zscan_each("zset") do |member, score|
381
- scores_from_scan << [member, score]
382
- end
383
- member_scores = r.zrange("zset", 0, -1, :with_scores => true)
384
-
385
- assert member_scores.sort == scores_from_scan.sort
386
- end
387
- end
388
-
389
- def test_zscan_each_block_match
390
- target_version "2.7.105" do
391
- count = 1000
392
- elements = []
393
- count.times { |j| elements << j << "key:#{j}" }
394
- r.zadd "zset", elements
395
-
396
- scores_from_scan = []
397
- r.zscan_each("zset", :match => "key:1??") do |member, score|
398
- scores_from_scan << [member, score]
399
- end
400
- member_scores = r.zrange("zset", 0, -1, :with_scores => true)
401
- filtered_members = member_scores.select{|k,s| k =~ /^key:1..$/}
402
-
403
- assert filtered_members.sort == scores_from_scan.sort
404
- end
405
- end
406
-
407
- end