redis 3.0.5 → 3.0.6

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 (58) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +9 -8
  3. data/.travis.yml +10 -8
  4. data/CHANGELOG.md +4 -0
  5. data/Rakefile +21 -10
  6. data/lib/redis.rb +229 -72
  7. data/lib/redis/version.rb +1 -1
  8. data/test/blocking_commands_test.rb +1 -1
  9. data/test/command_map_test.rb +1 -1
  10. data/test/commands_on_hashes_test.rb +1 -1
  11. data/test/commands_on_lists_test.rb +1 -1
  12. data/test/commands_on_sets_test.rb +1 -1
  13. data/test/commands_on_sorted_sets_test.rb +1 -1
  14. data/test/commands_on_strings_test.rb +14 -14
  15. data/test/commands_on_value_types_test.rb +1 -1
  16. data/test/connection_handling_test.rb +1 -1
  17. data/test/distributed_blocking_commands_test.rb +1 -1
  18. data/test/distributed_commands_on_hashes_test.rb +1 -1
  19. data/test/distributed_commands_on_lists_test.rb +1 -1
  20. data/test/distributed_commands_on_sets_test.rb +1 -1
  21. data/test/distributed_commands_on_sorted_sets_test.rb +1 -1
  22. data/test/distributed_commands_on_strings_test.rb +7 -7
  23. data/test/distributed_commands_on_value_types_test.rb +1 -1
  24. data/test/distributed_commands_requiring_clustering_test.rb +14 -14
  25. data/test/distributed_connection_handling_test.rb +1 -1
  26. data/test/distributed_internals_test.rb +1 -1
  27. data/test/distributed_key_tags_test.rb +1 -1
  28. data/test/distributed_persistence_control_commands_test.rb +1 -1
  29. data/test/distributed_publish_subscribe_test.rb +1 -1
  30. data/test/distributed_remote_server_control_commands_test.rb +15 -15
  31. data/test/distributed_scripting_test.rb +57 -57
  32. data/test/distributed_sorting_test.rb +1 -1
  33. data/test/distributed_test.rb +1 -1
  34. data/test/distributed_transactions_test.rb +1 -1
  35. data/test/encoding_test.rb +1 -1
  36. data/test/error_replies_test.rb +1 -1
  37. data/test/helper.rb +10 -1
  38. data/test/helper_test.rb +1 -1
  39. data/test/internals_test.rb +20 -9
  40. data/test/lint/hashes.rb +17 -17
  41. data/test/lint/lists.rb +10 -10
  42. data/test/lint/sets.rb +14 -14
  43. data/test/lint/sorted_sets.rb +30 -30
  44. data/test/lint/strings.rb +45 -45
  45. data/test/lint/value_types.rb +32 -32
  46. data/test/persistence_control_commands_test.rb +1 -1
  47. data/test/pipelining_commands_test.rb +1 -1
  48. data/test/publish_subscribe_test.rb +1 -1
  49. data/test/remote_server_control_commands_test.rb +7 -7
  50. data/test/scanning_test.rb +413 -0
  51. data/test/scripting_test.rb +45 -45
  52. data/test/sorting_test.rb +1 -1
  53. data/test/thread_safety_test.rb +1 -1
  54. data/test/transactions_test.rb +1 -1
  55. data/test/unknown_commands_test.rb +1 -1
  56. data/test/url_param_test.rb +1 -1
  57. metadata +6 -4
  58. data/test/db/.gitignore +0 -1
@@ -1,3 +1,3 @@
1
1
  class Redis
2
- VERSION = "3.0.5"
2
+ VERSION = "3.0.6"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/blocking_commands"
5
5
 
6
6
  class TestBlockingCommands < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestCommandMap < Test::Unit::TestCase
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/hashes"
5
5
 
6
6
  class TestCommandsOnHashes < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/lists"
5
5
 
6
6
  class TestCommandsOnLists < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/sets"
5
5
 
6
6
  class TestCommandsOnSets < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/sorted_sets"
5
5
 
6
6
  class TestCommandsOnSortedSets < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/strings"
5
5
 
6
6
  class TestCommandsOnStrings < Test::Unit::TestCase
@@ -82,18 +82,18 @@ class TestCommandsOnStrings < Test::Unit::TestCase
82
82
  end
83
83
 
84
84
  def test_bitop
85
- return if version < "2.5.10"
86
-
87
- r.set("foo", "a")
88
- r.set("bar", "b")
89
-
90
- r.bitop(:and, "foo&bar", "foo", "bar")
91
- assert_equal "\x60", r.get("foo&bar")
92
- r.bitop(:or, "foo|bar", "foo", "bar")
93
- assert_equal "\x63", r.get("foo|bar")
94
- r.bitop(:xor, "foo^bar", "foo", "bar")
95
- assert_equal "\x03", r.get("foo^bar")
96
- r.bitop(:not, "~foo", "foo")
97
- assert_equal "\x9E", r.get("~foo")
85
+ target_version "2.5.10" do
86
+ r.set("foo", "a")
87
+ r.set("bar", "b")
88
+
89
+ r.bitop(:and, "foo&bar", "foo", "bar")
90
+ assert_equal "\x60", r.get("foo&bar")
91
+ r.bitop(:or, "foo|bar", "foo", "bar")
92
+ assert_equal "\x63", r.get("foo|bar")
93
+ r.bitop(:xor, "foo^bar", "foo", "bar")
94
+ assert_equal "\x03", r.get("foo^bar")
95
+ r.bitop(:not, "~foo", "foo")
96
+ assert_equal "\x9E", r.get("~foo")
97
+ end
98
98
  end
99
99
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/value_types"
5
5
 
6
6
  class TestCommandsOnValueTypes < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestConnectionHandling < Test::Unit::TestCase
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/blocking_commands"
5
5
 
6
6
  class TestDistributedBlockingCommands < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/hashes"
5
5
 
6
6
  class TestDistributedCommandsOnHashes < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/lists"
5
5
 
6
6
  class TestDistributedCommandsOnLists < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/sets"
5
5
 
6
6
  class TestDistributedCommandsOnSets < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/sorted_sets"
5
5
 
6
6
  class TestDistributedCommandsOnSortedSets < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/strings"
5
5
 
6
6
  class TestDistributedCommandsOnStrings < Test::Unit::TestCase
@@ -47,13 +47,13 @@ class TestDistributedCommandsOnStrings < Test::Unit::TestCase
47
47
  end
48
48
 
49
49
  def test_bitop
50
- return if version < "2.5.10"
50
+ target_version "2.5.10" do
51
+ assert_raise Redis::Distributed::CannotDistribute do
52
+ r.set("foo", "a")
53
+ r.set("bar", "b")
51
54
 
52
- assert_raise Redis::Distributed::CannotDistribute do
53
- r.set("foo", "a")
54
- r.set("bar", "b")
55
-
56
- r.bitop(:and, "foo&bar", "foo", "bar")
55
+ r.bitop(:and, "foo&bar", "foo", "bar")
56
+ end
57
57
  end
58
58
  end
59
59
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
  require "lint/value_types"
5
5
 
6
6
  class TestDistributedCommandsOnValueTypes < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestDistributedCommandsRequiringClustering < Test::Unit::TestCase
6
6
 
@@ -147,18 +147,18 @@ class TestDistributedCommandsRequiringClustering < Test::Unit::TestCase
147
147
  end
148
148
 
149
149
  def test_bitop
150
- return if version < "2.5.10"
151
-
152
- r.set("{qux}foo", "a")
153
- r.set("{qux}bar", "b")
154
-
155
- r.bitop(:and, "{qux}foo&bar", "{qux}foo", "{qux}bar")
156
- assert_equal "\x60", r.get("{qux}foo&bar")
157
- r.bitop(:or, "{qux}foo|bar", "{qux}foo", "{qux}bar")
158
- assert_equal "\x63", r.get("{qux}foo|bar")
159
- r.bitop(:xor, "{qux}foo^bar", "{qux}foo", "{qux}bar")
160
- assert_equal "\x03", r.get("{qux}foo^bar")
161
- r.bitop(:not, "{qux}~foo", "{qux}foo")
162
- assert_equal "\x9E", r.get("{qux}~foo")
150
+ target_version "2.5.10" do
151
+ r.set("{qux}foo", "a")
152
+ r.set("{qux}bar", "b")
153
+
154
+ r.bitop(:and, "{qux}foo&bar", "{qux}foo", "{qux}bar")
155
+ assert_equal "\x60", r.get("{qux}foo&bar")
156
+ r.bitop(:or, "{qux}foo|bar", "{qux}foo", "{qux}bar")
157
+ assert_equal "\x63", r.get("{qux}foo|bar")
158
+ r.bitop(:xor, "{qux}foo^bar", "{qux}foo", "{qux}bar")
159
+ assert_equal "\x03", r.get("{qux}foo^bar")
160
+ r.bitop(:not, "{qux}~foo", "{qux}foo")
161
+ assert_equal "\x9E", r.get("{qux}~foo")
162
+ end
163
163
  end
164
164
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestDistributedConnectionHandling < Test::Unit::TestCase
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestDistributedInternals < Test::Unit::TestCase
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestDistributedKeyTags < Test::Unit::TestCase
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestDistributedPersistenceControlCommands < Test::Unit::TestCase
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestDistributedPublishSubscribe < Test::Unit::TestCase
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestDistributedRemoteServerControlCommands < Test::Unit::TestCase
6
6
 
@@ -28,13 +28,13 @@ class TestDistributedRemoteServerControlCommands < Test::Unit::TestCase
28
28
  end
29
29
 
30
30
  def test_info_commandstats
31
- return if version < "2.5.7"
31
+ target_version "2.5.7" do
32
+ r.nodes.each { |n| n.config(:resetstat) }
33
+ r.ping # Executed on every node
32
34
 
33
- r.nodes.each { |n| n.config(:resetstat) }
34
- r.ping # Executed on every node
35
-
36
- r.info(:commandstats).each do |info|
37
- assert_equal "1", info["ping"]["calls"]
35
+ r.info(:commandstats).each do |info|
36
+ assert_equal "1", info["ping"]["calls"]
37
+ end
38
38
  end
39
39
  end
40
40
 
@@ -52,15 +52,15 @@ class TestDistributedRemoteServerControlCommands < Test::Unit::TestCase
52
52
  end
53
53
 
54
54
  def test_time
55
- return if version < "2.5.4"
55
+ target_version "2.5.4" do
56
+ # Test that the difference between the time that Ruby reports and the time
57
+ # that Redis reports is minimal (prevents the test from being racy).
58
+ r.time.each do |rv|
59
+ redis_usec = rv[0] * 1_000_000 + rv[1]
60
+ ruby_usec = Integer(Time.now.to_f * 1_000_000)
56
61
 
57
- # Test that the difference between the time that Ruby reports and the time
58
- # that Redis reports is minimal (prevents the test from being racy).
59
- r.time.each do |rv|
60
- redis_usec = rv[0] * 1_000_000 + rv[1]
61
- ruby_usec = Integer(Time.now.to_f * 1_000_000)
62
-
63
- assert 500_000 > (ruby_usec - redis_usec).abs
62
+ assert 500_000 > (ruby_usec - redis_usec).abs
63
+ end
64
64
  end
65
65
  end
66
66
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "helper"
3
+ require File.expand_path("helper", File.dirname(__FILE__))
4
4
 
5
5
  class TestDistributedScripting < Test::Unit::TestCase
6
6
 
@@ -11,92 +11,92 @@ class TestDistributedScripting < Test::Unit::TestCase
11
11
  end
12
12
 
13
13
  def test_script_exists
14
- return if version < "2.5.9" # 2.6-rc1
15
-
16
- a = to_sha("return 1")
17
- b = a.succ
18
-
19
- assert_equal [true], r.script(:exists, a)
20
- assert_equal [false], r.script(:exists, b)
21
- assert_equal [[true]], r.script(:exists, [a])
22
- assert_equal [[false]], r.script(:exists, [b])
23
- assert_equal [[true, false]], r.script(:exists, [a, b])
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
24
  end
25
25
 
26
26
  def test_script_flush
27
- return if version < "2.5.9" # 2.6-rc1
28
-
29
- sha = to_sha("return 1")
30
- assert r.script(:exists, sha).first
31
- assert_equal ["OK"], r.script(:flush)
32
- assert !r.script(:exists, sha).first
27
+ target_version "2.5.9" do # 2.6-rc1
28
+ sha = to_sha("return 1")
29
+ assert r.script(:exists, sha).first
30
+ assert_equal ["OK"], r.script(:flush)
31
+ assert !r.script(:exists, sha).first
32
+ end
33
33
  end
34
34
 
35
35
  def test_script_kill
36
- return if version < "2.5.9" # 2.6-rc1
37
-
38
- redis_mock(:script => lambda { |arg| "+#{arg.upcase}" }) do |redis|
39
- assert_equal ["KILL"], redis.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
40
  end
41
41
  end
42
42
 
43
43
  def test_eval
44
- return if version < "2.5.9" # 2.6-rc1
44
+ target_version "2.5.9" do # 2.6-rc1
45
+ assert_raises(Redis::Distributed::CannotDistribute) do
46
+ r.eval("return #KEYS")
47
+ end
45
48
 
46
- assert_raises(Redis::Distributed::CannotDistribute) do
47
- r.eval("return #KEYS")
48
- end
49
+ assert_raises(Redis::Distributed::CannotDistribute) do
50
+ r.eval("return KEYS", ["k1", "k2"])
51
+ end
49
52
 
50
- assert_raises(Redis::Distributed::CannotDistribute) do
51
- r.eval("return KEYS", ["k1", "k2"])
53
+ assert_equal ["k1"], r.eval("return KEYS", ["k1"])
54
+ assert_equal ["a1", "a2"], r.eval("return ARGV", ["k1"], ["a1", "a2"])
52
55
  end
53
-
54
- assert_equal ["k1"], r.eval("return KEYS", ["k1"])
55
- assert_equal ["a1", "a2"], r.eval("return ARGV", ["k1"], ["a1", "a2"])
56
56
  end
57
57
 
58
58
  def test_eval_with_options_hash
59
- return if version < "2.5.9" # 2.6-rc1
59
+ target_version "2.5.9" do # 2.6-rc1
60
+ assert_raises(Redis::Distributed::CannotDistribute) do
61
+ r.eval("return #KEYS", {})
62
+ end
60
63
 
61
- assert_raises(Redis::Distributed::CannotDistribute) do
62
- r.eval("return #KEYS", {})
63
- end
64
+ assert_raises(Redis::Distributed::CannotDistribute) do
65
+ r.eval("return KEYS", { :keys => ["k1", "k2"] })
66
+ end
64
67
 
65
- assert_raises(Redis::Distributed::CannotDistribute) do
66
- r.eval("return KEYS", { :keys => ["k1", "k2"] })
68
+ assert_equal ["k1"], r.eval("return KEYS", { :keys => ["k1"] })
69
+ assert_equal ["a1", "a2"], r.eval("return ARGV", { :keys => ["k1"], :argv => ["a1", "a2"] })
67
70
  end
68
-
69
- assert_equal ["k1"], r.eval("return KEYS", { :keys => ["k1"] })
70
- assert_equal ["a1", "a2"], r.eval("return ARGV", { :keys => ["k1"], :argv => ["a1", "a2"] })
71
71
  end
72
72
 
73
73
  def test_evalsha
74
- return if version < "2.5.9" # 2.6-rc1
74
+ target_version "2.5.9" do # 2.6-rc1
75
+ assert_raises(Redis::Distributed::CannotDistribute) do
76
+ r.evalsha(to_sha("return #KEYS"))
77
+ end
75
78
 
76
- assert_raises(Redis::Distributed::CannotDistribute) do
77
- r.evalsha(to_sha("return #KEYS"))
78
- end
79
+ assert_raises(Redis::Distributed::CannotDistribute) do
80
+ r.evalsha(to_sha("return KEYS"), ["k1", "k2"])
81
+ end
79
82
 
80
- assert_raises(Redis::Distributed::CannotDistribute) do
81
- r.evalsha(to_sha("return KEYS"), ["k1", "k2"])
83
+ assert_equal ["k1"], r.evalsha(to_sha("return KEYS"), ["k1"])
84
+ assert_equal ["a1", "a2"], r.evalsha(to_sha("return ARGV"), ["k1"], ["a1", "a2"])
82
85
  end
83
-
84
- assert_equal ["k1"], r.evalsha(to_sha("return KEYS"), ["k1"])
85
- assert_equal ["a1", "a2"], r.evalsha(to_sha("return ARGV"), ["k1"], ["a1", "a2"])
86
86
  end
87
87
 
88
88
  def test_evalsha_with_options_hash
89
- return if version < "2.5.9" # 2.6-rc1
89
+ target_version "2.5.9" do # 2.6-rc1
90
+ assert_raises(Redis::Distributed::CannotDistribute) do
91
+ r.evalsha(to_sha("return #KEYS"), {})
92
+ end
90
93
 
91
- assert_raises(Redis::Distributed::CannotDistribute) do
92
- r.evalsha(to_sha("return #KEYS"), {})
93
- end
94
+ assert_raises(Redis::Distributed::CannotDistribute) do
95
+ r.evalsha(to_sha("return KEYS"), { :keys => ["k1", "k2"] })
96
+ end
94
97
 
95
- assert_raises(Redis::Distributed::CannotDistribute) do
96
- r.evalsha(to_sha("return KEYS"), { :keys => ["k1", "k2"] })
98
+ assert_equal ["k1"], r.evalsha(to_sha("return KEYS"), { :keys => ["k1"] })
99
+ assert_equal ["a1", "a2"], r.evalsha(to_sha("return ARGV"), { :keys => ["k1"], :argv => ["a1", "a2"] })
97
100
  end
98
-
99
- assert_equal ["k1"], r.evalsha(to_sha("return KEYS"), { :keys => ["k1"] })
100
- assert_equal ["a1", "a2"], r.evalsha(to_sha("return ARGV"), { :keys => ["k1"], :argv => ["a1", "a2"] })
101
101
  end
102
102
  end