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  }