github.com/MetalBlockchain/metalgo@v1.11.9/vms/avm/network/gossip_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package network 5 6 import ( 7 "testing" 8 9 "github.com/prometheus/client_golang/prometheus" 10 "github.com/stretchr/testify/require" 11 12 "github.com/MetalBlockchain/metalgo/ids" 13 "github.com/MetalBlockchain/metalgo/snow/engine/common" 14 "github.com/MetalBlockchain/metalgo/utils/logging" 15 "github.com/MetalBlockchain/metalgo/vms/avm/fxs" 16 "github.com/MetalBlockchain/metalgo/vms/avm/txs" 17 "github.com/MetalBlockchain/metalgo/vms/avm/txs/mempool" 18 "github.com/MetalBlockchain/metalgo/vms/components/avax" 19 "github.com/MetalBlockchain/metalgo/vms/secp256k1fx" 20 ) 21 22 var _ TxVerifier = (*testVerifier)(nil) 23 24 type testVerifier struct { 25 err error 26 } 27 28 func (v testVerifier) VerifyTx(*txs.Tx) error { 29 return v.err 30 } 31 32 func TestMarshaller(t *testing.T) { 33 require := require.New(t) 34 35 parser, err := txs.NewParser( 36 []fxs.Fx{ 37 &secp256k1fx.Fx{}, 38 }, 39 ) 40 require.NoError(err) 41 42 marhsaller := txParser{ 43 parser: parser, 44 } 45 46 want := &txs.Tx{Unsigned: &txs.BaseTx{}} 47 require.NoError(want.Initialize(parser.Codec())) 48 49 bytes, err := marhsaller.MarshalGossip(want) 50 require.NoError(err) 51 52 got, err := marhsaller.UnmarshalGossip(bytes) 53 require.NoError(err) 54 require.Equal(want.GossipID(), got.GossipID()) 55 } 56 57 func TestGossipMempoolAdd(t *testing.T) { 58 require := require.New(t) 59 60 metrics := prometheus.NewRegistry() 61 toEngine := make(chan common.Message, 1) 62 63 baseMempool, err := mempool.New("", metrics, toEngine) 64 require.NoError(err) 65 66 parser, err := txs.NewParser(nil) 67 require.NoError(err) 68 69 mempool, err := newGossipMempool( 70 baseMempool, 71 metrics, 72 logging.NoLog{}, 73 testVerifier{}, 74 parser, 75 DefaultConfig.ExpectedBloomFilterElements, 76 DefaultConfig.ExpectedBloomFilterFalsePositiveProbability, 77 DefaultConfig.MaxBloomFilterFalsePositiveProbability, 78 ) 79 require.NoError(err) 80 81 tx := &txs.Tx{ 82 Unsigned: &txs.BaseTx{ 83 BaseTx: avax.BaseTx{ 84 Ins: []*avax.TransferableInput{}, 85 }, 86 }, 87 TxID: ids.GenerateTestID(), 88 } 89 90 require.NoError(mempool.Add(tx)) 91 require.True(mempool.bloom.Has(tx)) 92 } 93 94 func TestGossipMempoolAddVerified(t *testing.T) { 95 require := require.New(t) 96 97 metrics := prometheus.NewRegistry() 98 toEngine := make(chan common.Message, 1) 99 100 baseMempool, err := mempool.New("", metrics, toEngine) 101 require.NoError(err) 102 103 parser, err := txs.NewParser(nil) 104 require.NoError(err) 105 106 mempool, err := newGossipMempool( 107 baseMempool, 108 metrics, 109 logging.NoLog{}, 110 testVerifier{ 111 err: errTest, // We shouldn't be attempting to verify the tx in this flow 112 }, 113 parser, 114 DefaultConfig.ExpectedBloomFilterElements, 115 DefaultConfig.ExpectedBloomFilterFalsePositiveProbability, 116 DefaultConfig.MaxBloomFilterFalsePositiveProbability, 117 ) 118 require.NoError(err) 119 120 tx := &txs.Tx{ 121 Unsigned: &txs.BaseTx{ 122 BaseTx: avax.BaseTx{ 123 Ins: []*avax.TransferableInput{}, 124 }, 125 }, 126 TxID: ids.GenerateTestID(), 127 } 128 129 require.NoError(mempool.AddWithoutVerification(tx)) 130 require.True(mempool.bloom.Has(tx)) 131 }