From 41ed084aa8694dbed5b6ef0261e13e8af2358ca2 Mon Sep 17 00:00:00 2001 From: Ruslan Kovalov Date: Tue, 16 Aug 2022 17:06:54 +0200 Subject: [PATCH 1/2] [chore] Change receiver config tests to unmarshal config only for that component. - [x] activedirectorydsreceiver/ - [x] aerospikereceiver/ - [x] apachereceiver/ - [x] awscontainerinsightreceiver/ - [x] awsecscontainermetricsreceiver/ - [x] awsfirehosereceiver/ - [x] awsxrayreceiver/ - [x] azureblobreceiver/ - [x] azureeventhubreceiver/ - [x] bigipreceiver/ - [x] carbonreceiver/ - [x] chronyreceiver/ - [x] cloudfoundryreceiver/ - [x] collectdreceiver/ - [x] couchdbreceiver/ - [x] dotnetdiagnosticsreceiver/ - [x] elasticsearchreceiver/ - [x] filelogreceiver/ - [x] flinkmetricsreceiver/ - [x] fluentforwardreceiver/ --- .../activedirectorydsreceiver/config_test.go | 61 +++++--- .../testdata/config.yaml | 26 +--- .../aerospikereceiver/testdata/config.yaml | 11 +- receiver/apachereceiver/testdata/config.yaml | 20 +-- .../config_test.go | 57 ++++---- .../testdata/config.yaml | 18 +-- .../config_test.go | 48 ++++--- .../testdata/config.yaml | 16 +-- receiver/awsfirehosereceiver/config_test.go | 20 +-- .../awsfirehosereceiver/testdata/config.yaml | 28 +--- receiver/awsxrayreceiver/config_test.go | 130 +++++++++--------- receiver/awsxrayreceiver/testdata/config.yaml | 50 +++---- receiver/bigipreceiver/config_test.go | 18 ++- receiver/bigipreceiver/testdata/config.yaml | 28 +--- receiver/carbonreceiver/config_test.go | 121 ++++++++-------- receiver/carbonreceiver/testdata/config.yaml | 124 ++++++++--------- receiver/chronyreceiver/config_test.go | 23 ++-- receiver/chronyreceiver/testdata/config.yml | 21 +-- receiver/cloudfoundryreceiver/config_test.go | 108 ++++++++------- .../testdata/config-invalid.yaml | 28 ---- .../cloudfoundryreceiver/testdata/config.yaml | 57 ++++---- receiver/collectdreceiver/config_test.go | 57 +++++--- .../collectdreceiver/testdata/config.yaml | 44 ++---- receiver/couchdbreceiver/testdata/config.yaml | 24 +--- .../dotnetdiagnosticsreceiver/config_test.go | 29 ++-- .../testdata/config.yaml | 22 +-- receiver/elasticsearchreceiver/config_test.go | 75 ++++++---- .../testdata/config.yaml | 36 ++--- receiver/filelogreceiver/filelog_test.go | 18 +-- receiver/filelogreceiver/testdata/config.yaml | 42 ++---- .../flinkmetricsreceiver/testdata/config.yaml | 20 +-- receiver/fluentforwardreceiver/config_test.go | 20 ++- .../testdata/config.yaml | 16 +-- 33 files changed, 634 insertions(+), 782 deletions(-) diff --git a/receiver/activedirectorydsreceiver/config_test.go b/receiver/activedirectorydsreceiver/config_test.go index a8b7ae56ccb5..7b8c56990579 100644 --- a/receiver/activedirectorydsreceiver/config_test.go +++ b/receiver/activedirectorydsreceiver/config_test.go @@ -19,37 +19,54 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" + "go.opentelemetry.io/collector/receiver/scraperhelper" + + "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver/internal/metadata" ) func TestLoadConfig(t *testing.T) { t.Parallel() - factories, err := componenttest.NopFactories() - require.NoError(t, err) - - factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - require.NotNil(t, cfg) - - require.Equal(t, len(cfg.Receivers), 2) - defaultRecvID := config.NewComponentIDWithName(typeStr, "defaults") + defaultMetricsSettings := metadata.DefaultMetricsSettings() + defaultMetricsSettings.ActiveDirectoryDsReplicationObjectRate.Enabled = false + tests := []struct { + id config.ComponentID + expected config.Receiver + }{ + { + id: config.NewComponentIDWithName(typeStr, "defaults"), + expected: createDefaultConfig(), + }, + { + id: config.NewComponentIDWithName(typeStr, ""), + expected: &Config{ + ScraperControllerSettings: scraperhelper.ScraperControllerSettings{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(typeStr, "")), + CollectionInterval: 2 * time.Minute, + }, + Metrics: defaultMetricsSettings, + }, + }, + } - defaultCfg := factory.CreateDefaultConfig().(*Config) - defaultCfg.ReceiverSettings.SetIDName(defaultRecvID.Name()) - defaultReceiver := cfg.Receivers[defaultRecvID] - require.Equal(t, defaultCfg, defaultReceiver) + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) - advancedRecv := cfg.Receivers[config.NewComponentID(typeStr)] - expectedAdvancedRecv := factory.CreateDefaultConfig().(*Config) + factory := NewFactory() + cfg := factory.CreateDefaultConfig() - expectedAdvancedRecv.Metrics.ActiveDirectoryDsReplicationObjectRate.Enabled = false - expectedAdvancedRecv.ScraperControllerSettings.CollectionInterval = 2 * time.Minute + sub, err := cm.Sub(tt.id.String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) - require.Equal(t, expectedAdvancedRecv, advancedRecv) + assert.NoError(t, cfg.Validate()) + assert.Equal(t, tt.expected, cfg) + }) + } } diff --git a/receiver/activedirectorydsreceiver/testdata/config.yaml b/receiver/activedirectorydsreceiver/testdata/config.yaml index 9e11c7dcc350..206c86848ca0 100644 --- a/receiver/activedirectorydsreceiver/testdata/config.yaml +++ b/receiver/activedirectorydsreceiver/testdata/config.yaml @@ -1,20 +1,6 @@ -receivers: - active_directory_ds: - collection_interval: 2m - metrics: - active_directory.ds.replication.object.rate: - enabled: false - active_directory_ds/defaults: - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [active_directory_ds] - processors: [nop] - exporters: [nop] +active_directory_ds: + collection_interval: 2m + metrics: + active_directory.ds.replication.object.rate: + enabled: false +active_directory_ds/defaults: diff --git a/receiver/aerospikereceiver/testdata/config.yaml b/receiver/aerospikereceiver/testdata/config.yaml index 8b65b7ac904d..2a99313bd91b 100644 --- a/receiver/aerospikereceiver/testdata/config.yaml +++ b/receiver/aerospikereceiver/testdata/config.yaml @@ -1,6 +1,5 @@ -receivers: - aerospike: - endpoint: "localhost:3000" - tlsname: "" - collect_cluster_metrics: false - collection_interval: 30s +aerospike: + endpoint: "localhost:3000" + tlsname: "" + collect_cluster_metrics: false + collection_interval: 30s diff --git a/receiver/apachereceiver/testdata/config.yaml b/receiver/apachereceiver/testdata/config.yaml index f7e980e130aa..eda993363e61 100644 --- a/receiver/apachereceiver/testdata/config.yaml +++ b/receiver/apachereceiver/testdata/config.yaml @@ -1,17 +1,3 @@ -receivers: - apache: - endpoint: "http://localhost:8080/server-status?auto" - collection_interval: 10s - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [apache] - processors: [nop] - exporters: [nop] +apache: + endpoint: "http://localhost:8080/server-status?auto" + collection_interval: 10s diff --git a/receiver/awscontainerinsightreceiver/config_test.go b/receiver/awscontainerinsightreceiver/config_test.go index ba5d2e6c106c..f64663ab96b7 100644 --- a/receiver/awscontainerinsightreceiver/config_test.go +++ b/receiver/awscontainerinsightreceiver/config_test.go @@ -22,38 +22,47 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" ) func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - assert.Nil(t, err) + t.Parallel() - factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) + tests := []struct { + id config.ComponentID + expected config.Receiver + }{ + { + id: config.NewComponentIDWithName(typeStr, ""), + expected: createDefaultConfig(), + }, + { + id: config.NewComponentIDWithName(typeStr, "collection_interval_settings"), + expected: &Config{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), + CollectionInterval: 60 * time.Second, + ContainerOrchestrator: "eks", + TagService: true, + PrefFullPodName: false, + }, + }, + } - require.NoError(t, err) - require.NotNil(t, cfg) + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) - assert.Equal(t, len(cfg.Receivers), 2) + factory := NewFactory() + cfg := factory.CreateDefaultConfig() - //ensure default configurations are generated when users provide nothing - r0 := cfg.Receivers[config.NewComponentID(typeStr)] - assert.Equal(t, factory.CreateDefaultConfig(), r0) + sub, err := cm.Sub(tt.id.String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) - r1 := cfg.Receivers[config.NewComponentID(typeStr)] - assert.Equal(t, r1, factory.CreateDefaultConfig()) - - r2 := cfg.Receivers[config.NewComponentIDWithName(typeStr, "collection_interval_settings")].(*Config) - assert.Equal(t, r2, - &Config{ - ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(typeStr, "collection_interval_settings")), - CollectionInterval: 60 * time.Second, - ContainerOrchestrator: "eks", - TagService: true, - PrefFullPodName: false, + assert.NoError(t, cfg.Validate()) + assert.Equal(t, tt.expected, cfg) }) + } } diff --git a/receiver/awscontainerinsightreceiver/testdata/config.yaml b/receiver/awscontainerinsightreceiver/testdata/config.yaml index fca86f50996b..b898b8f4d474 100644 --- a/receiver/awscontainerinsightreceiver/testdata/config.yaml +++ b/receiver/awscontainerinsightreceiver/testdata/config.yaml @@ -1,14 +1,4 @@ -receivers: - awscontainerinsightreceiver: - container_orchestrator: eks - awscontainerinsightreceiver/collection_interval_settings: - collection_interval: 60s - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [awscontainerinsightreceiver] - exporters: [nop] \ No newline at end of file +awscontainerinsightreceiver: + container_orchestrator: eks +awscontainerinsightreceiver/collection_interval_settings: + collection_interval: 60s diff --git a/receiver/awsecscontainermetricsreceiver/config_test.go b/receiver/awsecscontainermetricsreceiver/config_test.go index 031ac3edbfa7..543590621824 100644 --- a/receiver/awsecscontainermetricsreceiver/config_test.go +++ b/receiver/awsecscontainermetricsreceiver/config_test.go @@ -21,32 +21,44 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" ) func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - assert.Nil(t, err) + t.Parallel() - factory := NewFactory() - receiverType := "awsecscontainermetrics" - factories.Receivers[config.Type(receiverType)] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) + tests := []struct { + id config.ComponentID + expected config.Receiver + }{ + { + id: config.NewComponentIDWithName(typeStr, ""), + expected: createDefaultConfig(), + }, + { + id: config.NewComponentIDWithName(typeStr, "collection_interval_settings"), + expected: &Config{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), + CollectionInterval: 10 * time.Second, + }, + }, + } - require.NoError(t, err) - require.NotNil(t, cfg) + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) - assert.Equal(t, len(cfg.Receivers), 2) + factory := NewFactory() + cfg := factory.CreateDefaultConfig() - r1 := cfg.Receivers[config.NewComponentID(typeStr)] - assert.Equal(t, r1, factory.CreateDefaultConfig()) + sub, err := cm.Sub(tt.id.String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) - r2 := cfg.Receivers[config.NewComponentIDWithName(typeStr, "collection_interval_settings")].(*Config) - assert.Equal(t, r2, - &Config{ - ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(typeStr, "collection_interval_settings")), - CollectionInterval: 10 * time.Second, + assert.NoError(t, cfg.Validate()) + assert.Equal(t, tt.expected, cfg) }) + } } diff --git a/receiver/awsecscontainermetricsreceiver/testdata/config.yaml b/receiver/awsecscontainermetricsreceiver/testdata/config.yaml index 81def0ee8ed8..41b3672b0a0b 100644 --- a/receiver/awsecscontainermetricsreceiver/testdata/config.yaml +++ b/receiver/awsecscontainermetricsreceiver/testdata/config.yaml @@ -1,13 +1,3 @@ -receivers: - awsecscontainermetrics: - awsecscontainermetrics/collection_interval_settings: - collection_interval: 10s - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [awsecscontainermetrics] - exporters: [nop] \ No newline at end of file +awsecscontainermetrics: +awsecscontainermetrics/collection_interval_settings: + collection_interval: 10s diff --git a/receiver/awsfirehosereceiver/config_test.go b/receiver/awsfirehosereceiver/config_test.go index 695d810b5972..dffc78feb2b0 100644 --- a/receiver/awsfirehosereceiver/config_test.go +++ b/receiver/awsfirehosereceiver/config_test.go @@ -18,25 +18,27 @@ import ( "path/filepath" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/confighttp" "go.opentelemetry.io/collector/config/configtls" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" ) func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - require.Nil(t, err) + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join(".", "testdata", "config.yaml"), factories) + cfg := factory.CreateDefaultConfig() + + sub, err := cm.Sub(config.NewComponentIDWithName(typeStr, "").String()) require.NoError(t, err) - require.Equal(t, 1, len(cfg.Receivers)) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) + + assert.NoError(t, cfg.Validate()) - r := cfg.Receivers[config.NewComponentID(typeStr)].(*Config) require.Equal(t, &Config{ ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), RecordType: "cwmetrics", @@ -50,5 +52,5 @@ func TestLoadConfig(t *testing.T) { }, }, }, - }, r) + }, cfg) } diff --git a/receiver/awsfirehosereceiver/testdata/config.yaml b/receiver/awsfirehosereceiver/testdata/config.yaml index 12317b91a377..13dbc9fec2d6 100644 --- a/receiver/awsfirehosereceiver/testdata/config.yaml +++ b/receiver/awsfirehosereceiver/testdata/config.yaml @@ -1,21 +1,7 @@ -receivers: - awsfirehose: - endpoint: 0.0.0.0:4433 - record_type: cwmetrics - access_key: "some_access_key" - tls: - cert_file: server.crt - key_file: server.key - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [awsfirehose] - processors: [nop] - exporters: [nop] +awsfirehose: + endpoint: 0.0.0.0:4433 + record_type: cwmetrics + access_key: "some_access_key" + tls: + cert_file: server.crt + key_file: server.key diff --git a/receiver/awsxrayreceiver/config_test.go b/receiver/awsxrayreceiver/config_test.go index 63eb1a3b042b..5e7367c576d8 100644 --- a/receiver/awsxrayreceiver/config_test.go +++ b/receiver/awsxrayreceiver/config_test.go @@ -20,82 +20,88 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/confignet" "go.opentelemetry.io/collector/config/configtls" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" "github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy" awsxray "github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/xray" ) func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - assert.Nil(t, err) + t.Parallel() - factory := NewFactory() - factories.Receivers[awsxray.TypeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - - require.NoError(t, err) - require.NotNil(t, cfg) - - assert.Equal(t, len(cfg.Receivers), 3) - - // ensure default configurations are generated when users provide - // nothing. - r0 := cfg.Receivers[config.NewComponentID(awsxray.TypeStr)] - assert.Equal(t, factory.CreateDefaultConfig(), r0) - - // ensure the UDP endpoint can be properly overwritten - r1 := cfg.Receivers[config.NewComponentIDWithName(awsxray.TypeStr, "udp_endpoint")].(*Config) - assert.Equal(t, - &Config{ - ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(awsxray.TypeStr, "udp_endpoint")), - NetAddr: confignet.NetAddr{ - Endpoint: "0.0.0.0:5678", - Transport: "udp", - }, - ProxyServer: &proxy.Config{ - TCPAddr: confignet.TCPAddr{ - Endpoint: "0.0.0.0:2000", + tests := []struct { + id config.ComponentID + expected config.Receiver + }{ + { + id: config.NewComponentIDWithName(awsxray.TypeStr, ""), + expected: createDefaultConfig(), + }, + { + id: config.NewComponentIDWithName(awsxray.TypeStr, "udp_endpoint"), + expected: &Config{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(awsxray.TypeStr)), + NetAddr: confignet.NetAddr{ + Endpoint: "0.0.0.0:5678", + Transport: "udp", }, - ProxyAddress: "", - TLSSetting: configtls.TLSClientSetting{ - Insecure: false, - ServerName: "", + ProxyServer: &proxy.Config{ + TCPAddr: confignet.TCPAddr{ + Endpoint: "0.0.0.0:2000", + }, + ProxyAddress: "", + TLSSetting: configtls.TLSClientSetting{ + Insecure: false, + ServerName: "", + }, + Region: "", + RoleARN: "", + AWSEndpoint: "", }, - Region: "", - RoleARN: "", - AWSEndpoint: "", }, }, - r1) - - // ensure the fields under proxy_server are properly overwritten - r2 := cfg.Receivers[config.NewComponentIDWithName(awsxray.TypeStr, "proxy_server")].(*Config) - assert.Equal(t, - &Config{ - ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(awsxray.TypeStr, "proxy_server")), - NetAddr: confignet.NetAddr{ - Endpoint: "0.0.0.0:2000", - Transport: "udp", - }, - ProxyServer: &proxy.Config{ - TCPAddr: confignet.TCPAddr{ - Endpoint: "0.0.0.0:1234", + { + id: config.NewComponentIDWithName(awsxray.TypeStr, "proxy_server"), + expected: &Config{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(awsxray.TypeStr)), + NetAddr: confignet.NetAddr{ + Endpoint: "0.0.0.0:2000", + Transport: "udp", }, - ProxyAddress: "https://proxy.proxy.com", - TLSSetting: configtls.TLSClientSetting{ - Insecure: true, - ServerName: "something", + ProxyServer: &proxy.Config{ + TCPAddr: confignet.TCPAddr{ + Endpoint: "0.0.0.0:1234", + }, + ProxyAddress: "https://proxy.proxy.com", + TLSSetting: configtls.TLSClientSetting{ + Insecure: true, + ServerName: "something", + }, + Region: "us-west-1", + RoleARN: "arn:aws:iam::123456789012:role/awesome_role", + AWSEndpoint: "https://another.aws.endpoint.com", + LocalMode: true, }, - Region: "us-west-1", - RoleARN: "arn:aws:iam::123456789012:role/awesome_role", - AWSEndpoint: "https://another.aws.endpoint.com", - LocalMode: true, - }, - }, - r2) + }}, + } + + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) + + factory := NewFactory() + cfg := factory.CreateDefaultConfig() + + sub, err := cm.Sub(tt.id.String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) + + assert.NoError(t, cfg.Validate()) + assert.Equal(t, tt.expected, cfg) + }) + } } diff --git a/receiver/awsxrayreceiver/testdata/config.yaml b/receiver/awsxrayreceiver/testdata/config.yaml index f0ad5cf188bc..1dc10e055984 100644 --- a/receiver/awsxrayreceiver/testdata/config.yaml +++ b/receiver/awsxrayreceiver/testdata/config.yaml @@ -1,34 +1,20 @@ -receivers: - awsxray: # ensure the default configurations are correctly generated - - awsxray/udp_endpoint: - # ensure the UDP endpoint can be properly overwritten - endpoint: "0.0.0.0:5678" - # transport can only be "udp" - transport: udp - - awsxray/proxy_server: - # ensure the fields under proxy_server can be overwritten - proxy_server: - endpoint: "0.0.0.0:1234" - proxy_address: "https://proxy.proxy.com" - tls: - insecure: true - server_name_override: "something" - region: "us-west-1" - role_arn: "arn:aws:iam::123456789012:role/awesome_role" - aws_endpoint: "https://another.aws.endpoint.com" - local_mode: true +awsxray: # ensure the default configurations are correctly generated -processors: - nop: +awsxray/udp_endpoint: + # ensure the UDP endpoint can be properly overwritten + endpoint: "0.0.0.0:5678" + # transport can only be "udp" + transport: udp -exporters: - nop: - -service: - pipelines: - traces: - receivers: [awsxray, awsxray/udp_endpoint, awsxray/proxy_server] - processors: [nop] - exporters: [nop] +awsxray/proxy_server: + # ensure the fields under proxy_server can be overwritten + proxy_server: + endpoint: "0.0.0.0:1234" + proxy_address: "https://proxy.proxy.com" + tls: + insecure: true + server_name_override: "something" + region: "us-west-1" + role_arn: "arn:aws:iam::123456789012:role/awesome_role" + aws_endpoint: "https://another.aws.endpoint.com" + local_mode: true diff --git a/receiver/bigipreceiver/config_test.go b/receiver/bigipreceiver/config_test.go index 45776fcd0425..db004dd89031 100644 --- a/receiver/bigipreceiver/config_test.go +++ b/receiver/bigipreceiver/config_test.go @@ -21,10 +21,9 @@ import ( "testing" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/confighttp" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" "go.uber.org/multierr" ) @@ -130,21 +129,20 @@ func TestValidate(t *testing.T) { } func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - require.Nil(t, err) + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - require.NotNil(t, cfg) + cfg := factory.CreateDefaultConfig() - require.Equal(t, len(cfg.Receivers), 1) + sub, err := cm.Sub(config.NewComponentIDWithName(typeStr, "").String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) expected := factory.CreateDefaultConfig().(*Config) expected.Username = "otelu" expected.Password = "$BIGIP_PASSWORD" expected.TLSSetting.InsecureSkipVerify = true - require.Equal(t, expected, cfg.Receivers[config.NewComponentID("bigip")]) + require.Equal(t, expected, cfg) } diff --git a/receiver/bigipreceiver/testdata/config.yaml b/receiver/bigipreceiver/testdata/config.yaml index 56d362abc7f3..04055854beb1 100644 --- a/receiver/bigipreceiver/testdata/config.yaml +++ b/receiver/bigipreceiver/testdata/config.yaml @@ -1,21 +1,7 @@ -receivers: - bigip: - collection_interval: 10s - endpoint: https://localhost:443 - username: otelu - password: $BIGIP_PASSWORD - tls: - insecure_skip_verify: true - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [bigip] - processors: [nop] - exporters: [nop] +bigip: + collection_interval: 10s + endpoint: https://localhost:443 + username: otelu + password: $BIGIP_PASSWORD + tls: + insecure_skip_verify: true diff --git a/receiver/carbonreceiver/config_test.go b/receiver/carbonreceiver/config_test.go index 920e277c4047..8e92204bb3c2 100644 --- a/receiver/carbonreceiver/config_test.go +++ b/receiver/carbonreceiver/config_test.go @@ -21,75 +21,86 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/confignet" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver/protocol" ) func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - assert.Nil(t, err) + t.Parallel() - factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - - require.NoError(t, err) - require.NotNil(t, cfg) - - assert.Equal(t, len(cfg.Receivers), 3) - - r0 := cfg.Receivers[config.NewComponentID(typeStr)] - assert.Equal(t, factory.CreateDefaultConfig(), r0) - - r1 := cfg.Receivers[config.NewComponentIDWithName(typeStr, "receiver_settings")].(*Config) - assert.Equal(t, - &Config{ - ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(typeStr, "receiver_settings")), - NetAddr: confignet.NetAddr{ - Endpoint: "localhost:8080", - Transport: "udp", - }, - TCPIdleTimeout: 5 * time.Second, - Parser: &protocol.Config{ - Type: "plaintext", - Config: &protocol.PlaintextConfig{}, - }, + tests := []struct { + id config.ComponentID + expected config.Receiver + }{ + { + id: config.NewComponentIDWithName(typeStr, ""), + expected: createDefaultConfig(), }, - r1) - - r2 := cfg.Receivers[config.NewComponentIDWithName(typeStr, "regex")].(*Config) - assert.Equal(t, - &Config{ - ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(typeStr, "regex")), - NetAddr: confignet.NetAddr{ - Endpoint: "localhost:2003", - Transport: "tcp", + { + id: config.NewComponentIDWithName(typeStr, "receiver_settings"), + expected: &Config{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), + NetAddr: confignet.NetAddr{ + Endpoint: "localhost:8080", + Transport: "udp", + }, + TCPIdleTimeout: 5 * time.Second, + Parser: &protocol.Config{ + Type: "plaintext", + Config: &protocol.PlaintextConfig{}, + }, }, - TCPIdleTimeout: 30 * time.Second, - Parser: &protocol.Config{ - Type: "regex", - Config: &protocol.RegexParserConfig{ - Rules: []*protocol.RegexRule{ - { - Regexp: `(?Ptest)\.env(?P[^.]*)\.(?P[^.]*)`, - NamePrefix: "name-prefix", - Labels: map[string]string{ - "dot.key": "dot.value", - "key": "value", + }, + { + id: config.NewComponentIDWithName(typeStr, "regex"), + expected: &Config{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), + NetAddr: confignet.NetAddr{ + Endpoint: "localhost:2003", + Transport: "tcp", + }, + TCPIdleTimeout: 30 * time.Second, + Parser: &protocol.Config{ + Type: "regex", + Config: &protocol.RegexParserConfig{ + Rules: []*protocol.RegexRule{ + { + Regexp: `(?Ptest)\.env(?P[^.]*)\.(?P[^.]*)`, + NamePrefix: "name-prefix", + Labels: map[string]string{ + "dot.key": "dot.value", + "key": "value", + }, + MetricType: "cumulative", + }, + { + Regexp: `(?Ptest)\.(?P.*)`, }, - MetricType: "cumulative", - }, - { - Regexp: `(?Ptest)\.(?P.*)`, }, + MetricNameSeparator: "_", }, - MetricNameSeparator: "_", }, }, }, - r2) + } + + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) + + factory := NewFactory() + cfg := factory.CreateDefaultConfig() + + sub, err := cm.Sub(tt.id.String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) + + assert.NoError(t, cfg.Validate()) + assert.Equal(t, tt.expected, cfg) + }) + } } diff --git a/receiver/carbonreceiver/testdata/config.yaml b/receiver/carbonreceiver/testdata/config.yaml index 38ce50768f4d..6e325fb25d76 100644 --- a/receiver/carbonreceiver/testdata/config.yaml +++ b/receiver/carbonreceiver/testdata/config.yaml @@ -1,69 +1,55 @@ -receivers: - carbon: - carbon/receiver_settings: - # endpoint specifies the network interface and port which will receive - # Carbon data. - endpoint: localhost:8080 - # transport specifies either "tcp" (the default) or "udp". - transport: udp - # tcp_idle_timeout is max duration that a tcp connection will idle wait for - # new data. This value is ignored is the transport is not "tcp". The default - # value is 30 seconds. - tcp_idle_timeout: 5s - # parser section is used to to configure the actual parser to handle the - # received data. The default is "plaintext", see - # https://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-plaintext-protocol. - parser: - # type specifies the type of parser to be used, the default is "plaintext" - type: plaintext - # config specifies any special configuration of the selected parser. What - # goes under the section depends on the type of parser selected. - config: - carbon/regex: - parser: - # The "regex" parser can breakdown the "metric path" of a Carbon metric - # into metric labels. This is typically used to extract the labels from - # a naming hierarchy, see https://graphite.readthedocs.io/en/latest/feeding-carbon.html#step-1-plan-a-naming-hierarchy - type: regex - # config section with the custom config for the "regex" parser. - config: - # Rules with regular expressions to be applied to the received metrics. - # The first rule that matches the metric is applied and no further rules - # are applied. If no rules match the metric is processed by the "plaintext" - # parser. - rules: - # The first rule generates extract dimensions with keys: "base", "env", - # and "host" if the "metric path" matches the regular expression of the - # rule. Regular expression named captures prefixed with "key_" are used - # to populate metric labels, while named captures prefixed with "name_" - # are used to generate the final metric name. The "name_*" captures are - # sorted by name and their values are used to compose the resulting - # metric name. - - regexp: "(?Ptest)\\.env(?P[^.]*)\\.(?P[^.]*)" - # name_prefix is added when to the resulting metric name. - name_prefix: "name-prefix" - # labels to be added to the metrics matching this rule. - labels: - dot.key: dot.value - key: value - # type is used to select the metric type to be set, the default is - # "gauge", the other alternative is "cumulative". - type: cumulative - # The second rule for this "regex" parser. - - regexp: "(?Ptest)\\.(?P.*)" - # Name separator is used when concatenating named regular expression - # captures prefixed with "name_" - name_separator: "_" - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [carbon, carbon/receiver_settings, carbon/regex] - processors: [nop] - exporters: [nop] +carbon: +carbon/receiver_settings: + # endpoint specifies the network interface and port which will receive + # Carbon data. + endpoint: localhost:8080 + # transport specifies either "tcp" (the default) or "udp". + transport: udp + # tcp_idle_timeout is max duration that a tcp connection will idle wait for + # new data. This value is ignored is the transport is not "tcp". The default + # value is 30 seconds. + tcp_idle_timeout: 5s + # parser section is used to to configure the actual parser to handle the + # received data. The default is "plaintext", see + # https://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-plaintext-protocol. + parser: + # type specifies the type of parser to be used, the default is "plaintext" + type: plaintext + # config specifies any special configuration of the selected parser. What + # goes under the section depends on the type of parser selected. + config: +carbon/regex: + parser: + # The "regex" parser can breakdown the "metric path" of a Carbon metric + # into metric labels. This is typically used to extract the labels from + # a naming hierarchy, see https://graphite.readthedocs.io/en/latest/feeding-carbon.html#step-1-plan-a-naming-hierarchy + type: regex + # config section with the custom config for the "regex" parser. + config: + # Rules with regular expressions to be applied to the received metrics. + # The first rule that matches the metric is applied and no further rules + # are applied. If no rules match the metric is processed by the "plaintext" + # parser. + rules: + # The first rule generates extract dimensions with keys: "base", "env", + # and "host" if the "metric path" matches the regular expression of the + # rule. Regular expression named captures prefixed with "key_" are used + # to populate metric labels, while named captures prefixed with "name_" + # are used to generate the final metric name. The "name_*" captures are + # sorted by name and their values are used to compose the resulting + # metric name. + - regexp: "(?Ptest)\\.env(?P[^.]*)\\.(?P[^.]*)" + # name_prefix is added when to the resulting metric name. + name_prefix: "name-prefix" + # labels to be added to the metrics matching this rule. + labels: + dot.key: dot.value + key: value + # type is used to select the metric type to be set, the default is + # "gauge", the other alternative is "cumulative". + type: cumulative + # The second rule for this "regex" parser. + - regexp: "(?Ptest)\\.(?P.*)" + # Name separator is used when concatenating named regular expression + # captures prefixed with "name_" + name_separator: "_" diff --git a/receiver/chronyreceiver/config_test.go b/receiver/chronyreceiver/config_test.go index 87a722c7f504..37673b63abfc 100644 --- a/receiver/chronyreceiver/config_test.go +++ b/receiver/chronyreceiver/config_test.go @@ -17,16 +17,15 @@ package chronyreceiver import ( "fmt" "os" - "path" + "path/filepath" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" + "go.opentelemetry.io/collector/confmap/confmaptest" "go.opentelemetry.io/collector/receiver/scraperhelper" - "go.opentelemetry.io/collector/service/servicetest" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver/internal/chrony" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver/internal/metadata" @@ -35,24 +34,22 @@ import ( func TestLoadConfig(t *testing.T) { t.Parallel() - factories, err := componenttest.NopFactories() - require.NoError(t, err, "Must not error on creating Nop factories") + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yml")) + require.NoError(t, err) factory := NewFactory() - factories.Receivers[typeStr] = factory + cfg := factory.CreateDefaultConfig() - cfg, err := servicetest.LoadConfigAndValidate(path.Join("testdata", "config.yml"), factories) - require.NoError(t, err, "Must not error when loading configuration") + sub, err := cm.Sub(config.NewComponentIDWithName(typeStr, "custom").String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) - chronyConf := cfg.Receivers[config.NewComponentIDWithName(typeStr, "custom")] - expect := &Config{ + assert.Equal(t, &Config{ ScraperControllerSettings: scraperhelper.NewDefaultScraperControllerSettings(typeStr), MetricsSettings: metadata.DefaultMetricsSettings(), Endpoint: "udp://localhost:3030", Timeout: 10 * time.Second, - } - expect.SetIDName("custom") - assert.Equal(t, expect, chronyConf) + }, cfg) } func TestValidate(t *testing.T) { diff --git a/receiver/chronyreceiver/testdata/config.yml b/receiver/chronyreceiver/testdata/config.yml index a748a5819dbb..5fbe436ecc84 100644 --- a/receiver/chronyreceiver/testdata/config.yml +++ b/receiver/chronyreceiver/testdata/config.yml @@ -1,18 +1,3 @@ ---- -receivers: - chrony/custom: - endpoint: "udp://localhost:3030" - timeout: 10s - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [chrony/custom] - processors: [nop] - exporters: [nop] +chrony/custom: + endpoint: "udp://localhost:3030" + timeout: 10s diff --git a/receiver/cloudfoundryreceiver/config_test.go b/receiver/cloudfoundryreceiver/config_test.go index 1d0ad42807cb..a6ce77cb392d 100644 --- a/receiver/cloudfoundryreceiver/config_test.go +++ b/receiver/cloudfoundryreceiver/config_test.go @@ -22,67 +22,75 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/confighttp" "go.opentelemetry.io/collector/config/configtls" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" ) func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - require.NoError(t, err) - - factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - - require.NoError(t, err) - require.NotNil(t, cfg) - - require.Len(t, cfg.Receivers, 2) - - r0 := cfg.Receivers[config.NewComponentID(typeStr)] - defaultConfig := factory.CreateDefaultConfig().(*Config) - defaultConfig.UAA.Password = "test" - assert.Equal(t, defaultConfig, r0) - - r1 := cfg.Receivers[config.NewComponentIDWithName(typeStr, "one")].(*Config) - assert.Equal(t, - &Config{ - ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(typeStr, "one")), - RLPGateway: RLPGatewayConfig{ - HTTPClientSettings: confighttp.HTTPClientSettings{ - Endpoint: "https://log-stream.sys.example.internal", - TLSSetting: configtls.TLSClientSetting{ - InsecureSkipVerify: true, + t.Parallel() + + tests := []struct { + id config.ComponentID + expected config.Receiver + errorMessage string + }{ + { + id: config.NewComponentIDWithName(typeStr, "one"), + expected: &Config{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), + RLPGateway: RLPGatewayConfig{ + HTTPClientSettings: confighttp.HTTPClientSettings{ + Endpoint: "https://log-stream.sys.example.internal", + TLSSetting: configtls.TLSClientSetting{ + InsecureSkipVerify: true, + }, + Timeout: time.Second * 20, }, - Timeout: time.Second * 20, + ShardID: "otel-test", }, - ShardID: "otel-test", - }, - UAA: UAAConfig{ - LimitedHTTPClientSettings: LimitedHTTPClientSettings{ - Endpoint: "https://uaa.sys.example.internal", - TLSSetting: LimitedTLSClientSetting{ - InsecureSkipVerify: true, + UAA: UAAConfig{ + LimitedHTTPClientSettings: LimitedHTTPClientSettings{ + Endpoint: "https://uaa.sys.example.internal", + TLSSetting: LimitedTLSClientSetting{ + InsecureSkipVerify: true, + }, }, + Username: "admin", + Password: "test", }, - Username: "admin", - Password: "test", }, - }, r1) -} - -func TestLoadInvalidConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - require.NoError(t, err) - - factory := NewFactory() - factories.Receivers[typeStr] = factory - _, err = servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config-invalid.yaml"), factories) - - require.Error(t, err) + }, + { + id: config.NewComponentIDWithName(typeStr, "empty"), + errorMessage: "UAA password not specified", + }, + { + id: config.NewComponentIDWithName(typeStr, "invalid"), + errorMessage: "failed to parse rlp_gateway.endpoint as url: parse \"https://[invalid\": missing ']' in host", + }, + } + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) + + factory := NewFactory() + cfg := factory.CreateDefaultConfig() + + sub, err := cm.Sub(tt.id.String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) + + if tt.expected == nil { + assert.EqualError(t, cfg.Validate(), tt.errorMessage) + return + } + assert.NoError(t, cfg.Validate()) + assert.Equal(t, tt.expected, cfg) + }) + } } func TestInvalidConfigValidation(t *testing.T) { diff --git a/receiver/cloudfoundryreceiver/testdata/config-invalid.yaml b/receiver/cloudfoundryreceiver/testdata/config-invalid.yaml index 1fce3d1a2b3b..e69de29bb2d1 100644 --- a/receiver/cloudfoundryreceiver/testdata/config-invalid.yaml +++ b/receiver/cloudfoundryreceiver/testdata/config-invalid.yaml @@ -1,28 +0,0 @@ -receivers: - cloudfoundry: - cloudfoundry/one: - rlp_gateway: - endpoint: "https://[invalid" - shard_id: "otel-test" - timeout: "20s" - tls: - insecure_skip_verify: true - uaa: - endpoint: "https://uaa.sys.example.internal" - username: "admin" - password: "test" - tls: - insecure_skip_verify: true - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [cloudfoundry, cloudfoundry/one] - processors: [nop] - exporters: [nop] diff --git a/receiver/cloudfoundryreceiver/testdata/config.yaml b/receiver/cloudfoundryreceiver/testdata/config.yaml index 304c242ee017..1bcbcbe4a8be 100644 --- a/receiver/cloudfoundryreceiver/testdata/config.yaml +++ b/receiver/cloudfoundryreceiver/testdata/config.yaml @@ -1,30 +1,33 @@ -receivers: - cloudfoundry: - uaa: - password: "test" - cloudfoundry/one: - rlp_gateway: - endpoint: "https://log-stream.sys.example.internal" - shard_id: "otel-test" - timeout: "20s" - tls: - insecure_skip_verify: true - uaa: - endpoint: "https://uaa.sys.example.internal" - username: "admin" - password: "test" - tls: - insecure_skip_verify: true +cloudfoundry: + uaa: + password: "test" -processors: - nop: +cloudfoundry/one: + rlp_gateway: + endpoint: "https://log-stream.sys.example.internal" + shard_id: "otel-test" + timeout: "20s" + tls: + insecure_skip_verify: true + uaa: + endpoint: "https://uaa.sys.example.internal" + username: "admin" + password: "test" + tls: + insecure_skip_verify: true -exporters: - nop: +cloudfoundry/empty: -service: - pipelines: - metrics: - receivers: [cloudfoundry, cloudfoundry/one] - processors: [nop] - exporters: [nop] +cloudfoundry/invalid: + rlp_gateway: + endpoint: "https://[invalid" + shard_id: "otel-test" + timeout: "20s" + tls: + insecure_skip_verify: true + uaa: + endpoint: "https://uaa.sys.example.internal" + username: "admin" + password: "test" + tls: + insecure_skip_verify: true diff --git a/receiver/collectdreceiver/config_test.go b/receiver/collectdreceiver/config_test.go index 3c73730ad738..e4b275a7940b 100644 --- a/receiver/collectdreceiver/config_test.go +++ b/receiver/collectdreceiver/config_test.go @@ -21,37 +21,50 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/confignet" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" ) func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - assert.Nil(t, err) + t.Parallel() - factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) + tests := []struct { + id config.ComponentID + expected config.Receiver + }{ + { + id: config.NewComponentIDWithName(typeStr, ""), + expected: createDefaultConfig(), + }, + { + id: config.NewComponentIDWithName(typeStr, "one"), + expected: &Config{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), + TCPAddr: confignet.TCPAddr{ + Endpoint: "localhost:12345", + }, + Timeout: time.Second * 50, + AttributesPrefix: "dap_", + Encoding: "command", + }, + }, + } - require.NoError(t, err) - require.NotNil(t, cfg) + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) - assert.Equal(t, len(cfg.Receivers), 2) + factory := NewFactory() + cfg := factory.CreateDefaultConfig() - r0 := cfg.Receivers[config.NewComponentID(typeStr)] - assert.Equal(t, r0, factory.CreateDefaultConfig()) + sub, err := cm.Sub(tt.id.String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) - r1 := cfg.Receivers[config.NewComponentIDWithName(typeStr, "one")].(*Config) - assert.Equal(t, r1, - &Config{ - ReceiverSettings: config.NewReceiverSettings(config.NewComponentIDWithName(typeStr, "one")), - TCPAddr: confignet.TCPAddr{ - Endpoint: "localhost:12345", - }, - Timeout: time.Second * 50, - AttributesPrefix: "dap_", - Encoding: "command", + assert.NoError(t, cfg.Validate()) + assert.Equal(t, tt.expected, cfg) }) + } } diff --git a/receiver/collectdreceiver/testdata/config.yaml b/receiver/collectdreceiver/testdata/config.yaml index f5cccbb36e9e..ab741d14a027 100644 --- a/receiver/collectdreceiver/testdata/config.yaml +++ b/receiver/collectdreceiver/testdata/config.yaml @@ -1,32 +1,18 @@ -receivers: - collectd: - collectd/one: - endpoint: "localhost:12345" +collectd: +collectd/one: + endpoint: "localhost:12345" - # Used as read and write timeout for the HTTP server started by the receiver. - timeout: "50s" + # Used as read and write timeout for the HTTP server started by the receiver. + timeout: "50s" - # Receiver will look for query params that are prefixed with this value - # and add them as attributes to all the metrics supplied by the request. - # For example, if the receiver receives a request at `/post-collectd?dap_k=v` - # and attributes_prefix is set to "dap"_, then all metrics supplied by the - # request will have an attribute with key `k` and value `v`. - attributes_prefix: "dap_" + # Receiver will look for query params that are prefixed with this value + # and add them as attributes to all the metrics supplied by the request. + # For example, if the receiver receives a request at `/post-collectd?dap_k=v` + # and attributes_prefix is set to "dap"_, then all metrics supplied by the + # request will have an attribute with key `k` and value `v`. + attributes_prefix: "dap_" - # Which encoding format should the receiver try to decode the request with. - # Receiver only supports JSON. This options only exists to make keep things - # explicit and as a placeholder for any formats added in future. - encoding: "command" - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - traces: - receivers: [collectd, collectd/one] - processors: [nop] - exporters: [nop] + # Which encoding format should the receiver try to decode the request with. + # Receiver only supports JSON. This options only exists to make keep things + # explicit and as a placeholder for any formats added in future. + encoding: "command" diff --git a/receiver/couchdbreceiver/testdata/config.yaml b/receiver/couchdbreceiver/testdata/config.yaml index 08c738ddec15..e215553e9220 100644 --- a/receiver/couchdbreceiver/testdata/config.yaml +++ b/receiver/couchdbreceiver/testdata/config.yaml @@ -1,19 +1,5 @@ -receivers: - couchdb: - endpoint: http://localhost:5984 - username: otelu - password: $COUCHDB_PASSWORD - collection_interval: 60s - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [couchdb] - processors: [nop] - exporters: [nop] +couchdb: + endpoint: http://localhost:5984 + username: otelu + password: $COUCHDB_PASSWORD + collection_interval: 60s diff --git a/receiver/dotnetdiagnosticsreceiver/config_test.go b/receiver/dotnetdiagnosticsreceiver/config_test.go index d8507410f373..02cedd9c2a14 100644 --- a/receiver/dotnetdiagnosticsreceiver/config_test.go +++ b/receiver/dotnetdiagnosticsreceiver/config_test.go @@ -21,23 +21,28 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/confmap/confmaptest" + "go.opentelemetry.io/collector/receiver/scraperhelper" ) func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) require.NoError(t, err) - factories.Receivers[typeStr] = NewFactory() - collectorCfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - require.NotNil(t, collectorCfg) - cfg := collectorCfg.Receivers[config.NewComponentID(typeStr)].(*Config) - require.NotNil(t, cfg) + factory := NewFactory() + cfg := factory.CreateDefaultConfig() + + sub, err := cm.Sub(config.NewComponentIDWithName(typeStr, "").String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) - assert.Equal(t, 1234, cfg.PID) - assert.Equal(t, 2*time.Second, cfg.CollectionInterval) - assert.Equal(t, []string{"Foo", "Bar"}, cfg.Counters) + assert.Equal(t, &Config{ + PID: 1234, + Counters: []string{"Foo", "Bar"}, + ScraperControllerSettings: scraperhelper.ScraperControllerSettings{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), + CollectionInterval: 2 * time.Second, + }, + }, cfg) } diff --git a/receiver/dotnetdiagnosticsreceiver/testdata/config.yaml b/receiver/dotnetdiagnosticsreceiver/testdata/config.yaml index 87298b38921b..55fad0c5f465 100644 --- a/receiver/dotnetdiagnosticsreceiver/testdata/config.yaml +++ b/receiver/dotnetdiagnosticsreceiver/testdata/config.yaml @@ -1,18 +1,4 @@ -receivers: - dotnet_diagnostics: - pid: 1234 - collection_interval: 2s - counters: [ "Foo", "Bar" ] - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [ dotnet_diagnostics ] - processors: [ nop ] - exporters: [ nop ] +dotnet_diagnostics: + pid: 1234 + collection_interval: 2s + counters: [ "Foo", "Bar" ] diff --git a/receiver/elasticsearchreceiver/config_test.go b/receiver/elasticsearchreceiver/config_test.go index 93eea5de4e34..1395115e2e80 100644 --- a/receiver/elasticsearchreceiver/config_test.go +++ b/receiver/elasticsearchreceiver/config_test.go @@ -19,10 +19,14 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" - "go.opentelemetry.io/collector/service/servicetest" + "go.opentelemetry.io/collector/config/confighttp" + "go.opentelemetry.io/collector/confmap/confmaptest" + "go.opentelemetry.io/collector/receiver/scraperhelper" + + "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver/internal/metadata" ) func TestValidateCredentials(t *testing.T) { @@ -146,33 +150,50 @@ func TestValidateEndpoint(t *testing.T) { func TestLoadConfig(t *testing.T) { t.Parallel() - factories, err := componenttest.NopFactories() - require.NoError(t, err) - - factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - require.NotNil(t, cfg) - - require.Equal(t, len(cfg.Receivers), 2) - defaultRecvID := config.NewComponentIDWithName(typeStr, "defaults") + defaultMetrics := metadata.DefaultMetricsSettings() + defaultMetrics.ElasticsearchNodeFsDiskAvailable.Enabled = false + tests := []struct { + id config.ComponentID + expected config.Receiver + }{ + { + id: config.NewComponentIDWithName(typeStr, "defaults"), + expected: createDefaultConfig(), + }, + { + id: config.NewComponentIDWithName(typeStr, ""), + expected: &Config{ + SkipClusterMetrics: true, + Nodes: []string{"_local"}, + ScraperControllerSettings: scraperhelper.ScraperControllerSettings{ + ReceiverSettings: config.NewReceiverSettings(config.NewComponentID(typeStr)), + CollectionInterval: 2 * time.Minute, + }, + Metrics: defaultMetrics, + Username: "otel", + Password: "password", + HTTPClientSettings: confighttp.HTTPClientSettings{ + Timeout: 10000000000, + Endpoint: "http://example.com:9200", + }, + }, + }, + } - defaultCfg := factory.CreateDefaultConfig().(*Config) - defaultCfg.ReceiverSettings.SetIDName(defaultRecvID.Name()) - defaultReceiver := cfg.Receivers[defaultRecvID] - require.Equal(t, defaultCfg, defaultReceiver) + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) - advancedRecv := cfg.Receivers[config.NewComponentID(typeStr)] - expectedAdvancedRecv := factory.CreateDefaultConfig().(*Config) + factory := NewFactory() + cfg := factory.CreateDefaultConfig() - expectedAdvancedRecv.Metrics.ElasticsearchNodeFsDiskAvailable.Enabled = false - expectedAdvancedRecv.Nodes = []string{"_local"} - expectedAdvancedRecv.SkipClusterMetrics = true - expectedAdvancedRecv.Username = "otel" - expectedAdvancedRecv.Password = "password" - expectedAdvancedRecv.Endpoint = "http://example.com:9200" - expectedAdvancedRecv.ScraperControllerSettings.CollectionInterval = 2 * time.Minute + sub, err := cm.Sub(tt.id.String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) - require.Equal(t, expectedAdvancedRecv, advancedRecv) + assert.NoError(t, cfg.Validate()) + assert.Equal(t, tt.expected, cfg) + }) + } } diff --git a/receiver/elasticsearchreceiver/testdata/config.yaml b/receiver/elasticsearchreceiver/testdata/config.yaml index 9dc359149c68..eed921a24c2b 100644 --- a/receiver/elasticsearchreceiver/testdata/config.yaml +++ b/receiver/elasticsearchreceiver/testdata/config.yaml @@ -1,25 +1,11 @@ -receivers: - elasticsearch: - metrics: - elasticsearch.node.fs.disk.available: - enabled: false - nodes: ["_local"] - skip_cluster_metrics: true - endpoint: http://example.com:9200 - username: otel - password: password - collection_interval: 2m - elasticsearch/defaults: - -processors: - nop: - -exporters: - nop: - -service: - pipelines: - metrics: - receivers: [elasticsearch] - processors: [nop] - exporters: [nop] +elasticsearch/defaults: +elasticsearch: + metrics: + elasticsearch.node.fs.disk.available: + enabled: false + nodes: [ "_local" ] + skip_cluster_metrics: true + endpoint: http://example.com:9200 + username: otel + password: password + collection_interval: 2m diff --git a/receiver/filelogreceiver/filelog_test.go b/receiver/filelogreceiver/filelog_test.go index ccca325a580d..25ccaf5d7518 100644 --- a/receiver/filelogreceiver/filelog_test.go +++ b/receiver/filelogreceiver/filelog_test.go @@ -30,9 +30,9 @@ import ( "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/configtest" + "go.opentelemetry.io/collector/confmap/confmaptest" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/pdata/plog" - "go.opentelemetry.io/collector/service/servicetest" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/adapter" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/entry" @@ -48,18 +48,18 @@ func TestDefaultConfig(t *testing.T) { } func TestLoadConfig(t *testing.T) { - factories, err := componenttest.NopFactories() - assert.Nil(t, err) + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) factory := NewFactory() - factories.Receivers[typeStr] = factory - cfg, err := servicetest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories) - require.NoError(t, err) - require.NotNil(t, cfg) + cfg := factory.CreateDefaultConfig() - assert.Equal(t, len(cfg.Receivers), 1) + sub, err := cm.Sub(config.NewComponentID("filelog").String()) + require.NoError(t, err) + require.NoError(t, config.UnmarshalReceiver(sub, cfg)) - assert.Equal(t, testdataConfigYaml(), cfg.Receivers[config.NewComponentID("filelog")]) + assert.NoError(t, cfg.Validate()) + assert.Equal(t, testdataConfigYaml(), cfg) } func TestCreateWithInvalidInputConfig(t *testing.T) { diff --git a/receiver/filelogreceiver/testdata/config.yaml b/receiver/filelogreceiver/testdata/config.yaml index 4fb059161ea9..1b39fb4ab050 100644 --- a/receiver/filelogreceiver/testdata/config.yaml +++ b/receiver/filelogreceiver/testdata/config.yaml @@ -1,28 +1,14 @@ -receivers: - filelog: - include: [ testdata/simple.log ] - start_at: beginning - operators: - - type: regex_parser - regex: '^(?P