github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/requester/ranking/random_test.go (about) 1 package ranking 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/filecoin-project/bacalhau/pkg/model" 8 "github.com/libp2p/go-libp2p/core/peer" 9 "github.com/stretchr/testify/suite" 10 ) 11 12 type RandomNodeRankerSuite struct { 13 suite.Suite 14 RandomNodeRanker *RandomNodeRanker 15 } 16 17 func TestRandomNodeRankerSuite(t *testing.T) { 18 suite.Run(t, new(RandomNodeRankerSuite)) 19 } 20 21 func (s *RandomNodeRankerSuite) TestRankNodes() { 22 nodeCount := 100 23 randomnessRange := 10 24 25 var nodes []model.NodeInfo 26 for i := 0; i < nodeCount; i++ { 27 nodes = append(nodes, model.NodeInfo{ 28 PeerInfo: peer.AddrInfo{ID: peer.ID(rune(i))}, 29 }) 30 } 31 s.RandomNodeRanker = NewRandomNodeRanker(RandomNodeRankerParams{RandomnessRange: randomnessRange}) 32 33 ranks, err := s.RandomNodeRanker.RankNodes(context.Background(), model.Job{}, nodes) 34 s.NoError(err) 35 s.Equal(len(nodes), len(ranks)) 36 37 uniqueRanks := make(map[int]struct{}) 38 for _, rank := range ranks { 39 s.True(rank.Rank >= 0) 40 s.True(rank.Rank <= randomnessRange) 41 uniqueRanks[rank.Rank] = struct{}{} 42 } 43 44 s.True(len(uniqueRanks) > 1) 45 } 46 47 func (s *RandomNodeRankerSuite) TestRankNodes_NoRandomness() { 48 defer func() { 49 if r := recover(); r == nil { 50 s.Fail("expected panic when randomness range is 0") 51 } 52 }() 53 NewRandomNodeRanker(RandomNodeRankerParams{RandomnessRange: 0}) 54 } 55 56 func (s *RandomNodeRankerSuite) TestRankNodes_NegativeRandomness() { 57 defer func() { 58 if r := recover(); r == nil { 59 s.Fail("expected panic when randomness range is negative") 60 } 61 }() 62 NewRandomNodeRanker(RandomNodeRankerParams{RandomnessRange: -1}) 63 }