github.com/MetalBlockchain/subnet-evm@v0.4.9/warp/backend_test.go (about) 1 // (c) 2023, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package warp 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/MetalBlockchain/metalgo/database/memdb" 11 "github.com/MetalBlockchain/metalgo/ids" 12 "github.com/MetalBlockchain/metalgo/snow" 13 "github.com/MetalBlockchain/metalgo/utils/crypto/bls" 14 "github.com/MetalBlockchain/metalgo/utils/hashing" 15 "github.com/MetalBlockchain/metalgo/vms/platformvm/teleporter" 16 "github.com/stretchr/testify/require" 17 ) 18 19 var ( 20 sourceChainID = ids.GenerateTestID() 21 destinationChainID = ids.GenerateTestID() 22 payload = []byte("test") 23 ) 24 25 func TestAddAndGetValidMessage(t *testing.T) { 26 db := memdb.New() 27 28 snowCtx := snow.DefaultContextTest() 29 sk, err := bls.NewSecretKey() 30 require.NoError(t, err) 31 snowCtx.TeleporterSigner = teleporter.NewSigner(sk, sourceChainID) 32 backend := NewWarpBackend(snowCtx, db, 500) 33 34 // Create a new unsigned message and add it to the warp backend. 35 unsignedMsg, err := teleporter.NewUnsignedMessage(sourceChainID, destinationChainID, payload) 36 require.NoError(t, err) 37 err = backend.AddMessage(context.Background(), unsignedMsg) 38 require.NoError(t, err) 39 40 // Verify that a signature is returned successfully, and compare to expected signature. 41 messageID := hashing.ComputeHash256Array(unsignedMsg.Bytes()) 42 signature, err := backend.GetSignature(context.Background(), messageID) 43 require.NoError(t, err) 44 45 expectedSig, err := snowCtx.TeleporterSigner.Sign(unsignedMsg) 46 require.NoError(t, err) 47 require.Equal(t, expectedSig, signature[:]) 48 } 49 50 func TestAddAndGetUnknownMessage(t *testing.T) { 51 db := memdb.New() 52 53 backend := NewWarpBackend(snow.DefaultContextTest(), db, 500) 54 unsignedMsg, err := teleporter.NewUnsignedMessage(sourceChainID, destinationChainID, payload) 55 require.NoError(t, err) 56 57 // Try getting a signature for a message that was not added. 58 messageID := hashing.ComputeHash256Array(unsignedMsg.Bytes()) 59 _, err = backend.GetSignature(context.Background(), messageID) 60 require.Error(t, err) 61 } 62 63 func TestZeroSizedCache(t *testing.T) { 64 db := memdb.New() 65 66 snowCtx := snow.DefaultContextTest() 67 sk, err := bls.NewSecretKey() 68 require.NoError(t, err) 69 snowCtx.TeleporterSigner = teleporter.NewSigner(sk, sourceChainID) 70 71 // Verify zero sized cache works normally, because the lru cache will be initialized to size 1 for any size parameter <= 0. 72 backend := NewWarpBackend(snowCtx, db, 0) 73 74 // Create a new unsigned message and add it to the warp backend. 75 unsignedMsg, err := teleporter.NewUnsignedMessage(sourceChainID, destinationChainID, payload) 76 require.NoError(t, err) 77 err = backend.AddMessage(context.Background(), unsignedMsg) 78 require.NoError(t, err) 79 80 // Verify that a signature is returned successfully, and compare to expected signature. 81 messageID := hashing.ComputeHash256Array(unsignedMsg.Bytes()) 82 signature, err := backend.GetSignature(context.Background(), messageID) 83 require.NoError(t, err) 84 85 expectedSig, err := snowCtx.TeleporterSigner.Sign(unsignedMsg) 86 require.NoError(t, err) 87 require.Equal(t, expectedSig, signature[:]) 88 }