github.com/ava-labs/avalanchego@v1.11.11/vms/platformvm/state/statetest/state.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package statetest 5 6 import ( 7 "testing" 8 "time" 9 10 "github.com/prometheus/client_golang/prometheus" 11 "github.com/stretchr/testify/require" 12 13 "github.com/ava-labs/avalanchego/database" 14 "github.com/ava-labs/avalanchego/database/memdb" 15 "github.com/ava-labs/avalanchego/ids" 16 "github.com/ava-labs/avalanchego/snow" 17 "github.com/ava-labs/avalanchego/snow/validators" 18 "github.com/ava-labs/avalanchego/upgrade" 19 "github.com/ava-labs/avalanchego/upgrade/upgradetest" 20 "github.com/ava-labs/avalanchego/utils/constants" 21 "github.com/ava-labs/avalanchego/utils/logging" 22 "github.com/ava-labs/avalanchego/utils/units" 23 "github.com/ava-labs/avalanchego/vms/platformvm/config" 24 "github.com/ava-labs/avalanchego/vms/platformvm/genesis/genesistest" 25 "github.com/ava-labs/avalanchego/vms/platformvm/metrics" 26 "github.com/ava-labs/avalanchego/vms/platformvm/reward" 27 "github.com/ava-labs/avalanchego/vms/platformvm/state" 28 ) 29 30 var DefaultNodeID = ids.GenerateTestNodeID() 31 32 type Config struct { 33 DB database.Database 34 Genesis []byte 35 Registerer prometheus.Registerer 36 Validators validators.Manager 37 Upgrades upgrade.Config 38 ExecutionConfig config.ExecutionConfig 39 Context *snow.Context 40 Metrics metrics.Metrics 41 Rewards reward.Calculator 42 } 43 44 func New(t testing.TB, c Config) state.State { 45 if c.DB == nil { 46 c.DB = memdb.New() 47 } 48 if len(c.Genesis) == 0 { 49 c.Genesis = genesistest.NewBytes(t, genesistest.Config{}) 50 } 51 if c.Registerer == nil { 52 c.Registerer = prometheus.NewRegistry() 53 } 54 if c.Validators == nil { 55 c.Validators = validators.NewManager() 56 } 57 if c.Upgrades == (upgrade.Config{}) { 58 c.Upgrades = upgradetest.GetConfig(upgradetest.Latest) 59 } 60 if c.ExecutionConfig == (config.ExecutionConfig{}) { 61 c.ExecutionConfig = config.DefaultExecutionConfig 62 } 63 if c.Context == nil { 64 c.Context = &snow.Context{ 65 NetworkID: constants.UnitTestID, 66 NodeID: DefaultNodeID, 67 Log: logging.NoLog{}, 68 } 69 } 70 if c.Metrics == nil { 71 c.Metrics = metrics.Noop 72 } 73 if c.Rewards == nil { 74 c.Rewards = reward.NewCalculator(reward.Config{ 75 MaxConsumptionRate: .12 * reward.PercentDenominator, 76 MinConsumptionRate: .1 * reward.PercentDenominator, 77 MintingPeriod: 365 * 24 * time.Hour, 78 SupplyCap: 720 * units.MegaAvax, 79 }) 80 } 81 82 s, err := state.New( 83 c.DB, 84 c.Genesis, 85 c.Registerer, 86 c.Validators, 87 c.Upgrades, 88 &c.ExecutionConfig, 89 c.Context, 90 c.Metrics, 91 c.Rewards, 92 ) 93 require.NoError(t, err) 94 return s 95 }