github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/p2p/peers/scorers/gossip_scorer_test.go (about)

     1  package scorers_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/prysmaticlabs/prysm/beacon-chain/p2p/peers"
     8  	"github.com/prysmaticlabs/prysm/beacon-chain/p2p/peers/scorers"
     9  	pbrpc "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
    10  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    11  )
    12  
    13  func TestScorers_Gossip_Score(t *testing.T) {
    14  	ctx, cancel := context.WithCancel(context.Background())
    15  	defer cancel()
    16  
    17  	tests := []struct {
    18  		name   string
    19  		update func(scorer *scorers.GossipScorer)
    20  		check  func(scorer *scorers.GossipScorer)
    21  	}{
    22  		{
    23  			name: "nonexistent peer",
    24  			update: func(scorer *scorers.GossipScorer) {
    25  			},
    26  			check: func(scorer *scorers.GossipScorer) {
    27  				assert.Equal(t, 0.0, scorer.Score("peer1"), "Unexpected score")
    28  			},
    29  		},
    30  		{
    31  			name: "existent bad peer",
    32  			update: func(scorer *scorers.GossipScorer) {
    33  				scorer.SetGossipData("peer1", -10.0, 1, nil)
    34  			},
    35  			check: func(scorer *scorers.GossipScorer) {
    36  				assert.Equal(t, -10.0, scorer.Score("peer1"), "Unexpected score")
    37  				assert.Equal(t, true, scorer.IsBadPeer("peer1"), "Unexpected good peer")
    38  			},
    39  		},
    40  		{
    41  			name: "good peer",
    42  			update: func(scorer *scorers.GossipScorer) {
    43  				scorer.SetGossipData("peer1", 10.0, 0, map[string]*pbrpc.TopicScoreSnapshot{"a": {TimeInMesh: 100}})
    44  			},
    45  			check: func(scorer *scorers.GossipScorer) {
    46  				assert.Equal(t, 10.0, scorer.Score("peer1"), "Unexpected score")
    47  				assert.Equal(t, false, scorer.IsBadPeer("peer1"), "Unexpected bad peer")
    48  				_, _, topicMap, err := scorer.GossipData("peer1")
    49  				assert.NoError(t, err)
    50  				assert.Equal(t, uint64(100), topicMap["a"].TimeInMesh, "incorrect time in mesh")
    51  			},
    52  		},
    53  	}
    54  
    55  	for _, tt := range tests {
    56  		t.Run(tt.name, func(t *testing.T) {
    57  			peerStatuses := peers.NewStatus(ctx, &peers.StatusConfig{
    58  				ScorerParams: &scorers.Config{},
    59  			})
    60  			scorer := peerStatuses.Scorers().GossipScorer()
    61  			if tt.update != nil {
    62  				tt.update(scorer)
    63  			}
    64  			tt.check(scorer)
    65  		})
    66  	}
    67  }