github.com/ava-labs/avalanchego@v1.11.11/vms/avm/txs/mempool/mempool_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 mempool
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/prometheus/client_golang/prometheus"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/ava-labs/avalanchego/ids"
    13  	"github.com/ava-labs/avalanchego/snow/engine/common"
    14  	"github.com/ava-labs/avalanchego/utils"
    15  	"github.com/ava-labs/avalanchego/vms/avm/txs"
    16  	"github.com/ava-labs/avalanchego/vms/components/avax"
    17  )
    18  
    19  func newMempool(toEngine chan<- common.Message) (Mempool, error) {
    20  	return New("mempool", prometheus.NewRegistry(), toEngine)
    21  }
    22  
    23  func TestRequestBuildBlock(t *testing.T) {
    24  	require := require.New(t)
    25  
    26  	toEngine := make(chan common.Message, 1)
    27  	mempool, err := newMempool(toEngine)
    28  	require.NoError(err)
    29  
    30  	mempool.RequestBuildBlock()
    31  	select {
    32  	case <-toEngine:
    33  		require.FailNow("should not have sent message to engine")
    34  	default:
    35  	}
    36  
    37  	tx := newTx(0, 32)
    38  	require.NoError(mempool.Add(tx))
    39  
    40  	mempool.RequestBuildBlock()
    41  	mempool.RequestBuildBlock() // Must not deadlock
    42  	select {
    43  	case <-toEngine:
    44  	default:
    45  		require.FailNow("should have sent message to engine")
    46  	}
    47  	select {
    48  	case <-toEngine:
    49  		require.FailNow("should have only sent one message to engine")
    50  	default:
    51  	}
    52  }
    53  
    54  func newTx(index uint32, size int) *txs.Tx {
    55  	tx := &txs.Tx{Unsigned: &txs.BaseTx{BaseTx: avax.BaseTx{
    56  		Ins: []*avax.TransferableInput{{
    57  			UTXOID: avax.UTXOID{
    58  				TxID:        ids.ID{'t', 'x', 'I', 'D'},
    59  				OutputIndex: index,
    60  			},
    61  		}},
    62  	}}}
    63  	tx.SetBytes(utils.RandomBytes(size), utils.RandomBytes(size))
    64  	return tx
    65  }