opentelemetry-collector/exporter/debugexporter/config_test.go

138 lines
2.9 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package debugexporter
import (
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/confmap/confmaptest"
)
func TestUnmarshalDefaultConfig(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
assert.NoError(t, confmap.New().Unmarshal(&cfg))
assert.Equal(t, factory.CreateDefaultConfig(), cfg)
}
func TestUnmarshalConfig(t *testing.T) {
tests := []struct {
filename string
cfg *Config
expectedErr string
}{
{
filename: "config_verbosity.yaml",
cfg: &Config{
Verbosity: configtelemetry.LevelDetailed,
SamplingInitial: 10,
SamplingThereafter: 50,
},
},
{
filename: "config_verbosity_typo.yaml",
expectedErr: "'' has invalid keys: verBosity",
},
}
for _, tt := range tests {
t.Run(tt.filename, func(t *testing.T) {
cm, err := confmaptest.LoadConf(filepath.Join("testdata", tt.filename))
require.NoError(t, err)
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
err = cm.Unmarshal(&cfg)
if tt.expectedErr != "" {
assert.ErrorContains(t, err, tt.expectedErr)
} else {
assert.NoError(t, err)
assert.Equal(t, tt.cfg, cfg)
}
})
}
}
func Test_UnmarshalMarshalled(t *testing.T) {
for name, tc := range map[string]struct {
inCfg *Config
expectedConfig *Config
expectedErr string
}{
"Base": {
inCfg: &Config{},
expectedConfig: &Config{},
},
"VerbositySpecified": {
inCfg: &Config{
Verbosity: configtelemetry.LevelDetailed,
},
expectedConfig: &Config{
Verbosity: configtelemetry.LevelDetailed,
},
},
} {
t.Run(name, func(t *testing.T) {
conf := confmap.New()
err := conf.Marshal(tc.inCfg)
assert.NoError(t, err)
raw := conf.ToStringMap()
conf = confmap.NewFromStringMap(raw)
outCfg := &Config{}
err = conf.Unmarshal(outCfg)
if tc.expectedErr == "" {
assert.NoError(t, err)
assert.Equal(t, outCfg, tc.expectedConfig)
return
}
assert.Error(t, err)
assert.EqualError(t, err, tc.expectedErr)
})
}
}
func TestValidate(t *testing.T) {
tests := []struct {
name string
cfg *Config
expectedErr string
}{
{
name: "verbosity none",
cfg: &Config{
Verbosity: configtelemetry.LevelNone,
},
expectedErr: "verbosity level \"None\" is not supported",
},
{
name: "verbosity detailed",
cfg: &Config{
Verbosity: configtelemetry.LevelDetailed,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := tt.cfg.Validate()
if tt.expectedErr != "" {
assert.EqualError(t, err, tt.expectedErr)
} else {
assert.NoError(t, err)
}
})
}
}