github.com/MetalBlockchain/metalgo@v1.11.9/vms/platformvm/config/execution_config_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 config
     5  
     6  import (
     7  	"encoding/json"
     8  	"reflect"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/stretchr/testify/require"
    13  
    14  	"github.com/MetalBlockchain/metalgo/vms/platformvm/network"
    15  )
    16  
    17  // Requires all values in a struct to be initialized
    18  func verifyInitializedStruct(tb testing.TB, s interface{}) {
    19  	tb.Helper()
    20  
    21  	require := require.New(tb)
    22  
    23  	structType := reflect.TypeOf(s)
    24  	require.Equal(reflect.Struct, structType.Kind())
    25  
    26  	v := reflect.ValueOf(s)
    27  	for i := 0; i < v.NumField(); i++ {
    28  		field := v.Field(i)
    29  		require.True(field.IsValid(), "invalid field: ", structType.Field(i).Name)
    30  		require.False(field.IsZero(), "zero field: ", structType.Field(i).Name)
    31  	}
    32  }
    33  
    34  func TestExecutionConfigUnmarshal(t *testing.T) {
    35  	t.Run("default values from empty json", func(t *testing.T) {
    36  		require := require.New(t)
    37  		b := []byte(`{}`)
    38  		ec, err := GetExecutionConfig(b)
    39  		require.NoError(err)
    40  		require.Equal(&DefaultExecutionConfig, ec)
    41  	})
    42  
    43  	t.Run("default values from empty bytes", func(t *testing.T) {
    44  		require := require.New(t)
    45  		b := []byte(``)
    46  		ec, err := GetExecutionConfig(b)
    47  		require.NoError(err)
    48  		require.Equal(&DefaultExecutionConfig, ec)
    49  	})
    50  
    51  	t.Run("mix default and extracted values from json", func(t *testing.T) {
    52  		require := require.New(t)
    53  		b := []byte(`{"block-cache-size":1}`)
    54  		ec, err := GetExecutionConfig(b)
    55  		require.NoError(err)
    56  		expected := DefaultExecutionConfig
    57  		expected.BlockCacheSize = 1
    58  		require.Equal(&expected, ec)
    59  	})
    60  
    61  	t.Run("all values extracted from json", func(t *testing.T) {
    62  		require := require.New(t)
    63  
    64  		expected := &ExecutionConfig{
    65  			Network: network.Config{
    66  				MaxValidatorSetStaleness:                    1,
    67  				TargetGossipSize:                            2,
    68  				PushGossipPercentStake:                      .3,
    69  				PushGossipNumValidators:                     4,
    70  				PushGossipNumPeers:                          5,
    71  				PushRegossipNumValidators:                   6,
    72  				PushRegossipNumPeers:                        7,
    73  				PushGossipDiscardedCacheSize:                8,
    74  				PushGossipMaxRegossipFrequency:              9,
    75  				PushGossipFrequency:                         10,
    76  				PullGossipPollSize:                          11,
    77  				PullGossipFrequency:                         12,
    78  				PullGossipThrottlingPeriod:                  13,
    79  				PullGossipThrottlingLimit:                   14,
    80  				ExpectedBloomFilterElements:                 15,
    81  				ExpectedBloomFilterFalsePositiveProbability: 16,
    82  				MaxBloomFilterFalsePositiveProbability:      17,
    83  			},
    84  			BlockCacheSize:               1,
    85  			TxCacheSize:                  2,
    86  			TransformedSubnetTxCacheSize: 3,
    87  			RewardUTXOsCacheSize:         5,
    88  			ChainCacheSize:               6,
    89  			ChainDBCacheSize:             7,
    90  			BlockIDCacheSize:             8,
    91  			FxOwnerCacheSize:             9,
    92  			ChecksumsEnabled:             true,
    93  			MempoolPruneFrequency:        time.Minute,
    94  		}
    95  		verifyInitializedStruct(t, *expected)
    96  		verifyInitializedStruct(t, expected.Network)
    97  
    98  		b, err := json.Marshal(expected)
    99  		require.NoError(err)
   100  
   101  		actual, err := GetExecutionConfig(b)
   102  		require.NoError(err)
   103  		require.Equal(expected, actual)
   104  	})
   105  }