@@ -334,7 +334,7 @@ def test_any_replica_node_key
334334 def test_update_slot
335335 sample_slot = 0
336336 base_node_key = @test_node . find_node_key_of_primary ( sample_slot )
337- another_node_key = @test_node_info_list . find { |info | info . node_key != base_node_key && info . primary? }
337+ another_node_key = @test_node_info_list . find { |info | info . node_key != base_node_key && info . primary? } &. node_key
338338 @test_node . update_slot ( sample_slot , another_node_key )
339339 assert_equal ( another_node_key , @test_node . find_node_key_of_primary ( sample_slot ) )
340340 end
@@ -353,12 +353,12 @@ def test_make_topology_class
353353
354354 def test_build_slot_node_mappings
355355 node_info_list = [
356- { node_key : '127.0.0.1:7001' , slots : [ [ 0 , 3000 ] , [ 3002 , 5460 ] , [ 15_001 , 15_001 ] ] } ,
357- { node_key : '127.0.0.1:7002' , slots : [ [ 3001 , 3001 ] , [ 5461 , 7000 ] , [ 7002 , 10_922 ] ] } ,
358- { node_key : '127.0.0.1:7003' , slots : [ [ 7001 , 7001 ] , [ 10_923 , 15_000 ] , [ 15_002 , 16_383 ] ] } ,
359- { node_key : '127.0.0.1:7004' , slots : [ ] } ,
360- { node_key : '127.0.0.1:7005' , slots : [ ] } ,
361- { node_key : '127.0.0.1:7006' , slots : [ ] }
356+ { node_key : '127.0.0.1:7001' , role : 'master' , slots : [ [ 0 , 3000 ] , [ 3002 , 5460 ] , [ 15_001 , 15_001 ] ] } ,
357+ { node_key : '127.0.0.1:7002' , role : 'master' , slots : [ [ 3001 , 3001 ] , [ 5461 , 7000 ] , [ 7002 , 10_922 ] ] } ,
358+ { node_key : '127.0.0.1:7003' , role : 'master' , slots : [ [ 7001 , 7001 ] , [ 10_923 , 15_000 ] , [ 15_002 , 16_383 ] ] } ,
359+ { node_key : '127.0.0.1:7004' , role : 'slave' , slots : [ ] } ,
360+ { node_key : '127.0.0.1:7005' , role : 'slave' , slots : [ ] } ,
361+ { node_key : '127.0.0.1:7006' , role : 'slave' , slots : [ ] }
362362 ] . map { |info | ::RedisClient ::Cluster ::Node ::Info . new ( **info ) }
363363
364364 got = @test_node . send ( :build_slot_node_mappings , node_info_list )
@@ -372,6 +372,58 @@ def test_build_slot_node_mappings
372372 end
373373 end
374374
375+ def test_make_array_for_slot_node_mappings_optimized
376+ node_info_list = Array . new ( 256 ) do |i |
377+ ::RedisClient ::Cluster ::Node ::Info . new (
378+ node_key : "127.0.0.1:#{ 1024 + i + 1 } " ,
379+ role : 'master'
380+ )
381+ end
382+
383+ want = node_info_list . first . node_key
384+ got = @test_node . send ( :make_array_for_slot_node_mappings , node_info_list )
385+ assert_instance_of ( Struct ::RedisSlot , got )
386+ ::RedisClient ::Cluster ::Node ::SLOT_SIZE . times do |i |
387+ got [ i ] = want
388+ assert_equal ( want , got [ i ] , "Case: #{ i } " )
389+ end
390+ end
391+
392+ def test_make_array_for_slot_node_mappings_unoptimized
393+ node_info_list = Array . new ( 257 ) do |i |
394+ ::RedisClient ::Cluster ::Node ::Info . new (
395+ node_key : "127.0.0.1:#{ 1024 + i + 1 } " ,
396+ role : 'master'
397+ )
398+ end
399+
400+ want = node_info_list . first . node_key
401+ got = @test_node . send ( :make_array_for_slot_node_mappings , node_info_list )
402+ assert_instance_of ( Array , got )
403+ ::RedisClient ::Cluster ::Node ::SLOT_SIZE . times do |i |
404+ got [ i ] = want
405+ assert_equal ( want , got [ i ] , "Case: #{ i } " )
406+ end
407+ end
408+
409+ def test_make_array_for_slot_node_mappings_max_shard_size
410+ node_info_list = Array . new ( 255 ) do |i |
411+ ::RedisClient ::Cluster ::Node ::Info . new (
412+ node_key : "127.0.0.1:#{ 1024 + i + 1 } " ,
413+ role : 'master'
414+ )
415+ end
416+
417+ got = @test_node . send ( :make_array_for_slot_node_mappings , node_info_list )
418+ assert_instance_of ( Struct ::RedisSlot , got )
419+
420+ ::RedisClient ::Cluster ::Node ::SLOT_SIZE . times { |i | got [ i ] = node_info_list . first . node_key }
421+
422+ got [ 0 ] = 'newbie:6379'
423+ assert_equal ( 'newbie:6379' , got [ 0 ] )
424+ assert_raises ( ::RedisClient ::Cluster ::Node ::ReloadNeeded ) { got [ 0 ] = 'zombie:6379' }
425+ end
426+
375427 def test_build_replication_mappings_regular
376428 node_key1 = '127.0.0.1:7001'
377429 node_key2 = '127.0.0.1:7002'
0 commit comments