tendermint/p2p/trust/metric_test.go

109 lines
2.6 KiB
Go
Raw Normal View History

package trust
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestTrustMetricScores(t *testing.T) {
tm := NewMetric()
tm.Start()
// Perfect score
tm.GoodEvents(1)
score := tm.TrustScore()
assert.Equal(t, 100, score)
// Less than perfect score
tm.BadEvents(10)
score = tm.TrustScore()
assert.NotEqual(t, 100, score)
tm.Stop()
}
func TestTrustMetricConfig(t *testing.T) {
// 7 days
window := time.Minute * 60 * 24 * 7
config := TrustMetricConfig{
TrackingWindow: window,
IntervalLength: 2 * time.Minute,
}
tm := NewMetricWithConfig(config)
tm.Start()
// The max time intervals should be the TrackingWindow / IntervalLen
assert.Equal(t, int(config.TrackingWindow/config.IntervalLength), tm.maxIntervals)
dc := DefaultConfig()
// These weights should still be the default values
assert.Equal(t, dc.ProportionalWeight, tm.proportionalWeight)
assert.Equal(t, dc.IntegralWeight, tm.integralWeight)
tm.Stop()
2017-12-12 16:43:19 -05:00
tm.Wait()
config.ProportionalWeight = 0.3
config.IntegralWeight = 0.7
tm = NewMetricWithConfig(config)
tm.Start()
// These weights should be equal to our custom values
assert.Equal(t, config.ProportionalWeight, tm.proportionalWeight)
assert.Equal(t, config.IntegralWeight, tm.integralWeight)
tm.Stop()
2017-12-12 16:43:19 -05:00
tm.Wait()
}
func TestTrustMetricCopyNilPointer(t *testing.T) {
var tm *TrustMetric
ctm := tm.Copy()
assert.Nil(t, ctm)
}
// XXX: This test fails non-deterministically
2019-02-06 15:16:38 +04:00
// func _TestTrustMetricStopPause(t *testing.T) {
// // The TestTicker will provide manual control over
// // the passing of time within the metric
// tt := NewTestTicker()
// tm := NewMetric()
// tm.SetTicker(tt)
// tm.Start()
// // Allow some time intervals to pass and pause
// tt.NextTick()
// tt.NextTick()
// tm.Pause()
// // could be 1 or 2 because Pause and NextTick race
// first := tm.Copy().numIntervals
// // Allow more time to pass and check the intervals are unchanged
// tt.NextTick()
// tt.NextTick()
// assert.Equal(t, first, tm.Copy().numIntervals)
// // Get the trust metric activated again
// tm.GoodEvents(5)
// // Allow some time intervals to pass and stop
// tt.NextTick()
// tt.NextTick()
// tm.Stop()
// tm.Wait()
// second := tm.Copy().numIntervals
// // Allow more intervals to pass while the metric is stopped
// // and check that the number of intervals match
// tm.NextTimeInterval()
// tm.NextTimeInterval()
// // XXX: fails non-deterministically:
// // expected 5, got 6
// assert.Equal(t, second+2, tm.Copy().numIntervals)
// if first > second {
// t.Fatalf("numIntervals should always increase or stay the same over time")
// }
// }