finsync_redis 3.3.5

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 (121) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.travis/Gemfile +11 -0
  4. data/.travis.yml +89 -0
  5. data/.yardopts +3 -0
  6. data/CHANGELOG.md +373 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE +20 -0
  9. data/README.md +410 -0
  10. data/Rakefile +87 -0
  11. data/benchmarking/logging.rb +71 -0
  12. data/benchmarking/pipeline.rb +51 -0
  13. data/benchmarking/speed.rb +21 -0
  14. data/benchmarking/suite.rb +24 -0
  15. data/benchmarking/worker.rb +71 -0
  16. data/examples/basic.rb +15 -0
  17. data/examples/consistency.rb +114 -0
  18. data/examples/dist_redis.rb +43 -0
  19. data/examples/incr-decr.rb +17 -0
  20. data/examples/list.rb +26 -0
  21. data/examples/pubsub.rb +37 -0
  22. data/examples/sentinel/sentinel.conf +9 -0
  23. data/examples/sentinel/start +49 -0
  24. data/examples/sentinel.rb +41 -0
  25. data/examples/sets.rb +36 -0
  26. data/examples/unicorn/config.ru +3 -0
  27. data/examples/unicorn/unicorn.rb +20 -0
  28. data/lib/redis/client.rb +590 -0
  29. data/lib/redis/connection/command_helper.rb +44 -0
  30. data/lib/redis/connection/hiredis.rb +66 -0
  31. data/lib/redis/connection/registry.rb +12 -0
  32. data/lib/redis/connection/ruby.rb +429 -0
  33. data/lib/redis/connection/synchrony.rb +133 -0
  34. data/lib/redis/connection.rb +9 -0
  35. data/lib/redis/distributed.rb +873 -0
  36. data/lib/redis/errors.rb +40 -0
  37. data/lib/redis/hash_ring.rb +132 -0
  38. data/lib/redis/pipeline.rb +141 -0
  39. data/lib/redis/subscribe.rb +91 -0
  40. data/lib/redis/version.rb +3 -0
  41. data/lib/redis.rb +2788 -0
  42. data/redis.gemspec +44 -0
  43. data/test/bitpos_test.rb +69 -0
  44. data/test/blocking_commands_test.rb +42 -0
  45. data/test/client_test.rb +59 -0
  46. data/test/command_map_test.rb +30 -0
  47. data/test/commands_on_hashes_test.rb +21 -0
  48. data/test/commands_on_hyper_log_log_test.rb +21 -0
  49. data/test/commands_on_lists_test.rb +20 -0
  50. data/test/commands_on_sets_test.rb +77 -0
  51. data/test/commands_on_sorted_sets_test.rb +137 -0
  52. data/test/commands_on_strings_test.rb +101 -0
  53. data/test/commands_on_value_types_test.rb +133 -0
  54. data/test/connection_handling_test.rb +277 -0
  55. data/test/connection_test.rb +57 -0
  56. data/test/db/.gitkeep +0 -0
  57. data/test/distributed_blocking_commands_test.rb +46 -0
  58. data/test/distributed_commands_on_hashes_test.rb +10 -0
  59. data/test/distributed_commands_on_hyper_log_log_test.rb +33 -0
  60. data/test/distributed_commands_on_lists_test.rb +22 -0
  61. data/test/distributed_commands_on_sets_test.rb +83 -0
  62. data/test/distributed_commands_on_sorted_sets_test.rb +18 -0
  63. data/test/distributed_commands_on_strings_test.rb +59 -0
  64. data/test/distributed_commands_on_value_types_test.rb +95 -0
  65. data/test/distributed_commands_requiring_clustering_test.rb +164 -0
  66. data/test/distributed_connection_handling_test.rb +23 -0
  67. data/test/distributed_internals_test.rb +79 -0
  68. data/test/distributed_key_tags_test.rb +52 -0
  69. data/test/distributed_persistence_control_commands_test.rb +26 -0
  70. data/test/distributed_publish_subscribe_test.rb +92 -0
  71. data/test/distributed_remote_server_control_commands_test.rb +66 -0
  72. data/test/distributed_scripting_test.rb +102 -0
  73. data/test/distributed_sorting_test.rb +20 -0
  74. data/test/distributed_test.rb +58 -0
  75. data/test/distributed_transactions_test.rb +32 -0
  76. data/test/encoding_test.rb +18 -0
  77. data/test/error_replies_test.rb +59 -0
  78. data/test/fork_safety_test.rb +65 -0
  79. data/test/helper.rb +232 -0
  80. data/test/helper_test.rb +24 -0
  81. data/test/internals_test.rb +417 -0
  82. data/test/lint/blocking_commands.rb +150 -0
  83. data/test/lint/hashes.rb +162 -0
  84. data/test/lint/hyper_log_log.rb +60 -0
  85. data/test/lint/lists.rb +143 -0
  86. data/test/lint/sets.rb +140 -0
  87. data/test/lint/sorted_sets.rb +316 -0
  88. data/test/lint/strings.rb +260 -0
  89. data/test/lint/value_types.rb +122 -0
  90. data/test/persistence_control_commands_test.rb +26 -0
  91. data/test/pipelining_commands_test.rb +242 -0
  92. data/test/publish_subscribe_test.rb +282 -0
  93. data/test/remote_server_control_commands_test.rb +118 -0
  94. data/test/scanning_test.rb +413 -0
  95. data/test/scripting_test.rb +78 -0
  96. data/test/sentinel_command_test.rb +80 -0
  97. data/test/sentinel_test.rb +255 -0
  98. data/test/sorting_test.rb +59 -0
  99. data/test/ssl_test.rb +73 -0
  100. data/test/support/connection/hiredis.rb +1 -0
  101. data/test/support/connection/ruby.rb +1 -0
  102. data/test/support/connection/synchrony.rb +17 -0
  103. data/test/support/redis_mock.rb +130 -0
  104. data/test/support/ssl/gen_certs.sh +31 -0
  105. data/test/support/ssl/trusted-ca.crt +25 -0
  106. data/test/support/ssl/trusted-ca.key +27 -0
  107. data/test/support/ssl/trusted-cert.crt +81 -0
  108. data/test/support/ssl/trusted-cert.key +28 -0
  109. data/test/support/ssl/untrusted-ca.crt +26 -0
  110. data/test/support/ssl/untrusted-ca.key +27 -0
  111. data/test/support/ssl/untrusted-cert.crt +82 -0
  112. data/test/support/ssl/untrusted-cert.key +28 -0
  113. data/test/support/wire/synchrony.rb +24 -0
  114. data/test/support/wire/thread.rb +5 -0
  115. data/test/synchrony_driver.rb +88 -0
  116. data/test/test.conf.erb +9 -0
  117. data/test/thread_safety_test.rb +62 -0
  118. data/test/transactions_test.rb +264 -0
  119. data/test/unknown_commands_test.rb +14 -0
  120. data/test/url_param_test.rb +138 -0
  121. metadata +202 -0
@@ -0,0 +1,133 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
+ require "lint/value_types"
5
+
6
+ class TestCommandsOnValueTypes < Test::Unit::TestCase
7
+
8
+ include Helper::Client
9
+ include Lint::ValueTypes
10
+
11
+ def test_del
12
+ r.set "foo", "s1"
13
+ r.set "bar", "s2"
14
+ r.set "baz", "s3"
15
+
16
+ assert_equal ["bar", "baz", "foo"], r.keys("*").sort
17
+
18
+ assert_equal 1, r.del("foo")
19
+
20
+ assert_equal ["bar", "baz"], r.keys("*").sort
21
+
22
+ assert_equal 2, r.del("bar", "baz")
23
+
24
+ assert_equal [], r.keys("*").sort
25
+ end
26
+
27
+ def test_del_with_array_argument
28
+ r.set "foo", "s1"
29
+ r.set "bar", "s2"
30
+ r.set "baz", "s3"
31
+
32
+ assert_equal ["bar", "baz", "foo"], r.keys("*").sort
33
+
34
+ assert_equal 1, r.del(["foo"])
35
+
36
+ assert_equal ["bar", "baz"], r.keys("*").sort
37
+
38
+ assert_equal 2, r.del(["bar", "baz"])
39
+
40
+ assert_equal [], r.keys("*").sort
41
+ end
42
+
43
+ def test_randomkey
44
+ assert r.randomkey.to_s.empty?
45
+
46
+ r.set("foo", "s1")
47
+
48
+ assert_equal "foo", r.randomkey
49
+
50
+ r.set("bar", "s2")
51
+
52
+ 4.times do
53
+ assert ["foo", "bar"].include?(r.randomkey)
54
+ end
55
+ end
56
+
57
+ def test_rename
58
+ r.set("foo", "s1")
59
+ r.rename "foo", "bar"
60
+
61
+ assert_equal "s1", r.get("bar")
62
+ assert_equal nil, r.get("foo")
63
+ end
64
+
65
+ def test_renamenx
66
+ r.set("foo", "s1")
67
+ r.set("bar", "s2")
68
+
69
+ assert_equal false, r.renamenx("foo", "bar")
70
+
71
+ assert_equal "s1", r.get("foo")
72
+ assert_equal "s2", r.get("bar")
73
+ end
74
+
75
+ def test_dbsize
76
+ assert_equal 0, r.dbsize
77
+
78
+ r.set("foo", "s1")
79
+
80
+ assert_equal 1, r.dbsize
81
+ end
82
+
83
+ def test_flushdb
84
+ r.set("foo", "s1")
85
+ r.set("bar", "s2")
86
+
87
+ assert_equal 2, r.dbsize
88
+
89
+ r.flushdb
90
+
91
+ assert_equal 0, r.dbsize
92
+ end
93
+
94
+ def test_flushall
95
+ redis_mock(:flushall => lambda { "+FLUSHALL" }) do |redis|
96
+ assert_equal "FLUSHALL", redis.flushall
97
+ end
98
+ end
99
+
100
+ def test_migrate
101
+ redis_mock(:migrate => lambda { |*args| args }) do |redis|
102
+ options = { :host => "127.0.0.1", :port => 1234 }
103
+
104
+ ex = assert_raise(RuntimeError) do
105
+ redis.migrate("foo", options.reject { |key, _| key == :host })
106
+ end
107
+ assert ex.message =~ /host not specified/
108
+
109
+ ex = assert_raise(RuntimeError) do
110
+ redis.migrate("foo", options.reject { |key, _| key == :port })
111
+ end
112
+ assert ex.message =~ /port not specified/
113
+
114
+ default_db = redis.client.db.to_i
115
+ default_timeout = redis.client.timeout.to_i
116
+
117
+ # Test defaults
118
+ actual = redis.migrate("foo", options)
119
+ expected = ["127.0.0.1", "1234", "foo", default_db.to_s, default_timeout.to_s]
120
+ assert_equal expected, actual
121
+
122
+ # Test db override
123
+ actual = redis.migrate("foo", options.merge(:db => default_db + 1))
124
+ expected = ["127.0.0.1", "1234", "foo", (default_db + 1).to_s, default_timeout.to_s]
125
+ assert_equal expected, actual
126
+
127
+ # Test timeout override
128
+ actual = redis.migrate("foo", options.merge(:timeout => default_timeout + 1))
129
+ expected = ["127.0.0.1", "1234", "foo", default_db.to_s, (default_timeout + 1).to_s]
130
+ assert_equal expected, actual
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,277 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
+
5
+ class TestConnectionHandling < Test::Unit::TestCase
6
+
7
+ include Helper::Client
8
+
9
+ def test_auth
10
+ commands = {
11
+ :auth => lambda { |password| $auth = password; "+OK" },
12
+ :get => lambda { |key| $auth == "secret" ? "$3\r\nbar" : "$-1" },
13
+ }
14
+
15
+ redis_mock(commands, :password => "secret") do |redis|
16
+ assert_equal "bar", redis.get("foo")
17
+ end
18
+ end
19
+
20
+ def test_id
21
+ commands = {
22
+ :client => lambda { |cmd, name| $name = [cmd, name]; "+OK" },
23
+ :ping => lambda { "+PONG" },
24
+ }
25
+
26
+ redis_mock(commands, :id => "client-name") do |redis|
27
+ assert_equal "PONG", redis.ping
28
+ end
29
+
30
+ assert_equal ["setname","client-name"], $name
31
+ end
32
+
33
+ def test_ping
34
+ assert_equal "PONG", r.ping
35
+ end
36
+
37
+ def test_select
38
+ r.set "foo", "bar"
39
+
40
+ r.select 14
41
+ assert_equal nil, r.get("foo")
42
+
43
+ r.client.disconnect
44
+
45
+ assert_equal nil, r.get("foo")
46
+ end
47
+
48
+ def test_quit
49
+ r.quit
50
+
51
+ assert !r.client.connected?
52
+ end
53
+
54
+ def test_close
55
+ quit = 0
56
+
57
+ commands = {
58
+ :quit => lambda do
59
+ quit += 1
60
+ "+OK"
61
+ end
62
+ }
63
+
64
+ redis_mock(commands) do |redis|
65
+ assert_equal 0, quit
66
+
67
+ redis.quit
68
+
69
+ assert_equal 1, quit
70
+
71
+ redis.ping
72
+
73
+ redis.close
74
+
75
+ assert_equal 1, quit
76
+
77
+ assert !redis.connected?
78
+ end
79
+ end
80
+
81
+ def test_disconnect
82
+ quit = 0
83
+
84
+ commands = {
85
+ :quit => lambda do
86
+ quit += 1
87
+ "+OK"
88
+ end
89
+ }
90
+
91
+ redis_mock(commands) do |redis|
92
+ assert_equal 0, quit
93
+
94
+ redis.quit
95
+
96
+ assert_equal 1, quit
97
+
98
+ redis.ping
99
+
100
+ redis.disconnect!
101
+
102
+ assert_equal 1, quit
103
+
104
+ assert !redis.connected?
105
+ end
106
+ end
107
+
108
+ def test_shutdown
109
+ commands = {
110
+ :shutdown => lambda { :exit }
111
+ }
112
+
113
+ redis_mock(commands) do |redis|
114
+ # SHUTDOWN does not reply: test that it does not raise here.
115
+ assert_equal nil, redis.shutdown
116
+ end
117
+ end
118
+
119
+ def test_shutdown_with_error
120
+ connections = 0
121
+ commands = {
122
+ :select => lambda { |*_| connections += 1; "+OK\r\n" },
123
+ :connections => lambda { ":#{connections}\r\n" },
124
+ :shutdown => lambda { "-ERR could not shutdown\r\n" }
125
+ }
126
+
127
+ redis_mock(commands) do |redis|
128
+ connections = redis.connections
129
+
130
+ # SHUTDOWN replies with an error: test that it gets raised
131
+ assert_raise Redis::CommandError do
132
+ redis.shutdown
133
+ end
134
+
135
+ # The connection should remain in tact
136
+ assert_equal connections, redis.connections
137
+ end
138
+ end
139
+
140
+ def test_shutdown_from_pipeline
141
+ commands = {
142
+ :shutdown => lambda { :exit }
143
+ }
144
+
145
+ redis_mock(commands) do |redis|
146
+ result = redis.pipelined do
147
+ redis.shutdown
148
+ end
149
+
150
+ assert_equal nil, result
151
+ assert !redis.client.connected?
152
+ end
153
+ end
154
+
155
+ def test_shutdown_with_error_from_pipeline
156
+ connections = 0
157
+ commands = {
158
+ :select => lambda { |*_| connections += 1; "+OK\r\n" },
159
+ :connections => lambda { ":#{connections}\r\n" },
160
+ :shutdown => lambda { "-ERR could not shutdown\r\n" }
161
+ }
162
+
163
+ redis_mock(commands) do |redis|
164
+ connections = redis.connections
165
+
166
+ # SHUTDOWN replies with an error: test that it gets raised
167
+ assert_raise Redis::CommandError do
168
+ redis.pipelined do
169
+ redis.shutdown
170
+ end
171
+ end
172
+
173
+ # The connection should remain in tact
174
+ assert_equal connections, redis.connections
175
+ end
176
+ end
177
+
178
+ def test_shutdown_from_multi_exec
179
+ commands = {
180
+ :multi => lambda { "+OK\r\n" },
181
+ :shutdown => lambda { "+QUEUED\r\n" },
182
+ :exec => lambda { :exit }
183
+ }
184
+
185
+ redis_mock(commands) do |redis|
186
+ result = redis.multi do
187
+ redis.shutdown
188
+ end
189
+
190
+ assert_equal nil, result
191
+ assert !redis.client.connected?
192
+ end
193
+ end
194
+
195
+ def test_shutdown_with_error_from_multi_exec
196
+ connections = 0
197
+ commands = {
198
+ :select => lambda { |*_| connections += 1; "+OK\r\n" },
199
+ :connections => lambda { ":#{connections}\r\n" },
200
+ :multi => lambda { "+OK\r\n" },
201
+ :shutdown => lambda { "+QUEUED\r\n" },
202
+ :exec => lambda { "*1\r\n-ERR could not shutdown\r\n" }
203
+ }
204
+
205
+ redis_mock(commands) do |redis|
206
+ connections = redis.connections
207
+
208
+ # SHUTDOWN replies with an error: test that it gets returned
209
+ # We should test for Redis::CommandError here, but hiredis doesn't yet do
210
+ # custom error classes.
211
+ err = nil
212
+
213
+ begin
214
+ redis.multi { redis.shutdown }
215
+ rescue => err
216
+ end
217
+
218
+ assert err.kind_of?(StandardError)
219
+
220
+ # The connection should remain intact
221
+ assert_equal connections, redis.connections
222
+ end
223
+ end
224
+
225
+ def test_slaveof
226
+ redis_mock(:slaveof => lambda { |host, port| "+SLAVEOF #{host} #{port}" }) do |redis|
227
+ assert_equal "SLAVEOF somehost 6381", redis.slaveof("somehost", 6381)
228
+ end
229
+ end
230
+
231
+ def test_bgrewriteaof
232
+ redis_mock(:bgrewriteaof => lambda { "+BGREWRITEAOF" }) do |redis|
233
+ assert_equal "BGREWRITEAOF", redis.bgrewriteaof
234
+ end
235
+ end
236
+
237
+ def test_config_get
238
+ assert r.config(:get, "*")["timeout"] != nil
239
+
240
+ config = r.config(:get, "timeout")
241
+ assert_equal ["timeout"], config.keys
242
+ assert config.values.compact.size > 0
243
+ end
244
+
245
+ def test_config_set
246
+ begin
247
+ assert_equal "OK", r.config(:set, "timeout", 200)
248
+ assert_equal "200", r.config(:get, "*")["timeout"]
249
+
250
+ assert_equal "OK", r.config(:set, "timeout", 100)
251
+ assert_equal "100", r.config(:get, "*")["timeout"]
252
+ ensure
253
+ r.config :set, "timeout", 300
254
+ end
255
+ end
256
+
257
+ driver(:ruby, :hiredis) do
258
+ def test_consistency_on_multithreaded_env
259
+ t = nil
260
+
261
+ commands = {
262
+ :set => lambda { |key, value| t.kill; "+OK\r\n" },
263
+ :incr => lambda { |key| ":1\r\n" },
264
+ }
265
+
266
+ redis_mock(commands) do |redis|
267
+ t = Thread.new do
268
+ redis.set("foo", "bar")
269
+ end
270
+
271
+ t.join
272
+
273
+ assert_equal 1, redis.incr("baz")
274
+ end
275
+ end
276
+ end
277
+ end
@@ -0,0 +1,57 @@
1
+ require_relative "helper"
2
+
3
+ class TestConnection < Test::Unit::TestCase
4
+
5
+ include Helper::Client
6
+
7
+ def test_provides_a_meaningful_inspect
8
+ assert_equal "#<Redis client v#{Redis::VERSION} for redis://127.0.0.1:#{PORT}/15>", r.inspect
9
+ end
10
+
11
+ def test_connection_information
12
+ assert_equal "127.0.0.1", r.connection.fetch(:host)
13
+ assert_equal 6381, r.connection.fetch(:port)
14
+ assert_equal 15, r.connection.fetch(:db)
15
+ assert_equal "127.0.0.1:6381", r.connection.fetch(:location)
16
+ assert_equal "redis://127.0.0.1:6381/15", r.connection.fetch(:id)
17
+ end
18
+
19
+ def test_default_id_with_host_and_port
20
+ redis = Redis.new(OPTIONS.merge(:host => "host", :port => "1234", :db => 0))
21
+ assert_equal "redis://host:1234/0", redis.connection.fetch(:id)
22
+ end
23
+
24
+ def test_default_id_with_host_and_port_and_explicit_scheme
25
+ redis = Redis.new(OPTIONS.merge(:host => "host", :port => "1234", :db => 0, :scheme => "foo"))
26
+ assert_equal "redis://host:1234/0", redis.connection.fetch(:id)
27
+ end
28
+
29
+ def test_default_id_with_path
30
+ redis = Redis.new(OPTIONS.merge(:path => "/tmp/redis.sock", :db => 0))
31
+ assert_equal "redis:///tmp/redis.sock/0", redis.connection.fetch(:id)
32
+ end
33
+
34
+ def test_default_id_with_path_and_explicit_scheme
35
+ redis = Redis.new(OPTIONS.merge(:path => "/tmp/redis.sock", :db => 0, :scheme => "foo"))
36
+ assert_equal "redis:///tmp/redis.sock/0", redis.connection.fetch(:id)
37
+ end
38
+
39
+ def test_override_id
40
+ redis = Redis.new(OPTIONS.merge(:id => "test"))
41
+ assert_equal "test", redis.connection.fetch(:id)
42
+ end
43
+
44
+ def test_id_inside_multi
45
+ redis = Redis.new(OPTIONS)
46
+ id = nil
47
+ connection_id = nil
48
+
49
+ redis.multi do
50
+ id = redis.id
51
+ connection_id = redis.connection.fetch(:id)
52
+ end
53
+
54
+ assert_equal "redis://127.0.0.1:6381/15", id
55
+ assert_equal "redis://127.0.0.1:6381/15", connection_id
56
+ end
57
+ end
data/test/db/.gitkeep ADDED
File without changes
@@ -0,0 +1,46 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
+ require "lint/blocking_commands"
5
+
6
+ class TestDistributedBlockingCommands < Test::Unit::TestCase
7
+
8
+ include Helper::Distributed
9
+ include Lint::BlockingCommands
10
+
11
+ def test_blpop_raises
12
+ assert_raises(Redis::Distributed::CannotDistribute) do
13
+ r.blpop(["foo", "bar"])
14
+ end
15
+ end
16
+
17
+ def test_blpop_raises_with_old_prototype
18
+ assert_raises(Redis::Distributed::CannotDistribute) do
19
+ r.blpop("foo", "bar", 0)
20
+ end
21
+ end
22
+
23
+ def test_brpop_raises
24
+ assert_raises(Redis::Distributed::CannotDistribute) do
25
+ r.brpop(["foo", "bar"])
26
+ end
27
+ end
28
+
29
+ def test_brpop_raises_with_old_prototype
30
+ assert_raises(Redis::Distributed::CannotDistribute) do
31
+ r.brpop("foo", "bar", 0)
32
+ end
33
+ end
34
+
35
+ def test_brpoplpush_raises
36
+ assert_raises(Redis::Distributed::CannotDistribute) do
37
+ r.brpoplpush("foo", "bar")
38
+ end
39
+ end
40
+
41
+ def test_brpoplpush_raises_with_old_prototype
42
+ assert_raises(Redis::Distributed::CannotDistribute) do
43
+ r.brpoplpush("foo", "bar", 0)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
+ require "lint/hashes"
5
+
6
+ class TestDistributedCommandsOnHashes < Test::Unit::TestCase
7
+
8
+ include Helper::Distributed
9
+ include Lint::Hashes
10
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
+ require "lint/hyper_log_log"
5
+
6
+ class TestDistributedCommandsOnHyperLogLog < Test::Unit::TestCase
7
+
8
+ include Helper::Distributed
9
+ include Lint::HyperLogLog
10
+
11
+ def test_pfmerge
12
+ target_version "2.8.9" do
13
+ assert_raise Redis::Distributed::CannotDistribute do
14
+ r.pfadd "foo", "s1"
15
+ r.pfadd "bar", "s2"
16
+
17
+ assert r.pfmerge("res", "foo", "bar")
18
+ end
19
+ end
20
+ end
21
+
22
+ def test_pfcount_multiple_keys_diff_nodes
23
+ target_version "2.8.9" do
24
+ assert_raise Redis::Distributed::CannotDistribute do
25
+ r.pfadd "foo", "s1"
26
+ r.pfadd "bar", "s2"
27
+
28
+ assert r.pfcount("res", "foo", "bar")
29
+ end
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
+ require "lint/lists"
5
+
6
+ class TestDistributedCommandsOnLists < Test::Unit::TestCase
7
+
8
+ include Helper::Distributed
9
+ include Lint::Lists
10
+
11
+ def test_rpoplpush
12
+ assert_raise Redis::Distributed::CannotDistribute do
13
+ r.rpoplpush("foo", "bar")
14
+ end
15
+ end
16
+
17
+ def test_brpoplpush
18
+ assert_raise Redis::Distributed::CannotDistribute do
19
+ r.brpoplpush("foo", "bar", :timeout => 1)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,83 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
+ require "lint/sets"
5
+
6
+ class TestDistributedCommandsOnSets < Test::Unit::TestCase
7
+
8
+ include Helper::Distributed
9
+ include Lint::Sets
10
+
11
+ def test_smove
12
+ assert_raise Redis::Distributed::CannotDistribute do
13
+ r.sadd "foo", "s1"
14
+ r.sadd "bar", "s2"
15
+
16
+ r.smove("foo", "bar", "s1")
17
+ end
18
+ end
19
+
20
+ def test_sinter
21
+ assert_raise Redis::Distributed::CannotDistribute do
22
+ r.sadd "foo", "s1"
23
+ r.sadd "foo", "s2"
24
+ r.sadd "bar", "s2"
25
+
26
+ r.sinter("foo", "bar")
27
+ end
28
+ end
29
+
30
+ def test_sinterstore
31
+ assert_raise Redis::Distributed::CannotDistribute do
32
+ r.sadd "foo", "s1"
33
+ r.sadd "foo", "s2"
34
+ r.sadd "bar", "s2"
35
+
36
+ r.sinterstore("baz", "foo", "bar")
37
+ end
38
+ end
39
+
40
+ def test_sunion
41
+ assert_raise Redis::Distributed::CannotDistribute do
42
+ r.sadd "foo", "s1"
43
+ r.sadd "foo", "s2"
44
+ r.sadd "bar", "s2"
45
+ r.sadd "bar", "s3"
46
+
47
+ r.sunion("foo", "bar")
48
+ end
49
+ end
50
+
51
+ def test_sunionstore
52
+ assert_raise Redis::Distributed::CannotDistribute do
53
+ r.sadd "foo", "s1"
54
+ r.sadd "foo", "s2"
55
+ r.sadd "bar", "s2"
56
+ r.sadd "bar", "s3"
57
+
58
+ r.sunionstore("baz", "foo", "bar")
59
+ end
60
+ end
61
+
62
+ def test_sdiff
63
+ assert_raise Redis::Distributed::CannotDistribute do
64
+ r.sadd "foo", "s1"
65
+ r.sadd "foo", "s2"
66
+ r.sadd "bar", "s2"
67
+ r.sadd "bar", "s3"
68
+
69
+ r.sdiff("foo", "bar")
70
+ end
71
+ end
72
+
73
+ def test_sdiffstore
74
+ assert_raise Redis::Distributed::CannotDistribute do
75
+ r.sadd "foo", "s1"
76
+ r.sadd "foo", "s2"
77
+ r.sadd "bar", "s2"
78
+ r.sadd "bar", "s3"
79
+
80
+ r.sdiffstore("baz", "foo", "bar")
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
+ require "lint/sorted_sets"
5
+
6
+ class TestDistributedCommandsOnSortedSets < Test::Unit::TestCase
7
+
8
+ include Helper::Distributed
9
+ include Lint::SortedSets
10
+
11
+ def test_zcount
12
+ r.zadd "foo", 1, "s1"
13
+ r.zadd "foo", 2, "s2"
14
+ r.zadd "foo", 3, "s3"
15
+
16
+ assert_equal 2, r.zcount("foo", 2, 3)
17
+ end
18
+ end