Browse Source

light: remove test panic (#7588)

pull/7601/head
Sam Kleinman 3 years ago
committed by GitHub
parent
commit
887cb219ab
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 996 additions and 990 deletions
  1. +3
    -3
      light/client_benchmark_test.go
  2. +937
    -937
      light/client_test.go
  3. +14
    -14
      light/detector_test.go
  4. +23
    -17
      light/helpers_test.go
  5. +19
    -19
      light/verifier_test.go

+ 3
- 3
light/client_benchmark_test.go View File

@ -64,7 +64,7 @@ func BenchmarkSequence(b *testing.B) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
headers, vals, _ := genLightBlocksWithKeys(chainID, 1000, 100, 1, bTime)
headers, vals, _ := genLightBlocksWithKeys(b, chainID, 1000, 100, 1, bTime)
benchmarkFullNode := newProviderBenchmarkImpl(headers, vals) benchmarkFullNode := newProviderBenchmarkImpl(headers, vals)
genesisBlock, _ := benchmarkFullNode.LightBlock(ctx, 1) genesisBlock, _ := benchmarkFullNode.LightBlock(ctx, 1)
@ -101,7 +101,7 @@ func BenchmarkBisection(b *testing.B) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
headers, vals, _ := genLightBlocksWithKeys(chainID, 1000, 100, 1, bTime)
headers, vals, _ := genLightBlocksWithKeys(b, chainID, 1000, 100, 1, bTime)
benchmarkFullNode := newProviderBenchmarkImpl(headers, vals) benchmarkFullNode := newProviderBenchmarkImpl(headers, vals)
genesisBlock, _ := benchmarkFullNode.LightBlock(ctx, 1) genesisBlock, _ := benchmarkFullNode.LightBlock(ctx, 1)
@ -137,7 +137,7 @@ func BenchmarkBackwards(b *testing.B) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
headers, vals, _ := genLightBlocksWithKeys(chainID, 1000, 100, 1, bTime)
headers, vals, _ := genLightBlocksWithKeys(b, chainID, 1000, 100, 1, bTime)
benchmarkFullNode := newProviderBenchmarkImpl(headers, vals) benchmarkFullNode := newProviderBenchmarkImpl(headers, vals)
trustedBlock, _ := benchmarkFullNode.LightBlock(ctx, 0) trustedBlock, _ := benchmarkFullNode.LightBlock(ctx, 0)


+ 937
- 937
light/client_test.go
File diff suppressed because it is too large
View File


+ 14
- 14
light/detector_test.go View File

@ -35,7 +35,7 @@ func TestLightClientAttackEvidence_Lunatic(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
witnessHeaders, witnessValidators, chainKeys := genLightBlocksWithKeys(chainID, latestHeight, valSize, 2, bTime)
witnessHeaders, witnessValidators, chainKeys := genLightBlocksWithKeys(t, chainID, latestHeight, valSize, 2, bTime)
forgedKeys := chainKeys[divergenceHeight-1].ChangeKeys(3) // we change 3 out of the 5 validators (still 2/5 remain) forgedKeys := chainKeys[divergenceHeight-1].ChangeKeys(3) // we change 3 out of the 5 validators (still 2/5 remain)
forgedVals := forgedKeys.ToValidators(2, 0) forgedVals := forgedKeys.ToValidators(2, 0)
@ -46,7 +46,7 @@ func TestLightClientAttackEvidence_Lunatic(t *testing.T) {
primaryValidators[height] = witnessValidators[height] primaryValidators[height] = witnessValidators[height]
continue continue
} }
primaryHeaders[height] = forgedKeys.GenSignedHeader(chainID, height, bTime.Add(time.Duration(height)*time.Minute),
primaryHeaders[height] = forgedKeys.GenSignedHeader(t, chainID, height, bTime.Add(time.Duration(height)*time.Minute),
nil, forgedVals, forgedVals, hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(forgedKeys)) nil, forgedVals, forgedVals, hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(forgedKeys))
primaryValidators[height] = forgedVals primaryValidators[height] = forgedVals
} }
@ -152,7 +152,7 @@ func TestLightClientAttackEvidence_Equivocation(t *testing.T) {
// validators don't change in this network (however we still use a map just for convenience) // validators don't change in this network (however we still use a map just for convenience)
primaryValidators = make(map[int64]*types.ValidatorSet, testCase.latestHeight) primaryValidators = make(map[int64]*types.ValidatorSet, testCase.latestHeight)
) )
witnessHeaders, witnessValidators, chainKeys := genLightBlocksWithKeys(chainID,
witnessHeaders, witnessValidators, chainKeys := genLightBlocksWithKeys(t, chainID,
testCase.latestHeight+1, valSize, 2, bTime) testCase.latestHeight+1, valSize, 2, bTime)
for height := int64(1); height <= testCase.latestHeight; height++ { for height := int64(1); height <= testCase.latestHeight; height++ {
if height < testCase.divergenceHeight { if height < testCase.divergenceHeight {
@ -162,7 +162,7 @@ func TestLightClientAttackEvidence_Equivocation(t *testing.T) {
} }
// we don't have a network partition so we will make 4/5 (greater than 2/3) malicious and vote again for // we don't have a network partition so we will make 4/5 (greater than 2/3) malicious and vote again for
// a different block (which we do by adding txs) // a different block (which we do by adding txs)
primaryHeaders[height] = chainKeys[height].GenSignedHeader(chainID, height,
primaryHeaders[height] = chainKeys[height].GenSignedHeader(t, chainID, height,
bTime.Add(time.Duration(height)*time.Minute), []types.Tx{[]byte("abcd")}, bTime.Add(time.Duration(height)*time.Minute), []types.Tx{[]byte("abcd")},
witnessValidators[height], witnessValidators[height+1], hash("app_hash"), witnessValidators[height], witnessValidators[height+1], hash("app_hash"),
hash("cons_hash"), hash("results_hash"), 0, len(chainKeys[height])-1) hash("cons_hash"), hash("results_hash"), 0, len(chainKeys[height])-1)
@ -246,7 +246,7 @@ func TestLightClientAttackEvidence_ForwardLunatic(t *testing.T) {
defer cancel() defer cancel()
logger := log.NewTestingLogger(t) logger := log.NewTestingLogger(t)
witnessHeaders, witnessValidators, chainKeys := genLightBlocksWithKeys(chainID, latestHeight, valSize, 2, bTime)
witnessHeaders, witnessValidators, chainKeys := genLightBlocksWithKeys(t, chainID, latestHeight, valSize, 2, bTime)
for _, unusedHeader := range []int64{3, 5, 6, 8} { for _, unusedHeader := range []int64{3, 5, 6, 8} {
delete(witnessHeaders, unusedHeader) delete(witnessHeaders, unusedHeader)
} }
@ -262,7 +262,7 @@ func TestLightClientAttackEvidence_ForwardLunatic(t *testing.T) {
} }
forgedKeys := chainKeys[latestHeight].ChangeKeys(3) // we change 3 out of the 5 validators (still 2/5 remain) forgedKeys := chainKeys[latestHeight].ChangeKeys(3) // we change 3 out of the 5 validators (still 2/5 remain)
primaryValidators[forgedHeight] = forgedKeys.ToValidators(2, 0) primaryValidators[forgedHeight] = forgedKeys.ToValidators(2, 0)
primaryHeaders[forgedHeight] = forgedKeys.GenSignedHeader(
primaryHeaders[forgedHeight] = forgedKeys.GenSignedHeader(t,
chainID, chainID,
forgedHeight, forgedHeight,
bTime.Add(time.Duration(latestHeight+1)*time.Minute), // 11 mins bTime.Add(time.Duration(latestHeight+1)*time.Minute), // 11 mins
@ -326,7 +326,7 @@ func TestLightClientAttackEvidence_ForwardLunatic(t *testing.T) {
// to prove that there was an attack // to prove that there was an attack
vals := chainKeys[latestHeight].ToValidators(2, 0) vals := chainKeys[latestHeight].ToValidators(2, 0)
newLb := &types.LightBlock{ newLb := &types.LightBlock{
SignedHeader: chainKeys[latestHeight].GenSignedHeader(
SignedHeader: chainKeys[latestHeight].GenSignedHeader(t,
chainID, chainID,
proofHeight, proofHeight,
bTime.Add(time.Duration(proofHeight+1)*time.Minute), // 12 mins bTime.Add(time.Duration(proofHeight+1)*time.Minute), // 12 mins
@ -395,11 +395,11 @@ func TestClientDivergentTraces1(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
headers, vals, _ := genLightBlocksWithKeys(chainID, 1, 5, 2, bTime)
headers, vals, _ := genLightBlocksWithKeys(t, chainID, 1, 5, 2, bTime)
mockPrimary := mockNodeFromHeadersAndVals(headers, vals) mockPrimary := mockNodeFromHeadersAndVals(headers, vals)
firstBlock, err := mockPrimary.LightBlock(ctx, 1) firstBlock, err := mockPrimary.LightBlock(ctx, 1)
require.NoError(t, err) require.NoError(t, err)
headers, vals, _ = genLightBlocksWithKeys(chainID, 1, 5, 2, bTime)
headers, vals, _ = genLightBlocksWithKeys(t, chainID, 1, 5, 2, bTime)
mockWitness := mockNodeFromHeadersAndVals(headers, vals) mockWitness := mockNodeFromHeadersAndVals(headers, vals)
logger := log.NewTestingLogger(t) logger := log.NewTestingLogger(t)
@ -430,7 +430,7 @@ func TestClientDivergentTraces2(t *testing.T) {
defer cancel() defer cancel()
logger := log.NewTestingLogger(t) logger := log.NewTestingLogger(t)
headers, vals, _ := genLightBlocksWithKeys(chainID, 2, 5, 2, bTime)
headers, vals, _ := genLightBlocksWithKeys(t, chainID, 2, 5, 2, bTime)
mockPrimaryNode := mockNodeFromHeadersAndVals(headers, vals) mockPrimaryNode := mockNodeFromHeadersAndVals(headers, vals)
mockDeadNode := &provider_mocks.Provider{} mockDeadNode := &provider_mocks.Provider{}
mockDeadNode.On("LightBlock", mock.Anything, mock.Anything).Return(nil, provider.ErrNoResponse) mockDeadNode.On("LightBlock", mock.Anything, mock.Anything).Return(nil, provider.ErrNoResponse)
@ -465,7 +465,7 @@ func TestClientDivergentTraces3(t *testing.T) {
logger := log.NewTestingLogger(t) logger := log.NewTestingLogger(t)
// //
primaryHeaders, primaryVals, _ := genLightBlocksWithKeys(chainID, 2, 5, 2, bTime)
primaryHeaders, primaryVals, _ := genLightBlocksWithKeys(t, chainID, 2, 5, 2, bTime)
mockPrimary := mockNodeFromHeadersAndVals(primaryHeaders, primaryVals) mockPrimary := mockNodeFromHeadersAndVals(primaryHeaders, primaryVals)
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
@ -474,7 +474,7 @@ func TestClientDivergentTraces3(t *testing.T) {
firstBlock, err := mockPrimary.LightBlock(ctx, 1) firstBlock, err := mockPrimary.LightBlock(ctx, 1)
require.NoError(t, err) require.NoError(t, err)
mockHeaders, mockVals, _ := genLightBlocksWithKeys(chainID, 2, 5, 2, bTime)
mockHeaders, mockVals, _ := genLightBlocksWithKeys(t, chainID, 2, 5, 2, bTime)
mockHeaders[1] = primaryHeaders[1] mockHeaders[1] = primaryHeaders[1]
mockVals[1] = primaryVals[1] mockVals[1] = primaryVals[1]
mockWitness := mockNodeFromHeadersAndVals(mockHeaders, mockVals) mockWitness := mockNodeFromHeadersAndVals(mockHeaders, mockVals)
@ -508,7 +508,7 @@ func TestClientDivergentTraces4(t *testing.T) {
logger := log.NewTestingLogger(t) logger := log.NewTestingLogger(t)
// //
primaryHeaders, primaryVals, _ := genLightBlocksWithKeys(chainID, 2, 5, 2, bTime)
primaryHeaders, primaryVals, _ := genLightBlocksWithKeys(t, chainID, 2, 5, 2, bTime)
mockPrimary := mockNodeFromHeadersAndVals(primaryHeaders, primaryVals) mockPrimary := mockNodeFromHeadersAndVals(primaryHeaders, primaryVals)
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
@ -517,7 +517,7 @@ func TestClientDivergentTraces4(t *testing.T) {
firstBlock, err := mockPrimary.LightBlock(ctx, 1) firstBlock, err := mockPrimary.LightBlock(ctx, 1)
require.NoError(t, err) require.NoError(t, err)
witnessHeaders, witnessVals, _ := genLightBlocksWithKeys(chainID, 2, 5, 2, bTime)
witnessHeaders, witnessVals, _ := genLightBlocksWithKeys(t, chainID, 2, 5, 2, bTime)
primaryHeaders[2] = witnessHeaders[2] primaryHeaders[2] = witnessHeaders[2]
primaryVals[2] = witnessVals[2] primaryVals[2] = witnessVals[2]
mockWitness := mockNodeFromHeadersAndVals(primaryHeaders, primaryVals) mockWitness := mockNodeFromHeadersAndVals(primaryHeaders, primaryVals)


+ 23
- 17
light/helpers_test.go View File

@ -1,9 +1,11 @@
package light_test package light_test
import ( import (
"testing"
"time" "time"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto"
"github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/ed25519"
"github.com/tendermint/tendermint/crypto/tmhash" "github.com/tendermint/tendermint/crypto/tmhash"
@ -74,7 +76,9 @@ func (pkz privKeys) ToValidators(init, inc int64) *types.ValidatorSet {
} }
// signHeader properly signs the header with all keys from first to last exclusive. // signHeader properly signs the header with all keys from first to last exclusive.
func (pkz privKeys) signHeader(header *types.Header, valSet *types.ValidatorSet, first, last int) *types.Commit {
func (pkz privKeys) signHeader(t testing.TB, header *types.Header, valSet *types.ValidatorSet, first, last int) *types.Commit {
t.Helper()
commitSigs := make([]types.CommitSig, len(pkz)) commitSigs := make([]types.CommitSig, len(pkz))
for i := 0; i < len(pkz); i++ { for i := 0; i < len(pkz); i++ {
commitSigs[i] = types.NewCommitSigAbsent() commitSigs[i] = types.NewCommitSigAbsent()
@ -87,15 +91,15 @@ func (pkz privKeys) signHeader(header *types.Header, valSet *types.ValidatorSet,
// Fill in the votes we want. // Fill in the votes we want.
for i := first; i < last && i < len(pkz); i++ { for i := first; i < last && i < len(pkz); i++ {
vote := makeVote(header, valSet, pkz[i], blockID)
vote := makeVote(t, header, valSet, pkz[i], blockID)
commitSigs[vote.ValidatorIndex] = vote.CommitSig() commitSigs[vote.ValidatorIndex] = vote.CommitSig()
} }
return types.NewCommit(header.Height, 1, blockID, commitSigs) return types.NewCommit(header.Height, 1, blockID, commitSigs)
} }
func makeVote(header *types.Header, valset *types.ValidatorSet,
key crypto.PrivKey, blockID types.BlockID) *types.Vote {
func makeVote(t testing.TB, header *types.Header, valset *types.ValidatorSet, key crypto.PrivKey, blockID types.BlockID) *types.Vote {
t.Helper()
addr := key.PubKey().Address() addr := key.PubKey().Address()
idx, _ := valset.GetByAddress(addr) idx, _ := valset.GetByAddress(addr)
@ -113,9 +117,7 @@ func makeVote(header *types.Header, valset *types.ValidatorSet,
// Sign it // Sign it
signBytes := types.VoteSignBytes(header.ChainID, v) signBytes := types.VoteSignBytes(header.ChainID, v)
sig, err := key.Sign(signBytes) sig, err := key.Sign(signBytes)
if err != nil {
panic(err)
}
require.NoError(t, err)
vote.Signature = sig vote.Signature = sig
@ -143,26 +145,30 @@ func genHeader(chainID string, height int64, bTime time.Time, txs types.Txs,
} }
// GenSignedHeader calls genHeader and signHeader and combines them into a SignedHeader. // GenSignedHeader calls genHeader and signHeader and combines them into a SignedHeader.
func (pkz privKeys) GenSignedHeader(chainID string, height int64, bTime time.Time, txs types.Txs,
func (pkz privKeys) GenSignedHeader(t testing.TB, chainID string, height int64, bTime time.Time, txs types.Txs,
valset, nextValset *types.ValidatorSet, appHash, consHash, resHash []byte, first, last int) *types.SignedHeader { valset, nextValset *types.ValidatorSet, appHash, consHash, resHash []byte, first, last int) *types.SignedHeader {
t.Helper()
header := genHeader(chainID, height, bTime, txs, valset, nextValset, appHash, consHash, resHash) header := genHeader(chainID, height, bTime, txs, valset, nextValset, appHash, consHash, resHash)
return &types.SignedHeader{ return &types.SignedHeader{
Header: header, Header: header,
Commit: pkz.signHeader(header, valset, first, last),
Commit: pkz.signHeader(t, header, valset, first, last),
} }
} }
// GenSignedHeaderLastBlockID calls genHeader and signHeader and combines them into a SignedHeader. // GenSignedHeaderLastBlockID calls genHeader and signHeader and combines them into a SignedHeader.
func (pkz privKeys) GenSignedHeaderLastBlockID(chainID string, height int64, bTime time.Time, txs types.Txs,
func (pkz privKeys) GenSignedHeaderLastBlockID(t testing.TB, chainID string, height int64, bTime time.Time, txs types.Txs,
valset, nextValset *types.ValidatorSet, appHash, consHash, resHash []byte, first, last int, valset, nextValset *types.ValidatorSet, appHash, consHash, resHash []byte, first, last int,
lastBlockID types.BlockID) *types.SignedHeader { lastBlockID types.BlockID) *types.SignedHeader {
t.Helper()
header := genHeader(chainID, height, bTime, txs, valset, nextValset, appHash, consHash, resHash) header := genHeader(chainID, height, bTime, txs, valset, nextValset, appHash, consHash, resHash)
header.LastBlockID = lastBlockID header.LastBlockID = lastBlockID
return &types.SignedHeader{ return &types.SignedHeader{
Header: header, Header: header,
Commit: pkz.signHeader(header, valset, first, last),
Commit: pkz.signHeader(t, header, valset, first, last),
} }
} }
@ -175,14 +181,14 @@ func (pkz privKeys) ChangeKeys(delta int) privKeys {
// blocks to height. BlockIntervals are in per minute. // blocks to height. BlockIntervals are in per minute.
// NOTE: Expected to have a large validator set size ~ 100 validators. // NOTE: Expected to have a large validator set size ~ 100 validators.
func genLightBlocksWithKeys( func genLightBlocksWithKeys(
t testing.TB,
chainID string, chainID string,
numBlocks int64, numBlocks int64,
valSize int, valSize int,
valVariation float32, valVariation float32,
bTime time.Time) (
map[int64]*types.SignedHeader,
map[int64]*types.ValidatorSet,
map[int64]privKeys) {
bTime time.Time,
) (map[int64]*types.SignedHeader, map[int64]*types.ValidatorSet, map[int64]privKeys) {
t.Helper()
var ( var (
headers = make(map[int64]*types.SignedHeader, numBlocks) headers = make(map[int64]*types.SignedHeader, numBlocks)
@ -201,7 +207,7 @@ func genLightBlocksWithKeys(
keymap[2] = newKeys keymap[2] = newKeys
// genesis header and vals // genesis header and vals
lastHeader := keys.GenSignedHeader(chainID, 1, bTime.Add(1*time.Minute), nil,
lastHeader := keys.GenSignedHeader(t, chainID, 1, bTime.Add(1*time.Minute), nil,
keys.ToValidators(2, 0), newKeys.ToValidators(2, 0), hash("app_hash"), hash("cons_hash"), keys.ToValidators(2, 0), newKeys.ToValidators(2, 0), hash("app_hash"), hash("cons_hash"),
hash("results_hash"), 0, len(keys)) hash("results_hash"), 0, len(keys))
currentHeader := lastHeader currentHeader := lastHeader
@ -214,7 +220,7 @@ func genLightBlocksWithKeys(
valVariationInt = int(totalVariation) valVariationInt = int(totalVariation)
totalVariation = -float32(valVariationInt) totalVariation = -float32(valVariationInt)
newKeys = keys.ChangeKeys(valVariationInt) newKeys = keys.ChangeKeys(valVariationInt)
currentHeader = keys.GenSignedHeaderLastBlockID(chainID, height, bTime.Add(time.Duration(height)*time.Minute),
currentHeader = keys.GenSignedHeaderLastBlockID(t, chainID, height, bTime.Add(time.Duration(height)*time.Minute),
nil, nil,
keys.ToValidators(2, 0), newKeys.ToValidators(2, 0), hash("app_hash"), hash("cons_hash"), keys.ToValidators(2, 0), newKeys.ToValidators(2, 0), hash("app_hash"), hash("cons_hash"),
hash("results_hash"), 0, len(keys), types.BlockID{Hash: lastHeader.Hash()}) hash("results_hash"), 0, len(keys), types.BlockID{Hash: lastHeader.Hash()})


+ 19
- 19
light/verifier_test.go View File

@ -28,7 +28,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
// 20, 30, 40, 50 - the first 3 don't have 2/3, the last 3 do! // 20, 30, 40, 50 - the first 3 don't have 2/3, the last 3 do!
vals = keys.ToValidators(20, 10) vals = keys.ToValidators(20, 10)
bTime, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z") bTime, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
header = keys.GenSignedHeader(chainID, lastHeight, bTime, nil, vals, vals,
header = keys.GenSignedHeader(t, chainID, lastHeight, bTime, nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)) hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys))
) )
@ -51,7 +51,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// different chainID -> error // different chainID -> error
1: { 1: {
keys.GenSignedHeader("different-chainID", nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, "different-chainID", nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
vals, vals,
3 * time.Hour, 3 * time.Hour,
@ -61,7 +61,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// new header's time is before old header's time -> error // new header's time is before old header's time -> error
2: { 2: {
keys.GenSignedHeader(chainID, nextHeight, bTime.Add(-1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, nextHeight, bTime.Add(-1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
vals, vals,
4 * time.Hour, 4 * time.Hour,
@ -71,7 +71,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// new header's time is from the future -> error // new header's time is from the future -> error
3: { 3: {
keys.GenSignedHeader(chainID, nextHeight, bTime.Add(3*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, nextHeight, bTime.Add(3*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
vals, vals,
3 * time.Hour, 3 * time.Hour,
@ -81,7 +81,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// new header's time is from the future, but it's acceptable (< maxClockDrift) -> no error // new header's time is from the future, but it's acceptable (< maxClockDrift) -> no error
4: { 4: {
keys.GenSignedHeader(chainID, nextHeight,
keys.GenSignedHeader(t, chainID, nextHeight,
bTime.Add(2*time.Hour).Add(maxClockDrift).Add(-1*time.Millisecond), nil, vals, vals, bTime.Add(2*time.Hour).Add(maxClockDrift).Add(-1*time.Millisecond), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
vals, vals,
@ -92,7 +92,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// 3/3 signed -> no error // 3/3 signed -> no error
5: { 5: {
keys.GenSignedHeader(chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
vals, vals,
3 * time.Hour, 3 * time.Hour,
@ -102,7 +102,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// 2/3 signed -> no error // 2/3 signed -> no error
6: { 6: {
keys.GenSignedHeader(chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 1, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 1, len(keys)),
vals, vals,
3 * time.Hour, 3 * time.Hour,
@ -112,7 +112,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// 1/3 signed -> error // 1/3 signed -> error
7: { 7: {
keys.GenSignedHeader(chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), len(keys)-1, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), len(keys)-1, len(keys)),
vals, vals,
3 * time.Hour, 3 * time.Hour,
@ -122,7 +122,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// vals does not match with what we have -> error // vals does not match with what we have -> error
8: { 8: {
keys.GenSignedHeader(chainID, nextHeight, bTime.Add(1*time.Hour), nil, keys.ToValidators(10, 1), vals,
keys.GenSignedHeader(t, chainID, nextHeight, bTime.Add(1*time.Hour), nil, keys.ToValidators(10, 1), vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
keys.ToValidators(10, 1), keys.ToValidators(10, 1),
3 * time.Hour, 3 * time.Hour,
@ -132,7 +132,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// vals are inconsistent with newHeader -> error // vals are inconsistent with newHeader -> error
9: { 9: {
keys.GenSignedHeader(chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
keys.ToValidators(10, 1), keys.ToValidators(10, 1),
3 * time.Hour, 3 * time.Hour,
@ -142,7 +142,7 @@ func TestVerifyAdjacentHeaders(t *testing.T) {
}, },
// old header has expired -> error // old header has expired -> error
10: { 10: {
keys.GenSignedHeader(chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, nextHeight, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
keys.ToValidators(10, 1), keys.ToValidators(10, 1),
1 * time.Hour, 1 * time.Hour,
@ -180,7 +180,7 @@ func TestVerifyNonAdjacentHeaders(t *testing.T) {
// 20, 30, 40, 50 - the first 3 don't have 2/3, the last 3 do! // 20, 30, 40, 50 - the first 3 don't have 2/3, the last 3 do!
vals = keys.ToValidators(20, 10) vals = keys.ToValidators(20, 10)
bTime, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z") bTime, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
header = keys.GenSignedHeader(chainID, lastHeight, bTime, nil, vals, vals,
header = keys.GenSignedHeader(t, chainID, lastHeight, bTime, nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)) hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys))
// 30, 40, 50 // 30, 40, 50
@ -206,7 +206,7 @@ func TestVerifyNonAdjacentHeaders(t *testing.T) {
}{ }{
// 3/3 new vals signed, 3/3 old vals present -> no error // 3/3 new vals signed, 3/3 old vals present -> no error
0: { 0: {
keys.GenSignedHeader(chainID, 3, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, 3, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)),
vals, vals,
3 * time.Hour, 3 * time.Hour,
@ -216,7 +216,7 @@ func TestVerifyNonAdjacentHeaders(t *testing.T) {
}, },
// 2/3 new vals signed, 3/3 old vals present -> no error // 2/3 new vals signed, 3/3 old vals present -> no error
1: { 1: {
keys.GenSignedHeader(chainID, 4, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, 4, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 1, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 1, len(keys)),
vals, vals,
3 * time.Hour, 3 * time.Hour,
@ -226,7 +226,7 @@ func TestVerifyNonAdjacentHeaders(t *testing.T) {
}, },
// 1/3 new vals signed, 3/3 old vals present -> error // 1/3 new vals signed, 3/3 old vals present -> error
2: { 2: {
keys.GenSignedHeader(chainID, 5, bTime.Add(1*time.Hour), nil, vals, vals,
keys.GenSignedHeader(t, chainID, 5, bTime.Add(1*time.Hour), nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), len(keys)-1, len(keys)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), len(keys)-1, len(keys)),
vals, vals,
3 * time.Hour, 3 * time.Hour,
@ -236,7 +236,7 @@ func TestVerifyNonAdjacentHeaders(t *testing.T) {
}, },
// 3/3 new vals signed, 2/3 old vals present -> no error // 3/3 new vals signed, 2/3 old vals present -> no error
3: { 3: {
twoThirds.GenSignedHeader(chainID, 5, bTime.Add(1*time.Hour), nil, twoThirdsVals, twoThirdsVals,
twoThirds.GenSignedHeader(t, chainID, 5, bTime.Add(1*time.Hour), nil, twoThirdsVals, twoThirdsVals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(twoThirds)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(twoThirds)),
twoThirdsVals, twoThirdsVals,
3 * time.Hour, 3 * time.Hour,
@ -246,7 +246,7 @@ func TestVerifyNonAdjacentHeaders(t *testing.T) {
}, },
// 3/3 new vals signed, 1/3 old vals present -> no error // 3/3 new vals signed, 1/3 old vals present -> no error
4: { 4: {
oneThird.GenSignedHeader(chainID, 5, bTime.Add(1*time.Hour), nil, oneThirdVals, oneThirdVals,
oneThird.GenSignedHeader(t, chainID, 5, bTime.Add(1*time.Hour), nil, oneThirdVals, oneThirdVals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(oneThird)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(oneThird)),
oneThirdVals, oneThirdVals,
3 * time.Hour, 3 * time.Hour,
@ -256,7 +256,7 @@ func TestVerifyNonAdjacentHeaders(t *testing.T) {
}, },
// 3/3 new vals signed, less than 1/3 old vals present -> error // 3/3 new vals signed, less than 1/3 old vals present -> error
5: { 5: {
lessThanOneThird.GenSignedHeader(chainID, 5, bTime.Add(1*time.Hour), nil, lessThanOneThirdVals, lessThanOneThirdVals,
lessThanOneThird.GenSignedHeader(t, chainID, 5, bTime.Add(1*time.Hour), nil, lessThanOneThirdVals, lessThanOneThirdVals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(lessThanOneThird)), hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(lessThanOneThird)),
lessThanOneThirdVals, lessThanOneThirdVals,
3 * time.Hour, 3 * time.Hour,
@ -296,7 +296,7 @@ func TestVerifyReturnsErrorIfTrustLevelIsInvalid(t *testing.T) {
// 20, 30, 40, 50 - the first 3 don't have 2/3, the last 3 do! // 20, 30, 40, 50 - the first 3 don't have 2/3, the last 3 do!
vals = keys.ToValidators(20, 10) vals = keys.ToValidators(20, 10)
bTime, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z") bTime, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
header = keys.GenSignedHeader(chainID, lastHeight, bTime, nil, vals, vals,
header = keys.GenSignedHeader(t, chainID, lastHeight, bTime, nil, vals, vals,
hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)) hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys))
) )


Loading…
Cancel
Save