- package light_test
-
- import (
- "context"
- "testing"
- "time"
-
- dbm "github.com/tendermint/tm-db"
-
- "github.com/tendermint/tendermint/libs/log"
- "github.com/tendermint/tendermint/light"
- "github.com/tendermint/tendermint/light/provider"
- mockp "github.com/tendermint/tendermint/light/provider/mock"
- dbs "github.com/tendermint/tendermint/light/store/db"
- )
-
- // NOTE: block is produced every minute. Make sure the verification time
- // provided in the function call is correct for the size of the blockchain. The
- // benchmarking may take some time hence it can be more useful to set the time
- // or the amount of iterations use the flag -benchtime t -> i.e. -benchtime 5m
- // or -benchtime 100x.
- //
- // Remember that none of these benchmarks account for network latency.
- var (
- benchmarkFullNode = mockp.New(genMockNode(chainID, 1000, 100, 1, bTime))
- genesisBlock, _ = benchmarkFullNode.LightBlock(context.Background(), 1)
- )
-
- func BenchmarkSequence(b *testing.B) {
- c, err := light.NewClient(
- context.Background(),
- chainID,
- light.TrustOptions{
- Period: 24 * time.Hour,
- Height: 1,
- Hash: genesisBlock.Hash(),
- },
- benchmarkFullNode,
- []provider.Provider{benchmarkFullNode},
- dbs.New(dbm.NewMemDB()),
- light.Logger(log.TestingLogger()),
- light.SequentialVerification(),
- )
- if err != nil {
- b.Fatal(err)
- }
- b.ResetTimer()
-
- for n := 0; n < b.N; n++ {
- _, err = c.VerifyLightBlockAtHeight(context.Background(), 1000, bTime.Add(1000*time.Minute))
- if err != nil {
- b.Fatal(err)
- }
- }
- }
-
- func BenchmarkBisection(b *testing.B) {
- c, err := light.NewClient(
- context.Background(),
- chainID,
- light.TrustOptions{
- Period: 24 * time.Hour,
- Height: 1,
- Hash: genesisBlock.Hash(),
- },
- benchmarkFullNode,
- []provider.Provider{benchmarkFullNode},
- dbs.New(dbm.NewMemDB()),
- light.Logger(log.TestingLogger()),
- )
- if err != nil {
- b.Fatal(err)
- }
- b.ResetTimer()
-
- for n := 0; n < b.N; n++ {
- _, err = c.VerifyLightBlockAtHeight(context.Background(), 1000, bTime.Add(1000*time.Minute))
- if err != nil {
- b.Fatal(err)
- }
- }
- }
-
- func BenchmarkBackwards(b *testing.B) {
- trustedBlock, _ := benchmarkFullNode.LightBlock(context.Background(), 0)
- c, err := light.NewClient(
- context.Background(),
- chainID,
- light.TrustOptions{
- Period: 24 * time.Hour,
- Height: trustedBlock.Height,
- Hash: trustedBlock.Hash(),
- },
- benchmarkFullNode,
- []provider.Provider{benchmarkFullNode},
- dbs.New(dbm.NewMemDB()),
- light.Logger(log.TestingLogger()),
- )
- if err != nil {
- b.Fatal(err)
- }
- b.ResetTimer()
-
- for n := 0; n < b.N; n++ {
- _, err = c.VerifyLightBlockAtHeight(context.Background(), 1, bTime)
- if err != nil {
- b.Fatal(err)
- }
- }
- }
|