diff options
Diffstat (limited to 'integration_test/stats_test.go')
-rw-r--r-- | integration_test/stats_test.go | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/integration_test/stats_test.go b/integration_test/stats_test.go new file mode 100644 index 0000000..e0be126 --- /dev/null +++ b/integration_test/stats_test.go @@ -0,0 +1,60 @@ +package integration + +import ( + "testing" + "time" + + "github.com/dexon-foundation/dexon-consensus-core/core/test" + "github.com/stretchr/testify/suite" +) + +type EventStatsTestSuite struct { + suite.Suite +} + +func (s *EventStatsTestSuite) TestCalculate() { + // Setup a test with fixed latency in proposing and network, + // and make sure the calculated statistics is expected. + var ( + networkLatency = &FixedLatencyModel{Latency: 100} + proposingLatency = &FixedLatencyModel{Latency: 300} + req = s.Require() + ) + + apps, dbs, validators, err := PrepareValidators( + 7, networkLatency, proposingLatency) + req.Nil(err) + + sch := test.NewScheduler(test.NewStopByConfirmedBlocks(50, apps, dbs)) + now := time.Now().UTC() + for vID, v := range validators { + sch.RegisterEventHandler(vID, v) + req.Nil(sch.Seed(NewProposeBlockEvent(vID, now))) + } + sch.Run(10) + req.Nil(VerifyApps(apps)) + // Check total statistics result. + stats, err := NewStats(sch.CloneExecutionHistory(), apps) + req.Nil(err) + req.True(stats.All.ProposedBlockCount > 350) + req.True(stats.All.ReceivedBlockCount > 350) + req.True(stats.All.StronglyAckedBlockCount > 350) + req.True(stats.All.TotalOrderedBlockCount >= 350) + req.True(stats.All.DeliveredBlockCount >= 350) + req.Equal(stats.All.ProposingLatency, 300*time.Millisecond) + req.Equal(stats.All.ReceivingLatency, 100*time.Millisecond) + // Check statistics for each validator. + for _, vStats := range stats.ByValidator { + req.True(vStats.ProposedBlockCount > 50) + req.True(vStats.ReceivedBlockCount > 50) + req.True(vStats.StronglyAckedBlockCount > 50) + req.True(vStats.TotalOrderedBlockCount >= 50) + req.True(vStats.DeliveredBlockCount >= 50) + req.Equal(vStats.ProposingLatency, 300*time.Millisecond) + req.Equal(vStats.ReceivingLatency, 100*time.Millisecond) + } +} + +func TestEventStats(t *testing.T) { + suite.Run(t, new(EventStatsTestSuite)) +} |