redis 3.3.5 → 4.0.3
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis/Gemfile +8 -1
- data/.travis.yml +34 -62
- data/CHANGELOG.md +45 -2
- data/Gemfile +5 -1
- data/README.md +32 -76
- data/benchmarking/logging.rb +1 -1
- data/bin/build +71 -0
- data/bors.toml +14 -0
- data/lib/redis/client.rb +38 -20
- data/lib/redis/cluster/command.rb +81 -0
- data/lib/redis/cluster/command_loader.rb +32 -0
- data/lib/redis/cluster/key_slot_converter.rb +72 -0
- data/lib/redis/cluster/node.rb +104 -0
- data/lib/redis/cluster/node_key.rb +35 -0
- data/lib/redis/cluster/node_loader.rb +35 -0
- data/lib/redis/cluster/option.rb +76 -0
- data/lib/redis/cluster/slot.rb +69 -0
- data/lib/redis/cluster/slot_loader.rb +47 -0
- data/lib/redis/cluster.rb +285 -0
- data/lib/redis/connection/command_helper.rb +2 -8
- data/lib/redis/connection/hiredis.rb +2 -2
- data/lib/redis/connection/ruby.rb +13 -30
- data/lib/redis/connection/synchrony.rb +12 -4
- data/lib/redis/connection.rb +2 -2
- data/lib/redis/distributed.rb +29 -8
- data/lib/redis/errors.rb +46 -0
- data/lib/redis/hash_ring.rb +20 -64
- data/lib/redis/pipeline.rb +9 -7
- data/lib/redis/version.rb +1 -1
- data/lib/redis.rb +287 -52
- data/makefile +74 -0
- data/redis.gemspec +9 -10
- data/test/bitpos_test.rb +13 -19
- data/test/blocking_commands_test.rb +3 -5
- data/test/client_test.rb +18 -1
- data/test/cluster_abnormal_state_test.rb +38 -0
- data/test/cluster_blocking_commands_test.rb +15 -0
- data/test/cluster_client_internals_test.rb +77 -0
- data/test/cluster_client_key_hash_tags_test.rb +88 -0
- data/test/cluster_client_options_test.rb +147 -0
- data/test/cluster_client_pipelining_test.rb +59 -0
- data/test/cluster_client_replicas_test.rb +36 -0
- data/test/cluster_client_slots_test.rb +94 -0
- data/test/cluster_client_transactions_test.rb +71 -0
- data/test/cluster_commands_on_cluster_test.rb +165 -0
- data/test/cluster_commands_on_connection_test.rb +40 -0
- data/test/cluster_commands_on_geo_test.rb +74 -0
- data/test/cluster_commands_on_hashes_test.rb +11 -0
- data/test/cluster_commands_on_hyper_log_log_test.rb +17 -0
- data/test/cluster_commands_on_keys_test.rb +134 -0
- data/test/cluster_commands_on_lists_test.rb +15 -0
- data/test/cluster_commands_on_pub_sub_test.rb +101 -0
- data/test/cluster_commands_on_scripting_test.rb +56 -0
- data/test/cluster_commands_on_server_test.rb +221 -0
- data/test/cluster_commands_on_sets_test.rb +39 -0
- data/test/cluster_commands_on_sorted_sets_test.rb +35 -0
- data/test/cluster_commands_on_streams_test.rb +196 -0
- data/test/cluster_commands_on_strings_test.rb +15 -0
- data/test/cluster_commands_on_transactions_test.rb +41 -0
- data/test/cluster_commands_on_value_types_test.rb +14 -0
- data/test/command_map_test.rb +3 -5
- data/test/commands_on_geo_test.rb +116 -0
- data/test/commands_on_hashes_test.rb +2 -16
- data/test/commands_on_hyper_log_log_test.rb +3 -17
- data/test/commands_on_lists_test.rb +2 -15
- data/test/commands_on_sets_test.rb +2 -72
- data/test/commands_on_sorted_sets_test.rb +2 -132
- data/test/commands_on_strings_test.rb +2 -96
- data/test/commands_on_value_types_test.rb +80 -6
- data/test/connection_handling_test.rb +5 -7
- data/test/distributed_blocking_commands_test.rb +10 -4
- data/test/distributed_commands_on_hashes_test.rb +16 -5
- data/test/distributed_commands_on_hyper_log_log_test.rb +8 -15
- data/test/distributed_commands_on_lists_test.rb +4 -7
- data/test/distributed_commands_on_sets_test.rb +58 -36
- data/test/distributed_commands_on_sorted_sets_test.rb +51 -10
- data/test/distributed_commands_on_strings_test.rb +30 -10
- data/test/distributed_commands_on_value_types_test.rb +38 -4
- data/test/distributed_commands_requiring_clustering_test.rb +1 -3
- data/test/distributed_connection_handling_test.rb +1 -3
- data/test/distributed_internals_test.rb +8 -19
- data/test/distributed_key_tags_test.rb +4 -6
- data/test/distributed_persistence_control_commands_test.rb +1 -3
- data/test/distributed_publish_subscribe_test.rb +1 -3
- data/test/distributed_remote_server_control_commands_test.rb +1 -3
- data/test/distributed_scripting_test.rb +1 -3
- data/test/distributed_sorting_test.rb +1 -3
- data/test/distributed_test.rb +12 -14
- data/test/distributed_transactions_test.rb +1 -3
- data/test/encoding_test.rb +4 -8
- data/test/error_replies_test.rb +2 -4
- data/test/fork_safety_test.rb +1 -6
- data/test/helper.rb +179 -66
- data/test/helper_test.rb +1 -3
- data/test/internals_test.rb +47 -56
- data/test/lint/blocking_commands.rb +40 -16
- data/test/lint/hashes.rb +41 -0
- data/test/lint/hyper_log_log.rb +15 -1
- data/test/lint/lists.rb +16 -0
- data/test/lint/sets.rb +142 -0
- data/test/lint/sorted_sets.rb +183 -2
- data/test/lint/strings.rb +108 -20
- data/test/lint/value_types.rb +8 -0
- data/test/persistence_control_commands_test.rb +1 -3
- data/test/pipelining_commands_test.rb +12 -8
- data/test/publish_subscribe_test.rb +1 -3
- data/test/remote_server_control_commands_test.rb +60 -3
- data/test/scanning_test.rb +1 -7
- data/test/scripting_test.rb +1 -3
- data/test/sentinel_command_test.rb +1 -3
- data/test/sentinel_test.rb +1 -3
- data/test/sorting_test.rb +1 -3
- data/test/ssl_test.rb +45 -49
- data/test/support/cluster/orchestrator.rb +199 -0
- data/test/support/connection/hiredis.rb +1 -1
- data/test/support/connection/ruby.rb +1 -1
- data/test/support/connection/synchrony.rb +1 -1
- data/test/support/redis_mock.rb +1 -1
- data/test/synchrony_driver.rb +6 -9
- data/test/thread_safety_test.rb +1 -3
- data/test/transactions_test.rb +11 -3
- data/test/unknown_commands_test.rb +1 -3
- data/test/url_param_test.rb +44 -46
- metadata +109 -16
- data/Rakefile +0 -87
@@ -0,0 +1,116 @@
|
|
1
|
+
require_relative "helper"
|
2
|
+
|
3
|
+
class TestCommandsGeo < Test::Unit::TestCase
|
4
|
+
include Helper::Client
|
5
|
+
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
|
9
|
+
target_version "3.2.0" do
|
10
|
+
added_items_count = r.geoadd("Sicily", 13.361389, 38.115556, "Palermo", 15.087269, 37.502669, "Catania")
|
11
|
+
assert_equal 2, added_items_count
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_georadius_with_sort
|
16
|
+
target_version "3.2.0" do
|
17
|
+
nearest_cities = r.georadius("Sicily", 15, 37, 200, 'km', sort: 'asc')
|
18
|
+
assert_equal %w(Catania Palermo), nearest_cities
|
19
|
+
|
20
|
+
farthest_cities = r.georadius("Sicily", 15, 37, 200, 'km', sort: 'desc')
|
21
|
+
assert_equal %w(Palermo Catania), farthest_cities
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_georadius_with_count
|
26
|
+
target_version "3.2.0" do
|
27
|
+
city = r.georadius("Sicily", 15, 37, 200, 'km', count: 1)
|
28
|
+
assert_equal %w(Catania), city
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_georadius_with_options_count_sort
|
33
|
+
target_version "3.2.0" do
|
34
|
+
city = r.georadius("Sicily", 15, 37, 200, 'km', sort: :desc, options: :WITHDIST, count: 1)
|
35
|
+
assert_equal [["Palermo", "190.4424"]], city
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_georadiusbymember_with_sort
|
40
|
+
target_version "3.2.0" do
|
41
|
+
nearest_cities = r.georadiusbymember("Sicily", "Catania", 200, 'km', sort: 'asc')
|
42
|
+
assert_equal %w(Catania Palermo), nearest_cities
|
43
|
+
|
44
|
+
farthest_cities = r.georadiusbymember("Sicily", "Catania", 200, 'km', sort: 'desc')
|
45
|
+
assert_equal %w(Palermo Catania), farthest_cities
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_georadiusbymember_with_count
|
50
|
+
target_version "3.2.0" do
|
51
|
+
city = r.georadiusbymember("Sicily", "Catania", 200, 'km', count: 1)
|
52
|
+
assert_equal %w(Catania), city
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_georadiusbymember_with_options_count_sort
|
57
|
+
target_version "3.2.0" do
|
58
|
+
city = r.georadiusbymember("Sicily", "Catania", 200, 'km', sort: :desc, options: :WITHDIST, count: 1)
|
59
|
+
assert_equal [["Palermo", "166.2742"]], city
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_geopos
|
64
|
+
target_version "3.2.0" do
|
65
|
+
location = r.geopos("Sicily", "Catania")
|
66
|
+
assert_equal [["15.08726745843887329", "37.50266842333162032"]], location
|
67
|
+
|
68
|
+
locations = r.geopos("Sicily", ["Palermo", "Catania"])
|
69
|
+
assert_equal [["13.36138933897018433", "38.11555639549629859"], ["15.08726745843887329", "37.50266842333162032"]], locations
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_geopos_nonexistant_location
|
74
|
+
target_version "3.2.0" do
|
75
|
+
location = r.geopos("Sicily", "Rome")
|
76
|
+
assert_equal [nil], location
|
77
|
+
|
78
|
+
locations = r.geopos("Sicily", ["Rome", "Catania"])
|
79
|
+
assert_equal [nil, ["15.08726745843887329", "37.50266842333162032"]], locations
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_geodist
|
84
|
+
target_version "3.2.0" do
|
85
|
+
distination_in_meters = r.geodist("Sicily", "Palermo", "Catania")
|
86
|
+
assert_equal "166274.1516", distination_in_meters
|
87
|
+
|
88
|
+
distination_in_feet = r.geodist("Sicily", "Palermo", "Catania", 'ft')
|
89
|
+
assert_equal "545518.8700", distination_in_feet
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_geodist_with_nonexistant_location
|
94
|
+
target_version "3.2.0" do
|
95
|
+
distination = r.geodist("Sicily", "Palermo", "Rome")
|
96
|
+
assert_equal nil, distination
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_geohash
|
101
|
+
target_version "3.2.0" do
|
102
|
+
geohash = r.geohash("Sicily", "Palermo")
|
103
|
+
assert_equal ["sqc8b49rny0"], geohash
|
104
|
+
|
105
|
+
geohashes = r.geohash("Sicily", ["Palermo", "Catania"])
|
106
|
+
assert_equal %w(sqc8b49rny0 sqdtr74hyu0), geohashes
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_geohash_with_nonexistant_location
|
111
|
+
target_version "3.2.0" do
|
112
|
+
geohashes = r.geohash("Sicily", ["Palermo", "Rome"])
|
113
|
+
assert_equal ["sqc8b49rny0", nil], geohashes
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -1,21 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
4
|
-
require "lint/hashes"
|
1
|
+
require_relative 'helper'
|
2
|
+
require_relative 'lint/hashes'
|
5
3
|
|
6
4
|
class TestCommandsOnHashes < Test::Unit::TestCase
|
7
|
-
|
8
5
|
include Helper::Client
|
9
6
|
include Lint::Hashes
|
10
|
-
|
11
|
-
def test_mapped_hmget_in_a_pipeline_returns_hash
|
12
|
-
r.hset("foo", "f1", "s1")
|
13
|
-
r.hset("foo", "f2", "s2")
|
14
|
-
|
15
|
-
result = r.pipelined do
|
16
|
-
r.mapped_hmget("foo", "f1", "f2")
|
17
|
-
end
|
18
|
-
|
19
|
-
assert_equal result[0], { "f1" => "s1", "f2" => "s2" }
|
20
|
-
end
|
21
7
|
end
|
@@ -1,21 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
4
|
-
require "lint/hyper_log_log"
|
1
|
+
require_relative 'helper'
|
2
|
+
require_relative 'lint/hyper_log_log'
|
5
3
|
|
6
4
|
class TestCommandsOnHyperLogLog < Test::Unit::TestCase
|
7
|
-
|
8
5
|
include Helper::Client
|
9
6
|
include Lint::HyperLogLog
|
10
|
-
|
11
|
-
def test_pfmerge
|
12
|
-
target_version "2.8.9" do
|
13
|
-
r.pfadd "foo", "s1"
|
14
|
-
r.pfadd "bar", "s2"
|
15
|
-
|
16
|
-
assert_equal true, r.pfmerge("res", "foo", "bar")
|
17
|
-
assert_equal 2, r.pfcount("res")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
7
|
+
end
|
@@ -1,20 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
4
|
-
require "lint/lists"
|
1
|
+
require_relative 'helper'
|
2
|
+
require_relative 'lint/lists'
|
5
3
|
|
6
4
|
class TestCommandsOnLists < Test::Unit::TestCase
|
7
|
-
|
8
5
|
include Helper::Client
|
9
6
|
include Lint::Lists
|
10
|
-
|
11
|
-
def test_rpoplpush
|
12
|
-
r.rpush "foo", "s1"
|
13
|
-
r.rpush "foo", "s2"
|
14
|
-
|
15
|
-
assert_equal "s2", r.rpoplpush("foo", "bar")
|
16
|
-
assert_equal ["s2"], r.lrange("bar", 0, -1)
|
17
|
-
assert_equal "s1", r.rpoplpush("foo", "bar")
|
18
|
-
assert_equal ["s1", "s2"], r.lrange("bar", 0, -1)
|
19
|
-
end
|
20
7
|
end
|
@@ -1,77 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
4
|
-
require "lint/sets"
|
1
|
+
require_relative 'helper'
|
2
|
+
require_relative 'lint/sets'
|
5
3
|
|
6
4
|
class TestCommandsOnSets < Test::Unit::TestCase
|
7
|
-
|
8
5
|
include Helper::Client
|
9
6
|
include Lint::Sets
|
10
|
-
|
11
|
-
def test_smove
|
12
|
-
r.sadd "foo", "s1"
|
13
|
-
r.sadd "bar", "s2"
|
14
|
-
|
15
|
-
assert r.smove("foo", "bar", "s1")
|
16
|
-
assert r.sismember("bar", "s1")
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_sinter
|
20
|
-
r.sadd "foo", "s1"
|
21
|
-
r.sadd "foo", "s2"
|
22
|
-
r.sadd "bar", "s2"
|
23
|
-
|
24
|
-
assert_equal ["s2"], r.sinter("foo", "bar")
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_sinterstore
|
28
|
-
r.sadd "foo", "s1"
|
29
|
-
r.sadd "foo", "s2"
|
30
|
-
r.sadd "bar", "s2"
|
31
|
-
|
32
|
-
r.sinterstore("baz", "foo", "bar")
|
33
|
-
|
34
|
-
assert_equal ["s2"], r.smembers("baz")
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_sunion
|
38
|
-
r.sadd "foo", "s1"
|
39
|
-
r.sadd "foo", "s2"
|
40
|
-
r.sadd "bar", "s2"
|
41
|
-
r.sadd "bar", "s3"
|
42
|
-
|
43
|
-
assert_equal ["s1", "s2", "s3"], r.sunion("foo", "bar").sort
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_sunionstore
|
47
|
-
r.sadd "foo", "s1"
|
48
|
-
r.sadd "foo", "s2"
|
49
|
-
r.sadd "bar", "s2"
|
50
|
-
r.sadd "bar", "s3"
|
51
|
-
|
52
|
-
r.sunionstore("baz", "foo", "bar")
|
53
|
-
|
54
|
-
assert_equal ["s1", "s2", "s3"], r.smembers("baz").sort
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_sdiff
|
58
|
-
r.sadd "foo", "s1"
|
59
|
-
r.sadd "foo", "s2"
|
60
|
-
r.sadd "bar", "s2"
|
61
|
-
r.sadd "bar", "s3"
|
62
|
-
|
63
|
-
assert_equal ["s1"], r.sdiff("foo", "bar")
|
64
|
-
assert_equal ["s3"], r.sdiff("bar", "foo")
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_sdiffstore
|
68
|
-
r.sadd "foo", "s1"
|
69
|
-
r.sadd "foo", "s2"
|
70
|
-
r.sadd "bar", "s2"
|
71
|
-
r.sadd "bar", "s3"
|
72
|
-
|
73
|
-
r.sdiffstore("baz", "foo", "bar")
|
74
|
-
|
75
|
-
assert_equal ["s1"], r.smembers("baz")
|
76
|
-
end
|
77
7
|
end
|
@@ -1,137 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
4
|
-
require "lint/sorted_sets"
|
1
|
+
require_relative 'helper'
|
2
|
+
require_relative 'lint/sorted_sets'
|
5
3
|
|
6
4
|
class TestCommandsOnSortedSets < Test::Unit::TestCase
|
7
|
-
|
8
5
|
include Helper::Client
|
9
6
|
include Lint::SortedSets
|
10
|
-
|
11
|
-
def test_zrangebylex
|
12
|
-
target_version "2.8.9" do
|
13
|
-
r.zadd "foo", 0, "aaren"
|
14
|
-
r.zadd "foo", 0, "abagael"
|
15
|
-
r.zadd "foo", 0, "abby"
|
16
|
-
r.zadd "foo", 0, "abbygail"
|
17
|
-
|
18
|
-
assert_equal ["aaren", "abagael", "abby", "abbygail"], r.zrangebylex("foo", "[a", "[a\xff")
|
19
|
-
assert_equal ["aaren", "abagael"], r.zrangebylex("foo", "[a", "[a\xff", :limit => [0, 2])
|
20
|
-
assert_equal ["abby", "abbygail"], r.zrangebylex("foo", "(abb", "(abb\xff")
|
21
|
-
assert_equal ["abbygail"], r.zrangebylex("foo", "(abby", "(abby\xff")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_zrevrangebylex
|
26
|
-
target_version "2.9.9" do
|
27
|
-
r.zadd "foo", 0, "aaren"
|
28
|
-
r.zadd "foo", 0, "abagael"
|
29
|
-
r.zadd "foo", 0, "abby"
|
30
|
-
r.zadd "foo", 0, "abbygail"
|
31
|
-
|
32
|
-
assert_equal ["abbygail", "abby", "abagael", "aaren"], r.zrevrangebylex("foo", "[a\xff", "[a")
|
33
|
-
assert_equal ["abbygail", "abby"], r.zrevrangebylex("foo", "[a\xff", "[a", :limit => [0, 2])
|
34
|
-
assert_equal ["abbygail", "abby"], r.zrevrangebylex("foo", "(abb\xff", "(abb")
|
35
|
-
assert_equal ["abbygail"], r.zrevrangebylex("foo", "(abby\xff", "(abby")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_zcount
|
40
|
-
r.zadd "foo", 1, "s1"
|
41
|
-
r.zadd "foo", 2, "s2"
|
42
|
-
r.zadd "foo", 3, "s3"
|
43
|
-
|
44
|
-
assert_equal 2, r.zcount("foo", 2, 3)
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_zunionstore
|
48
|
-
r.zadd "foo", 1, "s1"
|
49
|
-
r.zadd "bar", 2, "s2"
|
50
|
-
r.zadd "foo", 3, "s3"
|
51
|
-
r.zadd "bar", 4, "s4"
|
52
|
-
|
53
|
-
assert_equal 4, r.zunionstore("foobar", ["foo", "bar"])
|
54
|
-
assert_equal ["s1", "s2", "s3", "s4"], r.zrange("foobar", 0, -1)
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_zunionstore_with_weights
|
58
|
-
r.zadd "foo", 1, "s1"
|
59
|
-
r.zadd "foo", 3, "s3"
|
60
|
-
r.zadd "bar", 20, "s2"
|
61
|
-
r.zadd "bar", 40, "s4"
|
62
|
-
|
63
|
-
assert_equal 4, r.zunionstore("foobar", ["foo", "bar"])
|
64
|
-
assert_equal ["s1", "s3", "s2", "s4"], r.zrange("foobar", 0, -1)
|
65
|
-
|
66
|
-
assert_equal 4, r.zunionstore("foobar", ["foo", "bar"], :weights => [10, 1])
|
67
|
-
assert_equal ["s1", "s2", "s3", "s4"], r.zrange("foobar", 0, -1)
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_zunionstore_with_aggregate
|
71
|
-
r.zadd "foo", 1, "s1"
|
72
|
-
r.zadd "foo", 2, "s2"
|
73
|
-
r.zadd "bar", 4, "s2"
|
74
|
-
r.zadd "bar", 3, "s3"
|
75
|
-
|
76
|
-
assert_equal 3, r.zunionstore("foobar", ["foo", "bar"])
|
77
|
-
assert_equal ["s1", "s3", "s2"], r.zrange("foobar", 0, -1)
|
78
|
-
|
79
|
-
assert_equal 3, r.zunionstore("foobar", ["foo", "bar"], :aggregate => :min)
|
80
|
-
assert_equal ["s1", "s2", "s3"], r.zrange("foobar", 0, -1)
|
81
|
-
|
82
|
-
assert_equal 3, r.zunionstore("foobar", ["foo", "bar"], :aggregate => :max)
|
83
|
-
assert_equal ["s1", "s3", "s2"], r.zrange("foobar", 0, -1)
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_zinterstore
|
87
|
-
r.zadd "foo", 1, "s1"
|
88
|
-
r.zadd "bar", 2, "s1"
|
89
|
-
r.zadd "foo", 3, "s3"
|
90
|
-
r.zadd "bar", 4, "s4"
|
91
|
-
|
92
|
-
assert_equal 1, r.zinterstore("foobar", ["foo", "bar"])
|
93
|
-
assert_equal ["s1"], r.zrange("foobar", 0, -1)
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_zinterstore_with_weights
|
97
|
-
r.zadd "foo", 1, "s1"
|
98
|
-
r.zadd "foo", 2, "s2"
|
99
|
-
r.zadd "foo", 3, "s3"
|
100
|
-
r.zadd "bar", 20, "s2"
|
101
|
-
r.zadd "bar", 30, "s3"
|
102
|
-
r.zadd "bar", 40, "s4"
|
103
|
-
|
104
|
-
assert_equal 2, r.zinterstore("foobar", ["foo", "bar"])
|
105
|
-
assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
|
106
|
-
|
107
|
-
assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :weights => [10, 1])
|
108
|
-
assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
|
109
|
-
|
110
|
-
assert_equal 40.0, r.zscore("foobar", "s2")
|
111
|
-
assert_equal 60.0, r.zscore("foobar", "s3")
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_zinterstore_with_aggregate
|
115
|
-
r.zadd "foo", 1, "s1"
|
116
|
-
r.zadd "foo", 2, "s2"
|
117
|
-
r.zadd "foo", 3, "s3"
|
118
|
-
r.zadd "bar", 20, "s2"
|
119
|
-
r.zadd "bar", 30, "s3"
|
120
|
-
r.zadd "bar", 40, "s4"
|
121
|
-
|
122
|
-
assert_equal 2, r.zinterstore("foobar", ["foo", "bar"])
|
123
|
-
assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
|
124
|
-
assert_equal 22.0, r.zscore("foobar", "s2")
|
125
|
-
assert_equal 33.0, r.zscore("foobar", "s3")
|
126
|
-
|
127
|
-
assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :aggregate => :min)
|
128
|
-
assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
|
129
|
-
assert_equal 2.0, r.zscore("foobar", "s2")
|
130
|
-
assert_equal 3.0, r.zscore("foobar", "s3")
|
131
|
-
|
132
|
-
assert_equal 2, r.zinterstore("foobar", ["foo", "bar"], :aggregate => :max)
|
133
|
-
assert_equal ["s2", "s3"], r.zrange("foobar", 0, -1)
|
134
|
-
assert_equal 20.0, r.zscore("foobar", "s2")
|
135
|
-
assert_equal 30.0, r.zscore("foobar", "s3")
|
136
|
-
end
|
137
7
|
end
|
@@ -1,101 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
4
|
-
require "lint/strings"
|
1
|
+
require_relative 'helper'
|
2
|
+
require_relative 'lint/strings'
|
5
3
|
|
6
4
|
class TestCommandsOnStrings < Test::Unit::TestCase
|
7
|
-
|
8
5
|
include Helper::Client
|
9
6
|
include Lint::Strings
|
10
|
-
|
11
|
-
def test_mget
|
12
|
-
r.set("foo", "s1")
|
13
|
-
r.set("bar", "s2")
|
14
|
-
|
15
|
-
assert_equal ["s1", "s2"] , r.mget("foo", "bar")
|
16
|
-
assert_equal ["s1", "s2", nil], r.mget("foo", "bar", "baz")
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_mget_mapped
|
20
|
-
r.set("foo", "s1")
|
21
|
-
r.set("bar", "s2")
|
22
|
-
|
23
|
-
response = r.mapped_mget("foo", "bar")
|
24
|
-
|
25
|
-
assert_equal "s1", response["foo"]
|
26
|
-
assert_equal "s2", response["bar"]
|
27
|
-
|
28
|
-
response = r.mapped_mget("foo", "bar", "baz")
|
29
|
-
|
30
|
-
assert_equal "s1", response["foo"]
|
31
|
-
assert_equal "s2", response["bar"]
|
32
|
-
assert_equal nil , response["baz"]
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_mapped_mget_in_a_pipeline_returns_hash
|
36
|
-
r.set("foo", "s1")
|
37
|
-
r.set("bar", "s2")
|
38
|
-
|
39
|
-
result = r.pipelined do
|
40
|
-
r.mapped_mget("foo", "bar")
|
41
|
-
end
|
42
|
-
|
43
|
-
assert_equal result[0], { "foo" => "s1", "bar" => "s2" }
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_mset
|
47
|
-
r.mset(:foo, "s1", :bar, "s2")
|
48
|
-
|
49
|
-
assert_equal "s1", r.get("foo")
|
50
|
-
assert_equal "s2", r.get("bar")
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_mset_mapped
|
54
|
-
r.mapped_mset(:foo => "s1", :bar => "s2")
|
55
|
-
|
56
|
-
assert_equal "s1", r.get("foo")
|
57
|
-
assert_equal "s2", r.get("bar")
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_msetnx
|
61
|
-
r.set("foo", "s1")
|
62
|
-
assert_equal false, r.msetnx(:foo, "s2", :bar, "s3")
|
63
|
-
assert_equal "s1", r.get("foo")
|
64
|
-
assert_equal nil, r.get("bar")
|
65
|
-
|
66
|
-
r.del("foo")
|
67
|
-
assert_equal true, r.msetnx(:foo, "s2", :bar, "s3")
|
68
|
-
assert_equal "s2", r.get("foo")
|
69
|
-
assert_equal "s3", r.get("bar")
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_msetnx_mapped
|
73
|
-
r.set("foo", "s1")
|
74
|
-
assert_equal false, r.mapped_msetnx(:foo => "s2", :bar => "s3")
|
75
|
-
assert_equal "s1", r.get("foo")
|
76
|
-
assert_equal nil, r.get("bar")
|
77
|
-
|
78
|
-
r.del("foo")
|
79
|
-
assert_equal true, r.mapped_msetnx(:foo => "s2", :bar => "s3")
|
80
|
-
assert_equal "s2", r.get("foo")
|
81
|
-
assert_equal "s3", r.get("bar")
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_bitop
|
85
|
-
try_encoding("UTF-8") do
|
86
|
-
target_version "2.5.10" do
|
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")
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
7
|
end
|
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
4
|
-
require "lint/value_types"
|
1
|
+
require_relative "helper"
|
2
|
+
require_relative "lint/value_types"
|
5
3
|
|
6
4
|
class TestCommandsOnValueTypes < Test::Unit::TestCase
|
7
5
|
|
@@ -40,6 +38,42 @@ class TestCommandsOnValueTypes < Test::Unit::TestCase
|
|
40
38
|
assert_equal [], r.keys("*").sort
|
41
39
|
end
|
42
40
|
|
41
|
+
def test_unlink
|
42
|
+
target_version "4.0.0" do
|
43
|
+
r.set "foo", "s1"
|
44
|
+
r.set "bar", "s2"
|
45
|
+
r.set "baz", "s3"
|
46
|
+
|
47
|
+
assert_equal ["bar", "baz", "foo"], r.keys("*").sort
|
48
|
+
|
49
|
+
assert_equal 1, r.unlink("foo")
|
50
|
+
|
51
|
+
assert_equal ["bar", "baz"], r.keys("*").sort
|
52
|
+
|
53
|
+
assert_equal 2, r.unlink("bar", "baz")
|
54
|
+
|
55
|
+
assert_equal [], r.keys("*").sort
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_unlink_with_array_argument
|
60
|
+
target_version "4.0.0" do
|
61
|
+
r.set "foo", "s1"
|
62
|
+
r.set "bar", "s2"
|
63
|
+
r.set "baz", "s3"
|
64
|
+
|
65
|
+
assert_equal ["bar", "baz", "foo"], r.keys("*").sort
|
66
|
+
|
67
|
+
assert_equal 1, r.unlink(["foo"])
|
68
|
+
|
69
|
+
assert_equal ["bar", "baz"], r.keys("*").sort
|
70
|
+
|
71
|
+
assert_equal 2, r.unlink(["bar", "baz"])
|
72
|
+
|
73
|
+
assert_equal [], r.keys("*").sort
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
43
77
|
def test_randomkey
|
44
78
|
assert r.randomkey.to_s.empty?
|
45
79
|
|
@@ -81,6 +115,7 @@ class TestCommandsOnValueTypes < Test::Unit::TestCase
|
|
81
115
|
end
|
82
116
|
|
83
117
|
def test_flushdb
|
118
|
+
# Test defaults
|
84
119
|
r.set("foo", "s1")
|
85
120
|
r.set("bar", "s2")
|
86
121
|
|
@@ -89,12 +124,51 @@ class TestCommandsOnValueTypes < Test::Unit::TestCase
|
|
89
124
|
r.flushdb
|
90
125
|
|
91
126
|
assert_equal 0, r.dbsize
|
127
|
+
|
128
|
+
# Test sync
|
129
|
+
r.set("foo", "s1")
|
130
|
+
r.set("bar", "s2")
|
131
|
+
|
132
|
+
assert_equal 2, r.dbsize
|
133
|
+
|
134
|
+
r.flushdb(:async => false)
|
135
|
+
|
136
|
+
assert_equal 0, r.dbsize
|
137
|
+
|
138
|
+
# Test async
|
139
|
+
target_version "3.9.101" do
|
140
|
+
r.set("foo", "s1")
|
141
|
+
r.set("bar", "s2")
|
142
|
+
|
143
|
+
assert_equal 2, r.dbsize
|
144
|
+
|
145
|
+
r.flushdb(:async => true)
|
146
|
+
|
147
|
+
assert_equal 0, r.dbsize
|
148
|
+
|
149
|
+
redis_mock(:flushdb => lambda { |args| "+FLUSHDB #{args.upcase}" }) do |redis|
|
150
|
+
assert_equal "FLUSHDB ASYNC", redis.flushdb(:async => true)
|
151
|
+
end
|
152
|
+
end
|
92
153
|
end
|
93
154
|
|
94
155
|
def test_flushall
|
156
|
+
# Test defaults
|
95
157
|
redis_mock(:flushall => lambda { "+FLUSHALL" }) do |redis|
|
96
158
|
assert_equal "FLUSHALL", redis.flushall
|
97
159
|
end
|
160
|
+
|
161
|
+
# Test sync
|
162
|
+
redis_mock(:flushall => lambda { "+FLUSHALL" }) do |redis|
|
163
|
+
assert_equal "FLUSHALL", redis.flushall(:async => false)
|
164
|
+
end
|
165
|
+
|
166
|
+
# Test async
|
167
|
+
target_version "3.9.101" do
|
168
|
+
redis_mock(:flushall => lambda { |args| "+FLUSHALL #{args.upcase}" }) do |redis|
|
169
|
+
assert_equal "FLUSHALL ASYNC", redis.flushall(:async => true)
|
170
|
+
end
|
171
|
+
end
|
98
172
|
end
|
99
173
|
|
100
174
|
def test_migrate
|
@@ -111,8 +185,8 @@ class TestCommandsOnValueTypes < Test::Unit::TestCase
|
|
111
185
|
end
|
112
186
|
assert ex.message =~ /port not specified/
|
113
187
|
|
114
|
-
default_db = redis.
|
115
|
-
default_timeout = redis.
|
188
|
+
default_db = redis._client.db.to_i
|
189
|
+
default_timeout = redis._client.timeout.to_i
|
116
190
|
|
117
191
|
# Test defaults
|
118
192
|
actual = redis.migrate("foo", options)
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require File.expand_path("helper", File.dirname(__FILE__))
|
1
|
+
require_relative "helper"
|
4
2
|
|
5
3
|
class TestConnectionHandling < Test::Unit::TestCase
|
6
4
|
|
@@ -40,7 +38,7 @@ class TestConnectionHandling < Test::Unit::TestCase
|
|
40
38
|
r.select 14
|
41
39
|
assert_equal nil, r.get("foo")
|
42
40
|
|
43
|
-
r.
|
41
|
+
r._client.disconnect
|
44
42
|
|
45
43
|
assert_equal nil, r.get("foo")
|
46
44
|
end
|
@@ -48,7 +46,7 @@ class TestConnectionHandling < Test::Unit::TestCase
|
|
48
46
|
def test_quit
|
49
47
|
r.quit
|
50
48
|
|
51
|
-
assert !r.
|
49
|
+
assert !r._client.connected?
|
52
50
|
end
|
53
51
|
|
54
52
|
def test_close
|
@@ -148,7 +146,7 @@ class TestConnectionHandling < Test::Unit::TestCase
|
|
148
146
|
end
|
149
147
|
|
150
148
|
assert_equal nil, result
|
151
|
-
assert !redis.
|
149
|
+
assert !redis._client.connected?
|
152
150
|
end
|
153
151
|
end
|
154
152
|
|
@@ -188,7 +186,7 @@ class TestConnectionHandling < Test::Unit::TestCase
|
|
188
186
|
end
|
189
187
|
|
190
188
|
assert_equal nil, result
|
191
|
-
assert !redis.
|
189
|
+
assert !redis._client.connected?
|
192
190
|
end
|
193
191
|
end
|
194
192
|
|