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 }