wormhole/wormchain/x/wormhole/types/guardian_set_test.go

100 lines
2.7 KiB
Go

package types
import (
"crypto/ecdsa"
"crypto/rand"
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/stretchr/testify/assert"
)
func TestKeysAsAddresses(t *testing.T) {
privKey1, _ := ecdsa.GenerateKey(crypto.S256(), rand.Reader)
privKey2, _ := ecdsa.GenerateKey(crypto.S256(), rand.Reader)
addr1 := crypto.PubkeyToAddress(privKey1.PublicKey)
addr2 := crypto.PubkeyToAddress(privKey2.PublicKey)
addrsBytes := [][]byte{}
addrsBytes = append(addrsBytes, addr1.Bytes())
addrsBytes = append(addrsBytes, addr2.Bytes())
addrs := []common.Address{}
addrs = append(addrs, addr1)
addrs = append(addrs, addr2)
guardianSet := GuardianSet{
Index: 1,
Keys: addrsBytes,
ExpirationTime: 0,
}
assert.Equal(t, addrs, guardianSet.KeysAsAddresses())
}
func TestContainsKey(t *testing.T) {
privKey1, _ := ecdsa.GenerateKey(crypto.S256(), rand.Reader)
privKey2, _ := ecdsa.GenerateKey(crypto.S256(), rand.Reader)
privKey3, _ := ecdsa.GenerateKey(crypto.S256(), rand.Reader)
addr1 := crypto.PubkeyToAddress(privKey1.PublicKey)
addr2 := crypto.PubkeyToAddress(privKey2.PublicKey)
addr3 := crypto.PubkeyToAddress(privKey3.PublicKey)
addrsBytes := [][]byte{}
addrsBytes = append(addrsBytes, addr1.Bytes())
addrsBytes = append(addrsBytes, addr2.Bytes())
guardianSet := GuardianSet{
Index: 1,
Keys: addrsBytes,
ExpirationTime: 0,
}
assert.Equal(t, true, guardianSet.ContainsKey(addr1))
assert.Equal(t, true, guardianSet.ContainsKey(addr2))
assert.Equal(t, false, guardianSet.ContainsKey(addr3))
}
func TestValidateBasic(t *testing.T) {
privKey1, _ := ecdsa.GenerateKey(crypto.S256(), rand.Reader)
privKey2, _ := ecdsa.GenerateKey(crypto.S256(), rand.Reader)
addr1 := crypto.PubkeyToAddress(privKey1.PublicKey)
addr2 := crypto.PubkeyToAddress(privKey2.PublicKey)
addrsBytes := [][]byte{}
addrsBytes = append(addrsBytes, addr1.Bytes())
addrsBytes = append(addrsBytes, addr2.Bytes())
largeAddrsBytes := [][]byte{}
for i := 0; i < 256; i++ {
largeAddrsBytes = append(largeAddrsBytes, addr1.Bytes())
}
tests := []struct {
label string
gs GuardianSet
valid bool
willError bool
}{
{label: "ValidSet", gs: GuardianSet{Keys: addrsBytes, Index: 1, ExpirationTime: 0}, willError: false},
{label: "EmptySet", gs: GuardianSet{}, willError: true},
{label: "TooLargeSet", gs: GuardianSet{Keys: largeAddrsBytes, Index: 1, ExpirationTime: 0}, willError: true},
}
for _, tc := range tests {
t.Run(tc.label, func(t *testing.T) {
err := tc.gs.ValidateBasic()
if tc.willError {
assert.NotNil(t, err)
} else {
assert.Nil(t, err)
}
})
}
}