mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-05 04:55:18 +00:00
## NOTE: this pr exclusively runs commands from the makefile found here This PR ONLY runs `make format` ... then `make mockery` Its purpose is to ensure that the review scope of other PR's, which changed .go files and thus triggered the linter that only runs conditionally, have smaller review scopes, and should be merged before: https://github.com/tendermint/tendermint/pull/9738 https://github.com/tendermint/tendermint/pull/9739 https://github.com/tendermint/tendermint/pull/9742 --- #### PR checklist - [x] Tests written/updated, or no tests needed - [x] `CHANGELOG_PENDING.md` updated, or no changelog entry needed - [x] Updated relevant documentation (`docs/`) and code comments, or no documentation updates needed
74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/informalsystems/tm-load-test/pkg/loadtest"
|
|
|
|
"github.com/tendermint/tendermint/test/loadtime/payload"
|
|
)
|
|
|
|
// Ensure all of the interfaces are correctly satisfied.
|
|
var (
|
|
_ loadtest.ClientFactory = (*ClientFactory)(nil)
|
|
_ loadtest.Client = (*TxGenerator)(nil)
|
|
)
|
|
|
|
// ClientFactory implements the loadtest.ClientFactory interface.
|
|
type ClientFactory struct {
|
|
ID []byte
|
|
}
|
|
|
|
// TxGenerator is responsible for generating transactions.
|
|
// TxGenerator holds the set of information that will be used to generate
|
|
// each transaction.
|
|
type TxGenerator struct {
|
|
id []byte
|
|
conns uint64
|
|
rate uint64
|
|
size uint64
|
|
}
|
|
|
|
func main() {
|
|
u := [16]byte(uuid.New()) // generate run ID on startup
|
|
if err := loadtest.RegisterClientFactory("loadtime-client", &ClientFactory{ID: u[:]}); err != nil {
|
|
panic(err)
|
|
}
|
|
loadtest.Run(&loadtest.CLIConfig{
|
|
AppName: "loadtime",
|
|
AppShortDesc: "Generate timestamped transaction load.",
|
|
AppLongDesc: "loadtime generates transaction load for the purpose of measuring the end-to-end latency of a transaction from submission to execution in a Tendermint network.",
|
|
DefaultClientFactory: "loadtime-client",
|
|
})
|
|
}
|
|
|
|
func (f *ClientFactory) ValidateConfig(cfg loadtest.Config) error {
|
|
psb, err := payload.MaxUnpaddedSize()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if psb > cfg.Size {
|
|
return fmt.Errorf("payload size exceeds configured size")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (f *ClientFactory) NewClient(cfg loadtest.Config) (loadtest.Client, error) {
|
|
return &TxGenerator{
|
|
id: f.ID,
|
|
conns: uint64(cfg.Connections),
|
|
rate: uint64(cfg.Rate),
|
|
size: uint64(cfg.Size),
|
|
}, nil
|
|
}
|
|
|
|
func (c *TxGenerator) GenerateTx() ([]byte, error) {
|
|
return payload.NewBytes(&payload.Payload{
|
|
Connections: c.conns,
|
|
Rate: c.rate,
|
|
Size: c.size,
|
|
Id: c.id,
|
|
})
|
|
}
|