mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
* Vulnerability in light client proxy When calling GetCertifiedCommit the light client proxy would call Certify and even on error return the Commit as if it had been correctly certified. Now it returns the error correctly and returns an empty Commit on error. * Improve names for clarity The lite package now contains StaticCertifier, DynamicCertifier and InqueringCertifier. This also changes the method receivers from one letter to two letter names, which will make future refactoring easier and follows the coding standards. * Fix test failures * Rename files * remove dead code
60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package lite_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/tendermint/tendermint/types"
|
|
|
|
"github.com/tendermint/tendermint/lite"
|
|
liteErr "github.com/tendermint/tendermint/lite/errors"
|
|
)
|
|
|
|
func TestStaticCert(t *testing.T) {
|
|
// assert, require := assert.New(t), require.New(t)
|
|
assert := assert.New(t)
|
|
// require := require.New(t)
|
|
|
|
keys := lite.GenValKeys(4)
|
|
// 20, 30, 40, 50 - the first 3 don't have 2/3, the last 3 do!
|
|
vals := keys.ToValidators(20, 10)
|
|
// and a certifier based on our known set
|
|
chainID := "test-static"
|
|
cert := lite.NewStaticCertifier(chainID, vals)
|
|
|
|
cases := []struct {
|
|
keys lite.ValKeys
|
|
vals *types.ValidatorSet
|
|
height int64
|
|
first, last int // who actually signs
|
|
proper bool // true -> expect no error
|
|
changed bool // true -> expect validator change error
|
|
}{
|
|
// perfect, signed by everyone
|
|
{keys, vals, 1, 0, len(keys), true, false},
|
|
// skip little guy is okay
|
|
{keys, vals, 2, 1, len(keys), true, false},
|
|
// but not the big guy
|
|
{keys, vals, 3, 0, len(keys) - 1, false, false},
|
|
// even changing the power a little bit breaks the static validator
|
|
// the sigs are enough, but the validator hash is unknown
|
|
{keys, keys.ToValidators(20, 11), 4, 0, len(keys), false, true},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
check := tc.keys.GenCommit(chainID, tc.height, nil, tc.vals,
|
|
[]byte("foo"), []byte("params"), []byte("results"), tc.first, tc.last)
|
|
err := cert.Certify(check)
|
|
if tc.proper {
|
|
assert.Nil(err, "%+v", err)
|
|
} else {
|
|
assert.NotNil(err)
|
|
if tc.changed {
|
|
assert.True(liteErr.IsValidatorsChangedErr(err), "%+v", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|