173 lines
4.4 KiB
Go
173 lines
4.4 KiB
Go
package grpc
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
spyv1 "github.com/certusone/wormhole/node/pkg/proto/spy/v1"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/wormhole-foundation/wormhole/sdk/vaa"
|
|
"go.uber.org/zap/zaptest"
|
|
)
|
|
|
|
var emitterAddr = vaa.Address{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4}
|
|
|
|
func createVAA(chainID vaa.ChainID, emitterAddr vaa.Address) *vaa.VAA {
|
|
var payload = []byte{97, 97, 97, 97, 97, 97}
|
|
|
|
vaa := &vaa.VAA{
|
|
Version: vaa.SupportedVAAVersion,
|
|
GuardianSetIndex: uint32(1),
|
|
Signatures: nil,
|
|
Timestamp: time.Unix(0, 0),
|
|
Nonce: uint32(1),
|
|
Sequence: uint64(1),
|
|
ConsistencyLevel: uint8(32),
|
|
EmitterChain: chainID,
|
|
EmitterAddress: emitterAddr,
|
|
Payload: payload,
|
|
}
|
|
|
|
return vaa
|
|
}
|
|
|
|
func TestSignedVaaSubscribers_Register(t *testing.T) {
|
|
logger := zaptest.NewLogger(t)
|
|
var fi []filterSignedVaa
|
|
svs := NewSignedVaaSubscribers(logger)
|
|
sub := svs.Register(fi)
|
|
assert.NotNil(t, sub)
|
|
assert.NotEmpty(t, sub.id)
|
|
}
|
|
|
|
func TestSignedVaaSubscribers_Unregister(t *testing.T) {
|
|
logger := zaptest.NewLogger(t)
|
|
var fi []filterSignedVaa
|
|
svs := NewSignedVaaSubscribers(logger)
|
|
sub := svs.Register(fi)
|
|
assert.Equal(t, 1, len(svs.addSubscriber))
|
|
svs.Unregister(sub)
|
|
assert.Equal(t, 1, len(svs.removeSubscriber))
|
|
}
|
|
|
|
func TestSignedVaaSubscribers_HandleVAA(t *testing.T) {
|
|
|
|
t.Run("empty filters", func(t *testing.T) {
|
|
logger := zaptest.NewLogger(t)
|
|
var fi []filterSignedVaa
|
|
svs := NewSignedVaaSubscribers(logger)
|
|
svs.Register(fi)
|
|
|
|
vaas := []byte{0x0, 0x1, 0x2, 0x3}
|
|
err := svs.HandleVAA(vaas)
|
|
assert.Nil(t, err)
|
|
vaaBytes := <-svs.source
|
|
assert.Equal(t, vaas, vaaBytes)
|
|
})
|
|
|
|
t.Run("invalid vaa", func(t *testing.T) {
|
|
logger := zaptest.NewLogger(t)
|
|
fi := []filterSignedVaa{
|
|
{
|
|
chainId: 18,
|
|
emitterAddr: vaa.Address{0x0, 0x1},
|
|
},
|
|
}
|
|
svs := NewSignedVaaSubscribers(logger)
|
|
_ = svs.Register(fi)
|
|
|
|
vaas := []byte{0x0, 0x1, 0x2, 0x3}
|
|
err := svs.HandleVAA(vaas)
|
|
assert.Nil(t, err)
|
|
})
|
|
|
|
t.Run("filter doesn't apply", func(t *testing.T) {
|
|
logger := zaptest.NewLogger(t)
|
|
fi := []filterSignedVaa{
|
|
{
|
|
chainId: 18,
|
|
emitterAddr: vaa.Address{0x0, 0x1},
|
|
},
|
|
}
|
|
svs := NewSignedVaaSubscribers(logger)
|
|
sub := svs.Register(fi)
|
|
vaa := createVAA(vaa.ChainIDEthereum, emitterAddr)
|
|
vaaBytes, _ := vaa.MarshalBinary()
|
|
err := svs.HandleVAA(vaaBytes)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 0, len(sub.ch))
|
|
})
|
|
}
|
|
|
|
func TestAllVaaSubscribers_Register(t *testing.T) {
|
|
var fi []*spyv1.FilterEntry
|
|
logger := zaptest.NewLogger(t)
|
|
avs := NewAllVaaSubscribers(logger)
|
|
|
|
sub := avs.Register(fi)
|
|
assert.NotNil(t, sub)
|
|
assert.NotEmpty(t, sub.id)
|
|
}
|
|
|
|
func TestAllVaaSubscribers_Unregister(t *testing.T) {
|
|
var fi []*spyv1.FilterEntry
|
|
logger := zaptest.NewLogger(t)
|
|
avs := NewAllVaaSubscribers(logger)
|
|
|
|
sub := avs.Register(fi)
|
|
|
|
assert.Equal(t, 1, len(avs.addSubscriber))
|
|
avs.Unregister(sub)
|
|
assert.Equal(t, 1, len(avs.removeSubscriber))
|
|
}
|
|
|
|
func TestAllVaaSubscribers_HandleVAA(t *testing.T) {
|
|
|
|
t.Run("empty filters", func(t *testing.T) {
|
|
logger := zaptest.NewLogger(t)
|
|
avs := NewAllVaaSubscribers(logger)
|
|
|
|
emitterAddr := vaa.Address{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4}
|
|
vaa := createVAA(vaa.ChainIDEthereum, emitterAddr)
|
|
vaaBytes, _ := vaa.MarshalBinary()
|
|
err := avs.HandleVAA(vaaBytes)
|
|
assert.Nil(t, err)
|
|
msg := <-avs.source
|
|
assert.Equal(t, vaaBytes, msg)
|
|
})
|
|
|
|
t.Run("invalid vaa", func(t *testing.T) {
|
|
var fi []*spyv1.FilterEntry
|
|
logger := zaptest.NewLogger(t)
|
|
avs := NewAllVaaSubscribers(logger)
|
|
_ = avs.Register(fi)
|
|
|
|
vaas := []byte{0x0, 0x1, 0x2, 0x3}
|
|
err := avs.HandleVAA(vaas)
|
|
assert.Nil(t, err)
|
|
})
|
|
|
|
t.Run("filter doesn't apply", func(t *testing.T) {
|
|
fi := []*spyv1.FilterEntry{
|
|
{
|
|
Filter: &spyv1.FilterEntry_EmitterFilter{
|
|
EmitterFilter: &spyv1.EmitterFilter{
|
|
ChainId: 18,
|
|
EmitterAddress: vaa.Address{0x0, 0x1}.String(),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
logger := zaptest.NewLogger(t)
|
|
avs := NewAllVaaSubscribers(logger)
|
|
sub := avs.Register(fi)
|
|
emitterAddr := vaa.Address{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4}
|
|
vaa := createVAA(vaa.ChainIDEthereum, emitterAddr)
|
|
vaaBytes, _ := vaa.MarshalBinary()
|
|
err := avs.HandleVAA(vaaBytes)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 0, len(sub.ch))
|
|
})
|
|
|
|
}
|