working basic report generator

This commit is contained in:
William Banfield
2022-09-01 17:49:25 -04:00
parent 2ff11e5bc2
commit 7775dfa7f9
5 changed files with 183 additions and 47 deletions
+36
View File
@@ -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
}
+61
View File
@@ -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))
}
}