123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package ibftengine
- import (
- "bytes"
- "reflect"
- "testing"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/consensus/istanbul"
- istanbulcommon "github.com/ethereum/go-ethereum/consensus/istanbul/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
- func TestEngine(t *testing.T) {
- engine := NewEngine(nil, common.Address{}, nil)
- require.NotNil(t, engine, "Constructor")
- assert.Implements(t, new(istanbul.Engine), engine)
- }
- func TestPrepareExtra(t *testing.T) {
- validators := make([]common.Address, 4)
- validators[0] = common.BytesToAddress(hexutil.MustDecode("0x44add0ec310f115a0e603b2d7db9f067778eaf8a"))
- validators[1] = common.BytesToAddress(hexutil.MustDecode("0x294fc7e8f22b3bcdcf955dd7ff3ba2ed833f8212"))
- validators[2] = common.BytesToAddress(hexutil.MustDecode("0x6beaaed781d2d2ab6350f5c4566a2c6eaac407a6"))
- validators[3] = common.BytesToAddress(hexutil.MustDecode("0x8be76812f765c24641ec63dc2852b378aba2b440"))
- vanity := make([]byte, types.IstanbulExtraVanity)
- expectedResult := append(vanity, hexutil.MustDecode("0xf858f8549444add0ec310f115a0e603b2d7db9f067778eaf8a94294fc7e8f22b3bcdcf955dd7ff3ba2ed833f8212946beaaed781d2d2ab6350f5c4566a2c6eaac407a6948be76812f765c24641ec63dc2852b378aba2b44080c0")...)
- h := &types.Header{
- Extra: vanity,
- }
- payload, err := prepareExtra(h, validators)
- if err != nil {
- t.Errorf("error mismatch: have %v, want: nil", err)
- }
- if !reflect.DeepEqual(payload, expectedResult) {
- t.Errorf("payload mismatch: have %v, want %v", payload, expectedResult)
- }
- // append useless information to extra-data
- h.Extra = append(vanity, make([]byte, 15)...)
- payload, _ = prepareExtra(h, validators)
- if !reflect.DeepEqual(payload, expectedResult) {
- t.Errorf("payload mismatch: have %v, want %v", payload, expectedResult)
- }
- }
- func TestWriteSeal(t *testing.T) {
- vanity := bytes.Repeat([]byte{0x00}, types.IstanbulExtraVanity)
- istRawData := hexutil.MustDecode("0xf858f8549444add0ec310f115a0e603b2d7db9f067778eaf8a94294fc7e8f22b3bcdcf955dd7ff3ba2ed833f8212946beaaed781d2d2ab6350f5c4566a2c6eaac407a6948be76812f765c24641ec63dc2852b378aba2b44080c0")
- expectedSeal := append([]byte{1, 2, 3}, bytes.Repeat([]byte{0x00}, types.IstanbulExtraSeal-3)...)
- expectedIstExtra := &types.IstanbulExtra{
- Validators: []common.Address{
- common.BytesToAddress(hexutil.MustDecode("0x44add0ec310f115a0e603b2d7db9f067778eaf8a")),
- common.BytesToAddress(hexutil.MustDecode("0x294fc7e8f22b3bcdcf955dd7ff3ba2ed833f8212")),
- common.BytesToAddress(hexutil.MustDecode("0x6beaaed781d2d2ab6350f5c4566a2c6eaac407a6")),
- common.BytesToAddress(hexutil.MustDecode("0x8be76812f765c24641ec63dc2852b378aba2b440")),
- },
- Seal: expectedSeal,
- CommittedSeal: [][]byte{},
- }
- var expectedErr error
- h := &types.Header{
- Extra: append(vanity, istRawData...),
- }
- // normal case
- err := writeSeal(h, expectedSeal)
- if err != expectedErr {
- t.Errorf("error mismatch: have %v, want %v", err, expectedErr)
- }
- // verify istanbul extra-data
- istExtra, err := types.ExtractIstanbulExtra(h)
- if err != nil {
- t.Errorf("error mismatch: have %v, want nil", err)
- }
- if !reflect.DeepEqual(istExtra, expectedIstExtra) {
- t.Errorf("extra data mismatch: have %v, want %v", istExtra, expectedIstExtra)
- }
- // invalid seal
- unexpectedSeal := append(expectedSeal, make([]byte, 1)...)
- err = writeSeal(h, unexpectedSeal)
- if err != istanbulcommon.ErrInvalidSignature {
- t.Errorf("error mismatch: have %v, want %v", err, istanbulcommon.ErrInvalidSignature)
- }
- }
- func TestWriteCommittedSeals(t *testing.T) {
- vanity := bytes.Repeat([]byte{0x00}, types.IstanbulExtraVanity)
- istRawData := hexutil.MustDecode("0xf858f8549444add0ec310f115a0e603b2d7db9f067778eaf8a94294fc7e8f22b3bcdcf955dd7ff3ba2ed833f8212946beaaed781d2d2ab6350f5c4566a2c6eaac407a6948be76812f765c24641ec63dc2852b378aba2b44080c0")
- expectedCommittedSeal := append([]byte{1, 2, 3}, bytes.Repeat([]byte{0x00}, types.IstanbulExtraSeal-3)...)
- expectedIstExtra := &types.IstanbulExtra{
- Validators: []common.Address{
- common.BytesToAddress(hexutil.MustDecode("0x44add0ec310f115a0e603b2d7db9f067778eaf8a")),
- common.BytesToAddress(hexutil.MustDecode("0x294fc7e8f22b3bcdcf955dd7ff3ba2ed833f8212")),
- common.BytesToAddress(hexutil.MustDecode("0x6beaaed781d2d2ab6350f5c4566a2c6eaac407a6")),
- common.BytesToAddress(hexutil.MustDecode("0x8be76812f765c24641ec63dc2852b378aba2b440")),
- },
- Seal: []byte{},
- CommittedSeal: [][]byte{expectedCommittedSeal},
- }
- var expectedErr error
- h := &types.Header{
- Extra: append(vanity, istRawData...),
- }
- // normal case
- err := writeCommittedSeals(h, [][]byte{expectedCommittedSeal})
- if err != expectedErr {
- t.Errorf("error mismatch: have %v, want %v", err, expectedErr)
- }
- // verify istanbul extra-data
- istExtra, err := types.ExtractIstanbulExtra(h)
- if err != nil {
- t.Errorf("error mismatch: have %v, want nil", err)
- }
- if !reflect.DeepEqual(istExtra, expectedIstExtra) {
- t.Errorf("extra data mismatch: have %v, want %v", istExtra, expectedIstExtra)
- }
- // invalid seal
- unexpectedCommittedSeal := append(expectedCommittedSeal, make([]byte, 1)...)
- err = writeCommittedSeals(h, [][]byte{unexpectedCommittedSeal})
- if err != istanbulcommon.ErrInvalidCommittedSeals {
- t.Errorf("error mismatch: have %v, want %v", err, istanbulcommon.ErrInvalidCommittedSeals)
- }
- }
|