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 }