opentelemetry-collector/service/telemetry/config_test.go

119 lines
3.1 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package telemetry
import (
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
config "go.opentelemetry.io/contrib/otelconf/v0.3.0"
"go.uber.org/zap"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/confmap/xconfmap"
)
func TestComponentConfigStruct(t *testing.T) {
require.NoError(t, componenttest.CheckConfigStruct(NewFactory().CreateDefaultConfig()))
}
func TestUnmarshalDefaultConfig(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
require.NoError(t, confmap.New().Unmarshal(&cfg))
assert.Equal(t, factory.CreateDefaultConfig(), cfg)
}
func TestConfig(t *testing.T) {
t.Parallel()
type testcase struct {
setup func(*testing.T) // optional testcase setup
config *Config
unmarshalErr string
validateErr string
}
tests := map[string]testcase{
"config_empty.yaml": {
config: createDefaultConfig().(*Config),
},
"config_logs.yaml": {
config: func() *Config {
cfg := createDefaultConfig().(*Config)
cfg.Logs.Development = true
cfg.Logs.DisableCaller = true
cfg.Logs.DisableStacktrace = true
cfg.Logs.InitialFields = map[string]any{"fieldKey": "fieldValue"}
cfg.Logs.Level = zap.InfoLevel
cfg.Logs.Sampling = &LogsSamplingConfig{
Enabled: false,
Tick: 1 * time.Second,
Initial: 234,
Thereafter: 567,
}
cfg.Logs.Processors = []config.LogRecordProcessor{{
Batch: &config.BatchLogRecordProcessor{
Exporter: config.LogRecordExporter{
Console: config.Console{},
},
},
}}
return cfg
}(),
},
"config_metrics_empty_readers.yaml": {
config: func() *Config {
cfg := createDefaultConfig().(*Config)
cfg.Metrics.Level = configtelemetry.LevelNone
cfg.Metrics.Readers = []config.MetricReader{}
return cfg
}(),
},
"config_invalid_unknown_field.yaml": {
unmarshalErr: `invalid keys: unknown`,
},
"config_invalid_metrics_empty_readers.yaml": {
validateErr: `collector telemetry metrics reader should exist when metric level is not none`,
},
"config_invalid_metrics_views_level.yaml": {
validateErr: `service::telemetry::metrics::views can only be set when service::telemetry::metrics::level is detailed`,
},
}
for filename, test := range tests {
t.Run(filename, func(t *testing.T) {
if test.setup != nil {
test.setup(t)
}
cm, err := confmaptest.LoadConf(filepath.Join("testdata", filename))
require.NoError(t, err)
cfg := createDefaultConfig().(*Config)
err = cm.Unmarshal(cfg)
if test.unmarshalErr != "" {
assert.ErrorContains(t, err, test.unmarshalErr)
return
}
require.NoError(t, err)
err = xconfmap.Validate(cfg)
if test.validateErr != "" {
assert.ErrorContains(t, err, test.validateErr)
return
}
require.NoError(t, err)
assert.Equal(t, test.config, cfg)
})
}
}