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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -2
- data/README.md +45 -0
- data/lib/redis.rb +497 -20
- data/lib/redis/client.rb +14 -6
- data/lib/redis/cluster.rb +1 -0
- data/lib/redis/cluster/command_loader.rb +2 -0
- data/lib/redis/cluster/node_loader.rb +2 -0
- data/lib/redis/cluster/option.rb +1 -0
- data/lib/redis/cluster/slot_loader.rb +2 -0
- data/lib/redis/distributed.rb +3 -4
- data/lib/redis/version.rb +1 -1
- metadata +20 -243
- data/.gitignore +0 -19
- data/.travis.yml +0 -61
- data/.travis/Gemfile +0 -18
- data/.yardopts +0 -3
- data/Gemfile +0 -8
- data/benchmarking/logging.rb +0 -71
- data/benchmarking/pipeline.rb +0 -51
- data/benchmarking/speed.rb +0 -21
- data/benchmarking/suite.rb +0 -24
- data/benchmarking/worker.rb +0 -71
- data/bin/build +0 -71
- data/bors.toml +0 -14
- data/examples/basic.rb +0 -15
- data/examples/consistency.rb +0 -114
- data/examples/dist_redis.rb +0 -43
- data/examples/incr-decr.rb +0 -17
- data/examples/list.rb +0 -26
- data/examples/pubsub.rb +0 -37
- data/examples/sentinel.rb +0 -41
- data/examples/sentinel/start +0 -49
- data/examples/sets.rb +0 -36
- data/examples/unicorn/config.ru +0 -3
- data/examples/unicorn/unicorn.rb +0 -20
- data/makefile +0 -74
- data/redis.gemspec +0 -42
- data/test/bitpos_test.rb +0 -63
- data/test/blocking_commands_test.rb +0 -40
- data/test/client_test.rb +0 -76
- data/test/cluster_abnormal_state_test.rb +0 -38
- data/test/cluster_blocking_commands_test.rb +0 -15
- data/test/cluster_client_internals_test.rb +0 -77
- data/test/cluster_client_key_hash_tags_test.rb +0 -88
- data/test/cluster_client_options_test.rb +0 -147
- data/test/cluster_client_pipelining_test.rb +0 -59
- data/test/cluster_client_replicas_test.rb +0 -36
- data/test/cluster_client_slots_test.rb +0 -94
- data/test/cluster_client_transactions_test.rb +0 -71
- data/test/cluster_commands_on_cluster_test.rb +0 -165
- data/test/cluster_commands_on_connection_test.rb +0 -40
- data/test/cluster_commands_on_geo_test.rb +0 -74
- data/test/cluster_commands_on_hashes_test.rb +0 -11
- data/test/cluster_commands_on_hyper_log_log_test.rb +0 -17
- data/test/cluster_commands_on_keys_test.rb +0 -134
- data/test/cluster_commands_on_lists_test.rb +0 -15
- data/test/cluster_commands_on_pub_sub_test.rb +0 -101
- data/test/cluster_commands_on_scripting_test.rb +0 -56
- data/test/cluster_commands_on_server_test.rb +0 -221
- data/test/cluster_commands_on_sets_test.rb +0 -39
- data/test/cluster_commands_on_sorted_sets_test.rb +0 -35
- data/test/cluster_commands_on_streams_test.rb +0 -196
- data/test/cluster_commands_on_strings_test.rb +0 -15
- data/test/cluster_commands_on_transactions_test.rb +0 -41
- data/test/cluster_commands_on_value_types_test.rb +0 -14
- data/test/command_map_test.rb +0 -28
- data/test/commands_on_geo_test.rb +0 -116
- data/test/commands_on_hashes_test.rb +0 -7
- data/test/commands_on_hyper_log_log_test.rb +0 -7
- data/test/commands_on_lists_test.rb +0 -7
- data/test/commands_on_sets_test.rb +0 -7
- data/test/commands_on_sorted_sets_test.rb +0 -7
- data/test/commands_on_strings_test.rb +0 -7
- data/test/commands_on_value_types_test.rb +0 -207
- data/test/connection_handling_test.rb +0 -275
- data/test/connection_test.rb +0 -57
- data/test/distributed_blocking_commands_test.rb +0 -52
- data/test/distributed_commands_on_hashes_test.rb +0 -21
- data/test/distributed_commands_on_hyper_log_log_test.rb +0 -26
- data/test/distributed_commands_on_lists_test.rb +0 -19
- data/test/distributed_commands_on_sets_test.rb +0 -105
- data/test/distributed_commands_on_sorted_sets_test.rb +0 -59
- data/test/distributed_commands_on_strings_test.rb +0 -79
- data/test/distributed_commands_on_value_types_test.rb +0 -129
- data/test/distributed_commands_requiring_clustering_test.rb +0 -162
- data/test/distributed_connection_handling_test.rb +0 -21
- data/test/distributed_internals_test.rb +0 -68
- data/test/distributed_key_tags_test.rb +0 -50
- data/test/distributed_persistence_control_commands_test.rb +0 -24
- data/test/distributed_publish_subscribe_test.rb +0 -90
- data/test/distributed_remote_server_control_commands_test.rb +0 -64
- data/test/distributed_scripting_test.rb +0 -100
- data/test/distributed_sorting_test.rb +0 -18
- data/test/distributed_test.rb +0 -56
- data/test/distributed_transactions_test.rb +0 -30
- data/test/encoding_test.rb +0 -14
- data/test/error_replies_test.rb +0 -57
- data/test/fork_safety_test.rb +0 -60
- data/test/helper.rb +0 -344
- data/test/helper_test.rb +0 -22
- data/test/internals_test.rb +0 -395
- data/test/lint/blocking_commands.rb +0 -174
- data/test/lint/hashes.rb +0 -203
- data/test/lint/hyper_log_log.rb +0 -74
- data/test/lint/lists.rb +0 -159
- data/test/lint/sets.rb +0 -282
- data/test/lint/sorted_sets.rb +0 -497
- data/test/lint/strings.rb +0 -348
- data/test/lint/value_types.rb +0 -130
- data/test/persistence_control_commands_test.rb +0 -24
- data/test/pipelining_commands_test.rb +0 -246
- data/test/publish_subscribe_test.rb +0 -280
- data/test/remote_server_control_commands_test.rb +0 -175
- data/test/scanning_test.rb +0 -407
- data/test/scripting_test.rb +0 -76
- data/test/sentinel_command_test.rb +0 -78
- data/test/sentinel_test.rb +0 -253
- data/test/sorting_test.rb +0 -57
- data/test/ssl_test.rb +0 -69
- data/test/support/cluster/orchestrator.rb +0 -199
- data/test/support/connection/hiredis.rb +0 -1
- data/test/support/connection/ruby.rb +0 -1
- data/test/support/connection/synchrony.rb +0 -17
- data/test/support/redis_mock.rb +0 -130
- data/test/support/ssl/gen_certs.sh +0 -31
- data/test/support/ssl/trusted-ca.crt +0 -25
- data/test/support/ssl/trusted-ca.key +0 -27
- data/test/support/ssl/trusted-cert.crt +0 -81
- data/test/support/ssl/trusted-cert.key +0 -28
- data/test/support/ssl/untrusted-ca.crt +0 -26
- data/test/support/ssl/untrusted-ca.key +0 -27
- data/test/support/ssl/untrusted-cert.crt +0 -82
- data/test/support/ssl/untrusted-cert.key +0 -28
- data/test/support/wire/synchrony.rb +0 -24
- data/test/support/wire/thread.rb +0 -5
- data/test/synchrony_driver.rb +0 -85
- data/test/test.conf.erb +0 -9
- data/test/thread_safety_test.rb +0 -60
- data/test/transactions_test.rb +0 -272
- data/test/unknown_commands_test.rb +0 -12
- data/test/url_param_test.rb +0 -136
@@ -1,59 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'helper'
|
4
|
-
|
5
|
-
# ruby -w -Itest test/cluster_client_pipelining_test.rb
|
6
|
-
class TestClusterClientPipelining < Test::Unit::TestCase
|
7
|
-
include Helper::Cluster
|
8
|
-
|
9
|
-
def test_pipelining_with_a_hash_tag
|
10
|
-
p1 = p2 = p3 = p4 = p5 = p6 = nil
|
11
|
-
|
12
|
-
redis.pipelined do |r|
|
13
|
-
r.set('{Presidents.of.USA}:1', 'George Washington')
|
14
|
-
r.set('{Presidents.of.USA}:2', 'John Adams')
|
15
|
-
r.set('{Presidents.of.USA}:3', 'Thomas Jefferson')
|
16
|
-
r.set('{Presidents.of.USA}:4', 'James Madison')
|
17
|
-
r.set('{Presidents.of.USA}:5', 'James Monroe')
|
18
|
-
r.set('{Presidents.of.USA}:6', 'John Quincy Adams')
|
19
|
-
|
20
|
-
p1 = r.get('{Presidents.of.USA}:1')
|
21
|
-
p2 = r.get('{Presidents.of.USA}:2')
|
22
|
-
p3 = r.get('{Presidents.of.USA}:3')
|
23
|
-
p4 = r.get('{Presidents.of.USA}:4')
|
24
|
-
p5 = r.get('{Presidents.of.USA}:5')
|
25
|
-
p6 = r.get('{Presidents.of.USA}:6')
|
26
|
-
end
|
27
|
-
|
28
|
-
[p1, p2, p3, p4, p5, p6].each do |actual|
|
29
|
-
assert_true actual.is_a?(Redis::Future)
|
30
|
-
end
|
31
|
-
|
32
|
-
assert_equal('George Washington', p1.value)
|
33
|
-
assert_equal('John Adams', p2.value)
|
34
|
-
assert_equal('Thomas Jefferson', p3.value)
|
35
|
-
assert_equal('James Madison', p4.value)
|
36
|
-
assert_equal('James Monroe', p5.value)
|
37
|
-
assert_equal('John Quincy Adams', p6.value)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_pipelining_without_hash_tags
|
41
|
-
assert_raise(Redis::Cluster::CrossSlotPipeliningError) do
|
42
|
-
redis.pipelined do
|
43
|
-
redis.set(:a, 1)
|
44
|
-
redis.set(:b, 2)
|
45
|
-
redis.set(:c, 3)
|
46
|
-
redis.set(:d, 4)
|
47
|
-
redis.set(:e, 5)
|
48
|
-
redis.set(:f, 6)
|
49
|
-
|
50
|
-
redis.get(:a)
|
51
|
-
redis.get(:b)
|
52
|
-
redis.get(:c)
|
53
|
-
redis.get(:d)
|
54
|
-
redis.get(:e)
|
55
|
-
redis.get(:f)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'helper'
|
4
|
-
|
5
|
-
# ruby -w -Itest test/cluster_client_replicas_test.rb
|
6
|
-
class TestClusterClientReplicas < Test::Unit::TestCase
|
7
|
-
include Helper::Cluster
|
8
|
-
|
9
|
-
def test_client_can_command_with_replica
|
10
|
-
r = build_another_client(replica: true)
|
11
|
-
|
12
|
-
100.times do |i|
|
13
|
-
assert_equal 'OK', r.set("key#{i}", i)
|
14
|
-
end
|
15
|
-
|
16
|
-
100.times do |i|
|
17
|
-
assert_equal i.to_s, r.get("key#{i}")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_client_can_flush_with_replica
|
22
|
-
r = build_another_client(replica: true)
|
23
|
-
|
24
|
-
assert_equal 'OK', r.flushall
|
25
|
-
assert_equal 'OK', r.flushdb
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_some_reference_commands_are_sent_to_slaves_if_needed
|
29
|
-
r = build_another_client(replica: true)
|
30
|
-
|
31
|
-
5.times { |i| r.set("key#{i}", i) }
|
32
|
-
|
33
|
-
assert_equal %w[key0 key1 key2 key3 key4], r.keys
|
34
|
-
assert_equal 5, r.dbsize
|
35
|
-
end
|
36
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'helper'
|
4
|
-
|
5
|
-
# ruby -w -Itest test/cluster_client_slots_test.rb
|
6
|
-
class TestClusterClientSlots < Test::Unit::TestCase
|
7
|
-
include Helper::Cluster
|
8
|
-
|
9
|
-
def test_slot_class
|
10
|
-
slot = Redis::Cluster::Slot.new('127.0.0.1:7000' => 1..10)
|
11
|
-
|
12
|
-
assert_equal false, slot.exists?(0)
|
13
|
-
assert_equal true, slot.exists?(1)
|
14
|
-
assert_equal true, slot.exists?(10)
|
15
|
-
assert_equal false, slot.exists?(11)
|
16
|
-
|
17
|
-
assert_equal nil, slot.find_node_key_of_master(0)
|
18
|
-
assert_equal nil, slot.find_node_key_of_slave(0)
|
19
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_master(1)
|
20
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_slave(1)
|
21
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_master(10)
|
22
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_slave(10)
|
23
|
-
assert_equal nil, slot.find_node_key_of_master(11)
|
24
|
-
assert_equal nil, slot.find_node_key_of_slave(11)
|
25
|
-
|
26
|
-
assert_equal nil, slot.put(1, '127.0.0.1:7001')
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_slot_class_with_node_flags_and_replicas
|
30
|
-
slot = Redis::Cluster::Slot.new({ '127.0.0.1:7000' => 1..10, '127.0.0.1:7001' => 1..10 },
|
31
|
-
{ '127.0.0.1:7000' => 'master', '127.0.0.1:7001' => 'slave' },
|
32
|
-
true)
|
33
|
-
|
34
|
-
assert_equal false, slot.exists?(0)
|
35
|
-
assert_equal true, slot.exists?(1)
|
36
|
-
assert_equal true, slot.exists?(10)
|
37
|
-
assert_equal false, slot.exists?(11)
|
38
|
-
|
39
|
-
assert_equal nil, slot.find_node_key_of_master(0)
|
40
|
-
assert_equal nil, slot.find_node_key_of_slave(0)
|
41
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_master(1)
|
42
|
-
assert_equal '127.0.0.1:7001', slot.find_node_key_of_slave(1)
|
43
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_master(10)
|
44
|
-
assert_equal '127.0.0.1:7001', slot.find_node_key_of_slave(10)
|
45
|
-
assert_equal nil, slot.find_node_key_of_master(11)
|
46
|
-
assert_equal nil, slot.find_node_key_of_slave(11)
|
47
|
-
|
48
|
-
assert_equal nil, slot.put(1, '127.0.0.1:7002')
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_slot_class_with_node_flags_and_without_replicas
|
52
|
-
slot = Redis::Cluster::Slot.new({ '127.0.0.1:7000' => 1..10, '127.0.0.1:7001' => 1..10 },
|
53
|
-
{ '127.0.0.1:7000' => 'master', '127.0.0.1:7001' => 'slave' },
|
54
|
-
false)
|
55
|
-
|
56
|
-
assert_equal false, slot.exists?(0)
|
57
|
-
assert_equal true, slot.exists?(1)
|
58
|
-
assert_equal true, slot.exists?(10)
|
59
|
-
assert_equal false, slot.exists?(11)
|
60
|
-
|
61
|
-
assert_equal nil, slot.find_node_key_of_master(0)
|
62
|
-
assert_equal nil, slot.find_node_key_of_slave(0)
|
63
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_master(1)
|
64
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_slave(1)
|
65
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_master(10)
|
66
|
-
assert_equal '127.0.0.1:7000', slot.find_node_key_of_slave(10)
|
67
|
-
assert_equal nil, slot.find_node_key_of_master(11)
|
68
|
-
assert_equal nil, slot.find_node_key_of_slave(11)
|
69
|
-
|
70
|
-
assert_equal nil, slot.put(1, '127.0.0.1:7002')
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_slot_class_with_empty_slots
|
74
|
-
slot = Redis::Cluster::Slot.new({})
|
75
|
-
|
76
|
-
assert_equal false, slot.exists?(0)
|
77
|
-
assert_equal false, slot.exists?(1)
|
78
|
-
|
79
|
-
assert_equal nil, slot.find_node_key_of_master(0)
|
80
|
-
assert_equal nil, slot.find_node_key_of_slave(0)
|
81
|
-
assert_equal nil, slot.find_node_key_of_master(1)
|
82
|
-
assert_equal nil, slot.find_node_key_of_slave(1)
|
83
|
-
|
84
|
-
assert_equal nil, slot.put(1, '127.0.0.1:7001')
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_redirection_when_slot_is_resharding
|
88
|
-
100.times { |i| redis.set("{key}#{i}", i) }
|
89
|
-
|
90
|
-
redis_cluster_resharding(12539, src: '127.0.0.1:7002', dest: '127.0.0.1:7000') do
|
91
|
-
100.times { |i| assert_equal i.to_s, redis.get("{key}#{i}") }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'helper'
|
4
|
-
|
5
|
-
# ruby -w -Itest test/cluster_client_transactions_test.rb
|
6
|
-
class TestClusterClientTransactions < Test::Unit::TestCase
|
7
|
-
include Helper::Cluster
|
8
|
-
|
9
|
-
def test_transaction_with_hash_tag
|
10
|
-
rc1 = redis
|
11
|
-
rc2 = build_another_client
|
12
|
-
|
13
|
-
rc1.multi do |cli|
|
14
|
-
100.times { |i| cli.set("{key}#{i}", i) }
|
15
|
-
end
|
16
|
-
|
17
|
-
100.times { |i| assert_equal i.to_s, rc1.get("{key}#{i}") }
|
18
|
-
100.times { |i| assert_equal i.to_s, rc2.get("{key}#{i}") }
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_transaction_without_hash_tag
|
22
|
-
rc1 = redis
|
23
|
-
rc2 = build_another_client
|
24
|
-
|
25
|
-
assert_raise(Redis::Cluster::CrossSlotPipeliningError) do
|
26
|
-
rc1.multi do |cli|
|
27
|
-
100.times { |i| cli.set("key#{i}", i) }
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
100.times { |i| assert_equal nil, rc1.get("key#{i}") }
|
32
|
-
100.times { |i| assert_equal nil, rc2.get("key#{i}") }
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_transaction_with_replicas
|
36
|
-
rc1 = build_another_client(replica: true)
|
37
|
-
rc2 = build_another_client(replica: true)
|
38
|
-
|
39
|
-
rc1.multi do |cli|
|
40
|
-
100.times { |i| cli.set("{key}#{i}", i) }
|
41
|
-
end
|
42
|
-
|
43
|
-
sleep 0.1
|
44
|
-
|
45
|
-
100.times { |i| assert_equal i.to_s, rc1.get("{key}#{i}") }
|
46
|
-
100.times { |i| assert_equal i.to_s, rc2.get("{key}#{i}") }
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_transaction_with_watch
|
50
|
-
rc1 = redis
|
51
|
-
rc2 = build_another_client
|
52
|
-
|
53
|
-
rc1.set('{key}1', 100)
|
54
|
-
rc1.watch('{key}1')
|
55
|
-
|
56
|
-
rc2.set('{key}1', 200)
|
57
|
-
val = rc1.get('{key}1').to_i
|
58
|
-
val += 1
|
59
|
-
|
60
|
-
rc1.multi do |cli|
|
61
|
-
cli.set('{key}1', val)
|
62
|
-
cli.set('{key}2', 300)
|
63
|
-
end
|
64
|
-
|
65
|
-
assert_equal '200', rc1.get('{key}1')
|
66
|
-
assert_equal '200', rc2.get('{key}1')
|
67
|
-
|
68
|
-
assert_equal nil, rc1.get('{key}2')
|
69
|
-
assert_equal nil, rc2.get('{key}2')
|
70
|
-
end
|
71
|
-
end
|
@@ -1,165 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'helper'
|
4
|
-
|
5
|
-
# ruby -w -Itest test/cluster_commands_on_cluster_test.rb
|
6
|
-
# @see https://redis.io/commands#cluster
|
7
|
-
class TestClusterCommandsOnCluster < Test::Unit::TestCase
|
8
|
-
include Helper::Cluster
|
9
|
-
|
10
|
-
def test_cluster_addslots
|
11
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER ADDSLOTS command should be...') do
|
12
|
-
redis.cluster(:addslots, 0, 1, 2)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_cluster_count_failure_reports
|
17
|
-
assert_raise(Redis::CommandError, 'ERR Unknown node unknown-node-id') do
|
18
|
-
redis.cluster('count-failure-reports', 'unknown-node-id')
|
19
|
-
end
|
20
|
-
|
21
|
-
node_id = redis.cluster(:nodes).first.fetch('node_id')
|
22
|
-
assert_true(redis.cluster('count-failure-reports', node_id) >= 0)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_cluster_countkeysinslot
|
26
|
-
assert_true(redis.cluster(:countkeysinslot, 0) >= 0)
|
27
|
-
assert_true(redis.cluster(:countkeysinslot, 16383) >= 0)
|
28
|
-
|
29
|
-
assert_raise(Redis::CommandError, 'ERR Invalid slot') do
|
30
|
-
redis.cluster(:countkeysinslot, -1)
|
31
|
-
end
|
32
|
-
|
33
|
-
assert_raise(Redis::CommandError, 'ERR Invalid slot') do
|
34
|
-
redis.cluster(:countkeysinslot, 16384)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_cluster_delslots
|
39
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER DELSLOTS command should be...') do
|
40
|
-
redis.cluster(:delslots, 0, 1, 2)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_cluster_failover
|
45
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER FAILOVER command should be...') do
|
46
|
-
redis.cluster(:failover, 'FORCE')
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_cluster_forget
|
51
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER FORGET command should be...') do
|
52
|
-
redis.cluster(:forget, 'unknown-node-id')
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_cluster_getkeysinslot
|
57
|
-
assert_instance_of Array, redis.cluster(:getkeysinslot, 0, 3)
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_cluster_info
|
61
|
-
info = redis.cluster(:info)
|
62
|
-
|
63
|
-
assert_equal '3', info.fetch('cluster_size')
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_cluster_keyslot
|
67
|
-
assert_equal Redis::Cluster::KeySlotConverter.convert('hogehoge'), redis.cluster(:keyslot, 'hogehoge')
|
68
|
-
assert_equal Redis::Cluster::KeySlotConverter.convert('12345'), redis.cluster(:keyslot, '12345')
|
69
|
-
assert_equal Redis::Cluster::KeySlotConverter.convert('foo'), redis.cluster(:keyslot, 'boo{foo}woo')
|
70
|
-
assert_equal Redis::Cluster::KeySlotConverter.convert('antirez.is.cool'), redis.cluster(:keyslot, 'antirez.is.cool')
|
71
|
-
assert_equal Redis::Cluster::KeySlotConverter.convert(''), redis.cluster(:keyslot, '')
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_cluster_meet
|
75
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER MEET command should be...') do
|
76
|
-
redis.cluster(:meet, '127.0.0.1', 11211)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_cluster_nodes
|
81
|
-
cluster_nodes = redis.cluster(:nodes)
|
82
|
-
sample_node = cluster_nodes.first
|
83
|
-
|
84
|
-
assert_equal 6, cluster_nodes.length
|
85
|
-
assert_equal true, sample_node.key?('node_id')
|
86
|
-
assert_equal true, sample_node.key?('ip_port')
|
87
|
-
assert_equal true, sample_node.key?('flags')
|
88
|
-
assert_equal true, sample_node.key?('master_node_id')
|
89
|
-
assert_equal true, sample_node.key?('ping_sent')
|
90
|
-
assert_equal true, sample_node.key?('pong_recv')
|
91
|
-
assert_equal true, sample_node.key?('config_epoch')
|
92
|
-
assert_equal true, sample_node.key?('link_state')
|
93
|
-
assert_equal true, sample_node.key?('slots')
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_cluster_replicate
|
97
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER REPLICATE command should be...') do
|
98
|
-
redis.cluster(:replicate)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_cluster_reset
|
103
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER RESET command should be...') do
|
104
|
-
redis.cluster(:reset)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_cluster_saveconfig
|
109
|
-
assert_equal 'OK', redis.cluster(:saveconfig)
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_cluster_set_config_epoch
|
113
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER SET-CONFIG-EPOCH command should be...') do
|
114
|
-
redis.cluster('set-config-epoch')
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_cluster_setslot
|
119
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'CLUSTER SETSLOT command should be...') do
|
120
|
-
redis.cluster(:setslot)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_cluster_slaves
|
125
|
-
cluster_nodes = redis.cluster(:nodes)
|
126
|
-
|
127
|
-
sample_master_node_id = cluster_nodes.find { |n| n.fetch('master_node_id') == '-' }.fetch('node_id')
|
128
|
-
sample_slave_node_id = cluster_nodes.find { |n| n.fetch('master_node_id') != '-' }.fetch('node_id')
|
129
|
-
|
130
|
-
assert_equal 'slave', redis.cluster(:slaves, sample_master_node_id).first.fetch('flags').first
|
131
|
-
assert_raise(Redis::CommandError, 'ERR The specified node is not a master') do
|
132
|
-
redis.cluster(:slaves, sample_slave_node_id)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_cluster_slots
|
137
|
-
slots = redis.cluster(:slots)
|
138
|
-
sample_slot = slots.first
|
139
|
-
|
140
|
-
assert_equal 3, slots.length
|
141
|
-
assert_equal true, sample_slot.key?('start_slot')
|
142
|
-
assert_equal true, sample_slot.key?('end_slot')
|
143
|
-
assert_equal true, sample_slot.key?('master')
|
144
|
-
assert_equal true, sample_slot.fetch('master').key?('ip')
|
145
|
-
assert_equal true, sample_slot.fetch('master').key?('port')
|
146
|
-
assert_equal true, sample_slot.fetch('master').key?('node_id')
|
147
|
-
assert_equal true, sample_slot.key?('replicas')
|
148
|
-
assert_equal true, sample_slot.fetch('replicas').is_a?(Array)
|
149
|
-
assert_equal true, sample_slot.fetch('replicas').first.key?('ip')
|
150
|
-
assert_equal true, sample_slot.fetch('replicas').first.key?('port')
|
151
|
-
assert_equal true, sample_slot.fetch('replicas').first.key?('node_id')
|
152
|
-
end
|
153
|
-
|
154
|
-
def test_readonly
|
155
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'READONLY command should be...') do
|
156
|
-
redis.readonly
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_readwrite
|
161
|
-
assert_raise(Redis::Cluster::OrchestrationCommandNotSupported, 'READWRITE command should be...') do
|
162
|
-
redis.readwrite
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'helper'
|
4
|
-
|
5
|
-
# ruby -w -Itest test/cluster_commands_on_connection_test.rb
|
6
|
-
# @see https://redis.io/commands#connection
|
7
|
-
class TestClusterCommandsOnConnection < Test::Unit::TestCase
|
8
|
-
include Helper::Cluster
|
9
|
-
|
10
|
-
def test_auth
|
11
|
-
redis_cluster_mock(auth: ->(*_) { '+OK' }) do |redis|
|
12
|
-
assert_equal 'OK', redis.auth('my-password-123')
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_echo
|
17
|
-
assert_equal 'hogehoge', redis.echo('hogehoge')
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_ping
|
21
|
-
assert_equal 'hogehoge', redis.ping('hogehoge')
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_quit
|
25
|
-
redis2 = build_another_client
|
26
|
-
assert_equal 'OK', redis2.quit
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_select
|
30
|
-
assert_raise(Redis::CommandError, 'ERR SELECT is not allowed in cluster mode') do
|
31
|
-
redis.select(1)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_swapdb
|
36
|
-
assert_raise(Redis::CommandError, 'ERR SWAPDB is not allowed in cluster mode') do
|
37
|
-
redis.swapdb(1, 2)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|