redis 4.0.1 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/README.md +46 -1
  4. data/lib/redis/client.rb +29 -12
  5. data/lib/redis/cluster/command.rb +81 -0
  6. data/lib/redis/cluster/command_loader.rb +34 -0
  7. data/lib/redis/cluster/key_slot_converter.rb +72 -0
  8. data/lib/redis/cluster/node.rb +104 -0
  9. data/lib/redis/cluster/node_key.rb +35 -0
  10. data/lib/redis/cluster/node_loader.rb +37 -0
  11. data/lib/redis/cluster/option.rb +77 -0
  12. data/lib/redis/cluster/slot.rb +69 -0
  13. data/lib/redis/cluster/slot_loader.rb +49 -0
  14. data/lib/redis/cluster.rb +286 -0
  15. data/lib/redis/connection/ruby.rb +5 -2
  16. data/lib/redis/distributed.rb +13 -6
  17. data/lib/redis/errors.rb +46 -0
  18. data/lib/redis/pipeline.rb +9 -1
  19. data/lib/redis/version.rb +1 -1
  20. data/lib/redis.rb +692 -25
  21. metadata +27 -184
  22. data/.gitignore +0 -16
  23. data/.travis/Gemfile +0 -13
  24. data/.travis.yml +0 -73
  25. data/.yardopts +0 -3
  26. data/Gemfile +0 -3
  27. data/benchmarking/logging.rb +0 -71
  28. data/benchmarking/pipeline.rb +0 -51
  29. data/benchmarking/speed.rb +0 -21
  30. data/benchmarking/suite.rb +0 -24
  31. data/benchmarking/worker.rb +0 -71
  32. data/bors.toml +0 -14
  33. data/examples/basic.rb +0 -15
  34. data/examples/consistency.rb +0 -114
  35. data/examples/dist_redis.rb +0 -43
  36. data/examples/incr-decr.rb +0 -17
  37. data/examples/list.rb +0 -26
  38. data/examples/pubsub.rb +0 -37
  39. data/examples/sentinel/sentinel.conf +0 -9
  40. data/examples/sentinel/start +0 -49
  41. data/examples/sentinel.rb +0 -41
  42. data/examples/sets.rb +0 -36
  43. data/examples/unicorn/config.ru +0 -3
  44. data/examples/unicorn/unicorn.rb +0 -20
  45. data/makefile +0 -42
  46. data/redis.gemspec +0 -42
  47. data/test/bitpos_test.rb +0 -63
  48. data/test/blocking_commands_test.rb +0 -40
  49. data/test/client_test.rb +0 -59
  50. data/test/command_map_test.rb +0 -28
  51. data/test/commands_on_hashes_test.rb +0 -19
  52. data/test/commands_on_hyper_log_log_test.rb +0 -19
  53. data/test/commands_on_lists_test.rb +0 -18
  54. data/test/commands_on_sets_test.rb +0 -75
  55. data/test/commands_on_sorted_sets_test.rb +0 -150
  56. data/test/commands_on_strings_test.rb +0 -99
  57. data/test/commands_on_value_types_test.rb +0 -171
  58. data/test/connection_handling_test.rb +0 -275
  59. data/test/connection_test.rb +0 -57
  60. data/test/db/.gitkeep +0 -0
  61. data/test/distributed_blocking_commands_test.rb +0 -44
  62. data/test/distributed_commands_on_hashes_test.rb +0 -8
  63. data/test/distributed_commands_on_hyper_log_log_test.rb +0 -31
  64. data/test/distributed_commands_on_lists_test.rb +0 -20
  65. data/test/distributed_commands_on_sets_test.rb +0 -106
  66. data/test/distributed_commands_on_sorted_sets_test.rb +0 -16
  67. data/test/distributed_commands_on_strings_test.rb +0 -69
  68. data/test/distributed_commands_on_value_types_test.rb +0 -93
  69. data/test/distributed_commands_requiring_clustering_test.rb +0 -162
  70. data/test/distributed_connection_handling_test.rb +0 -21
  71. data/test/distributed_internals_test.rb +0 -68
  72. data/test/distributed_key_tags_test.rb +0 -50
  73. data/test/distributed_persistence_control_commands_test.rb +0 -24
  74. data/test/distributed_publish_subscribe_test.rb +0 -90
  75. data/test/distributed_remote_server_control_commands_test.rb +0 -64
  76. data/test/distributed_scripting_test.rb +0 -100
  77. data/test/distributed_sorting_test.rb +0 -18
  78. data/test/distributed_test.rb +0 -56
  79. data/test/distributed_transactions_test.rb +0 -30
  80. data/test/encoding_test.rb +0 -14
  81. data/test/error_replies_test.rb +0 -57
  82. data/test/fork_safety_test.rb +0 -60
  83. data/test/helper.rb +0 -201
  84. data/test/helper_test.rb +0 -22
  85. data/test/internals_test.rb +0 -389
  86. data/test/lint/blocking_commands.rb +0 -150
  87. data/test/lint/hashes.rb +0 -162
  88. data/test/lint/hyper_log_log.rb +0 -60
  89. data/test/lint/lists.rb +0 -143
  90. data/test/lint/sets.rb +0 -140
  91. data/test/lint/sorted_sets.rb +0 -316
  92. data/test/lint/strings.rb +0 -246
  93. data/test/lint/value_types.rb +0 -130
  94. data/test/persistence_control_commands_test.rb +0 -24
  95. data/test/pipelining_commands_test.rb +0 -238
  96. data/test/publish_subscribe_test.rb +0 -280
  97. data/test/remote_server_control_commands_test.rb +0 -175
  98. data/test/scanning_test.rb +0 -407
  99. data/test/scripting_test.rb +0 -76
  100. data/test/sentinel_command_test.rb +0 -78
  101. data/test/sentinel_test.rb +0 -253
  102. data/test/sorting_test.rb +0 -57
  103. data/test/ssl_test.rb +0 -69
  104. data/test/support/connection/hiredis.rb +0 -1
  105. data/test/support/connection/ruby.rb +0 -1
  106. data/test/support/connection/synchrony.rb +0 -17
  107. data/test/support/redis_mock.rb +0 -130
  108. data/test/support/ssl/gen_certs.sh +0 -31
  109. data/test/support/ssl/trusted-ca.crt +0 -25
  110. data/test/support/ssl/trusted-ca.key +0 -27
  111. data/test/support/ssl/trusted-cert.crt +0 -81
  112. data/test/support/ssl/trusted-cert.key +0 -28
  113. data/test/support/ssl/untrusted-ca.crt +0 -26
  114. data/test/support/ssl/untrusted-ca.key +0 -27
  115. data/test/support/ssl/untrusted-cert.crt +0 -82
  116. data/test/support/ssl/untrusted-cert.key +0 -28
  117. data/test/support/wire/synchrony.rb +0 -24
  118. data/test/support/wire/thread.rb +0 -5
  119. data/test/synchrony_driver.rb +0 -85
  120. data/test/test.conf.erb +0 -9
  121. data/test/thread_safety_test.rb +0 -60
  122. data/test/transactions_test.rb +0 -262
  123. data/test/unknown_commands_test.rb +0 -12
  124. data/test/url_param_test.rb +0 -136
@@ -1,19 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/hashes"
3
-
4
- class TestCommandsOnHashes < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::Hashes
8
-
9
- def test_mapped_hmget_in_a_pipeline_returns_hash
10
- r.hset("foo", "f1", "s1")
11
- r.hset("foo", "f2", "s2")
12
-
13
- result = r.pipelined do
14
- r.mapped_hmget("foo", "f1", "f2")
15
- end
16
-
17
- assert_equal result[0], { "f1" => "s1", "f2" => "s2" }
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/hyper_log_log"
3
-
4
- class TestCommandsOnHyperLogLog < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::HyperLogLog
8
-
9
- def test_pfmerge
10
- target_version "2.8.9" do
11
- r.pfadd "foo", "s1"
12
- r.pfadd "bar", "s2"
13
-
14
- assert_equal true, r.pfmerge("res", "foo", "bar")
15
- assert_equal 2, r.pfcount("res")
16
- end
17
- end
18
-
19
- end
@@ -1,18 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/lists"
3
-
4
- class TestCommandsOnLists < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::Lists
8
-
9
- def test_rpoplpush
10
- r.rpush "foo", "s1"
11
- r.rpush "foo", "s2"
12
-
13
- assert_equal "s2", r.rpoplpush("foo", "bar")
14
- assert_equal ["s2"], r.lrange("bar", 0, -1)
15
- assert_equal "s1", r.rpoplpush("foo", "bar")
16
- assert_equal ["s1", "s2"], r.lrange("bar", 0, -1)
17
- end
18
- end
@@ -1,75 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/sets"
3
-
4
- class TestCommandsOnSets < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::Sets
8
-
9
- def test_smove
10
- r.sadd "foo", "s1"
11
- r.sadd "bar", "s2"
12
-
13
- assert r.smove("foo", "bar", "s1")
14
- assert r.sismember("bar", "s1")
15
- end
16
-
17
- def test_sinter
18
- r.sadd "foo", "s1"
19
- r.sadd "foo", "s2"
20
- r.sadd "bar", "s2"
21
-
22
- assert_equal ["s2"], r.sinter("foo", "bar")
23
- end
24
-
25
- def test_sinterstore
26
- r.sadd "foo", "s1"
27
- r.sadd "foo", "s2"
28
- r.sadd "bar", "s2"
29
-
30
- r.sinterstore("baz", "foo", "bar")
31
-
32
- assert_equal ["s2"], r.smembers("baz")
33
- end
34
-
35
- def test_sunion
36
- r.sadd "foo", "s1"
37
- r.sadd "foo", "s2"
38
- r.sadd "bar", "s2"
39
- r.sadd "bar", "s3"
40
-
41
- assert_equal ["s1", "s2", "s3"], r.sunion("foo", "bar").sort
42
- end
43
-
44
- def test_sunionstore
45
- r.sadd "foo", "s1"
46
- r.sadd "foo", "s2"
47
- r.sadd "bar", "s2"
48
- r.sadd "bar", "s3"
49
-
50
- r.sunionstore("baz", "foo", "bar")
51
-
52
- assert_equal ["s1", "s2", "s3"], r.smembers("baz").sort
53
- end
54
-
55
- def test_sdiff
56
- r.sadd "foo", "s1"
57
- r.sadd "foo", "s2"
58
- r.sadd "bar", "s2"
59
- r.sadd "bar", "s3"
60
-
61
- assert_equal ["s1"], r.sdiff("foo", "bar")
62
- assert_equal ["s3"], r.sdiff("bar", "foo")
63
- end
64
-
65
- def test_sdiffstore
66
- r.sadd "foo", "s1"
67
- r.sadd "foo", "s2"
68
- r.sadd "bar", "s2"
69
- r.sadd "bar", "s3"
70
-
71
- r.sdiffstore("baz", "foo", "bar")
72
-
73
- assert_equal ["s1"], r.smembers("baz")
74
- end
75
- end
@@ -1,150 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/sorted_sets"
3
-
4
- class TestCommandsOnSortedSets < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::SortedSets
8
-
9
- def test_zlexcount
10
- target_version "2.8.9" do
11
- r.zadd "foo", 0, "aaren"
12
- r.zadd "foo", 0, "abagael"
13
- r.zadd "foo", 0, "abby"
14
- r.zadd "foo", 0, "abbygail"
15
-
16
- assert_equal 4, r.zlexcount("foo", "[a", "[a\xff")
17
- assert_equal 4, r.zlexcount("foo", "[aa", "[ab\xff")
18
- assert_equal 3, r.zlexcount("foo", "(aaren", "[ab\xff")
19
- assert_equal 2, r.zlexcount("foo", "[aba", "(abbygail")
20
- assert_equal 1, r.zlexcount("foo", "(aaren", "(abby")
21
- end
22
- end
23
-
24
- def test_zrangebylex
25
- target_version "2.8.9" do
26
- r.zadd "foo", 0, "aaren"
27
- r.zadd "foo", 0, "abagael"
28
- r.zadd "foo", 0, "abby"
29
- r.zadd "foo", 0, "abbygail"
30
-
31
- assert_equal ["aaren", "abagael", "abby", "abbygail"], r.zrangebylex("foo", "[a", "[a\xff")
32
- assert_equal ["aaren", "abagael"], r.zrangebylex("foo", "[a", "[a\xff", :limit => [0, 2])
33
- assert_equal ["abby", "abbygail"], r.zrangebylex("foo", "(abb", "(abb\xff")
34
- assert_equal ["abbygail"], r.zrangebylex("foo", "(abby", "(abby\xff")
35
- end
36
- end
37
-
38
- def test_zrevrangebylex
39
- target_version "2.9.9" do
40
- r.zadd "foo", 0, "aaren"
41
- r.zadd "foo", 0, "abagael"
42
- r.zadd "foo", 0, "abby"
43
- r.zadd "foo", 0, "abbygail"
44
-
45
- assert_equal ["abbygail", "abby", "abagael", "aaren"], r.zrevrangebylex("foo", "[a\xff", "[a")
46
- assert_equal ["abbygail", "abby"], r.zrevrangebylex("foo", "[a\xff", "[a", :limit => [0, 2])
47
- assert_equal ["abbygail", "abby"], r.zrevrangebylex("foo", "(abb\xff", "(abb")
48
- assert_equal ["abbygail"], r.zrevrangebylex("foo", "(abby\xff", "(abby")
49
- end
50
- end
51
-
52
- def test_zcount
53
- r.zadd "foo", 1, "s1"
54
- r.zadd "foo", 2, "s2"
55
- r.zadd "foo", 3, "s3"
56
-
57
- assert_equal 2, r.zcount("foo", 2, 3)
58
- end
59
-
60
- def test_zunionstore
61
- r.zadd "foo", 1, "s1"
62
- r.zadd "bar", 2, "s2"
63
- r.zadd "foo", 3, "s3"
64
- r.zadd "bar", 4, "s4"
65
-
66
- assert_equal 4, r.zunionstore("foobar", ["foo", "bar"])
67
- assert_equal ["s1", "s2", "s3", "s4"], r.zrange("foobar", 0, -1)
68
- end
69
-
70
- def test_zunionstore_with_weights
71
- r.zadd "foo", 1, "s1"
72
- r.zadd "foo", 3, "s3"
73
- r.zadd "bar", 20, "s2"
74
- r.zadd "bar", 40, "s4"
75
-
76
- assert_equal 4, r.zunionstore("foobar", ["foo", "bar"])
77
- assert_equal ["s1", "s3", "s2", "s4"], r.zrange("foobar", 0, -1)
78
-
79
- assert_equal 4, r.zunionstore("foobar", ["foo", "bar"], :weights => [10, 1])
80
- assert_equal ["s1", "s2", "s3", "s4"], r.zrange("foobar", 0, -1)
81
- end
82
-
83
- def test_zunionstore_with_aggregate
84
- r.zadd "foo", 1, "s1"
85
- r.zadd "foo", 2, "s2"
86
- r.zadd "bar", 4, "s2"
87
- r.zadd "bar", 3, "s3"
88
-
89
- assert_equal 3, r.zunionstore("foobar", ["foo", "bar"])
90
- assert_equal ["s1", "s3", "s2"], r.zrange("foobar", 0, -1)
91
-
92
- assert_equal 3, r.zunionstore("foobar", ["foo", "bar"], :aggregate => :min)
93
- assert_equal ["s1", "s2", "s3"], r.zrange("foobar", 0, -1)
94
-
95
- assert_equal 3, r.zunionstore("foobar", ["foo", "bar"], :aggregate => :max)
96
- assert_equal ["s1", "s3", "s2"], r.zrange("foobar", 0, -1)
97
- end
98
-
99
- def test_zinterstore
100
- r.zadd "foo", 1, "s1"
101
- r.zadd "bar", 2, "s1"
102
- r.zadd "foo", 3, "s3"
103
- r.zadd "bar", 4, "s4"
104
-
105
- assert_equal 1, r.zinterstore("foobar", ["foo", "bar"])
106
- assert_equal ["s1"], r.zrange("foobar", 0, -1)
107
- end
108
-
109
- def test_zinterstore_with_weights
110
- r.zadd "foo", 1, "s1"
111
- r.zadd "foo", 2, "s2"
112
- r.zadd "foo", 3, "s3"
113
- r.zadd "bar", 20, "s2"
114
- r.zadd "bar", 30, "s3"
115
- r.zadd "bar", 40, "s4"
116
-
117
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"])
118
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
119
-
120
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :weights => [10, 1])
121
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
122
-
123
- assert_equal 40.0, r.zscore("foobar", "s2")
124
- assert_equal 60.0, r.zscore("foobar", "s3")
125
- end
126
-
127
- def test_zinterstore_with_aggregate
128
- r.zadd "foo", 1, "s1"
129
- r.zadd "foo", 2, "s2"
130
- r.zadd "foo", 3, "s3"
131
- r.zadd "bar", 20, "s2"
132
- r.zadd "bar", 30, "s3"
133
- r.zadd "bar", 40, "s4"
134
-
135
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"])
136
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
137
- assert_equal 22.0, r.zscore("foobar", "s2")
138
- assert_equal 33.0, r.zscore("foobar", "s3")
139
-
140
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :aggregate => :min)
141
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
142
- assert_equal 2.0, r.zscore("foobar", "s2")
143
- assert_equal 3.0, r.zscore("foobar", "s3")
144
-
145
- assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :aggregate => :max)
146
- assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
147
- assert_equal 20.0, r.zscore("foobar", "s2")
148
- assert_equal 30.0, r.zscore("foobar", "s3")
149
- end
150
- end
@@ -1,99 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/strings"
3
-
4
- class TestCommandsOnStrings < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::Strings
8
-
9
- def test_mget
10
- r.set("foo", "s1")
11
- r.set("bar", "s2")
12
-
13
- assert_equal ["s1", "s2"] , r.mget("foo", "bar")
14
- assert_equal ["s1", "s2", nil], r.mget("foo", "bar", "baz")
15
- end
16
-
17
- def test_mget_mapped
18
- r.set("foo", "s1")
19
- r.set("bar", "s2")
20
-
21
- response = r.mapped_mget("foo", "bar")
22
-
23
- assert_equal "s1", response["foo"]
24
- assert_equal "s2", response["bar"]
25
-
26
- response = r.mapped_mget("foo", "bar", "baz")
27
-
28
- assert_equal "s1", response["foo"]
29
- assert_equal "s2", response["bar"]
30
- assert_equal nil , response["baz"]
31
- end
32
-
33
- def test_mapped_mget_in_a_pipeline_returns_hash
34
- r.set("foo", "s1")
35
- r.set("bar", "s2")
36
-
37
- result = r.pipelined do
38
- r.mapped_mget("foo", "bar")
39
- end
40
-
41
- assert_equal result[0], { "foo" => "s1", "bar" => "s2" }
42
- end
43
-
44
- def test_mset
45
- r.mset(:foo, "s1", :bar, "s2")
46
-
47
- assert_equal "s1", r.get("foo")
48
- assert_equal "s2", r.get("bar")
49
- end
50
-
51
- def test_mset_mapped
52
- r.mapped_mset(:foo => "s1", :bar => "s2")
53
-
54
- assert_equal "s1", r.get("foo")
55
- assert_equal "s2", r.get("bar")
56
- end
57
-
58
- def test_msetnx
59
- r.set("foo", "s1")
60
- assert_equal false, r.msetnx(:foo, "s2", :bar, "s3")
61
- assert_equal "s1", r.get("foo")
62
- assert_equal nil, r.get("bar")
63
-
64
- r.del("foo")
65
- assert_equal true, r.msetnx(:foo, "s2", :bar, "s3")
66
- assert_equal "s2", r.get("foo")
67
- assert_equal "s3", r.get("bar")
68
- end
69
-
70
- def test_msetnx_mapped
71
- r.set("foo", "s1")
72
- assert_equal false, r.mapped_msetnx(:foo => "s2", :bar => "s3")
73
- assert_equal "s1", r.get("foo")
74
- assert_equal nil, r.get("bar")
75
-
76
- r.del("foo")
77
- assert_equal true, r.mapped_msetnx(:foo => "s2", :bar => "s3")
78
- assert_equal "s2", r.get("foo")
79
- assert_equal "s3", r.get("bar")
80
- end
81
-
82
- def test_bitop
83
- with_external_encoding("UTF-8") do
84
- target_version "2.5.10" do
85
- r.set("foo", "a")
86
- r.set("bar", "b")
87
-
88
- r.bitop(:and, "foo&bar", "foo", "bar")
89
- assert_equal "\x60", r.get("foo&bar")
90
- r.bitop(:or, "foo|bar", "foo", "bar")
91
- assert_equal "\x63", r.get("foo|bar")
92
- r.bitop(:xor, "foo^bar", "foo", "bar")
93
- assert_equal "\x03", r.get("foo^bar")
94
- r.bitop(:not, "~foo", "foo")
95
- assert_equal "\x9E", r.get("~foo")
96
- end
97
- end
98
- end
99
- end
@@ -1,171 +0,0 @@
1
- require_relative "helper"
2
- require_relative "lint/value_types"
3
-
4
- class TestCommandsOnValueTypes < Test::Unit::TestCase
5
-
6
- include Helper::Client
7
- include Lint::ValueTypes
8
-
9
- def test_del
10
- r.set "foo", "s1"
11
- r.set "bar", "s2"
12
- r.set "baz", "s3"
13
-
14
- assert_equal ["bar", "baz", "foo"], r.keys("*").sort
15
-
16
- assert_equal 1, r.del("foo")
17
-
18
- assert_equal ["bar", "baz"], r.keys("*").sort
19
-
20
- assert_equal 2, r.del("bar", "baz")
21
-
22
- assert_equal [], r.keys("*").sort
23
- end
24
-
25
- def test_del_with_array_argument
26
- r.set "foo", "s1"
27
- r.set "bar", "s2"
28
- r.set "baz", "s3"
29
-
30
- assert_equal ["bar", "baz", "foo"], r.keys("*").sort
31
-
32
- assert_equal 1, r.del(["foo"])
33
-
34
- assert_equal ["bar", "baz"], r.keys("*").sort
35
-
36
- assert_equal 2, r.del(["bar", "baz"])
37
-
38
- assert_equal [], r.keys("*").sort
39
- end
40
-
41
- def test_randomkey
42
- assert r.randomkey.to_s.empty?
43
-
44
- r.set("foo", "s1")
45
-
46
- assert_equal "foo", r.randomkey
47
-
48
- r.set("bar", "s2")
49
-
50
- 4.times do
51
- assert ["foo", "bar"].include?(r.randomkey)
52
- end
53
- end
54
-
55
- def test_rename
56
- r.set("foo", "s1")
57
- r.rename "foo", "bar"
58
-
59
- assert_equal "s1", r.get("bar")
60
- assert_equal nil, r.get("foo")
61
- end
62
-
63
- def test_renamenx
64
- r.set("foo", "s1")
65
- r.set("bar", "s2")
66
-
67
- assert_equal false, r.renamenx("foo", "bar")
68
-
69
- assert_equal "s1", r.get("foo")
70
- assert_equal "s2", r.get("bar")
71
- end
72
-
73
- def test_dbsize
74
- assert_equal 0, r.dbsize
75
-
76
- r.set("foo", "s1")
77
-
78
- assert_equal 1, r.dbsize
79
- end
80
-
81
- def test_flushdb
82
- # Test defaults
83
- r.set("foo", "s1")
84
- r.set("bar", "s2")
85
-
86
- assert_equal 2, r.dbsize
87
-
88
- r.flushdb
89
-
90
- assert_equal 0, r.dbsize
91
-
92
- # Test sync
93
- r.set("foo", "s1")
94
- r.set("bar", "s2")
95
-
96
- assert_equal 2, r.dbsize
97
-
98
- r.flushdb(:async => false)
99
-
100
- assert_equal 0, r.dbsize
101
-
102
- # Test async
103
- target_version "3.9.101" do
104
- r.set("foo", "s1")
105
- r.set("bar", "s2")
106
-
107
- assert_equal 2, r.dbsize
108
-
109
- r.flushdb(:async => true)
110
-
111
- assert_equal 0, r.dbsize
112
-
113
- redis_mock(:flushdb => lambda { |args| "+FLUSHDB #{args.upcase}" }) do |redis|
114
- assert_equal "FLUSHDB ASYNC", redis.flushdb(:async => true)
115
- end
116
- end
117
- end
118
-
119
- def test_flushall
120
- # Test defaults
121
- redis_mock(:flushall => lambda { "+FLUSHALL" }) do |redis|
122
- assert_equal "FLUSHALL", redis.flushall
123
- end
124
-
125
- # Test sync
126
- redis_mock(:flushall => lambda { "+FLUSHALL" }) do |redis|
127
- assert_equal "FLUSHALL", redis.flushall(:async => false)
128
- end
129
-
130
- # Test async
131
- target_version "3.9.101" do
132
- redis_mock(:flushall => lambda { |args| "+FLUSHALL #{args.upcase}" }) do |redis|
133
- assert_equal "FLUSHALL ASYNC", redis.flushall(:async => true)
134
- end
135
- end
136
- end
137
-
138
- def test_migrate
139
- redis_mock(:migrate => lambda { |*args| args }) do |redis|
140
- options = { :host => "127.0.0.1", :port => 1234 }
141
-
142
- ex = assert_raise(RuntimeError) do
143
- redis.migrate("foo", options.reject { |key, _| key == :host })
144
- end
145
- assert ex.message =~ /host not specified/
146
-
147
- ex = assert_raise(RuntimeError) do
148
- redis.migrate("foo", options.reject { |key, _| key == :port })
149
- end
150
- assert ex.message =~ /port not specified/
151
-
152
- default_db = redis._client.db.to_i
153
- default_timeout = redis._client.timeout.to_i
154
-
155
- # Test defaults
156
- actual = redis.migrate("foo", options)
157
- expected = ["127.0.0.1", "1234", "foo", default_db.to_s, default_timeout.to_s]
158
- assert_equal expected, actual
159
-
160
- # Test db override
161
- actual = redis.migrate("foo", options.merge(:db => default_db + 1))
162
- expected = ["127.0.0.1", "1234", "foo", (default_db + 1).to_s, default_timeout.to_s]
163
- assert_equal expected, actual
164
-
165
- # Test timeout override
166
- actual = redis.migrate("foo", options.merge(:timeout => default_timeout + 1))
167
- expected = ["127.0.0.1", "1234", "foo", default_db.to_s, (default_timeout + 1).to_s]
168
- assert_equal expected, actual
169
- end
170
- end
171
- end