github.com/ava-labs/avalanchego@v1.11.11/vms/proposervm/state/block_state_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 state
     5  
     6  import (
     7  	"crypto"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/prometheus/client_golang/prometheus"
    12  	"github.com/stretchr/testify/require"
    13  
    14  	"github.com/ava-labs/avalanchego/database"
    15  	"github.com/ava-labs/avalanchego/database/memdb"
    16  	"github.com/ava-labs/avalanchego/ids"
    17  	"github.com/ava-labs/avalanchego/staking"
    18  	"github.com/ava-labs/avalanchego/vms/proposervm/block"
    19  )
    20  
    21  func testBlockState(require *require.Assertions, bs BlockState) {
    22  	parentID := ids.ID{1}
    23  	timestamp := time.Unix(123, 0)
    24  	pChainHeight := uint64(2)
    25  	innerBlockBytes := []byte{3}
    26  	chainID := ids.ID{4}
    27  
    28  	tlsCert, err := staking.NewTLSCert()
    29  	require.NoError(err)
    30  
    31  	cert, err := staking.ParseCertificate(tlsCert.Leaf.Raw)
    32  	require.NoError(err)
    33  	key := tlsCert.PrivateKey.(crypto.Signer)
    34  
    35  	b, err := block.Build(
    36  		parentID,
    37  		timestamp,
    38  		pChainHeight,
    39  		cert,
    40  		innerBlockBytes,
    41  		chainID,
    42  		key,
    43  	)
    44  	require.NoError(err)
    45  
    46  	_, err = bs.GetBlock(b.ID())
    47  	require.Equal(database.ErrNotFound, err)
    48  
    49  	_, err = bs.GetBlock(b.ID())
    50  	require.Equal(database.ErrNotFound, err)
    51  
    52  	require.NoError(bs.PutBlock(b))
    53  
    54  	fetchedBlock, err := bs.GetBlock(b.ID())
    55  	require.NoError(err)
    56  	require.Equal(b.Bytes(), fetchedBlock.Bytes())
    57  
    58  	fetchedBlock, err = bs.GetBlock(b.ID())
    59  	require.NoError(err)
    60  	require.Equal(b.Bytes(), fetchedBlock.Bytes())
    61  }
    62  
    63  func TestBlockState(t *testing.T) {
    64  	a := require.New(t)
    65  
    66  	db := memdb.New()
    67  	bs := NewBlockState(db)
    68  
    69  	testBlockState(a, bs)
    70  }
    71  
    72  func TestMeteredBlockState(t *testing.T) {
    73  	a := require.New(t)
    74  
    75  	db := memdb.New()
    76  	bs, err := NewMeteredBlockState(db, "", prometheus.NewRegistry())
    77  	a.NoError(err)
    78  
    79  	testBlockState(a, bs)
    80  }