Skip to content

Commit 115fb2c

Browse files
committed
[receiver/otlp] Test configoptional alternative implementation
1 parent bf38777 commit 115fb2c

File tree

14 files changed

+114
-114
lines changed

14 files changed

+114
-114
lines changed

cmd/builder/internal/builder/main_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ var replaceModules = []string{
5050
"/config/configmiddleware",
5151
"/config/confignet",
5252
"/config/configopaque",
53+
"/config/configoptional",
5354
"/config/configretry",
5455
"/config/configtelemetry",
5556
"/config/configtls",

cmd/otelcorecol/builder-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ replaces:
4949
- go.opentelemetry.io/collector/config/configmiddleware => ../../config/configmiddleware
5050
- go.opentelemetry.io/collector/config/confignet => ../../config/confignet
5151
- go.opentelemetry.io/collector/config/configopaque => ../../config/configopaque
52+
- go.opentelemetry.io/collector/config/configoptional => ../../config/configoptional
5253
- go.opentelemetry.io/collector/config/configretry => ../../config/configretry
5354
- go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry
5455
- go.opentelemetry.io/collector/config/configtls => ../../config/configtls

cmd/otelcorecol/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ require (
9595
go.opentelemetry.io/collector/config/configmiddleware v0.126.0 // indirect
9696
go.opentelemetry.io/collector/config/confignet v1.32.0 // indirect
9797
go.opentelemetry.io/collector/config/configopaque v1.32.0 // indirect
98+
go.opentelemetry.io/collector/config/configoptional v0.0.0-00010101000000-000000000000 // indirect
9899
go.opentelemetry.io/collector/config/configretry v1.32.0 // indirect
99100
go.opentelemetry.io/collector/config/configtelemetry v0.126.0 // indirect
100101
go.opentelemetry.io/collector/config/configtls v1.32.0 // indirect
@@ -197,6 +198,8 @@ replace go.opentelemetry.io/collector/config/confignet => ../../config/confignet
197198

198199
replace go.opentelemetry.io/collector/config/configopaque => ../../config/configopaque
199200

201+
replace go.opentelemetry.io/collector/config/configoptional => ../../config/configoptional
202+
200203
replace go.opentelemetry.io/collector/config/configretry => ../../config/configretry
201204

202205
replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry

config/configoptional/optional.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ func Some[T any](value T) Optional[T] {
5050
return Optional[T]{value: value, Enabled: true}
5151
}
5252

53+
func Default[T any](value T) Optional[T] {
54+
assertNoEnabledField[T]()
55+
return Optional[T]{value: value, Enabled: false}
56+
}
57+
5358
// None has no value.
5459
// It panics if T has a field with the mapstructure tag "enabled".
5560
func None[T any]() Optional[T] {

internal/e2e/consume_contract_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ func testExporterConfig(endpoint string) component.Config {
3636

3737
func testReceiverConfig(endpoint string) component.Config {
3838
cfg := otlpreceiver.NewFactory().CreateDefaultConfig()
39-
cfg.(*otlpreceiver.Config).HTTP = nil
40-
cfg.(*otlpreceiver.Config).GRPC.NetAddr.Endpoint = endpoint
39+
cfg.(*otlpreceiver.Config).GRPC.Enabled = true
40+
cfg.(*otlpreceiver.Config).GRPC.Get().NetAddr.Endpoint = endpoint
4141
return cfg
4242
}
4343

internal/e2e/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ require (
8787
go.opentelemetry.io/collector/client v1.32.0 // indirect
8888
go.opentelemetry.io/collector/config/configcompression v1.32.0 // indirect
8989
go.opentelemetry.io/collector/config/configmiddleware v0.126.0 // indirect
90+
go.opentelemetry.io/collector/config/configoptional v0.0.0-00010101000000-000000000000 // indirect
9091
go.opentelemetry.io/collector/connector/xconnector v0.126.0 // indirect
9192
go.opentelemetry.io/collector/consumer/consumererror v0.126.0 // indirect
9293
go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.126.0 // indirect
@@ -270,3 +271,5 @@ replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmid
270271
replace go.opentelemetry.io/collector/extension/extensionmiddleware => ../../extension/extensionmiddleware
271272

272273
replace go.opentelemetry.io/collector/config/configmiddleware => ../../config/configmiddleware
274+
275+
replace go.opentelemetry.io/collector/config/configoptional => ../../config/configoptional

internal/e2e/otlphttp_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,8 +351,8 @@ func startLogsReceiver(t *testing.T, addr string, next consumer.Logs) {
351351

352352
func createReceiverConfig(addr string, defaultCfg component.Config) *otlpreceiver.Config {
353353
cfg := defaultCfg.(*otlpreceiver.Config)
354-
cfg.HTTP.ServerConfig.Endpoint = addr
355-
cfg.GRPC = nil
354+
cfg.HTTP.Enabled = true
355+
cfg.HTTP.Get().ServerConfig.Endpoint = addr
356356
return cfg
357357
}
358358

receiver/otlpreceiver/config.go

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,7 @@ import (
1313
"go.opentelemetry.io/collector/component"
1414
"go.opentelemetry.io/collector/config/configgrpc"
1515
"go.opentelemetry.io/collector/config/confighttp"
16-
"go.opentelemetry.io/collector/confmap"
17-
)
18-
19-
const (
20-
// Protocol values.
21-
protoGRPC = "protocols::grpc"
22-
protoHTTP = "protocols::http"
16+
"go.opentelemetry.io/collector/config/configoptional"
2317
)
2418

2519
type SanitizedURLPath string
@@ -58,8 +52,8 @@ type HTTPConfig struct {
5852

5953
// Protocols is the configuration for the supported protocols.
6054
type Protocols struct {
61-
GRPC *configgrpc.ServerConfig `mapstructure:"grpc"`
62-
HTTP *HTTPConfig `mapstructure:"http"`
55+
GRPC configoptional.Optional[configgrpc.ServerConfig] `mapstructure:"grpc"`
56+
HTTP configoptional.Optional[HTTPConfig] `mapstructure:"http"`
6357
// prevent unkeyed literal initialization
6458
_ struct{}
6559
}
@@ -70,34 +64,12 @@ type Config struct {
7064
Protocols `mapstructure:"protocols"`
7165
}
7266

73-
var (
74-
_ component.Config = (*Config)(nil)
75-
_ confmap.Unmarshaler = (*Config)(nil)
76-
)
67+
var _ component.Config = (*Config)(nil)
7768

7869
// Validate checks the receiver configuration is valid
7970
func (cfg *Config) Validate() error {
80-
if cfg.GRPC == nil && cfg.HTTP == nil {
71+
if !cfg.GRPC.Enabled && !cfg.HTTP.Enabled {
8172
return errors.New("must specify at least one protocol when using the OTLP receiver")
8273
}
8374
return nil
8475
}
85-
86-
// Unmarshal a confmap.Conf into the config struct.
87-
func (cfg *Config) Unmarshal(conf *confmap.Conf) error {
88-
// first load the config normally
89-
err := conf.Unmarshal(cfg)
90-
if err != nil {
91-
return err
92-
}
93-
94-
if !conf.IsSet(protoGRPC) {
95-
cfg.GRPC = nil
96-
}
97-
98-
if !conf.IsSet(protoHTTP) {
99-
cfg.HTTP = nil
100-
}
101-
102-
return nil
103-
}

receiver/otlpreceiver/config_test.go

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"go.opentelemetry.io/collector/config/confighttp"
1818
"go.opentelemetry.io/collector/config/confignet"
1919
"go.opentelemetry.io/collector/config/configopaque"
20+
"go.opentelemetry.io/collector/config/configoptional"
2021
"go.opentelemetry.io/collector/config/configtls"
2122
"go.opentelemetry.io/collector/confmap"
2223
"go.opentelemetry.io/collector/confmap/confmaptest"
@@ -29,7 +30,11 @@ func TestUnmarshalDefaultConfig(t *testing.T) {
2930
factory := NewFactory()
3031
cfg := factory.CreateDefaultConfig()
3132
require.NoError(t, cm.Unmarshal(&cfg))
32-
assert.Equal(t, factory.CreateDefaultConfig(), cfg)
33+
34+
expectedCfg := factory.CreateDefaultConfig().(*Config)
35+
expectedCfg.HTTP.Enabled = true
36+
expectedCfg.GRPC.Enabled = true
37+
assert.Equal(t, expectedCfg, cfg)
3338
}
3439

3540
func TestUnmarshalConfigOnlyGRPC(t *testing.T) {
@@ -40,7 +45,7 @@ func TestUnmarshalConfigOnlyGRPC(t *testing.T) {
4045
require.NoError(t, cm.Unmarshal(&cfg))
4146

4247
defaultOnlyGRPC := factory.CreateDefaultConfig().(*Config)
43-
defaultOnlyGRPC.HTTP = nil
48+
defaultOnlyGRPC.GRPC.Enabled = true
4449
assert.Equal(t, defaultOnlyGRPC, cfg)
4550
}
4651

@@ -52,7 +57,7 @@ func TestUnmarshalConfigOnlyHTTP(t *testing.T) {
5257
require.NoError(t, cm.Unmarshal(&cfg))
5358

5459
defaultOnlyHTTP := factory.CreateDefaultConfig().(*Config)
55-
defaultOnlyHTTP.GRPC = nil
60+
defaultOnlyHTTP.HTTP.Enabled = true
5661
assert.Equal(t, defaultOnlyHTTP, cfg)
5762
}
5863

@@ -64,7 +69,7 @@ func TestUnmarshalConfigOnlyHTTPNull(t *testing.T) {
6469
require.NoError(t, cm.Unmarshal(&cfg))
6570

6671
defaultOnlyHTTP := factory.CreateDefaultConfig().(*Config)
67-
defaultOnlyHTTP.GRPC = nil
72+
defaultOnlyHTTP.HTTP.Enabled = true
6873
assert.Equal(t, defaultOnlyHTTP, cfg)
6974
}
7075

@@ -76,7 +81,7 @@ func TestUnmarshalConfigOnlyHTTPEmptyMap(t *testing.T) {
7681
require.NoError(t, cm.Unmarshal(&cfg))
7782

7883
defaultOnlyHTTP := factory.CreateDefaultConfig().(*Config)
79-
defaultOnlyHTTP.GRPC = nil
84+
defaultOnlyHTTP.HTTP.Enabled = true
8085
assert.Equal(t, defaultOnlyHTTP, cfg)
8186
}
8287

@@ -89,7 +94,7 @@ func TestUnmarshalConfig(t *testing.T) {
8994
assert.Equal(t,
9095
&Config{
9196
Protocols: Protocols{
92-
GRPC: &configgrpc.ServerConfig{
97+
GRPC: configoptional.Some(configgrpc.ServerConfig{
9398
NetAddr: confignet.AddrConfig{
9499
Endpoint: "localhost:4317",
95100
Transport: confignet.TransportTypeTCP,
@@ -117,8 +122,8 @@ func TestUnmarshalConfig(t *testing.T) {
117122
PermitWithoutStream: true,
118123
},
119124
},
120-
},
121-
HTTP: &HTTPConfig{
125+
}),
126+
HTTP: configoptional.Some(HTTPConfig{
122127
ServerConfig: confighttp.ServerConfig{
123128
Auth: &confighttp.AuthConfig{
124129
Config: configauth.Config{
@@ -141,7 +146,7 @@ func TestUnmarshalConfig(t *testing.T) {
141146
TracesURLPath: "/traces",
142147
MetricsURLPath: "/v2/metrics",
143148
LogsURLPath: "/log/ingest",
144-
},
149+
}),
145150
},
146151
}, cfg)
147152
}
@@ -155,15 +160,15 @@ func TestUnmarshalConfigUnix(t *testing.T) {
155160
assert.Equal(t,
156161
&Config{
157162
Protocols: Protocols{
158-
GRPC: &configgrpc.ServerConfig{
163+
GRPC: configoptional.Some(configgrpc.ServerConfig{
159164
NetAddr: confignet.AddrConfig{
160165
Endpoint: "/tmp/grpc_otlp.sock",
161166
Transport: confignet.TransportTypeUnix,
162167
},
163168
ReadBufferSize: 512 * 1024,
164169
Keepalive: configgrpc.NewDefaultKeepaliveServerConfig(),
165-
},
166-
HTTP: &HTTPConfig{
170+
}),
171+
HTTP: configoptional.Some(HTTPConfig{
167172
ServerConfig: confighttp.ServerConfig{
168173
Endpoint: "/tmp/http_otlp.sock",
169174
CORS: confighttp.NewDefaultCORSConfig(),
@@ -172,7 +177,7 @@ func TestUnmarshalConfigUnix(t *testing.T) {
172177
TracesURLPath: defaultTracesURLPath,
173178
MetricsURLPath: defaultMetricsURLPath,
174179
LogsURLPath: defaultLogsURLPath,
175-
},
180+
}),
176181
},
177182
}, cfg)
178183
}

receiver/otlpreceiver/factory.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"go.opentelemetry.io/collector/config/configgrpc"
1111
"go.opentelemetry.io/collector/config/confighttp"
1212
"go.opentelemetry.io/collector/config/confignet"
13+
"go.opentelemetry.io/collector/config/configoptional"
1314
"go.opentelemetry.io/collector/consumer"
1415
"go.opentelemetry.io/collector/consumer/xconsumer"
1516
"go.opentelemetry.io/collector/internal/sharedcomponent"
@@ -39,7 +40,7 @@ func NewFactory() receiver.Factory {
3940

4041
// createDefaultConfig creates the default configuration for receiver.
4142
func createDefaultConfig() component.Config {
42-
grpcCfg := configgrpc.NewDefaultServerConfig()
43+
grpcCfg := *configgrpc.NewDefaultServerConfig()
4344
grpcCfg.NetAddr = confignet.NewDefaultAddrConfig()
4445
grpcCfg.NetAddr.Endpoint = "localhost:4317"
4546
grpcCfg.NetAddr.Transport = confignet.TransportTypeTCP
@@ -56,13 +57,13 @@ func createDefaultConfig() component.Config {
5657

5758
return &Config{
5859
Protocols: Protocols{
59-
GRPC: grpcCfg,
60-
HTTP: &HTTPConfig{
60+
GRPC: configoptional.Default(grpcCfg),
61+
HTTP: configoptional.Default(HTTPConfig{
6162
ServerConfig: httpCfg,
6263
TracesURLPath: defaultTracesURLPath,
6364
MetricsURLPath: defaultMetricsURLPath,
6465
LogsURLPath: defaultLogsURLPath,
65-
},
66+
}),
6667
},
6768
}
6869
}

0 commit comments

Comments
 (0)