@@ -253,13 +253,60 @@ 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
+ [
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
+
256
303
def test_sentinel_nearest_slave
257
304
sentinels = [ { :host => "127.0.0.1" , :port => 26381 } ]
258
305
259
306
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" ] } }
263
310
264
311
5 . times do
265
312
RedisMock . start ( master ) do |master_port |
@@ -287,7 +334,7 @@ def test_sentinel_nearest_slave
287
334
RedisMock . start ( sentinel . call ( master_port ) ) do |sen_port |
288
335
sentinels [ 0 ] [ :port ] = sen_port
289
336
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" ]
291
338
end
292
339
end
293
340
end
0 commit comments