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  }