wormhole-explorer/parser/queue/converter_test.go

88 lines
4.7 KiB
Go

package queue
import (
"encoding/json"
"testing"
"time"
"github.com/stretchr/testify/assert"
sdk "github.com/wormhole-foundation/wormhole/sdk/vaa"
"go.uber.org/zap"
)
func TestNotificationEvent(t *testing.T) {
log := zap.NewExample()
converter := NewNotificationEvent(log)
msg := `{
"trackId":"chain-event-0xb437df51c6c9af58eff89e328f84d8bece25d718baf088899c9692782fe29c43-10012515",
"source":"blockchain-watcher",
"event":"log-message-published",
"timestamp":"2023-11-10T14:20:45.159Z",
"version":"1",
"data":{
"chainId":2,
"emitter":"0x706abc4e45d419950511e474c7b9ed348a4a716c",
"txHash":"0xb437df51c6c9af58eff89e328f84d8bece25d718baf088899c9692782fe29c43",
"blockHeight":"10012515",
"blockTime":"2023-11-09T09:06:24.000Z",
"attributes":{
"sender":"0xe9d87dD072B0bcE6aA9335d590cfB0342870d7B0",
"sequence":1,
"payload":"0x7b226e65766572223a7b22676f6e6e61223a7b2267697665223a7b22796f75223a227570227d7d7d7d",
"nonce":1699520760,
"consistencyLevel":200
}
}
}`
event, err := converter(msg)
assert.NoError(t, err)
assert.NotNil(t, event)
assert.Equal(t, "chain-event-0xb437df51c6c9af58eff89e328f84d8bece25d718baf088899c9692782fe29c43-10012515", event.TrackID)
assert.Equal(t, "2/000000000000000000000000e9d87dd072b0bce6aa9335d590cfb0342870d7b0/1", event.ID)
assert.Equal(t, uint16(2), event.ChainID)
assert.Equal(t, "0xe9d87dD072B0bcE6aA9335d590cfB0342870d7B0", event.EmitterAddress)
vaa, err := sdk.Unmarshal(event.Vaa)
assert.NoError(t, err)
assert.NotNil(t, vaa)
expectedPayload := []byte{123, 34, 110, 101, 118, 101, 114, 34, 58, 123, 34, 103, 111, 110, 110, 97, 34, 58, 123, 34, 103, 105, 118, 101, 34, 58, 123, 34, 121, 111, 117, 34, 58, 34, 117, 112, 34, 125, 125, 125, 125}
assert.Equal(t, expectedPayload, vaa.Payload)
}
func TestSqsEvent(t *testing.T) {
log := zap.NewExample()
converter := NewNotificationEvent(log)
msg := `
{
"Type" : "Notification",
"MessageId" : "14d855ca-ad78-59c5-b30e-0802e1362944",
"SequenceNumber" : "10000000000040190002",
"TopicArn" : "arn:aws:sns:us-east-2:581679387567:notification-chain-events-dev-testnet.fifo",
"Subject" : "blockchain-watcher",
"Message" : "{\"trackId\":\"chain-event-0xb6b7af602aa098fbd8c88da2c2e4a316eef22f0ee621c5ca7616992c3fd9d3fe-10012893\",\"source\":\"blockchain-watcher\",\"event\":\"log-message-published\",\"timestamp\":\"2023-11-10T15:19:42.320Z\",\"version\":\"1\",\"data\":{\"chainId\":2,\"emitter\":\"0x706abc4e45d419950511e474c7b9ed348a4a716c\",\"txHash\":\"0xb6b7af602aa098fbd8c88da2c2e4a316eef22f0ee621c5ca7616992c3fd9d3fe\",\"blockHeight\":\"10012893\",\"blockTime\":\"2023-11-09T10:41:24.000Z\",\"attributes\":{\"sender\":\"0x28D8F1Be96f97C1387e94A53e00eCcFb4E75175a\",\"sequence\":3418,\"payload\":\"0x010017000000000000000000000000b5b6bf4224f75762dae40c862dc899431ea1778300000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000654cb74d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000006a6fd66db0002000000000000000000000000e310c47fa3e3f011a6e3108e3c725cff4900199b00000000000000000000000090995dbd1aae85872451b50a569de947d34ac4ee000000000000000000000000d1463b4fe86166768d2ff51b1a928bebb5c9f375000000000000000000000000e310c47fa3e3f011a6e3108e3c725cff4900199b00\",\"nonce\":0,\"consistencyLevel\":200}}}",
"Timestamp" : "2023-11-10T15:19:42.548Z",
"UnsubscribeURL" : "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:581679387567:notification-chain-events-dev-testnet.fifo:2e1cc196-afd8-4efb-b9b3-27c38e688494"
}
`
// unmarshal body to sqsEvent from sns/sqs subscription
var sqsEvent sqsEvent
err := json.Unmarshal([]byte(msg), &sqsEvent)
assert.NoError(t, err)
event, err := converter(sqsEvent.Message)
assert.NoError(t, err)
assert.NotNil(t, event)
assert.Equal(t, "2/00000000000000000000000028d8f1be96f97c1387e94a53e00eccfb4e75175a/3418", event.ID)
assert.Equal(t, uint16(2), event.ChainID)
assert.Equal(t, "0x28D8F1Be96f97C1387e94A53e00eCcFb4E75175a", event.EmitterAddress)
assert.Equal(t, "0xb6b7af602aa098fbd8c88da2c2e4a316eef22f0ee621c5ca7616992c3fd9d3fe", event.TxHash)
vaa, err := sdk.Unmarshal(event.Vaa)
assert.NoError(t, err)
assert.NotNil(t, vaa)
expectedTimestamp, err := time.Parse(time.RFC3339, "2023-11-09T10:41:24.000Z")
assert.NoError(t, err)
assert.Equal(t, uint64(3418), vaa.Sequence)
assert.Equal(t, sdk.ChainIDEthereum, vaa.EmitterChain)
assert.Equal(t, expectedTimestamp.UTC(), vaa.Timestamp.UTC())
assert.Equal(t, uint8(200), vaa.ConsistencyLevel)
}