@@ -253,13 +253,58 @@ def test_sentinel_retries
253
253
assert_match ( /No sentinels available/ , ex . message )
254
254
end
255
255
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
+
256
301
def test_sentinel_nearest_slave
257
302
sentinels = [ { :host => "127.0.0.1" , :port => 26381 } ]
258
303
259
304
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" ] } }
263
308
264
309
5 . times do
265
310
RedisMock . start ( master ) do |master_port |
@@ -287,7 +332,7 @@ def test_sentinel_nearest_slave
287
332
RedisMock . start ( sentinel . call ( master_port ) ) do |sen_port |
288
333
sentinels [ 0 ] [ :port ] = sen_port
289
334
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" ]
291
336
end
292
337
end
293
338
end
0 commit comments