github.com/MetalBlockchain/metalgo@v1.11.9/snow/snowtest/snowtest.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package snowtest 5 6 import ( 7 "context" 8 "errors" 9 "testing" 10 11 "github.com/prometheus/client_golang/prometheus" 12 "github.com/stretchr/testify/require" 13 14 "github.com/MetalBlockchain/metalgo/api/metrics" 15 "github.com/MetalBlockchain/metalgo/ids" 16 "github.com/MetalBlockchain/metalgo/snow" 17 "github.com/MetalBlockchain/metalgo/snow/validators" 18 "github.com/MetalBlockchain/metalgo/utils/constants" 19 "github.com/MetalBlockchain/metalgo/utils/crypto/bls" 20 "github.com/MetalBlockchain/metalgo/utils/logging" 21 ) 22 23 var ( 24 XChainID = ids.GenerateTestID() 25 CChainID = ids.GenerateTestID() 26 PChainID = constants.PlatformChainID 27 AVAXAssetID = ids.GenerateTestID() 28 29 errMissing = errors.New("missing") 30 31 _ snow.Acceptor = noOpAcceptor{} 32 ) 33 34 type noOpAcceptor struct{} 35 36 func (noOpAcceptor) Accept(*snow.ConsensusContext, ids.ID, []byte) error { 37 return nil 38 } 39 40 func ConsensusContext(ctx *snow.Context) *snow.ConsensusContext { 41 return &snow.ConsensusContext{ 42 Context: ctx, 43 PrimaryAlias: ctx.ChainID.String(), 44 Registerer: prometheus.NewRegistry(), 45 BlockAcceptor: noOpAcceptor{}, 46 TxAcceptor: noOpAcceptor{}, 47 VertexAcceptor: noOpAcceptor{}, 48 } 49 } 50 51 func Context(tb testing.TB, chainID ids.ID) *snow.Context { 52 require := require.New(tb) 53 54 secretKey, err := bls.NewSecretKey() 55 require.NoError(err) 56 publicKey := bls.PublicFromSecretKey(secretKey) 57 58 aliaser := ids.NewAliaser() 59 require.NoError(aliaser.Alias(constants.PlatformChainID, "P")) 60 require.NoError(aliaser.Alias(constants.PlatformChainID, constants.PlatformChainID.String())) 61 require.NoError(aliaser.Alias(XChainID, "X")) 62 require.NoError(aliaser.Alias(XChainID, XChainID.String())) 63 require.NoError(aliaser.Alias(CChainID, "C")) 64 require.NoError(aliaser.Alias(CChainID, CChainID.String())) 65 66 validatorState := &validators.TestState{ 67 GetSubnetIDF: func(_ context.Context, chainID ids.ID) (ids.ID, error) { 68 subnetID, ok := map[ids.ID]ids.ID{ 69 constants.PlatformChainID: constants.PrimaryNetworkID, 70 XChainID: constants.PrimaryNetworkID, 71 CChainID: constants.PrimaryNetworkID, 72 }[chainID] 73 if !ok { 74 return ids.Empty, errMissing 75 } 76 return subnetID, nil 77 }, 78 } 79 80 return &snow.Context{ 81 NetworkID: constants.UnitTestID, 82 SubnetID: constants.PrimaryNetworkID, 83 ChainID: chainID, 84 NodeID: ids.EmptyNodeID, 85 PublicKey: publicKey, 86 87 XChainID: XChainID, 88 CChainID: CChainID, 89 AVAXAssetID: AVAXAssetID, 90 91 Log: logging.NoLog{}, 92 BCLookup: aliaser, 93 Metrics: metrics.NewPrefixGatherer(), 94 95 ValidatorState: validatorState, 96 ChainDataDir: "", 97 } 98 }