Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0097acd

Browse files
committed
Add test cases
1 parent 1f9a506 commit 0097acd

File tree

1 file changed

+71
-2
lines changed

1 file changed

+71
-2
lines changed

‎test/mrb_rediscluster.rb‎

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@
88
]
99

1010
class MockRedis < Mocks::Mock
11+
attr_reader :host, :port
12+
13+
def initialize(host, port)
14+
super()
15+
@host = host
16+
@port = port
17+
self.stubs(:ping).returns('PONG')
18+
end
19+
1120
def cluster(cmd)
1221
if cmd == 'slots'
1322
[
@@ -28,7 +37,7 @@ def cluster(cmd)
2837

2938
assert('RedisCluster#get_cluster_nodes') do
3039
rc = RedisCluster.new(HOSTS)
31-
rc.define_singleton_method(:get_redis_link) { MockRedis.new }
40+
rc.define_singleton_method(:get_redis_link) { |node| MockRedis.new(node[:host],node[:port]) }
3241

3342
expect = {
3443
'0000' => { host: '127.0.0.1', port: 7000, name: '127.0.0.1:7000@17000', flags: ['master'] },
@@ -44,7 +53,7 @@ def cluster(cmd)
4453

4554
assert('RedisCluster#cluster_nodes') do
4655
rc = RedisCluster.new(HOSTS)
47-
rc.define_singleton_method(:get_redis_link) { MockRedis.new }
56+
rc.define_singleton_method(:get_redis_link) { |node| MockRedis.new(node[:host],node[:port]) }
4857
rc.initialize_slots_cache
4958

5059
assert_equal '0000', rc.instance_variable_get('@slots')[0]
@@ -55,6 +64,66 @@ def cluster(cmd)
5564
assert_equal '2222', rc.instance_variable_get('@slots')[16383]
5665
end
5766

67+
assert('RedisCluster#get_connection_by') do
68+
rc = RedisCluster.new(HOSTS)
69+
rc.define_singleton_method(:get_redis_link) { |node| MockRedis.new(node[:host], node[:port]) }
70+
rc.define_singleton_method(:get_random_connection) { MockRedis.new('192.0.2.1', 6379) }
71+
rc.initialize_slots_cache
72+
73+
conn = rc.get_connection_by(16383)
74+
assert_equal '127.0.0.1', conn.host
75+
assert_equal 7002, conn.port
76+
77+
# clear slot cache, expect get_random_connection() is called
78+
rc.instance_variable_get('@slots')[16383] = nil
79+
80+
conn = rc.get_connection_by(16383)
81+
assert_equal '192.0.2.1', conn.host
82+
assert_equal 6379, conn.port
83+
end
84+
85+
assert('RedisCluster#get_random_connection') do
86+
rc = RedisCluster.new(HOSTS)
87+
rc.define_singleton_method(:get_redis_link) { |node| MockRedis.new(node[:host], node[:port]) }
88+
rc.initialize_slots_cache
89+
90+
nodes = {
91+
'1234' => { host: '192.0.2.1', port: 7000, name: '192.0.2.1:7000', flags: ['master'] }
92+
}
93+
rc.instance_variable_set('@nodes', nodes)
94+
rc.instance_variable_get('@connections')['1234'] = nil
95+
96+
conn = rc.get_random_connection
97+
assert_equal '192.0.2.1', conn.host
98+
assert_equal 7000, conn.port
99+
assert_equal conn, rc.instance_variable_get('@connections')['1234']
100+
101+
rc.instance_variable_get('@connections')['1234'].stubs(:ping).returns(nil)
102+
assert_raise(RuntimeError) { rc.get_random_connection }
103+
104+
rc.instance_variable_set('@nodes', {})
105+
assert_raise(RuntimeError) { rc.get_random_connection }
106+
end
107+
108+
assert('RedisCluster#send_cluster_command') do
109+
rc = RedisCluster.new(HOSTS)
110+
rc.define_singleton_method(:get_redis_link) do |node|
111+
mock = MockRedis.new(node[:host], node[:port])
112+
mock.define_singleton_method(:send) do
113+
return '123456789' if self.port == 7002
114+
raise Redis::ReplyError, 'MOVED 12739 127.0.0.1:7002'
115+
end
116+
mock
117+
end
118+
rc.initialize_slots_cache
119+
120+
assert_equal '123456789', rc.send_cluster_command([:get, '123456789'])
121+
122+
# set wrong node id
123+
rc.instance_variable_get('@slots')[12739] = '0000'
124+
assert_equal '123456789', rc.send_cluster_command([:get, '123456789'])
125+
end
126+
58127
assert('RedisCluster#extract_key') do
59128
rc = RedisCluster.new(HOSTS)
60129
%i(info multi exec slaveof config shutdown).each do |cmd|

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /