From 2cbc2ce38c5d49606c132e14b383c323f97d56c3 Mon Sep 17 00:00:00 2001 From: rene <41963722+renaynay@users.noreply.github.com> Date: Tue, 5 Mar 2024 13:42:58 +0100 Subject: [PATCH] feat(header/headertest): Enable block time intervals for header generation (#3139) Header test suite can now generate headers with the given block time interval if it is specified. Needed for testing pruner service. --- header/headertest/testing.go | 24 +++++++++++++++++------- header/headertest/verify_test.go | 4 ++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/header/headertest/testing.go b/header/headertest/testing.go index e97f7f7825..7b0ae64262 100644 --- a/header/headertest/testing.go +++ b/header/headertest/testing.go @@ -36,19 +36,24 @@ type TestSuite struct { valPntr int head *header.ExtendedHeader + + // blockTime is optional - if set, the test suite will generate + // blocks timestamped at the specified interval + blockTime time.Duration } func NewStore(t *testing.T) libhead.Store[*header.ExtendedHeader] { - return headertest.NewStore[*header.ExtendedHeader](t, NewTestSuite(t, 3), 10) + return headertest.NewStore[*header.ExtendedHeader](t, NewTestSuite(t, 3, 0), 10) } // NewTestSuite setups a new test suite with a given number of validators. -func NewTestSuite(t *testing.T, num int) *TestSuite { - valSet, vals := RandValidatorSet(num, 10) +func NewTestSuite(t *testing.T, numValidators int, blockTime time.Duration) *TestSuite { + valSet, vals := RandValidatorSet(numValidators, 10) return &TestSuite{ - t: t, - vals: vals, - valSet: valSet, + t: t, + vals: vals, + valSet: valSet, + blockTime: blockTime, } } @@ -155,13 +160,18 @@ func (s *TestSuite) GenRawHeader( height uint64, lastHeader, lastCommit, dataHash libhead.Hash) *header.RawHeader { rh := RandRawHeader(s.t) rh.Height = int64(height) - rh.Time = time.Now() rh.LastBlockID = types.BlockID{Hash: bytes.HexBytes(lastHeader)} rh.LastCommitHash = bytes.HexBytes(lastCommit) rh.DataHash = bytes.HexBytes(dataHash) rh.ValidatorsHash = s.valSet.Hash() rh.NextValidatorsHash = s.valSet.Hash() rh.ProposerAddress = s.nextProposer().Address + + rh.Time = time.Now() + if s.blockTime > 0 { + rh.Time = s.Head().Time().Add(s.blockTime) + } + return rh } diff --git a/header/headertest/verify_test.go b/header/headertest/verify_test.go index 82795ca5ff..c55d810593 100644 --- a/header/headertest/verify_test.go +++ b/header/headertest/verify_test.go @@ -12,7 +12,7 @@ import ( ) func TestVerify(t *testing.T) { - h := NewTestSuite(t, 2).GenExtendedHeaders(3) + h := NewTestSuite(t, 2, 0).GenExtendedHeaders(3) trusted, untrustedAdj, untrustedNonAdj := h[0], h[1], h[2] tests := []struct { prepare func() *header.ExtendedHeader @@ -47,7 +47,7 @@ func TestVerify(t *testing.T) { { prepare: func() *header.ExtendedHeader { untrusted := *untrustedNonAdj - untrusted.Commit = NewTestSuite(t, 2).Commit(RandRawHeader(t)) + untrusted.Commit = NewTestSuite(t, 2, 0).Commit(RandRawHeader(t)) return &untrusted }, err: header.ErrVerifyCommitLightTrustingFailed,