mirror of
https://github.com/tendermint/tendermint.git
synced 2026-09-09 17:46:07 +00:00
working basic report generator
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package report
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/tendermint/tendermint/test/loadtime/payload"
|
||||
"github.com/tendermint/tendermint/types"
|
||||
)
|
||||
|
||||
type blockStore interface {
|
||||
Height() int64
|
||||
Base() int64
|
||||
LoadBlock(int64) *types.Block
|
||||
}
|
||||
|
||||
type Report struct {
|
||||
Max, Min, Avg time.Duration
|
||||
StdDev int64
|
||||
All []time.Duration
|
||||
}
|
||||
|
||||
func GenerateFromBlockStore(s blockStore) (Report, error) {
|
||||
r := Report{}
|
||||
for i := s.Base(); i < s.Height(); i++ {
|
||||
b := s.LoadBlock(i)
|
||||
for _, tx := range b.Data.Txs {
|
||||
p, err := payload.FromBytes(tx)
|
||||
if err != nil {
|
||||
return Report{}, err
|
||||
}
|
||||
t := p.Time.AsTime().Sub(b.Time)
|
||||
r.All = append(r.All, t)
|
||||
}
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package report_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/tendermint/tendermint/test/loadtime/payload"
|
||||
"github.com/tendermint/tendermint/test/loadtime/report"
|
||||
"github.com/tendermint/tendermint/types"
|
||||
)
|
||||
|
||||
type mockBlockStore struct {
|
||||
base int64
|
||||
blocks []*types.Block
|
||||
}
|
||||
|
||||
func (m *mockBlockStore) Height() int64 {
|
||||
return m.base + int64(len(m.blocks))
|
||||
}
|
||||
|
||||
func (m *mockBlockStore) Base() int64 {
|
||||
return m.base
|
||||
}
|
||||
|
||||
func (m *mockBlockStore) LoadBlock(i int64) *types.Block {
|
||||
return m.blocks[i-m.base]
|
||||
}
|
||||
|
||||
func TestGenerateReport(t *testing.T) {
|
||||
b1, err := payload.NewBytes(payload.Options{
|
||||
Size: 1024,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("generating payload %s", err)
|
||||
}
|
||||
b2, err := payload.NewBytes(payload.Options{
|
||||
Size: 1024,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("generating payload %s", err)
|
||||
}
|
||||
s := &mockBlockStore{
|
||||
blocks: []*types.Block{
|
||||
{
|
||||
Header: types.Header{
|
||||
Time: time.Now(),
|
||||
},
|
||||
Data: types.Data{
|
||||
Txs: []types.Tx{b1, b2},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
r, err := report.GenerateFromBlockStore(s)
|
||||
if err != nil {
|
||||
t.Fatalf("generating report %s", err)
|
||||
}
|
||||
if len(r.All) != 2 {
|
||||
t.Fatalf("report contained different number of data points from expected. Expected %d but contained %d", 1, len(r.All))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user