100 lines
2.7 KiB
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)
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|