aboutsummaryrefslogtreecommitdiffstats
path: root/integration_test/stats_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'integration_test/stats_test.go')
-rw-r--r--integration_test/stats_test.go60
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))
+}