github.com/okex/exchain@v1.8.0/libs/tendermint/config/config_test.go (about) 1 package config 2 3 import ( 4 "reflect" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestDefaultConfig(t *testing.T) { 12 assert := assert.New(t) 13 14 // set up some defaults 15 cfg := DefaultConfig() 16 assert.NotNil(cfg.P2P) 17 assert.NotNil(cfg.Mempool) 18 assert.NotNil(cfg.Consensus) 19 20 // check the root dir stuff... 21 cfg.SetRoot("/foo") 22 cfg.Genesis = "bar" 23 cfg.DBPath = "/opt/data" 24 25 assert.Equal("/foo/bar", cfg.GenesisFile()) 26 assert.Equal("/opt/data", cfg.DBDir()) 27 28 } 29 30 func TestConfigValidateBasic(t *testing.T) { 31 cfg := DefaultConfig() 32 assert.NoError(t, cfg.ValidateBasic()) 33 34 // tamper with timeout_propose 35 cfg.Consensus.TimeoutPropose = -10 * time.Second 36 assert.Error(t, cfg.ValidateBasic()) 37 } 38 39 func TestTLSConfiguration(t *testing.T) { 40 assert := assert.New(t) 41 cfg := DefaultConfig() 42 cfg.SetRoot("/home/user") 43 44 cfg.RPC.TLSCertFile = "file.crt" 45 assert.Equal("/home/user/config/file.crt", cfg.RPC.CertFile()) 46 cfg.RPC.TLSKeyFile = "file.key" 47 assert.Equal("/home/user/config/file.key", cfg.RPC.KeyFile()) 48 49 cfg.RPC.TLSCertFile = "/abs/path/to/file.crt" 50 assert.Equal("/abs/path/to/file.crt", cfg.RPC.CertFile()) 51 cfg.RPC.TLSKeyFile = "/abs/path/to/file.key" 52 assert.Equal("/abs/path/to/file.key", cfg.RPC.KeyFile()) 53 } 54 55 func TestBaseConfigValidateBasic(t *testing.T) { 56 cfg := TestBaseConfig() 57 assert.NoError(t, cfg.ValidateBasic()) 58 59 // tamper with log format 60 cfg.LogFormat = "invalid" 61 assert.Error(t, cfg.ValidateBasic()) 62 } 63 64 func TestRPCConfigValidateBasic(t *testing.T) { 65 cfg := TestRPCConfig() 66 assert.NoError(t, cfg.ValidateBasic()) 67 68 fieldsToTest := []string{ 69 "GRPCMaxOpenConnections", 70 "MaxOpenConnections", 71 "MaxSubscriptionClients", 72 "MaxSubscriptionsPerClient", 73 "TimeoutBroadcastTxCommit", 74 "MaxBodyBytes", 75 "MaxHeaderBytes", 76 } 77 78 for _, fieldName := range fieldsToTest { 79 reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1) 80 assert.Error(t, cfg.ValidateBasic()) 81 reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0) 82 } 83 } 84 85 func TestP2PConfigValidateBasic(t *testing.T) { 86 cfg := TestP2PConfig() 87 assert.NoError(t, cfg.ValidateBasic()) 88 89 fieldsToTest := []string{ 90 "MaxNumInboundPeers", 91 "MaxNumOutboundPeers", 92 "FlushThrottleTimeout", 93 "MaxPacketMsgPayloadSize", 94 "SendRate", 95 "RecvRate", 96 } 97 98 for _, fieldName := range fieldsToTest { 99 reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1) 100 assert.Error(t, cfg.ValidateBasic()) 101 reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0) 102 } 103 } 104 105 func TestMempoolConfigValidateBasic(t *testing.T) { 106 cfg := TestMempoolConfig() 107 assert.NoError(t, cfg.ValidateBasic()) 108 109 fieldsToTest := []string{ 110 "Size", 111 "MaxTxsBytes", 112 "CacheSize", 113 "MaxTxBytes", 114 "MaxTxNumPerBlock", 115 } 116 117 for _, fieldName := range fieldsToTest { 118 reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1) 119 assert.Error(t, cfg.ValidateBasic()) 120 reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0) 121 } 122 } 123 124 func TestFastSyncConfigValidateBasic(t *testing.T) { 125 cfg := TestFastSyncConfig() 126 assert.NoError(t, cfg.ValidateBasic()) 127 128 // tamper with version 129 cfg.Version = "v1" 130 assert.NoError(t, cfg.ValidateBasic()) 131 132 cfg.Version = "invalid" 133 assert.Error(t, cfg.ValidateBasic()) 134 } 135 136 func TestConsensusConfig_ValidateBasic(t *testing.T) { 137 // nolint: lll 138 testcases := map[string]struct { 139 modify func(*ConsensusConfig) 140 expectErr bool 141 }{ 142 "TimeoutPropose": {func(c *ConsensusConfig) { c.TimeoutPropose = time.Second }, false}, 143 "TimeoutPropose negative": {func(c *ConsensusConfig) { c.TimeoutPropose = -1 }, true}, 144 "TimeoutProposeDelta": {func(c *ConsensusConfig) { c.TimeoutProposeDelta = time.Second }, false}, 145 "TimeoutProposeDelta negative": {func(c *ConsensusConfig) { c.TimeoutProposeDelta = -1 }, true}, 146 "TimeoutPrevote": {func(c *ConsensusConfig) { c.TimeoutPrevote = time.Second }, false}, 147 "TimeoutPrevote negative": {func(c *ConsensusConfig) { c.TimeoutPrevote = -1 }, true}, 148 "TimeoutPrevoteDelta": {func(c *ConsensusConfig) { c.TimeoutPrevoteDelta = time.Second }, false}, 149 "TimeoutPrevoteDelta negative": {func(c *ConsensusConfig) { c.TimeoutPrevoteDelta = -1 }, true}, 150 "TimeoutPrecommit": {func(c *ConsensusConfig) { c.TimeoutPrecommit = time.Second }, false}, 151 "TimeoutPrecommit negative": {func(c *ConsensusConfig) { c.TimeoutPrecommit = -1 }, true}, 152 "TimeoutPrecommitDelta": {func(c *ConsensusConfig) { c.TimeoutPrecommitDelta = time.Second }, false}, 153 "TimeoutPrecommitDelta negative": {func(c *ConsensusConfig) { c.TimeoutPrecommitDelta = -1 }, true}, 154 "TimeoutCommit": {func(c *ConsensusConfig) { c.TimeoutCommit = time.Second }, false}, 155 "TimeoutCommit negative": {func(c *ConsensusConfig) { c.TimeoutCommit = -1 }, true}, 156 "TimeoutConsensus": {func(c *ConsensusConfig) { c.TimeoutConsensus = time.Second }, false}, 157 "TimeoutConsensus negative": {func(c *ConsensusConfig) { c.TimeoutConsensus = -1 }, true}, 158 "PeerGossipSleepDuration": {func(c *ConsensusConfig) { c.PeerGossipSleepDuration = time.Second }, false}, 159 "PeerGossipSleepDuration negative": {func(c *ConsensusConfig) { c.PeerGossipSleepDuration = -1 }, true}, 160 "PeerQueryMaj23SleepDuration": {func(c *ConsensusConfig) { c.PeerQueryMaj23SleepDuration = time.Second }, false}, 161 "PeerQueryMaj23SleepDuration negative": {func(c *ConsensusConfig) { c.PeerQueryMaj23SleepDuration = -1 }, true}, 162 } 163 for desc, tc := range testcases { 164 tc := tc // appease linter 165 t.Run(desc, func(t *testing.T) { 166 cfg := DefaultConsensusConfig() 167 tc.modify(cfg) 168 169 err := cfg.ValidateBasic() 170 if tc.expectErr { 171 assert.Error(t, err) 172 } else { 173 assert.NoError(t, err) 174 } 175 }) 176 } 177 } 178 179 func TestInstrumentationConfigValidateBasic(t *testing.T) { 180 cfg := TestInstrumentationConfig() 181 assert.NoError(t, cfg.ValidateBasic()) 182 183 // tamper with maximum open connections 184 cfg.MaxOpenConnections = -1 185 assert.Error(t, cfg.ValidateBasic()) 186 }