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 }