github.com/ethereum-optimism/optimism@v1.7.2/op-node/p2p/peer_params_test.go (about) 1 package p2p 2 3 import ( 4 "math" 5 "testing" 6 "time" 7 8 "github.com/ethereum-optimism/optimism/op-node/chaincfg" 9 pubsub "github.com/libp2p/go-libp2p-pubsub" 10 "github.com/stretchr/testify/suite" 11 ) 12 13 // PeerParamsTestSuite tests peer parameterization. 14 type PeerParamsTestSuite struct { 15 suite.Suite 16 } 17 18 // TestPeerParams runs the PeerParamsTestSuite. 19 func TestPeerParams(t *testing.T) { 20 suite.Run(t, new(PeerParamsTestSuite)) 21 } 22 23 // TestPeerScoreConstants validates the peer score constants. 24 func (testSuite *PeerParamsTestSuite) TestPeerScoreConstants() { 25 testSuite.Equal(0.01, DecayToZero) 26 } 27 28 // TestNewPeerScoreThresholds validates the peer score thresholds. 29 // 30 // This is tested to ensure that the thresholds are not modified and missed in review. 31 func (testSuite *PeerParamsTestSuite) TestNewPeerScoreThresholds() { 32 thresholds := NewPeerScoreThresholds() 33 expected := pubsub.PeerScoreThresholds{ 34 SkipAtomicValidation: false, 35 GossipThreshold: -10, 36 PublishThreshold: -40, 37 GraylistThreshold: -40, 38 AcceptPXThreshold: 20, 39 OpportunisticGraftThreshold: 0.05, 40 } 41 testSuite.Equal(expected, thresholds) 42 } 43 44 // TestGetPeerScoreParams validates the peer score parameters. 45 func (testSuite *PeerParamsTestSuite) TestGetPeerScoreParams_None() { 46 params, err := GetScoringParams("none", chaincfg.Goerli) 47 testSuite.NoError(err) 48 testSuite.Nil(params) 49 } 50 51 // TestLightPeerScoreParams validates the light peer score params. 52 func (testSuite *PeerParamsTestSuite) TestGetPeerScoreParams_Light() { 53 cfg := chaincfg.Goerli 54 cfg.BlockTime = 1 55 slot := time.Duration(cfg.BlockTime) * time.Second 56 epoch := 6 * slot 57 oneHundredEpochs := 100 * epoch 58 59 // calculate the behavior penalty decay 60 duration := 10 * epoch 61 decay := math.Pow(DecayToZero, 1/float64(duration/slot)) 62 testSuite.Equal(0.9261187281287935, decay) 63 64 // Test the params 65 scoringParams, err := GetScoringParams("light", cfg) 66 peerParams := scoringParams.PeerScoring 67 testSuite.NoError(err) 68 // Topics should contain options for block topic 69 testSuite.Len(peerParams.Topics, 1) 70 topicParams, ok := peerParams.Topics[blocksTopicV1(cfg)] 71 testSuite.True(ok, "should have block topic params") 72 testSuite.NotZero(topicParams.TimeInMeshQuantum) 73 testSuite.Equal(peerParams.TopicScoreCap, float64(34)) 74 testSuite.Equal(peerParams.AppSpecificWeight, float64(1)) 75 testSuite.Equal(peerParams.IPColocationFactorWeight, float64(-35)) 76 testSuite.Equal(peerParams.IPColocationFactorThreshold, 10) 77 testSuite.Nil(peerParams.IPColocationFactorWhitelist) 78 testSuite.Equal(peerParams.BehaviourPenaltyWeight, float64(-16)) 79 testSuite.Equal(peerParams.BehaviourPenaltyThreshold, float64(6)) 80 testSuite.Equal(peerParams.BehaviourPenaltyDecay, decay) 81 testSuite.Equal(peerParams.DecayInterval, slot) 82 testSuite.Equal(peerParams.DecayToZero, DecayToZero) 83 testSuite.Equal(peerParams.RetainScore, oneHundredEpochs) 84 85 appParams := scoringParams.ApplicationScoring 86 testSuite.Positive(appParams.ValidResponseCap) 87 testSuite.Positive(appParams.ValidResponseWeight) 88 testSuite.Positive(appParams.ValidResponseDecay) 89 testSuite.Positive(appParams.ErrorResponseCap) 90 testSuite.Negative(appParams.ErrorResponseWeight) 91 testSuite.Positive(appParams.ErrorResponseDecay) 92 testSuite.Positive(appParams.RejectedPayloadCap) 93 testSuite.Negative(appParams.RejectedPayloadWeight) 94 testSuite.Positive(appParams.RejectedPayloadDecay) 95 testSuite.Equal(DecayToZero, appParams.DecayToZero) 96 testSuite.Equal(slot, appParams.DecayInterval) 97 } 98 99 // TestParamsZeroBlockTime validates peer score params use default slot for 0 block time. 100 func (testSuite *PeerParamsTestSuite) TestParamsZeroBlockTime() { 101 cfg := chaincfg.Goerli 102 cfg.BlockTime = 0 103 slot := 2 * time.Second 104 params, err := GetScoringParams("light", cfg) 105 testSuite.NoError(err) 106 testSuite.Equal(params.PeerScoring.DecayInterval, slot) 107 testSuite.Equal(params.ApplicationScoring.DecayInterval, slot) 108 }