// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 package sqlserverreceiver import ( "path/filepath" "testing" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/confmap/confmaptest" "go.opentelemetry.io/collector/receiver/scraperhelper" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver/internal/metadata" ) func TestValidate(t *testing.T) { testCases := []struct { desc string cfg *Config }{ { desc: "valid config", cfg: &Config{ MetricsBuilderConfig: metadata.DefaultMetricsBuilderConfig(), ScraperControllerSettings: scraperhelper.NewDefaultScraperControllerSettings(metadata.Type), }, }, { desc: "valid config with no metric settings", cfg: &Config{ ScraperControllerSettings: scraperhelper.NewDefaultScraperControllerSettings(metadata.Type), }, }, { desc: "default config is valid", cfg: createDefaultConfig().(*Config), }, } for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { require.NoError(t, component.ValidateConfig(tc.cfg)) }) } } func TestLoadConfig(t *testing.T) { t.Run("default", 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("sqlserver") require.NoError(t, err) require.NoError(t, component.UnmarshalConfig(sub, cfg)) assert.NoError(t, component.ValidateConfig(cfg)) assert.Equal(t, factory.CreateDefaultConfig(), cfg) }) t.Run("named", func(t *testing.T) { cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) require.NoError(t, err) factory := NewFactory() cfg := factory.CreateDefaultConfig() expected := factory.CreateDefaultConfig().(*Config) expected.MetricsBuilderConfig = metadata.MetricsBuilderConfig{ Metrics: metadata.DefaultMetricsConfig(), ResourceAttributes: metadata.ResourceAttributesConfig{ SqlserverDatabaseName: metadata.ResourceAttributeConfig{ Enabled: true, }, SqlserverInstanceName: metadata.ResourceAttributeConfig{ Enabled: true, }, SqlserverComputerName: metadata.ResourceAttributeConfig{ Enabled: true, }, }, } expected.ComputerName = "CustomServer" expected.InstanceName = "CustomInstance" sub, err := cm.Sub("sqlserver/named") require.NoError(t, err) require.NoError(t, component.UnmarshalConfig(sub, cfg)) assert.NoError(t, component.ValidateConfig(cfg)) if diff := cmp.Diff(expected, cfg, cmpopts.IgnoreUnexported(metadata.MetricConfig{}), cmpopts.IgnoreUnexported(metadata.ResourceAttributeConfig{})); diff != "" { t.Errorf("Config mismatch (-expected +actual):\n%s", diff) } }) }