@@ -253,13 +253,58 @@ 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+                       %W[ role-reported  master  ip  127.0.0.1  port  #{ master_port } ] 
276+                     when  "slaves" 
277+                       [ 
278+                         %W[ master-link-status  down  ip  127.0.0.1  port  #{ s1_port } ] , 
279+                         %W[ master-link-status  ok  ip  127.0.0.1  port  #{ s2_port } ] , 
280+                         %W[ master-link-status  ok  ip  127.0.0.1  port  #{ s3_port } ] 
281+                       ] . shuffle 
282+                     else 
283+                       [ "127.0.0.1" ,  port . to_s ] 
284+                     end 
285+                   end 
286+                 } 
287+               end 
288+ 
289+               RedisMock . start ( sentinel . call ( master_port ) )  do  |sen_port |
290+                 sentinels [ 0 ] [ :port ]  =  sen_port 
291+                 redis  =  Redis . new ( :url  =>  "redis://master1" ,  :sentinels  =>  sentinels ,  :role  =>  :nearest ) 
292+                 assert_equal  [ "master" ] ,  redis . node_id 
293+               end 
294+             end 
295+           end 
296+         end 
297+       end 
298+     end 
299+   end 
300+ 
256301  def  test_sentinel_nearest_slave 
257302    sentinels  =  [ { :host  =>  "127.0.0.1" ,  :port  =>  26381 } ] 
258303
259304    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" ]  }  } 
305+     s1  =  {  :role  =>  lambda  {  [ "slave" ]  } ,  :node_id   =>  lambda  {  [ "1" ]  } ,  :ping  =>  lambda  {  [ "OK" ]  }  } 
306+     s2  =  {  :role  =>  lambda  {  [ "slave" ]  } ,  :node_id   =>  lambda  {  [ "2" ]  } ,  :ping  =>  lambda  {  sleep  0.1 ;  [ "OK" ]  }  } 
307+     s3  =  {  :role  =>  lambda  {  [ "slave" ]  } ,  :node_id   =>  lambda  {  [ "3" ]  } ,  :ping  =>  lambda  {  sleep  0.2 ;  [ "OK" ]  }  } 
263308
264309    5 . times  do 
265310      RedisMock . start ( master )  do  |master_port |
@@ -287,7 +332,7 @@ def test_sentinel_nearest_slave
287332              RedisMock . start ( sentinel . call ( master_port ) )  do  |sen_port |
288333                sentinels [ 0 ] [ :port ]  =  sen_port 
289334                redis  =  Redis . new ( :url  =>  "redis://master1" ,  :sentinels  =>  sentinels ,  :role  =>  :nearest_slave ) 
290-                 assert_equal  redis . slave_id ,  [ "2" ] 
335+                 assert_equal  redis . node_id ,  [ "2" ] 
291336              end 
292337            end 
293338          end 
0 commit comments