Skip to content

Commit 573732c

Browse files
committed
[chore] Add end to end tests for type casting
1 parent 964e3a9 commit 573732c

File tree

7 files changed

+226
-0
lines changed

7 files changed

+226
-0
lines changed

confmap/internal/e2e/Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include ../../../Makefile.Common

confmap/internal/e2e/go.mod

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
module go.opentelemetry.io/collector/confmap/internal/e2e
2+
3+
go 1.21.0
4+
5+
require (
6+
github.com/stretchr/testify v1.9.0
7+
go.opentelemetry.io/collector/confmap v0.102.1
8+
go.opentelemetry.io/collector/confmap/provider/envprovider v0.102.1
9+
go.opentelemetry.io/collector/confmap/provider/fileprovider v0.102.1
10+
)
11+
12+
require (
13+
github.com/davecgh/go-spew v1.1.1 // indirect
14+
github.com/go-viper/mapstructure/v2 v2.0.0 // indirect
15+
github.com/knadh/koanf/maps v0.1.1 // indirect
16+
github.com/knadh/koanf/providers/confmap v0.1.0 // indirect
17+
github.com/knadh/koanf/v2 v2.1.1 // indirect
18+
github.com/mitchellh/copystructure v1.2.0 // indirect
19+
github.com/mitchellh/reflectwalk v1.0.2 // indirect
20+
github.com/pmezard/go-difflib v1.0.0 // indirect
21+
go.uber.org/multierr v1.11.0 // indirect
22+
go.uber.org/zap v1.27.0 // indirect
23+
gopkg.in/yaml.v3 v3.0.1 // indirect
24+
)
25+
26+
replace go.opentelemetry.io/collector/confmap => ../../
27+
28+
replace go.opentelemetry.io/collector/confmap/provider/fileprovider => ../../provider/fileprovider
29+
30+
replace go.opentelemetry.io/collector/confmap/provider/envprovider => ../../provider/envprovider

confmap/internal/e2e/go.sum

+28
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
field: ${env:ENV}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
field: "inline field with ${env:ENV} expansion"

confmap/internal/e2e/types_test.go

+164
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
package e2etest
2+
3+
import (
4+
"context"
5+
"path/filepath"
6+
"testing"
7+
8+
"github.com/stretchr/testify/require"
9+
"go.opentelemetry.io/collector/confmap"
10+
"go.opentelemetry.io/collector/confmap/provider/envprovider"
11+
"go.opentelemetry.io/collector/confmap/provider/fileprovider"
12+
)
13+
14+
type TargetField string
15+
16+
const (
17+
TargetFieldInt TargetField = "int_field"
18+
TargetFieldString TargetField = "string_field"
19+
TargetFieldBool TargetField = "bool_field"
20+
TargetFieldInlineString TargetField = "inline_string_field"
21+
)
22+
23+
type Test struct {
24+
value string
25+
targetField TargetField
26+
expected any
27+
expectErr bool
28+
}
29+
30+
type TargetConfig[T any] struct {
31+
Field T `mapstructure:"field"`
32+
}
33+
34+
func AssertExpectedMatch[T any](t *testing.T, tt Test, conf *confmap.Conf, cfg *TargetConfig[T]) {
35+
err := conf.Unmarshal(cfg)
36+
if tt.expectErr {
37+
require.Error(t, err)
38+
return
39+
}
40+
require.NoError(t, err)
41+
require.Equal(t, tt.expected, cfg.Field)
42+
}
43+
44+
func TestTypeCasting(t *testing.T) {
45+
values := []Test{
46+
{
47+
value: "123",
48+
targetField: TargetFieldInt,
49+
expected: 123,
50+
},
51+
{
52+
value: "123",
53+
targetField: TargetFieldString,
54+
expected: "123",
55+
},
56+
{
57+
value: "123",
58+
targetField: TargetFieldInlineString,
59+
expected: "inline field with 123 expansion",
60+
},
61+
{
62+
value: "0123",
63+
targetField: TargetFieldInt,
64+
expected: 83,
65+
},
66+
{
67+
value: "0123",
68+
targetField: TargetFieldString,
69+
expected: "83",
70+
},
71+
{
72+
value: "0123",
73+
targetField: TargetFieldInlineString,
74+
expected: "inline field with 83 expansion",
75+
},
76+
{
77+
value: "0xdeadbeef",
78+
targetField: TargetFieldInt,
79+
expected: 3735928559,
80+
},
81+
{
82+
value: "0xdeadbeef",
83+
targetField: TargetFieldString,
84+
expected: "3735928559",
85+
},
86+
{
87+
value: "0xdeadbeef",
88+
targetField: TargetFieldInlineString,
89+
expected: "inline field with 3735928559 expansion",
90+
},
91+
{
92+
value: "\"0123\"",
93+
targetField: TargetFieldString,
94+
expected: "0123",
95+
},
96+
{
97+
value: "\"0123\"",
98+
targetField: TargetFieldInt,
99+
expected: 83,
100+
},
101+
{
102+
value: "\"0123\"",
103+
targetField: TargetFieldInlineString,
104+
expected: "inline field with 0123 expansion",
105+
},
106+
{
107+
value: "!!str 0123",
108+
targetField: TargetFieldString,
109+
expected: "0123",
110+
},
111+
{
112+
value: "!!str 0123",
113+
targetField: TargetFieldInlineString,
114+
expected: "inline field with 0123 expansion",
115+
},
116+
{
117+
value: "t",
118+
targetField: TargetFieldBool,
119+
expected: true,
120+
},
121+
{
122+
value: "23",
123+
targetField: TargetFieldBool,
124+
expected: true,
125+
},
126+
}
127+
128+
for _, tt := range values {
129+
t.Run(tt.value+"/"+string(tt.targetField), func(t *testing.T) {
130+
testFile := "types_expand.yaml"
131+
if tt.targetField == TargetFieldInlineString {
132+
testFile = "types_expand_inline.yaml"
133+
}
134+
135+
resolver, err := confmap.NewResolver(confmap.ResolverSettings{
136+
URIs: []string{filepath.Join("testdata", testFile)},
137+
ProviderFactories: []confmap.ProviderFactory{
138+
fileprovider.NewFactory(),
139+
envprovider.NewFactory(),
140+
},
141+
})
142+
require.NoError(t, err)
143+
t.Setenv("ENV", tt.value)
144+
145+
conf, err := resolver.Resolve(context.Background())
146+
require.NoError(t, err)
147+
148+
switch tt.targetField {
149+
case TargetFieldInt:
150+
var cfg TargetConfig[int]
151+
AssertExpectedMatch(t, tt, conf, &cfg)
152+
case TargetFieldString, TargetFieldInlineString:
153+
var cfg TargetConfig[string]
154+
AssertExpectedMatch(t, tt, conf, &cfg)
155+
case TargetFieldBool:
156+
var cfg TargetConfig[bool]
157+
AssertExpectedMatch(t, tt, conf, &cfg)
158+
default:
159+
t.Fatalf("unexpected target field %q", tt.targetField)
160+
}
161+
162+
})
163+
}
164+
}

versions.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,4 @@ excluded-modules:
6262
- go.opentelemetry.io/collector/cmd/otelcorecol
6363
- go.opentelemetry.io/collector/internal/e2e
6464
- go.opentelemetry.io/collector/internal/tools
65+
- go.opentelemetry.io/collector/confmap/internal/e2e

0 commit comments

Comments
 (0)