Skip to content

Commit 9df3d8f

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

File tree

7 files changed

+229
-0
lines changed

7 files changed

+229
-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

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

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)