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