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  }