diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c9fa9e5ad1..205552764c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,12 +25,15 @@ - `service.telemetry.metrics.level` and `service.telemetry.metrics.address` should be used to configure collector self-metrics. - `configauth`: add helpers to create new server authenticators. (#4558) +- Refactor `configgrpc` for compression methods (#4624) +- Add an option to allow `config.Map` conversion in the `service.ConfigProvider` (#4634) ## 🧰 Bug fixes 🧰 - Fix merge config map provider to close the watchers (#4570) - Fix expand map provider to call close on the base provider (#4571) - Fix correct the value of `otelcol_exporter_send_failed_requests` (#4629) +- `otlp` receiver: Fix legacy port cfg value override and HTTP server starting bug (#4631) ## v0.41.0 Beta diff --git a/cmd/builder/internal/builder/templates/main_windows.go.tmpl b/cmd/builder/internal/builder/templates/main_windows.go.tmpl index 7aa01d1398f..037891e471d 100644 --- a/cmd/builder/internal/builder/templates/main_windows.go.tmpl +++ b/cmd/builder/internal/builder/templates/main_windows.go.tmpl @@ -33,11 +33,11 @@ func checkUseInteractiveMode() (bool, error) { return true, nil } - if isInteractiveSession, err := svc.IsAnInteractiveSession(); err != nil { - return false, fmt.Errorf("failed to determine if we are running in an interactive session %w", err) - } else { - return isInteractiveSession, nil + isInteractiveSession, err := svc.IsAnInteractiveSession() + if err != nil { + return false, fmt.Errorf("failed to determine if we are running in an interactive session: %w", err) } + return isInteractiveSession, nil } func runService(params service.CollectorSettings) error { diff --git a/cmd/otelcorecol/main_windows.go b/cmd/otelcorecol/main_windows.go index 7aa01d1398f..037891e471d 100644 --- a/cmd/otelcorecol/main_windows.go +++ b/cmd/otelcorecol/main_windows.go @@ -33,11 +33,11 @@ func checkUseInteractiveMode() (bool, error) { return true, nil } - if isInteractiveSession, err := svc.IsAnInteractiveSession(); err != nil { - return false, fmt.Errorf("failed to determine if we are running in an interactive session %w", err) - } else { - return isInteractiveSession, nil + isInteractiveSession, err := svc.IsAnInteractiveSession() + if err != nil { + return false, fmt.Errorf("failed to determine if we are running in an interactive session: %w", err) } + return isInteractiveSession, nil } func runService(params service.CollectorSettings) error { diff --git a/config/configgrpc/configgrpc.go b/config/configgrpc/configgrpc.go index 094939cf9bc..f99f4116f10 100644 --- a/config/configgrpc/configgrpc.go +++ b/config/configgrpc/configgrpc.go @@ -44,24 +44,7 @@ import ( "go.opentelemetry.io/collector/internal/middleware" ) -// Compression gRPC keys for supported compression types within collector. -const ( - CompressionUnsupported = "" - CompressionGzip = "gzip" - CompressionSnappy = "snappy" - CompressionZstd = "zstd" -) - -var ( - // Map of opentelemetry compression types to grpc registered compression types. - gRPCCompressionKeyMap = map[string]string{ - CompressionGzip: gzip.Name, - CompressionSnappy: snappy.Name, - CompressionZstd: zstd.Name, - } - - errMetadataNotFound = errors.New("no request metadata found") -) +var errMetadataNotFound = errors.New("no request metadata found") // Allowed balancer names to be set in grpclb_policy to discover the servers. var allowedBalancerNames = []string{roundrobin.Name, grpc.PickFirstBalancerName} @@ -83,7 +66,7 @@ type GRPCClientSettings struct { Endpoint string `mapstructure:"endpoint"` // The compression key for supported compression types within collector. - Compression string `mapstructure:"compression"` + Compression middleware.CompressionType `mapstructure:"compression"` // TLSSetting struct exposes TLS client configuration. TLSSetting configtls.TLSClientSetting `mapstructure:"tls,omitempty"` @@ -194,12 +177,12 @@ func (gcs *GRPCClientSettings) isSchemeHTTPS() bool { // ToDialOptions maps configgrpc.GRPCClientSettings to a slice of dial options for gRPC. func (gcs *GRPCClientSettings) ToDialOptions(host component.Host, settings component.TelemetrySettings) ([]grpc.DialOption, error) { var opts []grpc.DialOption - if gcs.Compression != "" { - if compressionKey := GetGRPCCompressionKey(gcs.Compression); compressionKey != CompressionUnsupported { - opts = append(opts, grpc.WithDefaultCallOptions(grpc.UseCompressor(compressionKey))) - } else { - return nil, fmt.Errorf("unsupported compression type %q", gcs.Compression) + if gcs.Compression != middleware.CompressionEmpty && gcs.Compression != middleware.CompressionNone { + cp, err := getGRPCCompressionName(gcs.Compression) + if err != nil { + return nil, err } + opts = append(opts, grpc.WithDefaultCallOptions(grpc.UseCompressor(cp))) } tlsCfg, err := gcs.TLSSetting.LoadTLSConfig() @@ -373,14 +356,18 @@ func (gss *GRPCServerSettings) ToServerOption(host component.Host, settings comp return opts, nil } -// GetGRPCCompressionKey returns the grpc registered compression key if the -// passed in compression key is supported, and CompressionUnsupported otherwise. -func GetGRPCCompressionKey(compressionType string) string { - compressionKey := strings.ToLower(compressionType) - if encodingKey, ok := gRPCCompressionKeyMap[compressionKey]; ok { - return encodingKey +// getGRPCCompressionName returns compression name registered in grpc. +func getGRPCCompressionName(compressionType middleware.CompressionType) (string, error) { + switch compressionType { + case middleware.CompressionGzip: + return gzip.Name, nil + case middleware.CompressionSnappy: + return snappy.Name, nil + case middleware.CompressionZstd: + return zstd.Name, nil + default: + return "", fmt.Errorf("unsupported compression type %q", compressionType) } - return CompressionUnsupported } // enhanceWithClientInformation intercepts the incoming RPC, replacing the incoming context with one that includes diff --git a/config/configgrpc/configgrpc_test.go b/config/configgrpc/configgrpc_test.go index 033774b5bc7..4af85e66e84 100644 --- a/config/configgrpc/configgrpc_test.go +++ b/config/configgrpc/configgrpc_test.go @@ -38,6 +38,7 @@ import ( "go.opentelemetry.io/collector/config/configauth" "go.opentelemetry.io/collector/config/confignet" "go.opentelemetry.io/collector/config/configtls" + "go.opentelemetry.io/collector/internal/middleware" "go.opentelemetry.io/collector/model/otlpgrpc" "go.opentelemetry.io/collector/obsreport/obsreporttest" ) @@ -62,36 +63,103 @@ func TestAllGrpcClientSettings(t *testing.T) { require.NoError(t, err) t.Cleanup(func() { require.NoError(t, tt.Shutdown(context.Background())) }) - gcs := &GRPCClientSettings{ - Headers: map[string]string{ - "test": "test", + tests := []struct { + settings GRPCClientSettings + name string + host component.Host + }{ + { + name: "test all with gzip compression", + settings: GRPCClientSettings{ + Headers: map[string]string{ + "test": "test", + }, + Endpoint: "localhost:1234", + Compression: middleware.CompressionGzip, + TLSSetting: configtls.TLSClientSetting{ + Insecure: false, + }, + Keepalive: &KeepaliveClientConfig{ + Time: time.Second, + Timeout: time.Second, + PermitWithoutStream: true, + }, + ReadBufferSize: 1024, + WriteBufferSize: 1024, + WaitForReady: true, + BalancerName: "round_robin", + Auth: &configauth.Authentication{AuthenticatorID: config.NewComponentID("testauth")}, + }, + host: &mockHost{ + ext: map[config.ComponentID]component.Extension{ + config.NewComponentID("testauth"): &configauth.MockClientAuthenticator{}, + }, + }, }, - Endpoint: "localhost:1234", - Compression: "gzip", - TLSSetting: configtls.TLSClientSetting{ - Insecure: false, + { + name: "test all with snappy compression", + settings: GRPCClientSettings{ + Headers: map[string]string{ + "test": "test", + }, + Endpoint: "localhost:1234", + Compression: middleware.CompressionSnappy, + TLSSetting: configtls.TLSClientSetting{ + Insecure: false, + }, + Keepalive: &KeepaliveClientConfig{ + Time: time.Second, + Timeout: time.Second, + PermitWithoutStream: true, + }, + ReadBufferSize: 1024, + WriteBufferSize: 1024, + WaitForReady: true, + BalancerName: "round_robin", + Auth: &configauth.Authentication{AuthenticatorID: config.NewComponentID("testauth")}, + }, + host: &mockHost{ + ext: map[config.ComponentID]component.Extension{ + config.NewComponentID("testauth"): &configauth.MockClientAuthenticator{}, + }, + }, }, - Keepalive: &KeepaliveClientConfig{ - Time: time.Second, - Timeout: time.Second, - PermitWithoutStream: true, + { + name: "test all with zstd compression", + settings: GRPCClientSettings{ + Headers: map[string]string{ + "test": "test", + }, + Endpoint: "localhost:1234", + Compression: middleware.CompressionZstd, + TLSSetting: configtls.TLSClientSetting{ + Insecure: false, + }, + Keepalive: &KeepaliveClientConfig{ + Time: time.Second, + Timeout: time.Second, + PermitWithoutStream: true, + }, + ReadBufferSize: 1024, + WriteBufferSize: 1024, + WaitForReady: true, + BalancerName: "round_robin", + Auth: &configauth.Authentication{AuthenticatorID: config.NewComponentID("testauth")}, + }, + host: &mockHost{ + ext: map[config.ComponentID]component.Extension{ + config.NewComponentID("testauth"): &configauth.MockClientAuthenticator{}, + }, + }, }, - ReadBufferSize: 1024, - WriteBufferSize: 1024, - WaitForReady: true, - BalancerName: "round_robin", - Auth: &configauth.Authentication{AuthenticatorID: config.NewComponentID("testauth")}, } - - host := &mockHost{ - ext: map[config.ComponentID]component.Extension{ - config.NewComponentID("testauth"): &configauth.MockClientAuthenticator{}, - }, + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + opts, err := test.settings.ToDialOptions(test.host, tt.TelemetrySettings) + assert.NoError(t, err) + assert.Len(t, opts, 9) + }) } - - opts, err := gcs.ToDialOptions(host, tt.TelemetrySettings) - assert.NoError(t, err) - assert.Len(t, opts, 9) } func TestDefaultGrpcServerSettings(t *testing.T) { @@ -242,6 +310,39 @@ func TestGRPCClientSettingsError(t *testing.T) { }, host: &mockHost{}, }, + { + err: "unsupported compression type \"zlib\"", + settings: GRPCClientSettings{ + Endpoint: "localhost:1234", + TLSSetting: configtls.TLSClientSetting{ + Insecure: true, + }, + Compression: "zlib", + }, + host: &mockHost{}, + }, + { + err: "unsupported compression type \"deflate\"", + settings: GRPCClientSettings{ + Endpoint: "localhost:1234", + TLSSetting: configtls.TLSClientSetting{ + Insecure: true, + }, + Compression: "deflate", + }, + host: &mockHost{}, + }, + { + err: "unsupported compression type \"bad\"", + settings: GRPCClientSettings{ + Endpoint: "localhost:1234", + TLSSetting: configtls.TLSClientSetting{ + Insecure: true, + }, + Compression: "bad", + }, + host: &mockHost{}, + }, } for _, test := range tests { t.Run(test.err, func(t *testing.T) { @@ -343,36 +444,6 @@ func TestGRPCServerSettings_ToListener_Error(t *testing.T) { assert.Error(t, err) } -func TestGetGRPCCompressionKey(t *testing.T) { - if GetGRPCCompressionKey("gzip") != CompressionGzip { - t.Error("gzip is marked as supported but returned unsupported") - } - - if GetGRPCCompressionKey("Gzip") != CompressionGzip { - t.Error("Capitalization of CompressionGzip should not matter") - } - - if GetGRPCCompressionKey("snappy") != CompressionSnappy { - t.Error("snappy is marked as supported but returned unsupported") - } - - if GetGRPCCompressionKey("Snappy") != CompressionSnappy { - t.Error("Capitalization of CompressionSnappy should not matter") - } - - if GetGRPCCompressionKey("zstd") != CompressionZstd { - t.Error("zstd is marked as supported but returned unsupported") - } - - if GetGRPCCompressionKey("Zstd") != CompressionZstd { - t.Error("Capitalization of CompressionZstd should not matter") - } - - if GetGRPCCompressionKey("badType") != CompressionUnsupported { - t.Error("badType is not supported but was returned as supported") - } -} - func TestHttpReception(t *testing.T) { tt, err := obsreporttest.SetupTelemetry() require.NoError(t, err) diff --git a/exporter/otlpexporter/config_test.go b/exporter/otlpexporter/config_test.go index 4d8180ae3e9..d6f1cfa3889 100644 --- a/exporter/otlpexporter/config_test.go +++ b/exporter/otlpexporter/config_test.go @@ -71,7 +71,7 @@ func TestLoadConfig(t *testing.T) { "another": "somevalue", }, Endpoint: "1.2.3.4:1234", - Compression: "on", + Compression: "gzip", TLSSetting: configtls.TLSClientSetting{ TLSSetting: configtls.TLSSetting{ CAFile: "/var/lib/mycert.pem", diff --git a/exporter/otlpexporter/factory_test.go b/exporter/otlpexporter/factory_test.go index 34f667088cd..17dd7f591c6 100644 --- a/exporter/otlpexporter/factory_test.go +++ b/exporter/otlpexporter/factory_test.go @@ -29,6 +29,7 @@ import ( "go.opentelemetry.io/collector/config/configtest" "go.opentelemetry.io/collector/config/configtls" "go.opentelemetry.io/collector/exporter/exporterhelper" + "go.opentelemetry.io/collector/internal/middleware" "go.opentelemetry.io/collector/internal/testutil" ) @@ -105,7 +106,7 @@ func TestCreateTracesExporter(t *testing.T) { ExporterSettings: config.NewExporterSettings(config.NewComponentID(typeStr)), GRPCClientSettings: configgrpc.GRPCClientSettings{ Endpoint: endpoint, - Compression: configgrpc.CompressionGzip, + Compression: middleware.CompressionGzip, }, }, }, @@ -114,7 +115,7 @@ func TestCreateTracesExporter(t *testing.T) { config: Config{ GRPCClientSettings: configgrpc.GRPCClientSettings{ Endpoint: endpoint, - Compression: configgrpc.CompressionSnappy, + Compression: middleware.CompressionSnappy, }, }, }, @@ -123,7 +124,7 @@ func TestCreateTracesExporter(t *testing.T) { config: Config{ GRPCClientSettings: configgrpc.GRPCClientSettings{ Endpoint: endpoint, - Compression: configgrpc.CompressionZstd, + Compression: middleware.CompressionZstd, }, }, }, @@ -149,17 +150,6 @@ func TestCreateTracesExporter(t *testing.T) { }, }, }, - { - name: "CompressionError", - config: Config{ - ExporterSettings: config.NewExporterSettings(config.NewComponentID(typeStr)), - GRPCClientSettings: configgrpc.GRPCClientSettings{ - Endpoint: endpoint, - Compression: "unknown compression", - }, - }, - mustFailOnStart: true, - }, { name: "CaCert", config: Config{ diff --git a/exporter/otlpexporter/testdata/config.yaml b/exporter/otlpexporter/testdata/config.yaml index 33e4c1c35ed..02858766429 100644 --- a/exporter/otlpexporter/testdata/config.yaml +++ b/exporter/otlpexporter/testdata/config.yaml @@ -11,7 +11,7 @@ exporters: otlp: otlp/2: endpoint: "1.2.3.4:1234" - compression: "on" + compression: "gzip" tls: ca_file: /var/lib/mycert.pem timeout: 10s diff --git a/receiver/otlpreceiver/otlp.go b/receiver/otlpreceiver/otlp.go index bde68794535..c9f086ad8be 100644 --- a/receiver/otlpreceiver/otlp.go +++ b/receiver/otlpreceiver/otlp.go @@ -86,7 +86,7 @@ func (r *otlpReceiver) startGRPCServer(cfg *configgrpc.GRPCServerSettings, host func (r *otlpReceiver) startHTTPServer(cfg *confighttp.HTTPServerSettings, host component.Host) error { r.settings.Logger.Info("Starting HTTP server on endpoint " + cfg.Endpoint) var hln net.Listener - hln, err := r.cfg.HTTP.ToListener() + hln, err := cfg.ToListener() if err != nil { return err } @@ -147,10 +147,10 @@ func (r *otlpReceiver) startProtocolServers(host component.Host) error { r.settings.Logger.Info("Setting up a second HTTP listener on legacy endpoint " + legacyHTTPEndpoint) // Copy the config. - cfgLegacyHTTP := r.cfg.HTTP + cfgLegacyHTTP := *(r.cfg.HTTP) // And use the legacy endpoint. cfgLegacyHTTP.Endpoint = legacyHTTPEndpoint - err = r.startHTTPServer(cfgLegacyHTTP, host) + err = r.startHTTPServer(&cfgLegacyHTTP, host) if err != nil { return err } diff --git a/receiver/otlpreceiver/otlp_test.go b/receiver/otlpreceiver/otlp_test.go index fb7f9e325bd..3aa7e262e52 100644 --- a/receiver/otlpreceiver/otlp_test.go +++ b/receiver/otlpreceiver/otlp_test.go @@ -24,11 +24,14 @@ import ( "io/ioutil" "net" "net/http" + "strings" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap" + "go.uber.org/zap/zaptest/observer" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -46,6 +49,7 @@ import ( "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/internal/internalconsumertest" + "go.opentelemetry.io/collector/internal/sharedcomponent" "go.opentelemetry.io/collector/internal/testdata" "go.opentelemetry.io/collector/internal/testutil" "go.opentelemetry.io/collector/model/otlp" @@ -629,6 +633,41 @@ func TestHTTPInvalidTLSCredentials(t *testing.T) { `failed to load TLS config: for auth via TLS, either both certificate and key must be supplied, or neither`) } +func TestHTTPUseLegacyPortWhenUsingDefaultEndpoint(t *testing.T) { + r := newHTTPReceiver(t, defaultHTTPEndpoint, consumertest.NewNop(), consumertest.NewNop()) + require.NotNil(t, r) + + logCore, logs := observer.New(zap.InfoLevel) + logger := zap.New(logCore) + + metric := r.(*sharedcomponent.SharedComponent).Unwrap().(*otlpReceiver) + metric.settings.Logger = logger + + t.Cleanup(func() { require.NoError(t, r.Shutdown(context.Background())) }) + + require.NoError(t, r.Start(context.Background(), componenttest.NewNopHost())) + + require.True(t, func() bool { + for _, l := range logs.All() { + if strings.Contains(l.Message, "Setting up a second HTTP listener on legacy endpoint 0.0.0.0:55681") { + return true + } + } + return false + }()) + + require.False(t, func() bool { + for _, l := range logs.All() { + if strings.Contains(l.Message, "Legacy HTTP endpoint 0.0.0.0:55681 is configured, please use 0.0.0.0:4318 instead.") { + return true + } + } + return false + }()) + + require.Equal(t, defaultHTTPEndpoint, metric.cfg.HTTP.Endpoint) +} + func newGRPCReceiver(t *testing.T, name string, endpoint string, tc consumer.Traces, mc consumer.Metrics) component.Component { factory := NewFactory() cfg := factory.CreateDefaultConfig().(*Config) diff --git a/service/config_provider.go b/service/config_provider.go index 74ea3f8a838..b28b22c30a3 100644 --- a/service/config_provider.go +++ b/service/config_provider.go @@ -26,7 +26,7 @@ import ( "go.opentelemetry.io/collector/config/configmapprovider" "go.opentelemetry.io/collector/config/configunmarshaler" "go.opentelemetry.io/collector/config/experimental/configsource" - "go.opentelemetry.io/collector/internal/configprovider" + "go.opentelemetry.io/collector/service/internal/configprovider" ) // ConfigProvider provides the service configuration. @@ -65,6 +65,7 @@ type ConfigProvider interface { type configProvider struct { configMapProvider configmapprovider.Provider + cfgMapConverters []ConfigMapConverterFunc configUnmarshaler configunmarshaler.ConfigUnmarshaler sync.Mutex @@ -74,22 +75,23 @@ type configProvider struct { // newConfigProvider returns a new ConfigProvider that provides the configuration using the given // `configMapProvider` and the given `configUnmarshaler`. -func newConfigProvider(configMapProvider configmapprovider.Provider, configUnmarshaler configunmarshaler.ConfigUnmarshaler) ConfigProvider { +func newConfigProvider(configMapProvider configmapprovider.Provider, configUnmarshaler configunmarshaler.ConfigUnmarshaler, cfgMapConverters ...ConfigMapConverterFunc) ConfigProvider { return &configProvider{ configMapProvider: configMapProvider, + cfgMapConverters: cfgMapConverters, configUnmarshaler: configUnmarshaler, watcher: make(chan error, 1), } } +// ConfigMapConverterFunc is a converter function for the config.Map that allows distributions +// (in the future components as well) to build backwards compatible config converters. +type ConfigMapConverterFunc func(*config.Map) (*config.Map, error) + // NewDefaultConfigProvider returns the default ConfigProvider, and it creates configuration from a file // defined by the given configFile and overwrites fields using properties. -func NewDefaultConfigProvider(configFileName string, properties []string) ConfigProvider { - return &configProvider{ - configMapProvider: configprovider.NewDefaultMapProvider(configFileName, properties), - configUnmarshaler: configunmarshaler.NewDefault(), - watcher: make(chan error, 1), - } +func NewDefaultConfigProvider(configFileName string, properties []string, cfgMapConverters ...ConfigMapConverterFunc) ConfigProvider { + return newConfigProvider(configprovider.NewDefaultMapProvider(configFileName, properties), configunmarshaler.NewDefault(), cfgMapConverters...) } func (cm *configProvider) Get(ctx context.Context, factories component.Factories) (*config.Config, error) { @@ -106,12 +108,22 @@ func (cm *configProvider) Get(ctx context.Context, factories component.Factories return nil, fmt.Errorf("cannot retrieve the configuration: %w", err) } - var cfg *config.Config - m, err := cm.ret.Get(ctx) + var cfgMap *config.Map + cfgMap, err = cm.ret.Get(ctx) if err != nil { return nil, fmt.Errorf("cannot get the configuration: %w", err) } - if cfg, err = cm.configUnmarshaler.Unmarshal(m, factories); err != nil { + + // Apply all converters. + for _, cfgMapConv := range cm.cfgMapConverters { + cfgMap, err = cfgMapConv(cfgMap) + if err != nil { + return nil, fmt.Errorf("cannot convert the config.Map: %w", err) + } + } + + var cfg *config.Config + if cfg, err = cm.configUnmarshaler.Unmarshal(cfgMap, factories); err != nil { return nil, fmt.Errorf("cannot unmarshal the configuration: %w", err) } diff --git a/service/config_provider_test.go b/service/config_provider_test.go index b09c00afe0c..d84707478d4 100644 --- a/service/config_provider_test.go +++ b/service/config_provider_test.go @@ -80,6 +80,7 @@ func TestConfigProvider_Errors(t *testing.T) { tests := []struct { name string parserProvider configmapprovider.Provider + cfgMapConverters []ConfigMapConverterFunc configUnmarshaler configunmarshaler.ConfigUnmarshaler expectNewErr bool expectWatchErr bool @@ -92,9 +93,16 @@ func TestConfigProvider_Errors(t *testing.T) { expectNewErr: true, }, { - name: "retrieve_ok_unmarshal_err", + name: "converter_err", parserProvider: configmapprovider.NewFile(path.Join("testdata", "otelcol-nop.yaml")), - configUnmarshaler: &errConfigUnmarshaler{err: errors.New("retrieve_ok_unmarshal_err")}, + cfgMapConverters: []ConfigMapConverterFunc{func(c *config.Map) (*config.Map, error) { return nil, errors.New("converter_err") }}, + configUnmarshaler: configunmarshaler.NewDefault(), + expectNewErr: true, + }, + { + name: "unmarshal_err", + parserProvider: configmapprovider.NewFile(path.Join("testdata", "otelcol-nop.yaml")), + configUnmarshaler: &errConfigUnmarshaler{err: errors.New("unmarshal_err")}, expectNewErr: true, }, { @@ -130,7 +138,7 @@ func TestConfigProvider_Errors(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - cfgW := newConfigProvider(tt.parserProvider, tt.configUnmarshaler) + cfgW := newConfigProvider(tt.parserProvider, tt.configUnmarshaler, tt.cfgMapConverters...) _, errN := cfgW.Get(context.Background(), factories) if tt.expectNewErr { assert.Error(t, errN) diff --git a/internal/configprovider/default.go b/service/internal/configprovider/default.go similarity index 97% rename from internal/configprovider/default.go rename to service/internal/configprovider/default.go index fe0dbc7dfee..bf68c5991ea 100644 --- a/internal/configprovider/default.go +++ b/service/internal/configprovider/default.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package configprovider // import "go.opentelemetry.io/collector/internal/configprovider" +package configprovider // import "go.opentelemetry.io/collector/service/internal/configprovider" import ( "go.opentelemetry.io/collector/config/configmapprovider" diff --git a/internal/configprovider/default_test.go b/service/internal/configprovider/default_test.go similarity index 100% rename from internal/configprovider/default_test.go rename to service/internal/configprovider/default_test.go diff --git a/internal/configprovider/expand.go b/service/internal/configprovider/expand.go similarity index 98% rename from internal/configprovider/expand.go rename to service/internal/configprovider/expand.go index ea37abb80fb..56243d7d288 100644 --- a/internal/configprovider/expand.go +++ b/service/internal/configprovider/expand.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package configprovider // import "go.opentelemetry.io/collector/internal/configprovider" +package configprovider // import "go.opentelemetry.io/collector/service/internal/configprovider" import ( "context" diff --git a/internal/configprovider/expand_test.go b/service/internal/configprovider/expand_test.go similarity index 100% rename from internal/configprovider/expand_test.go rename to service/internal/configprovider/expand_test.go diff --git a/internal/configprovider/merge.go b/service/internal/configprovider/merge.go similarity index 98% rename from internal/configprovider/merge.go rename to service/internal/configprovider/merge.go index 66ebeab920d..b408ed28851 100644 --- a/internal/configprovider/merge.go +++ b/service/internal/configprovider/merge.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package configprovider // import "go.opentelemetry.io/collector/internal/configprovider" +package configprovider // import "go.opentelemetry.io/collector/service/internal/configprovider" import ( "context" diff --git a/internal/configprovider/merge_test.go b/service/internal/configprovider/merge_test.go similarity index 100% rename from internal/configprovider/merge_test.go rename to service/internal/configprovider/merge_test.go diff --git a/internal/configprovider/mock_test.go b/service/internal/configprovider/mock_test.go similarity index 100% rename from internal/configprovider/mock_test.go rename to service/internal/configprovider/mock_test.go diff --git a/internal/configprovider/testdata/default-config.yaml b/service/internal/configprovider/testdata/default-config.yaml similarity index 100% rename from internal/configprovider/testdata/default-config.yaml rename to service/internal/configprovider/testdata/default-config.yaml diff --git a/internal/configprovider/testdata/expand-escaped-env.yaml b/service/internal/configprovider/testdata/expand-escaped-env.yaml similarity index 100% rename from internal/configprovider/testdata/expand-escaped-env.yaml rename to service/internal/configprovider/testdata/expand-escaped-env.yaml diff --git a/internal/configprovider/testdata/expand-with-all-env.yaml b/service/internal/configprovider/testdata/expand-with-all-env.yaml similarity index 100% rename from internal/configprovider/testdata/expand-with-all-env.yaml rename to service/internal/configprovider/testdata/expand-with-all-env.yaml diff --git a/internal/configprovider/testdata/expand-with-no-env.yaml b/service/internal/configprovider/testdata/expand-with-no-env.yaml similarity index 100% rename from internal/configprovider/testdata/expand-with-no-env.yaml rename to service/internal/configprovider/testdata/expand-with-no-env.yaml diff --git a/internal/configprovider/testdata/expand-with-partial-env.yaml b/service/internal/configprovider/testdata/expand-with-partial-env.yaml similarity index 100% rename from internal/configprovider/testdata/expand-with-partial-env.yaml rename to service/internal/configprovider/testdata/expand-with-partial-env.yaml diff --git a/service/servicetest/configprovider.go b/service/servicetest/configprovider.go index 8f32d73f6b5..e53c6d9bb27 100644 --- a/service/servicetest/configprovider.go +++ b/service/servicetest/configprovider.go @@ -21,7 +21,7 @@ import ( "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config/configmapprovider" "go.opentelemetry.io/collector/config/configunmarshaler" - "go.opentelemetry.io/collector/internal/configprovider" + "go.opentelemetry.io/collector/service/internal/configprovider" ) // LoadConfig loads a config.Config from file, and does NOT validate the configuration.