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 }