From 71edd75164777aa8e214e1247458cd4e4e07398c Mon Sep 17 00:00:00 2001 From: Cedric Cordenier Date: Fri, 23 Jun 2023 17:31:49 +0100 Subject: [PATCH] utils/configutils -> utils/config --- core/chains/cosmos/config.go | 20 +-- core/chains/evm/config/v2/config.go | 2 +- core/chains/evm/config/v2/defaults.go | 2 +- core/chains/solana/config.go | 20 +-- core/chains/starknet/config.go | 20 +-- core/config/docs/docs.go | 4 +- core/config/docs/docs_test.go | 4 +- core/config/docs/helpers_test.go | 3 + core/config/toml/types.go | 2 +- core/services/chainlink/config.go | 16 +-- core/services/chainlink/config_general.go | 2 +- core/services/chainlink/config_test.go | 128 +++++++++--------- core/utils/{configutils => config}/toml.go | 2 +- .../utils/{configutils => config}/validate.go | 2 +- 14 files changed, 115 insertions(+), 112 deletions(-) create mode 100644 core/config/docs/helpers_test.go rename core/utils/{configutils => config}/toml.go (95%) rename core/utils/{configutils => config}/validate.go (99%) diff --git a/core/chains/cosmos/config.go b/core/chains/cosmos/config.go index d8052283806..10ce2fbce22 100644 --- a/core/chains/cosmos/config.go +++ b/core/chains/cosmos/config.go @@ -17,37 +17,37 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/chains" "github.com/smartcontractkit/chainlink/v2/core/chains/cosmos/types" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) type CosmosConfigs []*CosmosConfig func (cs CosmosConfigs) validateKeys() (err error) { // Unique chain IDs - chainIDs := configutils.UniqueStrings{} + chainIDs := config.UniqueStrings{} for i, c := range cs { if chainIDs.IsDupe(c.ChainID) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.ChainID", i), *c.ChainID)) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.ChainID", i), *c.ChainID)) } } // Unique node names - names := configutils.UniqueStrings{} + names := config.UniqueStrings{} for i, c := range cs { for j, n := range c.Nodes { if names.IsDupe(n.Name) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.Name", i, j), *n.Name)) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.Name", i, j), *n.Name)) } } } // Unique TendermintURLs - urls := configutils.UniqueStrings{} + urls := config.UniqueStrings{} for i, c := range cs { for j, n := range c.Nodes { u := (*url.URL)(n.TendermintURL) if urls.IsDupeFmt(u) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.TendermintURL", i, j), u.String())) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.TendermintURL", i, j), u.String())) } } } @@ -289,13 +289,13 @@ func setFromChain(c, f *coscfg.Chain) { func (c *CosmosConfig) ValidateConfig() (err error) { if c.ChainID == nil { - err = multierr.Append(err, configutils.ErrMissing{Name: "ChainID", Msg: "required for all chains"}) + err = multierr.Append(err, config.ErrMissing{Name: "ChainID", Msg: "required for all chains"}) } else if *c.ChainID == "" { - err = multierr.Append(err, configutils.ErrEmpty{Name: "ChainID", Msg: "required for all chains"}) + err = multierr.Append(err, config.ErrEmpty{Name: "ChainID", Msg: "required for all chains"}) } if len(c.Nodes) == 0 { - err = multierr.Append(err, configutils.ErrMissing{Name: "Nodes", Msg: "must have at least one node"}) + err = multierr.Append(err, config.ErrMissing{Name: "Nodes", Msg: "must have at least one node"}) } return diff --git a/core/chains/evm/config/v2/config.go b/core/chains/evm/config/v2/config.go index e69b347ad3a..2d486c141f4 100644 --- a/core/chains/evm/config/v2/config.go +++ b/core/chains/evm/config/v2/config.go @@ -20,7 +20,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/ethkey" "github.com/smartcontractkit/chainlink/v2/core/store/models" "github.com/smartcontractkit/chainlink/v2/core/utils" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + configutils "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) type HasEVMConfigs interface { diff --git a/core/chains/evm/config/v2/defaults.go b/core/chains/evm/config/v2/defaults.go index c95e383c5d6..c7530942516 100644 --- a/core/chains/evm/config/v2/defaults.go +++ b/core/chains/evm/config/v2/defaults.go @@ -11,7 +11,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/config" "github.com/smartcontractkit/chainlink/v2/core/utils" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + configutils "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) var ( diff --git a/core/chains/solana/config.go b/core/chains/solana/config.go index 2656ae0448c..d4c49c7195e 100644 --- a/core/chains/solana/config.go +++ b/core/chains/solana/config.go @@ -20,7 +20,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/chains" "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/pg" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) type SolanaConfigs []*SolanaConfig @@ -31,30 +31,30 @@ func (cs SolanaConfigs) ValidateConfig() (err error) { func (cs SolanaConfigs) validateKeys() (err error) { // Unique chain IDs - chainIDs := configutils.UniqueStrings{} + chainIDs := config.UniqueStrings{} for i, c := range cs { if chainIDs.IsDupe(c.ChainID) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.ChainID", i), *c.ChainID)) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.ChainID", i), *c.ChainID)) } } // Unique node names - names := configutils.UniqueStrings{} + names := config.UniqueStrings{} for i, c := range cs { for j, n := range c.Nodes { if names.IsDupe(n.Name) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.Name", i, j), *n.Name)) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.Name", i, j), *n.Name)) } } } // Unique URLs - urls := configutils.UniqueStrings{} + urls := config.UniqueStrings{} for i, c := range cs { for j, n := range c.Nodes { u := (*url.URL)(n.URL) if urls.IsDupeFmt(u) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.URL", i, j), u.String())) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.URL", i, j), u.String())) } } } @@ -288,13 +288,13 @@ func setFromChain(c, f *solcfg.Chain) { func (c *SolanaConfig) ValidateConfig() (err error) { if c.ChainID == nil { - err = multierr.Append(err, configutils.ErrMissing{Name: "ChainID", Msg: "required for all chains"}) + err = multierr.Append(err, config.ErrMissing{Name: "ChainID", Msg: "required for all chains"}) } else if *c.ChainID == "" { - err = multierr.Append(err, configutils.ErrEmpty{Name: "ChainID", Msg: "required for all chains"}) + err = multierr.Append(err, config.ErrEmpty{Name: "ChainID", Msg: "required for all chains"}) } if len(c.Nodes) == 0 { - err = multierr.Append(err, configutils.ErrMissing{Name: "Nodes", Msg: "must have at least one node"}) + err = multierr.Append(err, config.ErrMissing{Name: "Nodes", Msg: "must have at least one node"}) } return } diff --git a/core/chains/starknet/config.go b/core/chains/starknet/config.go index 7cd5fe10462..1c306e7b342 100644 --- a/core/chains/starknet/config.go +++ b/core/chains/starknet/config.go @@ -15,7 +15,7 @@ import ( "github.com/smartcontractkit/chainlink-starknet/relayer/pkg/chainlink/db" "github.com/smartcontractkit/chainlink/v2/core/chains" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) type StarknetConfigs []*StarknetConfig @@ -26,30 +26,30 @@ func (cs StarknetConfigs) ValidateConfig() (err error) { func (cs StarknetConfigs) validateKeys() (err error) { // Unique chain IDs - chainIDs := configutils.UniqueStrings{} + chainIDs := config.UniqueStrings{} for i, c := range cs { if chainIDs.IsDupe(c.ChainID) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.ChainID", i), *c.ChainID)) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.ChainID", i), *c.ChainID)) } } // Unique node names - names := configutils.UniqueStrings{} + names := config.UniqueStrings{} for i, c := range cs { for j, n := range c.Nodes { if names.IsDupe(n.Name) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.Name", i, j), *n.Name)) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.Name", i, j), *n.Name)) } } } // Unique URLs - urls := configutils.UniqueStrings{} + urls := config.UniqueStrings{} for i, c := range cs { for j, n := range c.Nodes { u := (*url.URL)(n.URL) if urls.IsDupeFmt(u) { - err = multierr.Append(err, configutils.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.URL", i, j), u.String())) + err = multierr.Append(err, config.NewErrDuplicate(fmt.Sprintf("%d.Nodes.%d.URL", i, j), u.String())) } } } @@ -237,13 +237,13 @@ func setFromChain(c, f *stkcfg.Chain) { func (c *StarknetConfig) ValidateConfig() (err error) { if c.ChainID == nil { - err = multierr.Append(err, configutils.ErrMissing{Name: "ChainID", Msg: "required for all chains"}) + err = multierr.Append(err, config.ErrMissing{Name: "ChainID", Msg: "required for all chains"}) } else if *c.ChainID == "" { - err = multierr.Append(err, configutils.ErrEmpty{Name: "ChainID", Msg: "required for all chains"}) + err = multierr.Append(err, config.ErrEmpty{Name: "ChainID", Msg: "required for all chains"}) } if len(c.Nodes) == 0 { - err = multierr.Append(err, configutils.ErrMissing{Name: "Nodes", Msg: "must have at least one node"}) + err = multierr.Append(err, config.ErrMissing{Name: "Nodes", Msg: "must have at least one node"}) } return diff --git a/core/config/docs/docs.go b/core/config/docs/docs.go index 97ee743ef74..292cfc20956 100644 --- a/core/config/docs/docs.go +++ b/core/config/docs/docs.go @@ -38,12 +38,12 @@ var ( //go:embed example-secrets.toml exampleSecrets string - DocsTOML = CoreDefaultsTOML + chainsEVMTOML + chainsCosmosTOML + chainsSolanaTOML + chainsStarknetTOML + docsTOML = CoreDefaultsTOML + chainsEVMTOML + chainsCosmosTOML + chainsSolanaTOML + chainsStarknetTOML ) // GenerateConfig returns MarkDown documentation generated from core.toml & chains-*.toml. func GenerateConfig() (string, error) { - return generateDocs(DocsTOML, `[//]: # (Documentation generated from docs/*.toml - DO NOT EDIT.) + return generateDocs(docsTOML, `[//]: # (Documentation generated from docs/*.toml - DO NOT EDIT.) This document describes the TOML format for configuration. diff --git a/core/config/docs/docs_test.go b/core/config/docs/docs_test.go index 780c3d048df..0c5e40d11a4 100644 --- a/core/config/docs/docs_test.go +++ b/core/config/docs/docs_test.go @@ -20,7 +20,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/services/chainlink" "github.com/smartcontractkit/chainlink/v2/core/services/chainlink/cfgtest" "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/ethkey" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) func TestDoc(t *testing.T) { @@ -40,7 +40,7 @@ func TestDoc(t *testing.T) { cfgtest.AssertFieldsNotNil(t, c) var defaults chainlink.Config - require.NoError(t, cfgtest.DocDefaultsOnly(strings.NewReader(docs.DocsTOML), &defaults, configutils.DecodeTOML)) + require.NoError(t, cfgtest.DocDefaultsOnly(strings.NewReader(docs.DocsTOML), &defaults, config.DecodeTOML)) t.Run("EVM", func(t *testing.T) { fallbackDefaults := evmcfg.Defaults(nil) diff --git a/core/config/docs/helpers_test.go b/core/config/docs/helpers_test.go new file mode 100644 index 00000000000..96f96ee7dbb --- /dev/null +++ b/core/config/docs/helpers_test.go @@ -0,0 +1,3 @@ +package docs + +var DocsTOML = docsTOML diff --git a/core/config/toml/types.go b/core/config/toml/types.go index 9435bc82445..8bd1780dc43 100644 --- a/core/config/toml/types.go +++ b/core/config/toml/types.go @@ -26,7 +26,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/store/dialects" "github.com/smartcontractkit/chainlink/v2/core/store/models" "github.com/smartcontractkit/chainlink/v2/core/utils" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + configutils "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) var ErrUnsupported = errors.New("unsupported with config v2") diff --git a/core/services/chainlink/config.go b/core/services/chainlink/config.go index 579ab968b06..91bc67f4d15 100644 --- a/core/services/chainlink/config.go +++ b/core/services/chainlink/config.go @@ -12,7 +12,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/chains/cosmos" "github.com/smartcontractkit/chainlink/v2/core/chains/starknet" "github.com/smartcontractkit/chainlink/v2/core/utils" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + "github.com/smartcontractkit/chainlink/v2/core/utils/config" evmcfg "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config/v2" "github.com/smartcontractkit/chainlink/v2/core/chains/solana" @@ -53,7 +53,7 @@ func (c *Config) TOMLString() (string, error) { } func (c *Config) Validate() error { - if err := configutils.Validate(c); err != nil { + if err := config.Validate(c); err != nil { return fmt.Errorf("invalid configuration: %w", err) } return nil @@ -99,19 +99,19 @@ func (c *Config) SetFrom(f *Config) (err error) { c.Core.SetFrom(&f.Core) if err1 := c.EVM.SetFrom(&f.EVM); err1 != nil { - err = multierr.Append(err, configutils.NamedMultiErrorList(err1, "EVM")) + err = multierr.Append(err, config.NamedMultiErrorList(err1, "EVM")) } if err2 := c.Cosmos.SetFrom(&f.Cosmos); err2 != nil { - err = multierr.Append(err, configutils.NamedMultiErrorList(err2, "Cosmos")) + err = multierr.Append(err, config.NamedMultiErrorList(err2, "Cosmos")) } if err3 := c.Solana.SetFrom(&f.Solana); err3 != nil { - err = multierr.Append(err, configutils.NamedMultiErrorList(err3, "Solana")) + err = multierr.Append(err, config.NamedMultiErrorList(err3, "Solana")) } if err4 := c.Starknet.SetFrom(&f.Starknet); err4 != nil { - err = multierr.Append(err, configutils.NamedMultiErrorList(err4, "Starknet")) + err = multierr.Append(err, config.NamedMultiErrorList(err4, "Starknet")) } _, err = utils.MultiErrorList(err) @@ -136,7 +136,7 @@ var ErrInvalidSecrets = errors.New("invalid secrets") // Validate validates every consitutent secret and return an accumulated error func (s *Secrets) Validate() error { - if err := configutils.Validate(s); err != nil { + if err := config.Validate(s); err != nil { return fmt.Errorf("%w: %s", ErrInvalidSecrets, err) } return nil @@ -158,7 +158,7 @@ func (s *Secrets) ValidateDB() error { } v := &dbValidationType{s.Database} - if err := configutils.Validate(v); err != nil { + if err := config.Validate(v); err != nil { return fmt.Errorf("%w: %s", ErrInvalidSecrets, err) } return nil diff --git a/core/services/chainlink/config_general.go b/core/services/chainlink/config_general.go index d5956444c8f..4b2309171ee 100644 --- a/core/services/chainlink/config_general.go +++ b/core/services/chainlink/config_general.go @@ -28,7 +28,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/p2pkey" "github.com/smartcontractkit/chainlink/v2/core/store/models" "github.com/smartcontractkit/chainlink/v2/core/utils" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + configutils "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) // generalConfig is a wrapper to adapt Config to the config.GeneralConfig interface. diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go index de2f95011aa..b30be5d3f16 100644 --- a/core/services/chainlink/config_test.go +++ b/core/services/chainlink/config_test.go @@ -27,14 +27,14 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/chains/solana" "github.com/smartcontractkit/chainlink/v2/core/chains/starknet" legacy "github.com/smartcontractkit/chainlink/v2/core/config" - config "github.com/smartcontractkit/chainlink/v2/core/config/toml" + "github.com/smartcontractkit/chainlink/v2/core/config/toml" "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/chainlink/cfgtest" "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/ethkey" "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/p2pkey" "github.com/smartcontractkit/chainlink/v2/core/store/models" "github.com/smartcontractkit/chainlink/v2/core/utils" - "github.com/smartcontractkit/chainlink/v2/core/utils/configutils" + "github.com/smartcontractkit/chainlink/v2/core/utils/config" ) var ( @@ -44,9 +44,9 @@ var ( multiChainTOML string multiChain = Config{ - Core: config.Core{ + Core: toml.Core{ RootDir: ptr("my/root/dir"), - AuditLogger: config.AuditLogger{ + AuditLogger: toml.AuditLogger{ Enabled: ptr(true), ForwardToUrl: mustURL("http://localhost:9898"), Headers: ptr([]models.ServiceHeader{ @@ -61,35 +61,35 @@ var ( }), JsonWrapperKey: ptr("event"), }, - Database: config.Database{ - Listener: config.DatabaseListener{ + Database: toml.Database{ + Listener: toml.DatabaseListener{ FallbackPollInterval: models.MustNewDuration(2 * time.Minute), }, }, - Log: config.Log{ - Level: ptr(config.LogLevel(zapcore.PanicLevel)), + Log: toml.Log{ + Level: ptr(toml.LogLevel(zapcore.PanicLevel)), JSONConsole: ptr(true), }, - JobPipeline: config.JobPipeline{ - HTTPRequest: config.JobPipelineHTTPRequest{ + JobPipeline: toml.JobPipeline{ + HTTPRequest: toml.JobPipelineHTTPRequest{ DefaultTimeout: models.MustNewDuration(30 * time.Second), }, }, - OCR2: config.OCR2{ + OCR2: toml.OCR2{ Enabled: ptr(true), DatabaseTimeout: models.MustNewDuration(20 * time.Second), }, - OCR: config.OCR{ + OCR: toml.OCR{ Enabled: ptr(true), BlockchainTimeout: models.MustNewDuration(5 * time.Second), }, - P2P: config.P2P{ + P2P: toml.P2P{ IncomingMessageBufferSize: ptr[int64](999), }, - Keeper: config.Keeper{ + Keeper: toml.Keeper{ GasPriceBufferPercent: ptr[uint16](10), }, - AutoPprof: config.AutoPprof{ + AutoPprof: toml.AutoPprof{ CPUProfileRate: ptr[int64](7), }, }, @@ -211,12 +211,12 @@ func TestConfig_Marshal(t *testing.T) { selectionMode := client.NodeSelectionMode_HighestHead global := Config{ - Core: config.Core{ + Core: toml.Core{ ExplorerURL: mustURL("http://explorer.url"), InsecureFastScrypt: ptr(true), RootDir: ptr("test/root/dir"), ShutdownGracePeriod: models.MustNewDuration(10 * time.Second), - Insecure: config.Insecure{ + Insecure: toml.Insecure{ DevWebServer: ptr(false), OCRDevelopmentMode: ptr(false), InfiniteDepthQueries: ptr(false), @@ -231,19 +231,19 @@ func TestConfig_Marshal(t *testing.T) { {Header: "Authorization", Value: "token"}, {Header: "X-SomeOther-Header", Value: "value with spaces | and a bar+*"}, } - full.AuditLogger = config.AuditLogger{ + full.AuditLogger = toml.AuditLogger{ Enabled: ptr(true), ForwardToUrl: mustURL("http://localhost:9898"), Headers: ptr(serviceHeaders), JsonWrapperKey: ptr("event"), } - full.Feature = config.Feature{ + full.Feature = toml.Feature{ FeedsManager: ptr(true), LogPoller: ptr(true), UICSAKeys: ptr(true), } - full.Database = config.Database{ + full.Database = toml.Database{ DefaultIdleInTxSessionTimeout: models.MustNewDuration(time.Minute), DefaultLockTimeout: models.MustNewDuration(time.Hour), DefaultQueryTimeout: models.MustNewDuration(time.Second), @@ -251,24 +251,24 @@ func TestConfig_Marshal(t *testing.T) { MigrateOnStartup: ptr(true), MaxIdleConns: ptr[int64](7), MaxOpenConns: ptr[int64](13), - Listener: config.DatabaseListener{ + Listener: toml.DatabaseListener{ MaxReconnectDuration: models.MustNewDuration(time.Minute), MinReconnectInterval: models.MustNewDuration(5 * time.Minute), FallbackPollInterval: models.MustNewDuration(2 * time.Minute), }, - Lock: config.DatabaseLock{ + Lock: toml.DatabaseLock{ Enabled: ptr(false), LeaseDuration: &minute, LeaseRefreshInterval: &second, }, - Backup: config.DatabaseBackup{ + Backup: toml.DatabaseBackup{ Dir: ptr("test/backup/dir"), Frequency: &hour, Mode: &legacy.DatabaseBackupModeFull, OnVersionUpgrade: ptr(true), }, } - full.TelemetryIngress = config.TelemetryIngress{ + full.TelemetryIngress = toml.TelemetryIngress{ UniConn: ptr(true), Logging: ptr(true), ServerPubKey: ptr("test-pub-key"), @@ -279,18 +279,18 @@ func TestConfig_Marshal(t *testing.T) { SendTimeout: models.MustNewDuration(5 * time.Second), UseBatchSend: ptr(true), } - full.Log = config.Log{ - Level: ptr(config.LogLevel(zapcore.DPanicLevel)), + full.Log = toml.Log{ + Level: ptr(toml.LogLevel(zapcore.DPanicLevel)), JSONConsole: ptr(true), UnixTS: ptr(true), - File: config.LogFile{ + File: toml.LogFile{ Dir: ptr("log/file/dir"), MaxSize: ptr[utils.FileSize](100 * utils.GB), MaxAgeDays: ptr[int64](17), MaxBackups: ptr[int64](9), }, } - full.WebServer = config.WebServer{ + full.WebServer = toml.WebServer{ AllowOrigins: ptr("*"), BridgeResponseURL: mustURL("https://bridge.response"), BridgeCacheTTL: models.MustNewDuration(10 * time.Second), @@ -302,17 +302,17 @@ func TestConfig_Marshal(t *testing.T) { HTTPMaxSize: ptr(utils.FileSize(uint64(32770))), StartTimeout: models.MustNewDuration(15 * time.Second), ListenIP: mustIP("192.158.1.37"), - MFA: config.WebServerMFA{ + MFA: toml.WebServerMFA{ RPID: ptr("test-rpid"), RPOrigin: ptr("test-rp-origin"), }, - RateLimit: config.WebServerRateLimit{ + RateLimit: toml.WebServerRateLimit{ Authenticated: ptr[int64](42), AuthenticatedPeriod: models.MustNewDuration(time.Second), Unauthenticated: ptr[int64](7), UnauthenticatedPeriod: models.MustNewDuration(time.Minute), }, - TLS: config.WebServerTLS{ + TLS: toml.WebServerTLS{ CertPath: ptr("tls/cert/path"), Host: ptr("tls-host"), KeyPath: ptr("tls/key/path"), @@ -321,23 +321,23 @@ func TestConfig_Marshal(t *testing.T) { ListenIP: mustIP("192.158.1.38"), }, } - full.JobPipeline = config.JobPipeline{ + full.JobPipeline = toml.JobPipeline{ ExternalInitiatorsEnabled: ptr(true), MaxRunDuration: models.MustNewDuration(time.Hour), MaxSuccessfulRuns: ptr[uint64](123456), ReaperInterval: models.MustNewDuration(4 * time.Hour), ReaperThreshold: models.MustNewDuration(7 * 24 * time.Hour), ResultWriteQueueDepth: ptr[uint32](10), - HTTPRequest: config.JobPipelineHTTPRequest{ + HTTPRequest: toml.JobPipelineHTTPRequest{ MaxSize: ptr[utils.FileSize](100 * utils.MB), DefaultTimeout: models.MustNewDuration(time.Minute), }, } - full.FluxMonitor = config.FluxMonitor{ + full.FluxMonitor = toml.FluxMonitor{ DefaultTransactionQueueDepth: ptr[uint32](100), SimulateTransactions: ptr(true), } - full.OCR2 = config.OCR2{ + full.OCR2 = toml.OCR2{ Enabled: ptr(true), ContractConfirmations: ptr[uint32](11), BlockchainTimeout: models.MustNewDuration(3 * time.Second), @@ -351,7 +351,7 @@ func TestConfig_Marshal(t *testing.T) { SimulateTransactions: ptr(false), TraceLogging: ptr(false), } - full.OCR = config.OCR{ + full.OCR = toml.OCR{ Enabled: ptr(true), ObservationTimeout: models.MustNewDuration(11 * time.Second), BlockchainTimeout: models.MustNewDuration(3 * time.Second), @@ -364,12 +364,12 @@ func TestConfig_Marshal(t *testing.T) { CaptureEATelemetry: ptr(false), TraceLogging: ptr(false), } - full.P2P = config.P2P{ + full.P2P = toml.P2P{ IncomingMessageBufferSize: ptr[int64](13), OutgoingMessageBufferSize: ptr[int64](17), PeerID: mustPeerID("12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw"), TraceLogging: ptr(true), - V1: config.P2PV1{ + V1: toml.P2PV1{ Enabled: ptr(false), AnnounceIP: mustIP("1.2.3.4"), AnnouncePort: ptr[uint16](1234), @@ -382,7 +382,7 @@ func TestConfig_Marshal(t *testing.T) { NewStreamTimeout: models.MustNewDuration(time.Second), PeerstoreWriteInterval: models.MustNewDuration(time.Minute), }, - V2: config.P2PV2{ + V2: toml.P2PV2{ Enabled: ptr(true), AnnounceAddresses: &[]string{"a", "b", "c"}, DefaultBootstrappers: &[]ocrcommontypes.BootstrapperLocator{ @@ -394,14 +394,14 @@ func TestConfig_Marshal(t *testing.T) { ListenAddresses: &[]string{"foo", "bar"}, }, } - full.Keeper = config.Keeper{ + full.Keeper = toml.Keeper{ DefaultTransactionQueueDepth: ptr[uint32](17), GasPriceBufferPercent: ptr[uint16](12), GasTipCapBufferPercent: ptr[uint16](43), BaseFeeBufferPercent: ptr[uint16](89), MaxGracePeriod: ptr[int64](31), TurnLookBack: ptr[int64](91), - Registry: config.KeeperRegistry{ + Registry: toml.KeeperRegistry{ CheckGasOverhead: ptr[uint32](90), PerformGasOverhead: ptr[uint32](math.MaxUint32), SyncInterval: models.MustNewDuration(time.Hour), @@ -409,7 +409,7 @@ func TestConfig_Marshal(t *testing.T) { MaxPerformDataSize: ptr[uint32](5000), }, } - full.AutoPprof = config.AutoPprof{ + full.AutoPprof = toml.AutoPprof{ Enabled: ptr(true), ProfileRoot: ptr("prof/root"), PollInterval: models.MustNewDuration(time.Minute), @@ -423,11 +423,11 @@ func TestConfig_Marshal(t *testing.T) { MemThreshold: ptr[utils.FileSize](utils.GB), GoroutineThreshold: ptr[int64](999), } - full.Pyroscope = config.Pyroscope{ + full.Pyroscope = toml.Pyroscope{ ServerAddress: ptr("http://localhost:4040"), Environment: ptr("tests"), } - full.Sentry = config.Sentry{ + full.Sentry = toml.Sentry{ Debug: ptr(true), DSN: ptr("sentry-dsn"), Environment: ptr("dev"), @@ -642,18 +642,18 @@ OCRDevelopmentMode = false InfiniteDepthQueries = false DisableRateLimiting = false `}, - {"AuditLogger", Config{Core: config.Core{AuditLogger: full.AuditLogger}}, `[AuditLogger] + {"AuditLogger", Config{Core: toml.Core{AuditLogger: full.AuditLogger}}, `[AuditLogger] Enabled = true ForwardToUrl = 'http://localhost:9898' JsonWrapperKey = 'event' Headers = ['Authorization: token', 'X-SomeOther-Header: value with spaces | and a bar+*'] `}, - {"Feature", Config{Core: config.Core{Feature: full.Feature}}, `[Feature] + {"Feature", Config{Core: toml.Core{Feature: full.Feature}}, `[Feature] FeedsManager = true LogPoller = true UICSAKeys = true `}, - {"Database", Config{Core: config.Core{Database: full.Database}}, `[Database] + {"Database", Config{Core: toml.Core{Database: full.Database}}, `[Database] DefaultIdleInTxSessionTimeout = '1m0s' DefaultLockTimeout = '1h0m0s' DefaultQueryTimeout = '1s' @@ -678,7 +678,7 @@ Enabled = false LeaseDuration = '1m0s' LeaseRefreshInterval = '1s' `}, - {"TelemetryIngress", Config{Core: config.Core{TelemetryIngress: full.TelemetryIngress}}, `[TelemetryIngress] + {"TelemetryIngress", Config{Core: toml.Core{TelemetryIngress: full.TelemetryIngress}}, `[TelemetryIngress] UniConn = true Logging = true ServerPubKey = 'test-pub-key' @@ -689,7 +689,7 @@ SendInterval = '1m0s' SendTimeout = '5s' UseBatchSend = true `}, - {"Log", Config{Core: config.Core{Log: full.Log}}, `[Log] + {"Log", Config{Core: toml.Core{Log: full.Log}}, `[Log] Level = 'crit' JSONConsole = true UnixTS = true @@ -700,7 +700,7 @@ MaxSize = '100.00gb' MaxAgeDays = 17 MaxBackups = 9 `}, - {"WebServer", Config{Core: config.Core{WebServer: full.WebServer}}, `[WebServer] + {"WebServer", Config{Core: toml.Core{WebServer: full.WebServer}}, `[WebServer] AllowOrigins = '*' BridgeResponseURL = 'https://bridge.response' BridgeCacheTTL = '10s' @@ -731,11 +731,11 @@ HTTPSPort = 6789 KeyPath = 'tls/key/path' ListenIP = '192.158.1.38' `}, - {"FluxMonitor", Config{Core: config.Core{FluxMonitor: full.FluxMonitor}}, `[FluxMonitor] + {"FluxMonitor", Config{Core: toml.Core{FluxMonitor: full.FluxMonitor}}, `[FluxMonitor] DefaultTransactionQueueDepth = 100 SimulateTransactions = true `}, - {"JobPipeline", Config{Core: config.Core{JobPipeline: full.JobPipeline}}, `[JobPipeline] + {"JobPipeline", Config{Core: toml.Core{JobPipeline: full.JobPipeline}}, `[JobPipeline] ExternalInitiatorsEnabled = true MaxRunDuration = '1h0m0s' MaxSuccessfulRuns = 123456 @@ -747,7 +747,7 @@ ResultWriteQueueDepth = 10 DefaultTimeout = '1m0s' MaxSize = '100.00mb' `}, - {"OCR", Config{Core: config.Core{OCR: full.OCR}}, `[OCR] + {"OCR", Config{Core: toml.Core{OCR: full.OCR}}, `[OCR] Enabled = true ObservationTimeout = '11s' BlockchainTimeout = '3s' @@ -760,7 +760,7 @@ TransmitterAddress = '0xa0788FC17B1dEe36f057c42B6F373A34B014687e' CaptureEATelemetry = false TraceLogging = false `}, - {"OCR2", Config{Core: config.Core{OCR2: full.OCR2}}, `[OCR2] + {"OCR2", Config{Core: toml.Core{OCR2: full.OCR2}}, `[OCR2] Enabled = true ContractConfirmations = 11 BlockchainTimeout = '3s' @@ -774,7 +774,7 @@ DefaultTransactionQueueDepth = 1 SimulateTransactions = false TraceLogging = false `}, - {"P2P", Config{Core: config.Core{P2P: full.P2P}}, `[P2P] + {"P2P", Config{Core: toml.Core{P2P: full.P2P}}, `[P2P] IncomingMessageBufferSize = 13 OutgoingMessageBufferSize = 17 PeerID = '12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw' @@ -801,7 +801,7 @@ DeltaDial = '1m0s' DeltaReconcile = '1s' ListenAddresses = ['foo', 'bar'] `}, - {"Keeper", Config{Core: config.Core{Keeper: full.Keeper}}, `[Keeper] + {"Keeper", Config{Core: toml.Core{Keeper: full.Keeper}}, `[Keeper] DefaultTransactionQueueDepth = 17 GasPriceBufferPercent = 12 GasTipCapBufferPercent = 43 @@ -816,7 +816,7 @@ MaxPerformDataSize = 5000 SyncInterval = '1h0m0s' SyncUpkeepQueueSize = 31 `}, - {"AutoPprof", Config{Core: config.Core{AutoPprof: full.AutoPprof}}, `[AutoPprof] + {"AutoPprof", Config{Core: toml.Core{AutoPprof: full.AutoPprof}}, `[AutoPprof] Enabled = true ProfileRoot = 'prof/root' PollInterval = '1m0s' @@ -830,11 +830,11 @@ MutexProfileFraction = 2 MemThreshold = '1.00gb' GoroutineThreshold = 999 `}, - {"Pyroscope", Config{Core: config.Core{Pyroscope: full.Pyroscope}}, `[Pyroscope] + {"Pyroscope", Config{Core: toml.Core{Pyroscope: full.Pyroscope}}, `[Pyroscope] ServerAddress = 'http://localhost:4040' Environment = 'tests' `}, - {"Sentry", Config{Core: config.Core{Sentry: full.Sentry}}, `[Sentry] + {"Sentry", Config{Core: toml.Core{Sentry: full.Sentry}}, `[Sentry] Debug = true DSN = 'sentry-dsn' Environment = 'dev' @@ -1028,7 +1028,7 @@ URL = 'http://stark.node' var got Config - require.NoError(t, configutils.DecodeTOML(strings.NewReader(s), &got)) + require.NoError(t, config.DecodeTOML(strings.NewReader(s), &got)) ts, err := got.TOMLString() require.NoError(t, err) assert.Equal(t, tt.config, got, diff.Diff(s, ts)) @@ -1038,7 +1038,7 @@ URL = 'http://stark.node' func TestConfig_full(t *testing.T) { var got Config - require.NoError(t, configutils.DecodeTOML(strings.NewReader(fullTOML), &got)) + require.NoError(t, config.DecodeTOML(strings.NewReader(fullTOML), &got)) // Except for some EVM node fields. for c := range got.EVM { for n := range got.EVM[c].Nodes { @@ -1148,7 +1148,7 @@ func TestConfig_Validate(t *testing.T) { } { t.Run(tt.name, func(t *testing.T) { var c Config - require.NoError(t, configutils.DecodeTOML(strings.NewReader(tt.toml), &c)) + require.NoError(t, config.DecodeTOML(strings.NewReader(tt.toml), &c)) c.setDefaults() assertValidationError(t, &c, tt.exp) }) @@ -1335,7 +1335,7 @@ AllowSimplePasswords = true`, } { t.Run(tt.name, func(t *testing.T) { var s Secrets - require.NoError(t, configutils.DecodeTOML(strings.NewReader(tt.toml), &s)) + require.NoError(t, config.DecodeTOML(strings.NewReader(tt.toml), &s)) assertValidationError(t, &s, tt.exp) }) } @@ -1395,7 +1395,7 @@ func TestConfig_SetFrom(t *testing.T) { var c Config for _, fs := range tt.from { var f Config - require.NoError(t, configutils.DecodeTOML(strings.NewReader(fs), &f)) + require.NoError(t, config.DecodeTOML(strings.NewReader(fs), &f)) require.NoError(t, c.SetFrom(&f)) } ts, err := c.TOMLString() diff --git a/core/utils/configutils/toml.go b/core/utils/config/toml.go similarity index 95% rename from core/utils/configutils/toml.go rename to core/utils/config/toml.go index 24f22a21927..f51db76365e 100644 --- a/core/utils/configutils/toml.go +++ b/core/utils/config/toml.go @@ -1,4 +1,4 @@ -package configutils +package config import ( "errors" diff --git a/core/utils/configutils/validate.go b/core/utils/config/validate.go similarity index 99% rename from core/utils/configutils/validate.go rename to core/utils/config/validate.go index dcfe26cb75b..798beca663d 100644 --- a/core/utils/configutils/validate.go +++ b/core/utils/config/validate.go @@ -1,4 +1,4 @@ -package configutils +package config import ( "fmt"