package config
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDefaultConfig(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
// set up some defaults
|
|
cfg := DefaultConfig()
|
|
assert.NotNil(cfg.P2P)
|
|
assert.NotNil(cfg.Mempool)
|
|
assert.NotNil(cfg.Consensus)
|
|
|
|
// check the root dir stuff...
|
|
cfg.SetRoot("/foo")
|
|
cfg.Genesis = "bar"
|
|
cfg.DBPath = "/opt/data"
|
|
cfg.Mempool.WalPath = "wal/mem/"
|
|
|
|
assert.Equal("/foo/bar", cfg.GenesisFile())
|
|
assert.Equal("/opt/data", cfg.DBDir())
|
|
assert.Equal("/foo/wal/mem", cfg.Mempool.WalDir())
|
|
|
|
}
|
|
|
|
func TestConfigValidateBasic(t *testing.T) {
|
|
cfg := DefaultConfig()
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
// tamper with timeout_propose
|
|
cfg.Consensus.TimeoutPropose = -10 * time.Second
|
|
assert.Error(t, cfg.ValidateBasic())
|
|
}
|
|
|
|
func TestTLSConfiguration(t *testing.T) {
|
|
assert := assert.New(t)
|
|
cfg := DefaultConfig()
|
|
cfg.SetRoot("/home/user")
|
|
|
|
cfg.RPC.TLSCertFile = "file.crt"
|
|
assert.Equal("/home/user/config/file.crt", cfg.RPC.CertFile())
|
|
cfg.RPC.TLSKeyFile = "file.key"
|
|
assert.Equal("/home/user/config/file.key", cfg.RPC.KeyFile())
|
|
|
|
cfg.RPC.TLSCertFile = "/abs/path/to/file.crt"
|
|
assert.Equal("/abs/path/to/file.crt", cfg.RPC.CertFile())
|
|
cfg.RPC.TLSKeyFile = "/abs/path/to/file.key"
|
|
assert.Equal("/abs/path/to/file.key", cfg.RPC.KeyFile())
|
|
}
|
|
|
|
func TestBaseConfigValidateBasic(t *testing.T) {
|
|
cfg := TestBaseConfig()
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
// tamper with log format
|
|
cfg.LogFormat = "invalid"
|
|
assert.Error(t, cfg.ValidateBasic())
|
|
}
|
|
|
|
func TestRPCConfigValidateBasic(t *testing.T) {
|
|
cfg := TestRPCConfig()
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
fieldsToTest := []string{
|
|
"GRPCMaxOpenConnections",
|
|
"MaxOpenConnections",
|
|
"MaxSubscriptionClients",
|
|
"MaxSubscriptionsPerClient",
|
|
"TimeoutBroadcastTxCommit",
|
|
"MaxBodyBytes",
|
|
"MaxHeaderBytes",
|
|
}
|
|
|
|
for _, fieldName := range fieldsToTest {
|
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1)
|
|
assert.Error(t, cfg.ValidateBasic())
|
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0)
|
|
}
|
|
}
|
|
|
|
func TestP2PConfigValidateBasic(t *testing.T) {
|
|
cfg := TestP2PConfig()
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
fieldsToTest := []string{
|
|
"MaxNumInboundPeers",
|
|
"MaxNumOutboundPeers",
|
|
"FlushThrottleTimeout",
|
|
"MaxPacketMsgPayloadSize",
|
|
"SendRate",
|
|
"RecvRate",
|
|
}
|
|
|
|
for _, fieldName := range fieldsToTest {
|
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1)
|
|
assert.Error(t, cfg.ValidateBasic())
|
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0)
|
|
}
|
|
}
|
|
|
|
func TestMempoolConfigValidateBasic(t *testing.T) {
|
|
cfg := TestMempoolConfig()
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
fieldsToTest := []string{
|
|
"Size",
|
|
"MaxTxsBytes",
|
|
"CacheSize",
|
|
"MaxTxBytes",
|
|
}
|
|
|
|
for _, fieldName := range fieldsToTest {
|
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1)
|
|
assert.Error(t, cfg.ValidateBasic())
|
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0)
|
|
}
|
|
}
|
|
|
|
func TestFastSyncConfigValidateBasic(t *testing.T) {
|
|
cfg := TestFastSyncConfig()
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
// tamper with version
|
|
cfg.Version = "v1"
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
cfg.Version = "invalid"
|
|
assert.Error(t, cfg.ValidateBasic())
|
|
}
|
|
|
|
func TestConsensusConfigValidateBasic(t *testing.T) {
|
|
cfg := TestConsensusConfig()
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
fieldsToTest := []string{
|
|
"TimeoutPropose",
|
|
"TimeoutProposeDelta",
|
|
"TimeoutPrevote",
|
|
"TimeoutPrevoteDelta",
|
|
"TimeoutPrecommit",
|
|
"TimeoutPrecommitDelta",
|
|
"TimeoutCommit",
|
|
"CreateEmptyBlocksInterval",
|
|
"PeerGossipSleepDuration",
|
|
"PeerQueryMaj23SleepDuration",
|
|
}
|
|
|
|
for _, fieldName := range fieldsToTest {
|
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1)
|
|
assert.Error(t, cfg.ValidateBasic())
|
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0)
|
|
}
|
|
}
|
|
|
|
func TestInstrumentationConfigValidateBasic(t *testing.T) {
|
|
cfg := TestInstrumentationConfig()
|
|
assert.NoError(t, cfg.ValidateBasic())
|
|
|
|
// tamper with maximum open connections
|
|
cfg.MaxOpenConnections = -1
|
|
assert.Error(t, cfg.ValidateBasic())
|
|
}
|