@@ -253,13 +253,60 @@ def test_sentinel_retries
253253 assert_match ( /No sentinels available/ , ex . message )
254254 end
255255
256+ def test_sentinel_nearest
257+ sentinels = [ { :host => "127.0.0.1" , :port => 26381 } ]
258+
259+ master = { :role => lambda { [ "master" ] } , :node_id => lambda { [ "master" ] } , :ping => lambda { [ "OK" ] } }
260+ s1 = { :role => lambda { [ "slave" ] } , :node_id => lambda { [ "1" ] } , :ping => lambda { sleep 0.1 ; [ "OK" ] } }
261+ s2 = { :role => lambda { [ "slave" ] } , :node_id => lambda { [ "2" ] } , :ping => lambda { sleep 0.2 ; [ "OK" ] } }
262+ s3 = { :role => lambda { [ "slave" ] } , :node_id => lambda { [ "3" ] } , :ping => lambda { sleep 0.3 ; [ "OK" ] } }
263+
264+ 5 . times do
265+ RedisMock . start ( master ) do |master_port |
266+ RedisMock . start ( s1 ) do |s1_port |
267+ RedisMock . start ( s2 ) do |s2_port |
268+ RedisMock . start ( s3 ) do |s3_port |
269+
270+ sentinel = lambda do |port |
271+ {
272+ :sentinel => lambda do |command , *args |
273+ case command
274+ when "master"
275+ [
276+ %W[ role-reported master ip 127.0.0.1 port #{ master_port } ]
277+ ]
278+ when "slaves"
279+ [
280+ %W[ master-link-status down ip 127.0.0.1 port #{ s1_port } ] ,
281+ %W[ master-link-status ok ip 127.0.0.1 port #{ s2_port } ] ,
282+ %W[ master-link-status ok ip 127.0.0.1 port #{ s3_port } ]
283+ ] . shuffle
284+ else
285+ [ "127.0.0.1" , port . to_s ]
286+ end
287+ end
288+ }
289+ end
290+
291+ RedisMock . start ( sentinel . call ( master_port ) ) do |sen_port |
292+ sentinels [ 0 ] [ :port ] = sen_port
293+ redis = Redis . new ( :url => "redis://master1" , :sentinels => sentinels , :role => :nearest )
294+ assert_equal [ "master" ] , redis . node_id
295+ end
296+ end
297+ end
298+ end
299+ end
300+ end
301+ end
302+
256303 def test_sentinel_nearest_slave
257304 sentinels = [ { :host => "127.0.0.1" , :port => 26381 } ]
258305
259306 master = { :role => lambda { [ "master" ] } }
260- s1 = { :role => lambda { [ "slave" ] } , :slave_id => lambda { [ "1" ] } , :ping => lambda { [ "OK" ] } }
261- s2 = { :role => lambda { [ "slave" ] } , :slave_id => lambda { [ "2" ] } , :ping => lambda { sleep 0.1 ; [ "OK" ] } }
262- s3 = { :role => lambda { [ "slave" ] } , :slave_id => lambda { [ "3" ] } , :ping => lambda { sleep 0.2 ; [ "OK" ] } }
307+ s1 = { :role => lambda { [ "slave" ] } , :node_id => lambda { [ "1" ] } , :ping => lambda { [ "OK" ] } }
308+ s2 = { :role => lambda { [ "slave" ] } , :node_id => lambda { [ "2" ] } , :ping => lambda { sleep 0.1 ; [ "OK" ] } }
309+ s3 = { :role => lambda { [ "slave" ] } , :node_id => lambda { [ "3" ] } , :ping => lambda { sleep 0.2 ; [ "OK" ] } }
263310
264311 5 . times do
265312 RedisMock . start ( master ) do |master_port |
@@ -287,7 +334,7 @@ def test_sentinel_nearest_slave
287334 RedisMock . start ( sentinel . call ( master_port ) ) do |sen_port |
288335 sentinels [ 0 ] [ :port ] = sen_port
289336 redis = Redis . new ( :url => "redis://master1" , :sentinels => sentinels , :role => :nearest_slave )
290- assert_equal redis . slave_id , [ "2" ]
337+ assert_equal redis . node_id , [ "2" ]
291338 end
292339 end
293340 end
0 commit comments