Skip to content

Commit 880047b

Browse files
gjasnyatoulme
authored andcommitted
[chore] [pkg/stanza] refactor test code into ConfigBuilderTests (open-telemetry#38476)
This is a follow-up from open-telemetry#37443. It extracts the test logic for operator build errors into re-useable methods. --------- Co-authored-by: Antoine Toulme <[email protected]>
1 parent ea9e88c commit 880047b

File tree

2 files changed

+71
-63
lines changed

2 files changed

+71
-63
lines changed

pkg/stanza/operator/operatortest/confmap.go

+25
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"testing"
88

99
"github.com/stretchr/testify/require"
10+
"go.opentelemetry.io/collector/component/componenttest"
1011
"go.opentelemetry.io/collector/confmap"
1112
"go.opentelemetry.io/collector/confmap/confmaptest"
1213

@@ -64,3 +65,27 @@ func newAnyOpConfig(opCfg operator.Builder) *anyOpConfig {
6465
func (a *anyOpConfig) Unmarshal(component *confmap.Conf) error {
6566
return a.Operator.Unmarshal(component)
6667
}
68+
69+
// ConfigBuilderTests is used for testing build failures
70+
type ConfigBuilderTests struct {
71+
Tests []ConfigBuilderTest
72+
}
73+
74+
// ConfigBuilderTest is used for testing build failures
75+
type ConfigBuilderTest struct {
76+
Name string
77+
Cfg operator.Builder
78+
BuildError string
79+
}
80+
81+
// Run Build on a malformed config and expect an error.
82+
func (c ConfigBuilderTests) Run(t *testing.T) {
83+
for _, tc := range c.Tests {
84+
t.Run(tc.Name, func(t *testing.T) {
85+
cfg := tc.Cfg
86+
set := componenttest.NewNopTelemetrySettings()
87+
_, err := cfg.Build(set)
88+
require.Equal(t, tc.BuildError, err.Error())
89+
})
90+
}
91+
}

pkg/stanza/operator/transformer/regexreplace/config_test.go

+46-63
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import (
66
"path/filepath"
77
"testing"
88

9-
"github.com/stretchr/testify/require"
10-
"go.opentelemetry.io/collector/component/componenttest"
11-
129
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/entry"
1310
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator/operatortest"
1411
)
@@ -87,65 +84,51 @@ func TestUnmarshal(t *testing.T) {
8784
}.Run(t)
8885
}
8986

90-
type invalidConfigCase struct {
91-
name string
92-
cfg *Config
93-
expectErr string
94-
}
95-
96-
func TestInvalidConfig(t *testing.T) {
97-
cases := []invalidConfigCase{
98-
{
99-
name: "neither_regex_nor_regexname",
100-
cfg: func() *Config {
101-
cfg := NewConfig()
102-
cfg.Field = entry.NewBodyField()
103-
cfg.RegexName = ""
104-
cfg.Regex = ""
105-
return cfg
106-
}(),
107-
expectErr: "either regex or regex_name must be set",
108-
},
109-
{
110-
name: "both_regex_and_regexname",
111-
cfg: func() *Config {
112-
cfg := NewConfig()
113-
cfg.Field = entry.NewBodyField()
114-
cfg.RegexName = "ansi_control_sequences"
115-
cfg.Regex = ".*"
116-
return cfg
117-
}(),
118-
expectErr: "either regex or regex_name must be set",
119-
},
120-
{
121-
name: "unknown_regex_name",
122-
cfg: func() *Config {
123-
cfg := NewConfig()
124-
cfg.Field = entry.NewBodyField()
125-
cfg.RegexName = "i_do_not_exist"
126-
return cfg
127-
}(),
128-
expectErr: "regex_name i_do_not_exist is unknown",
129-
},
130-
{
131-
name: "invalid_regex",
132-
cfg: func() *Config {
133-
cfg := NewConfig()
134-
cfg.Field = entry.NewBodyField()
135-
cfg.Regex = ")"
136-
return cfg
137-
}(),
138-
expectErr: "error parsing regexp: unexpected ): `)`",
87+
func TestBuild(t *testing.T) {
88+
operatortest.ConfigBuilderTests{
89+
Tests: []operatortest.ConfigBuilderTest{
90+
{
91+
Name: "neither_regex_nor_regexname",
92+
Cfg: func() *Config {
93+
cfg := NewConfig()
94+
cfg.Field = entry.NewBodyField()
95+
cfg.RegexName = ""
96+
cfg.Regex = ""
97+
return cfg
98+
}(),
99+
BuildError: "either regex or regex_name must be set",
100+
},
101+
{
102+
Name: "both_regex_and_regexname",
103+
Cfg: func() *Config {
104+
cfg := NewConfig()
105+
cfg.Field = entry.NewBodyField()
106+
cfg.RegexName = "ansi_control_sequences"
107+
cfg.Regex = ".*"
108+
return cfg
109+
}(),
110+
BuildError: "either regex or regex_name must be set",
111+
},
112+
{
113+
Name: "unknown_regex_name",
114+
Cfg: func() *Config {
115+
cfg := NewConfig()
116+
cfg.Field = entry.NewBodyField()
117+
cfg.RegexName = "i_do_not_exist"
118+
return cfg
119+
}(),
120+
BuildError: "regex_name i_do_not_exist is unknown",
121+
},
122+
{
123+
Name: "invalid_regex",
124+
Cfg: func() *Config {
125+
cfg := NewConfig()
126+
cfg.Field = entry.NewBodyField()
127+
cfg.Regex = ")"
128+
return cfg
129+
}(),
130+
BuildError: "error parsing regexp: unexpected ): `)`",
131+
},
139132
},
140-
}
141-
for _, tc := range cases {
142-
t.Run("InvalidConfig/"+tc.name, func(t *testing.T) {
143-
cfg := tc.cfg
144-
cfg.OutputIDs = []string{"fake"}
145-
cfg.OnError = "send"
146-
set := componenttest.NewNopTelemetrySettings()
147-
_, err := cfg.Build(set)
148-
require.Equal(t, tc.expectErr, err.Error())
149-
})
150-
}
133+
}.Run(t)
151134
}

0 commit comments

Comments
 (0)