github.com/ava-labs/avalanchego@v1.11.11/subnets/subnet_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 subnets
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/ava-labs/avalanchego/ids"
    12  	"github.com/ava-labs/avalanchego/utils/set"
    13  )
    14  
    15  func TestSubnet(t *testing.T) {
    16  	require := require.New(t)
    17  
    18  	myNodeID := ids.GenerateTestNodeID()
    19  	chainID0 := ids.GenerateTestID()
    20  	chainID1 := ids.GenerateTestID()
    21  	chainID2 := ids.GenerateTestID()
    22  
    23  	s := New(myNodeID, Config{})
    24  	s.AddChain(chainID0)
    25  	require.False(s.IsBootstrapped(), "A subnet with one chain in bootstrapping shouldn't be considered bootstrapped")
    26  
    27  	s.Bootstrapped(chainID0)
    28  	require.True(s.IsBootstrapped(), "A subnet with only bootstrapped chains should be considered bootstrapped")
    29  
    30  	s.AddChain(chainID1)
    31  	require.False(s.IsBootstrapped(), "A subnet with one chain in bootstrapping shouldn't be considered bootstrapped")
    32  
    33  	s.AddChain(chainID2)
    34  	require.False(s.IsBootstrapped(), "A subnet with one chain in bootstrapping shouldn't be considered bootstrapped")
    35  
    36  	s.Bootstrapped(chainID1)
    37  	require.False(s.IsBootstrapped(), "A subnet with one chain in bootstrapping shouldn't be considered bootstrapped")
    38  
    39  	s.Bootstrapped(chainID2)
    40  	require.True(s.IsBootstrapped(), "A subnet with only bootstrapped chains should be considered bootstrapped")
    41  }
    42  
    43  func TestIsAllowed(t *testing.T) {
    44  	require := require.New(t)
    45  
    46  	myNodeID := ids.GenerateTestNodeID()
    47  	// Test with no rules
    48  	s := New(myNodeID, Config{})
    49  	require.True(s.IsAllowed(ids.GenerateTestNodeID(), true), "Validator should be allowed with no rules")
    50  	require.True(s.IsAllowed(ids.GenerateTestNodeID(), false), "Non-validator should be allowed with no rules")
    51  
    52  	// Test with validator only rules
    53  	s = New(myNodeID, Config{
    54  		ValidatorOnly: true,
    55  	})
    56  	require.True(s.IsAllowed(ids.GenerateTestNodeID(), true), "Validator should be allowed with validator only rules")
    57  	require.True(s.IsAllowed(myNodeID, false), "Self node should be allowed with validator only rules")
    58  	require.False(s.IsAllowed(ids.GenerateTestNodeID(), false), "Non-validator should not be allowed with validator only rules")
    59  
    60  	// Test with validator only rules and allowed nodes
    61  	allowedNodeID := ids.GenerateTestNodeID()
    62  	s = New(myNodeID, Config{
    63  		ValidatorOnly: true,
    64  		AllowedNodes:  set.Of(allowedNodeID),
    65  	})
    66  	require.True(s.IsAllowed(allowedNodeID, true), "Validator should be allowed with validator only rules and allowed nodes")
    67  	require.True(s.IsAllowed(myNodeID, false), "Self node should be allowed with validator only rules")
    68  	require.False(s.IsAllowed(ids.GenerateTestNodeID(), false), "Non-validator should not be allowed with validator only rules and allowed nodes")
    69  	require.True(s.IsAllowed(allowedNodeID, true), "Non-validator allowed node should be allowed with validator only rules and allowed nodes")
    70  }