pkg/stanza/operator/operatortest/confmap.go (67 lines of code) (raw):
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package operatortest // import "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator/operatortest"
import (
"testing"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/confmap/confmaptest"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator"
)
// ConfigUnmarshalTest is used for testing golden configs
type ConfigUnmarshalTests struct {
DefaultConfig operator.Builder
TestsFile string
Tests []ConfigUnmarshalTest
}
// ConfigUnmarshalTest is used for testing golden configs
type ConfigUnmarshalTest struct {
Name string
Expect any
ExpectErr bool
}
// Run Unmarshals yaml files and compares them against the expected.
func (c ConfigUnmarshalTests) Run(t *testing.T) {
testConfMaps, err := confmaptest.LoadConf(c.TestsFile)
require.NoError(t, err)
for _, tc := range c.Tests {
t.Run(tc.Name, func(t *testing.T) {
testConfMap, err := testConfMaps.Sub(tc.Name)
require.NoError(t, err)
require.NotEmpty(t, testConfMap.AllKeys(), "config not found: '%s'", tc.Name)
cfg := newAnyOpConfig(c.DefaultConfig)
err = testConfMap.Unmarshal(cfg)
if tc.ExpectErr {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tc.Expect, cfg.Operator.Builder)
}
})
}
}
type anyOpConfig struct {
Operator operator.Config `mapstructure:"operator"`
}
func newAnyOpConfig(opCfg operator.Builder) *anyOpConfig {
return &anyOpConfig{
Operator: operator.Config{Builder: opCfg},
}
}
func (a *anyOpConfig) Unmarshal(component *confmap.Conf) error {
return a.Operator.Unmarshal(component)
}
// ConfigBuilderTests is used for testing build failures
type ConfigBuilderTests struct {
Tests []ConfigBuilderTest
}
// ConfigBuilderTest is used for testing build failures
type ConfigBuilderTest struct {
Name string
Cfg operator.Builder
BuildError string
}
// Run Build on a malformed config and expect an error.
func (c ConfigBuilderTests) Run(t *testing.T) {
for _, tc := range c.Tests {
t.Run(tc.Name, func(t *testing.T) {
cfg := tc.Cfg
set := componenttest.NewNopTelemetrySettings()
_, err := cfg.Build(set)
require.Equal(t, tc.BuildError, err.Error())
})
}
}