From f75a406906516744aade241a2faae332eb452a0d Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Thu, 13 Feb 2025 13:29:44 +0100 Subject: [PATCH 1/6] [connector,exporter,processor,receiver] Error out on mismatched type --- connector/connector.go | 45 ++++++++++++++++++++++++++++++++++++++++++ exporter/exporter.go | 12 +++++++++++ processor/processor.go | 15 ++++++++++++++ receiver/receiver.go | 15 ++++++++++++++ 4 files changed, 87 insertions(+) diff --git a/connector/connector.go b/connector/connector.go index b3424329fd8..77e9d1bf50a 100644 --- a/connector/connector.go +++ b/connector/connector.go @@ -387,6 +387,11 @@ func (f *factory) CreateTracesToTraces(ctx context.Context, set Settings, cfg co if f.createTracesToTracesFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalTraces, pipeline.SignalTraces) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createTracesToTracesFunc(ctx, set, cfg, next) } @@ -394,6 +399,11 @@ func (f *factory) CreateTracesToMetrics(ctx context.Context, set Settings, cfg c if f.createTracesToMetricsFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalTraces, pipeline.SignalMetrics) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createTracesToMetricsFunc(ctx, set, cfg, next) } @@ -401,6 +411,11 @@ func (f *factory) CreateTracesToLogs(ctx context.Context, set Settings, cfg comp if f.createTracesToLogsFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalTraces, pipeline.SignalLogs) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createTracesToLogsFunc(ctx, set, cfg, next) } @@ -408,6 +423,11 @@ func (f *factory) CreateMetricsToTraces(ctx context.Context, set Settings, cfg c if f.createMetricsToTracesFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalMetrics, pipeline.SignalTraces) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createMetricsToTracesFunc(ctx, set, cfg, next) } @@ -415,6 +435,11 @@ func (f *factory) CreateMetricsToMetrics(ctx context.Context, set Settings, cfg if f.createMetricsToMetricsFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalMetrics, pipeline.SignalMetrics) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createMetricsToMetricsFunc(ctx, set, cfg, next) } @@ -422,6 +447,11 @@ func (f *factory) CreateMetricsToLogs(ctx context.Context, set Settings, cfg com if f.createMetricsToLogsFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalMetrics, pipeline.SignalLogs) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createMetricsToLogsFunc(ctx, set, cfg, next) } @@ -429,6 +459,11 @@ func (f *factory) CreateLogsToTraces(ctx context.Context, set Settings, cfg comp if f.createLogsToTracesFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalLogs, pipeline.SignalTraces) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createLogsToTracesFunc(ctx, set, cfg, next) } @@ -436,6 +471,11 @@ func (f *factory) CreateLogsToMetrics(ctx context.Context, set Settings, cfg com if f.createLogsToMetricsFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalLogs, pipeline.SignalMetrics) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createLogsToMetricsFunc(ctx, set, cfg, next) } @@ -443,6 +483,11 @@ func (f *factory) CreateLogsToLogs(ctx context.Context, set Settings, cfg compon if f.createLogsToLogsFunc == nil { return nil, internal.ErrDataTypes(set.ID, pipeline.SignalLogs, pipeline.SignalLogs) } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createLogsToLogsFunc(ctx, set, cfg, next) } diff --git a/exporter/exporter.go b/exporter/exporter.go index 12b4e086878..9960a13d0ca 100644 --- a/exporter/exporter.go +++ b/exporter/exporter.go @@ -160,6 +160,10 @@ func (f *factory) CreateTraces(ctx context.Context, set Settings, cfg component. return nil, pipeline.ErrSignalNotSupported } + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createTracesFunc(ctx, set, cfg) } @@ -168,6 +172,10 @@ func (f *factory) CreateMetrics(ctx context.Context, set Settings, cfg component return nil, pipeline.ErrSignalNotSupported } + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createMetricsFunc(ctx, set, cfg) } @@ -176,6 +184,10 @@ func (f *factory) CreateLogs(ctx context.Context, set Settings, cfg component.Co return nil, pipeline.ErrSignalNotSupported } + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createLogsFunc(ctx, set, cfg) } diff --git a/processor/processor.go b/processor/processor.go index 61cbbba01e5..4f74fefa359 100644 --- a/processor/processor.go +++ b/processor/processor.go @@ -126,6 +126,11 @@ func (f *factory) CreateTraces(ctx context.Context, set Settings, cfg component. if f.createTracesFunc == nil { return nil, pipeline.ErrSignalNotSupported } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createTracesFunc(ctx, set, cfg, next) } @@ -133,6 +138,11 @@ func (f *factory) CreateMetrics(ctx context.Context, set Settings, cfg component if f.createMetricsFunc == nil { return nil, pipeline.ErrSignalNotSupported } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createMetricsFunc(ctx, set, cfg, next) } @@ -140,6 +150,11 @@ func (f *factory) CreateLogs(ctx context.Context, set Settings, cfg component.Co if f.createLogsFunc == nil { return nil, pipeline.ErrSignalNotSupported } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createLogsFunc(ctx, set, cfg, next) } diff --git a/receiver/receiver.go b/receiver/receiver.go index 795ed5ede29..c2d7db9024a 100644 --- a/receiver/receiver.go +++ b/receiver/receiver.go @@ -169,6 +169,11 @@ func (f *factory) CreateTraces(ctx context.Context, set Settings, cfg component. if f.createTracesFunc == nil { return nil, pipeline.ErrSignalNotSupported } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createTracesFunc(ctx, set, cfg, next) } @@ -176,6 +181,11 @@ func (f *factory) CreateMetrics(ctx context.Context, set Settings, cfg component if f.createMetricsFunc == nil { return nil, pipeline.ErrSignalNotSupported } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createMetricsFunc(ctx, set, cfg, next) } @@ -183,6 +193,11 @@ func (f *factory) CreateLogs(ctx context.Context, set Settings, cfg component.Co if f.createLogsFunc == nil { return nil, pipeline.ErrSignalNotSupported } + + if set.ID.Type() != f.Type() { + return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + } + return f.createLogsFunc(ctx, set, cfg, next) } From 480e0809982fe6d4e07e404bfeaeb78f7366535f Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Fri, 14 Feb 2025 13:52:46 +0100 Subject: [PATCH 2/6] Fix tests --- connector/connector_test.go | 20 +++++------ exporter/exporter_test.go | 19 +++++----- exporter/exportertest/contract_checker.go | 4 +-- .../batchprocessor/batch_processor_test.go | 35 ++++++++++--------- processor/processor_test.go | 19 +++++----- processor/processortest/shutdown_verifier.go | 6 ++-- .../processortest/unhealthy_processor_test.go | 6 ++-- receiver/otlpreceiver/otlp_test.go | 9 ++--- receiver/receiver_test.go | 19 +++++----- receiver/receivertest/contract_checker.go | 6 ++-- 10 files changed, 77 insertions(+), 66 deletions(-) diff --git a/connector/connector_test.go b/connector/connector_test.go index e190f5a4c31..7e0ba67076e 100644 --- a/connector/connector_test.go +++ b/connector/connector_test.go @@ -19,7 +19,7 @@ import ( var ( testType = component.MustNewType("test") - testID = component.MustNewIDWithName("type", "name") + testID = component.MustNewIDWithName("test", "name") ) func TestNewFactoryNoOptions(t *testing.T) { @@ -147,33 +147,33 @@ func TestNewFactoryWithAllTypes(t *testing.T) { assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig()) assert.Equal(t, component.StabilityLevelAlpha, factory.TracesToTracesStability()) - _, err := factory.CreateTracesToTraces(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err := factory.CreateTracesToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelDevelopment, factory.TracesToMetricsStability()) - _, err = factory.CreateTracesToMetrics(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = factory.CreateTracesToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelAlpha, factory.TracesToLogsStability()) - _, err = factory.CreateTracesToLogs(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = factory.CreateTracesToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelBeta, factory.MetricsToTracesStability()) - _, err = factory.CreateMetricsToTraces(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = factory.CreateMetricsToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelBeta, factory.MetricsToMetricsStability()) - _, err = factory.CreateMetricsToMetrics(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = factory.CreateMetricsToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelStable, factory.MetricsToLogsStability()) - _, err = factory.CreateMetricsToLogs(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = factory.CreateMetricsToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelDeprecated, factory.LogsToTracesStability()) - _, err = factory.CreateLogsToTraces(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = factory.CreateLogsToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelUnmaintained, factory.LogsToMetricsStability()) - _, err = factory.CreateLogsToMetrics(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = factory.CreateLogsToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelUnmaintained, factory.LogsToLogsStability()) - _, err = factory.CreateLogsToLogs(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = factory.CreateLogsToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) assert.NoError(t, err) } diff --git a/exporter/exporter_test.go b/exporter/exporter_test.go index d363e2af665..0b5862f1e76 100644 --- a/exporter/exporter_test.go +++ b/exporter/exporter_test.go @@ -15,24 +15,27 @@ import ( "go.opentelemetry.io/collector/pipeline" ) +var ( + testType = component.MustNewType("test") + testID = component.NewID(testType) +) + func TestNewFactory(t *testing.T) { - testType := component.MustNewType("test") defaultCfg := struct{}{} f := NewFactory( testType, func() component.Config { return &defaultCfg }) assert.EqualValues(t, testType, f.Type()) assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) - _, err := f.CreateTraces(context.Background(), Settings{}, &defaultCfg) + _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) - _, err = f.CreateMetrics(context.Background(), Settings{}, &defaultCfg) + _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) - _, err = f.CreateLogs(context.Background(), Settings{}, &defaultCfg) + _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) } func TestNewFactoryWithOptions(t *testing.T) { - testType := component.MustNewType("test") defaultCfg := struct{}{} f := NewFactory( testType, @@ -44,15 +47,15 @@ func TestNewFactoryWithOptions(t *testing.T) { assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) assert.Equal(t, component.StabilityLevelDevelopment, f.TracesStability()) - _, err := f.CreateTraces(context.Background(), Settings{}, &defaultCfg) + _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg) require.NoError(t, err) assert.Equal(t, component.StabilityLevelAlpha, f.MetricsStability()) - _, err = f.CreateMetrics(context.Background(), Settings{}, &defaultCfg) + _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg) require.NoError(t, err) assert.Equal(t, component.StabilityLevelDeprecated, f.LogsStability()) - _, err = f.CreateLogs(context.Background(), Settings{}, &defaultCfg) + _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg) assert.NoError(t, err) } diff --git a/exporter/exportertest/contract_checker.go b/exporter/exportertest/contract_checker.go index 86fbbf56222..c7a6bc41227 100644 --- a/exporter/exportertest/contract_checker.go +++ b/exporter/exportertest/contract_checker.go @@ -151,7 +151,7 @@ func checkTraces(t *testing.T, params CheckConsumeContractParams, mockReceiver c ctx := context.Background() var exp exporter.Traces var err error - exp, err = params.ExporterFactory.CreateTraces(ctx, NewNopSettingsWithType(NopType), params.ExporterConfig) + exp, err = params.ExporterFactory.CreateTraces(ctx, NewNopSettingsWithType(params.ExporterFactory.Type()), params.ExporterConfig) require.NoError(t, err) require.NotNil(t, exp) @@ -191,7 +191,7 @@ func checkLogs(t *testing.T, params CheckConsumeContractParams, mockReceiver com ctx := context.Background() var exp exporter.Logs var err error - exp, err = params.ExporterFactory.CreateLogs(ctx, NewNopSettingsWithType(NopType), params.ExporterConfig) + exp, err = params.ExporterFactory.CreateLogs(ctx, NewNopSettingsWithType(params.ExporterFactory.Type()), params.ExporterConfig) require.NoError(t, err) require.NotNil(t, exp) diff --git a/processor/batchprocessor/batch_processor_test.go b/processor/batchprocessor/batch_processor_test.go index 4d46756095b..f7d601df8ee 100644 --- a/processor/batchprocessor/batch_processor_test.go +++ b/processor/batchprocessor/batch_processor_test.go @@ -27,6 +27,7 @@ import ( "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/pdata/testdata" + "go.opentelemetry.io/collector/processor/batchprocessor/internal/metadata" "go.opentelemetry.io/collector/processor/batchprocessor/internal/metadatatest" "go.opentelemetry.io/collector/processor/processortest" ) @@ -35,7 +36,7 @@ func TestProcessorShutdown(t *testing.T) { factory := NewFactory() ctx := context.Background() - processorCreationSet := processortest.NewNopSettingsWithType(processortest.NopType) + processorCreationSet := processortest.NewNopSettingsWithType(metadata.Type) for i := 0; i < 5; i++ { require.NotPanics(t, func() { @@ -62,7 +63,7 @@ func TestProcessorLifecycle(t *testing.T) { factory := NewFactory() ctx := context.Background() - processorCreationSet := processortest.NewNopSettingsWithType(processortest.NopType) + processorCreationSet := processortest.NewNopSettingsWithType(metadata.Type) for i := 0; i < 5; i++ { tProc, err := factory.CreateTraces(ctx, processorCreationSet, factory.CreateDefaultConfig(), consumertest.NewNop()) @@ -86,7 +87,7 @@ func TestBatchProcessorSpansDelivered(t *testing.T) { sink := new(consumertest.TracesSink) cfg := createDefaultConfig().(*Config) cfg.SendBatchSize = 128 - traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, traces.Start(context.Background(), componenttest.NewNopHost())) @@ -127,7 +128,7 @@ func TestBatchProcessorSpansDeliveredEnforceBatchSize(t *testing.T) { cfg := createDefaultConfig().(*Config) cfg.SendBatchSize = 128 cfg.SendBatchMaxSize = 130 - traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, traces.Start(context.Background(), componenttest.NewNopHost())) @@ -368,7 +369,7 @@ func TestBatchProcessorSentByTimeout(t *testing.T) { spansPerRequest := 10 start := time.Now() - traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, traces.Start(context.Background(), componenttest.NewNopHost())) @@ -413,7 +414,7 @@ func TestBatchProcessorTraceSendWhenClosing(t *testing.T) { } sink := new(consumertest.TracesSink) - traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, traces.Start(context.Background(), componenttest.NewNopHost())) @@ -442,7 +443,7 @@ func TestBatchMetricProcessor_ReceivingData(t *testing.T) { metricsPerRequest := 5 sink := new(consumertest.MetricsSink) - metrics, err := NewFactory().CreateMetrics(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + metrics, err := NewFactory().CreateMetrics(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, metrics.Start(context.Background(), componenttest.NewNopHost())) @@ -603,7 +604,7 @@ func TestBatchMetricsProcessor_Timeout(t *testing.T) { metricsPerRequest := 10 sink := new(consumertest.MetricsSink) - metrics, err := NewFactory().CreateMetrics(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + metrics, err := NewFactory().CreateMetrics(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, metrics.Start(context.Background(), componenttest.NewNopHost())) @@ -650,7 +651,7 @@ func TestBatchMetricProcessor_Shutdown(t *testing.T) { metricsPerRequest := 10 sink := new(consumertest.MetricsSink) - metrics, err := NewFactory().CreateMetrics(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + metrics, err := NewFactory().CreateMetrics(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, metrics.Start(context.Background(), componenttest.NewNopHost())) @@ -746,7 +747,7 @@ func BenchmarkMultiBatchMetricProcessor(b *testing.B) { func runMetricsProcessorBenchmark(b *testing.B, cfg *Config) { ctx := context.Background() sink := new(metricsSink) - metrics, err := NewFactory().CreateMetrics(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + metrics, err := NewFactory().CreateMetrics(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(b, err) require.NoError(b, metrics.Start(ctx, componenttest.NewNopHost())) @@ -792,7 +793,7 @@ func TestBatchLogProcessor_ReceivingData(t *testing.T) { logsPerRequest := 5 sink := new(consumertest.LogsSink) - logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, logs.Start(context.Background(), componenttest.NewNopHost())) @@ -931,7 +932,7 @@ func TestBatchLogsProcessor_Timeout(t *testing.T) { logsPerRequest := 10 sink := new(consumertest.LogsSink) - logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, logs.Start(context.Background(), componenttest.NewNopHost())) @@ -978,7 +979,7 @@ func TestBatchLogProcessor_Shutdown(t *testing.T) { logsPerRequest := 10 sink := new(consumertest.LogsSink) - logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, logs.Start(context.Background(), componenttest.NewNopHost())) @@ -1055,7 +1056,7 @@ func TestBatchProcessorSpansBatchedByMetadata(t *testing.T) { cfg.SendBatchSize = 1000 cfg.Timeout = 10 * time.Minute cfg.MetadataKeys = []string{"token1", "token2"} - traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, traces.Start(context.Background(), componenttest.NewNopHost())) @@ -1146,7 +1147,7 @@ func TestBatchProcessorMetadataCardinalityLimit(t *testing.T) { cfg := createDefaultConfig().(*Config) cfg.MetadataKeys = []string{"token"} cfg.MetadataCardinalityLimit = cardLimit - traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + traces, err := NewFactory().CreateTraces(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, traces.Start(context.Background(), componenttest.NewNopHost())) @@ -1187,7 +1188,7 @@ func TestBatchZeroConfig(t *testing.T) { const requestCount = 5 const logsPerRequest = 10 sink := new(consumertest.LogsSink) - logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, logs.Start(context.Background(), componenttest.NewNopHost())) defer func() { require.NoError(t, logs.Shutdown(context.Background())) }() @@ -1226,7 +1227,7 @@ func TestBatchSplitOnly(t *testing.T) { require.NoError(t, cfg.Validate()) sink := new(consumertest.LogsSink) - logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(processortest.NopType), cfg, sink) + logs, err := NewFactory().CreateLogs(context.Background(), processortest.NewNopSettingsWithType(metadata.Type), cfg, sink) require.NoError(t, err) require.NoError(t, logs.Start(context.Background(), componenttest.NewNopHost())) defer func() { require.NoError(t, logs.Shutdown(context.Background())) }() diff --git a/processor/processor_test.go b/processor/processor_test.go index 03c821964bc..fd13c3820fb 100644 --- a/processor/processor_test.go +++ b/processor/processor_test.go @@ -16,24 +16,27 @@ import ( "go.opentelemetry.io/collector/pipeline" ) +var ( + testType = component.MustNewType("test") + testID = component.NewID(testType) +) + func TestNewFactory(t *testing.T) { - testType := component.MustNewType("test") defaultCfg := struct{}{} f := NewFactory( testType, func() component.Config { return &defaultCfg }) assert.EqualValues(t, testType, f.Type()) assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) - _, err := f.CreateTraces(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) - _, err = f.CreateMetrics(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) - _, err = f.CreateLogs(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) } func TestNewFactoryWithOptions(t *testing.T) { - testType := component.MustNewType("test") defaultCfg := struct{}{} f := NewFactory( testType, @@ -45,15 +48,15 @@ func TestNewFactoryWithOptions(t *testing.T) { assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) assert.Equal(t, component.StabilityLevelAlpha, f.TracesStability()) - _, err := f.CreateTraces(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelBeta, f.MetricsStability()) - _, err = f.CreateMetrics(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, component.StabilityLevelUnmaintained, f.LogsStability()) - _, err = f.CreateLogs(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) assert.NoError(t, err) } diff --git a/processor/processortest/shutdown_verifier.go b/processor/processortest/shutdown_verifier.go index 44dc8e1f176..056e04f7283 100644 --- a/processor/processortest/shutdown_verifier.go +++ b/processor/processortest/shutdown_verifier.go @@ -22,7 +22,7 @@ import ( func verifyTracesDoesNotProduceAfterShutdown(t *testing.T, factory processor.Factory, cfg component.Config) { // Create a proc and output its produce to a sink. nextSink := new(consumertest.TracesSink) - proc, err := factory.CreateTraces(context.Background(), NewNopSettingsWithType(NopType), cfg, nextSink) + proc, err := factory.CreateTraces(context.Background(), NewNopSettingsWithType(factory.Type()), cfg, nextSink) if errors.Is(err, pipeline.ErrSignalNotSupported) { return } @@ -46,7 +46,7 @@ func verifyTracesDoesNotProduceAfterShutdown(t *testing.T, factory processor.Fac func verifyLogsDoesNotProduceAfterShutdown(t *testing.T, factory processor.Factory, cfg component.Config) { // Create a proc and output its produce to a sink. nextSink := new(consumertest.LogsSink) - proc, err := factory.CreateLogs(context.Background(), NewNopSettingsWithType(NopType), cfg, nextSink) + proc, err := factory.CreateLogs(context.Background(), NewNopSettingsWithType(factory.Type()), cfg, nextSink) if errors.Is(err, pipeline.ErrSignalNotSupported) { return } @@ -70,7 +70,7 @@ func verifyLogsDoesNotProduceAfterShutdown(t *testing.T, factory processor.Facto func verifyMetricsDoesNotProduceAfterShutdown(t *testing.T, factory processor.Factory, cfg component.Config) { // Create a proc and output its produce to a sink. nextSink := new(consumertest.MetricsSink) - proc, err := factory.CreateMetrics(context.Background(), NewNopSettingsWithType(NopType), cfg, nextSink) + proc, err := factory.CreateMetrics(context.Background(), NewNopSettingsWithType(factory.Type()), cfg, nextSink) if errors.Is(err, pipeline.ErrSignalNotSupported) { return } diff --git a/processor/processortest/unhealthy_processor_test.go b/processor/processortest/unhealthy_processor_test.go index 61f7c3316cc..4de2e62e9b6 100644 --- a/processor/processortest/unhealthy_processor_test.go +++ b/processor/processortest/unhealthy_processor_test.go @@ -26,21 +26,21 @@ func TestNewUnhealthyProcessorFactory(t *testing.T) { cfg := factory.CreateDefaultConfig() assert.Equal(t, &struct{}{}, cfg) - traces, err := factory.CreateTraces(context.Background(), NewNopSettingsWithType(NopType), cfg, consumertest.NewNop()) + traces, err := factory.CreateTraces(context.Background(), NewNopSettingsWithType(factory.Type()), cfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, consumer.Capabilities{MutatesData: false}, traces.Capabilities()) assert.NoError(t, traces.Start(context.Background(), componenttest.NewNopHost())) assert.NoError(t, traces.ConsumeTraces(context.Background(), ptrace.NewTraces())) assert.NoError(t, traces.Shutdown(context.Background())) - metrics, err := factory.CreateMetrics(context.Background(), NewNopSettingsWithType(NopType), cfg, consumertest.NewNop()) + metrics, err := factory.CreateMetrics(context.Background(), NewNopSettingsWithType(factory.Type()), cfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, consumer.Capabilities{MutatesData: false}, metrics.Capabilities()) assert.NoError(t, metrics.Start(context.Background(), componenttest.NewNopHost())) assert.NoError(t, metrics.ConsumeMetrics(context.Background(), pmetric.NewMetrics())) assert.NoError(t, metrics.Shutdown(context.Background())) - logs, err := factory.CreateLogs(context.Background(), NewNopSettingsWithType(NopType), cfg, consumertest.NewNop()) + logs, err := factory.CreateLogs(context.Background(), NewNopSettingsWithType(factory.Type()), cfg, consumertest.NewNop()) require.NoError(t, err) assert.Equal(t, consumer.Capabilities{MutatesData: false}, logs.Capabilities()) assert.NoError(t, logs.Start(context.Background(), componenttest.NewNopHost())) diff --git a/receiver/otlpreceiver/otlp_test.go b/receiver/otlpreceiver/otlp_test.go index b60b464a282..039f6df1d0b 100644 --- a/receiver/otlpreceiver/otlp_test.go +++ b/receiver/otlpreceiver/otlp_test.go @@ -47,6 +47,7 @@ import ( "go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp" "go.opentelemetry.io/collector/pdata/testdata" + "go.opentelemetry.io/collector/receiver/otlpreceiver/internal/metadata" "go.opentelemetry.io/collector/receiver/receivertest" ) @@ -705,7 +706,7 @@ func TestGRPCInvalidTLSCredentials(t *testing.T) { r, err := NewFactory().CreateTraces( context.Background(), - receivertest.NewNopSettingsWithType(receivertest.NopType), + receivertest.NewNopSettingsWithType(metadata.Type), cfg, consumertest.NewNop()) require.NoError(t, err) @@ -774,7 +775,7 @@ func TestHTTPInvalidTLSCredentials(t *testing.T) { // TLS is resolved during Start for HTTP. r, err := NewFactory().CreateTraces( context.Background(), - receivertest.NewNopSettingsWithType(receivertest.NopType), + receivertest.NewNopSettingsWithType(metadata.Type), cfg, consumertest.NewNop()) require.NoError(t, err) @@ -840,7 +841,7 @@ func newHTTPReceiver(t *testing.T, settings component.TelemetrySettings, endpoin } func newReceiver(t *testing.T, settings component.TelemetrySettings, cfg *Config, id component.ID, c consumertest.Consumer) component.Component { - set := receivertest.NewNopSettingsWithType(receivertest.NopType) + set := receivertest.NewNopSettingsWithType(metadata.Type) set.TelemetrySettings = settings set.ID = id r, err := newOtlpReceiver(cfg, &set) @@ -1017,7 +1018,7 @@ func TestShutdown(t *testing.T) { cfg := factory.CreateDefaultConfig().(*Config) cfg.GRPC.NetAddr.Endpoint = endpointGrpc cfg.HTTP.Endpoint = endpointHTTP - set := receivertest.NewNopSettingsWithType(receivertest.NopType) + set := receivertest.NewNopSettingsWithType(metadata.Type) set.ID = otlpReceiverID r, err := NewFactory().CreateTraces( context.Background(), diff --git a/receiver/receiver_test.go b/receiver/receiver_test.go index eb8af181019..ecaead4412e 100644 --- a/receiver/receiver_test.go +++ b/receiver/receiver_test.go @@ -16,24 +16,27 @@ import ( "go.opentelemetry.io/collector/pipeline" ) +var ( + testType = component.MustNewType("test") + testID = component.NewID(testType) +) + func TestNewFactory(t *testing.T) { - testType := component.MustNewType("test") defaultCfg := struct{}{} f := NewFactory( testType, func() component.Config { return &defaultCfg }) assert.EqualValues(t, testType, f.Type()) assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) - _, err := f.CreateTraces(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) - _, err = f.CreateMetrics(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) - _, err = f.CreateLogs(context.Background(), Settings{}, &defaultCfg, consumertest.NewNop()) + _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) } func TestNewFactoryWithOptions(t *testing.T) { - testType := component.MustNewType("test") defaultCfg := struct{}{} f := NewFactory( testType, @@ -45,15 +48,15 @@ func TestNewFactoryWithOptions(t *testing.T) { assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) assert.Equal(t, component.StabilityLevelDeprecated, f.TracesStability()) - _, err := f.CreateTraces(context.Background(), Settings{}, &defaultCfg, nil) + _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg, nil) require.NoError(t, err) assert.Equal(t, component.StabilityLevelAlpha, f.MetricsStability()) - _, err = f.CreateMetrics(context.Background(), Settings{}, &defaultCfg, nil) + _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, nil) require.NoError(t, err) assert.Equal(t, component.StabilityLevelStable, f.LogsStability()) - _, err = f.CreateLogs(context.Background(), Settings{}, &defaultCfg, nil) + _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg, nil) assert.NoError(t, err) } diff --git a/receiver/receivertest/contract_checker.go b/receiver/receivertest/contract_checker.go index 2850b617689..b4d859343f8 100644 --- a/receiver/receivertest/contract_checker.go +++ b/receiver/receivertest/contract_checker.go @@ -113,11 +113,11 @@ func checkConsumeContractScenario(params CheckConsumeContractParams, decisionFun var err error switch params.Signal { case pipeline.SignalLogs: - receiver, err = params.Factory.CreateLogs(ctx, NewNopSettingsWithType(NopType), params.Config, consumer) + receiver, err = params.Factory.CreateLogs(ctx, NewNopSettingsWithType(params.Factory.Type()), params.Config, consumer) case pipeline.SignalTraces: - receiver, err = params.Factory.CreateTraces(ctx, NewNopSettingsWithType(NopType), params.Config, consumer) + receiver, err = params.Factory.CreateTraces(ctx, NewNopSettingsWithType(params.Factory.Type()), params.Config, consumer) case pipeline.SignalMetrics: - receiver, err = params.Factory.CreateMetrics(ctx, NewNopSettingsWithType(NopType), params.Config, consumer) + receiver, err = params.Factory.CreateMetrics(ctx, NewNopSettingsWithType(params.Factory.Type()), params.Config, consumer) default: require.FailNow(params.T, "must specify a valid DataType to test for") } From c476abfb4eeb5ea5e0fe90f5653b0c4815bb0b7c Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Fri, 14 Feb 2025 13:55:10 +0100 Subject: [PATCH 3/6] Update changelog note --- .chloggen/mx-psi_type-mismatch.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.chloggen/mx-psi_type-mismatch.yaml b/.chloggen/mx-psi_type-mismatch.yaml index 48c9ddf8390..3bea7ce1872 100644 --- a/.chloggen/mx-psi_type-mismatch.yaml +++ b/.chloggen/mx-psi_type-mismatch.yaml @@ -4,10 +4,10 @@ change_type: bug_fix # The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) -component: extension +component: extension, processor, connector, exporter, receiver # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Explicitly error out at extension creation time if there is a type mismatch. +note: Explicitly error out at component creation time if there is a type mismatch. # One or more tracking issues or pull requests related to the change issues: [12305] From a205ce48e6a52775377f6292fe3d15843ba47ae5 Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Wed, 19 Feb 2025 11:38:37 +0100 Subject: [PATCH 4/6] Fix bad merge --- connector/connector.go | 1 + exporter/exporter.go | 1 + processor/processor.go | 1 + receiver/receiver.go | 1 + 4 files changed, 4 insertions(+) diff --git a/connector/connector.go b/connector/connector.go index 5b33beafe75..7d5267a3971 100644 --- a/connector/connector.go +++ b/connector/connector.go @@ -5,6 +5,7 @@ package connector // import "go.opentelemetry.io/collector/connector" import ( "context" + "fmt" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/connector/internal" diff --git a/exporter/exporter.go b/exporter/exporter.go index 37a53edebe5..c16f3fcadad 100644 --- a/exporter/exporter.go +++ b/exporter/exporter.go @@ -5,6 +5,7 @@ package exporter // import "go.opentelemetry.io/collector/exporter" import ( "context" + "fmt" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" diff --git a/processor/processor.go b/processor/processor.go index 8c8617bfaf7..8a6dde536a8 100644 --- a/processor/processor.go +++ b/processor/processor.go @@ -5,6 +5,7 @@ package processor // import "go.opentelemetry.io/collector/processor" import ( "context" + "fmt" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" diff --git a/receiver/receiver.go b/receiver/receiver.go index f1e353a4cd8..03ae49fa336 100644 --- a/receiver/receiver.go +++ b/receiver/receiver.go @@ -5,6 +5,7 @@ package receiver // import "go.opentelemetry.io/collector/receiver" import ( "context" + "fmt" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" From 1381519826fdfef8b06713de2f88f233f86c95da Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Thu, 27 Feb 2025 12:58:51 +0100 Subject: [PATCH 5/6] Increase test coverage --- connector/connector.go | 19 +++++++++---------- connector/connector_test.go | 7 +++++++ connector/internal/factory.go | 4 ++++ exporter/exporter.go | 8 ++++---- exporter/exporter_test.go | 12 +++++++++++- exporter/internal/experr/err.go | 11 ++++++++++- exporter/xexporter/exporter.go | 4 ++++ exporter/xexporter/exporter_test.go | 13 +++++++++++-- processor/internal/err.go | 14 ++++++++++++++ processor/processor.go | 8 ++++---- processor/processor_test.go | 12 +++++++++++- processor/xprocessor/processor.go | 4 ++++ processor/xprocessor/processor_test.go | 13 +++++++++++-- receiver/internal/err.go | 14 ++++++++++++++ receiver/receiver.go | 8 ++++---- receiver/receiver_test.go | 12 +++++++++++- receiver/xreceiver/profiles.go | 4 ++++ receiver/xreceiver/receiver_test.go | 12 ++++++++++-- 18 files changed, 147 insertions(+), 32 deletions(-) create mode 100644 processor/internal/err.go create mode 100644 receiver/internal/err.go diff --git a/connector/connector.go b/connector/connector.go index 7d5267a3971..9c9f113b64a 100644 --- a/connector/connector.go +++ b/connector/connector.go @@ -5,7 +5,6 @@ package connector // import "go.opentelemetry.io/collector/connector" import ( "context" - "fmt" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/connector/internal" @@ -308,7 +307,7 @@ func (f *factory) CreateTracesToTraces(ctx context.Context, set Settings, cfg co } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createTracesToTracesFunc(ctx, set, cfg, next) @@ -320,7 +319,7 @@ func (f *factory) CreateTracesToMetrics(ctx context.Context, set Settings, cfg c } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createTracesToMetricsFunc(ctx, set, cfg, next) @@ -332,7 +331,7 @@ func (f *factory) CreateTracesToLogs(ctx context.Context, set Settings, cfg comp } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createTracesToLogsFunc(ctx, set, cfg, next) @@ -344,7 +343,7 @@ func (f *factory) CreateMetricsToTraces(ctx context.Context, set Settings, cfg c } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createMetricsToTracesFunc(ctx, set, cfg, next) @@ -356,7 +355,7 @@ func (f *factory) CreateMetricsToMetrics(ctx context.Context, set Settings, cfg } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createMetricsToMetricsFunc(ctx, set, cfg, next) @@ -368,7 +367,7 @@ func (f *factory) CreateMetricsToLogs(ctx context.Context, set Settings, cfg com } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createMetricsToLogsFunc(ctx, set, cfg, next) @@ -380,7 +379,7 @@ func (f *factory) CreateLogsToTraces(ctx context.Context, set Settings, cfg comp } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createLogsToTracesFunc(ctx, set, cfg, next) @@ -392,7 +391,7 @@ func (f *factory) CreateLogsToMetrics(ctx context.Context, set Settings, cfg com } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createLogsToMetricsFunc(ctx, set, cfg, next) @@ -404,7 +403,7 @@ func (f *factory) CreateLogsToLogs(ctx context.Context, set Settings, cfg compon } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createLogsToLogsFunc(ctx, set, cfg, next) diff --git a/connector/connector_test.go b/connector/connector_test.go index c58f10d2b0b..b544ea1d8d1 100644 --- a/connector/connector_test.go +++ b/connector/connector_test.go @@ -58,18 +58,25 @@ func TestNewFactoryWithSameTypes(t *testing.T) { WithLogsToLogs(createLogsToLogs, component.StabilityLevelUnmaintained)) assert.EqualValues(t, testType, factory.Type()) assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig()) + wrongID := component.MustNewID("wrong") + wrongIDErrStr := internal.ErrIDMismatch(wrongID, testType).Error() assert.Equal(t, component.StabilityLevelAlpha, factory.TracesToTracesStability()) _, err := factory.CreateTracesToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) + _, err = factory.CreateTracesToTraces(context.Background(), Settings{ID: wrongID}, &defaultCfg, consumertest.NewNop()) + require.ErrorContains(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelBeta, factory.MetricsToMetricsStability()) _, err = factory.CreateMetricsToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) + require.ErrorContains(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelUnmaintained, factory.LogsToLogsStability()) _, err = factory.CreateLogsToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) + _, err = factory.CreateLogsToLogs(context.Background(), Settings{ID: wrongID}, &defaultCfg, consumertest.NewNop()) + require.ErrorContains(t, err, wrongIDErrStr) _, err = factory.CreateTracesToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalTraces, pipeline.SignalMetrics)) diff --git a/connector/internal/factory.go b/connector/internal/factory.go index b865f6311cb..764ba43fdee 100644 --- a/connector/internal/factory.go +++ b/connector/internal/factory.go @@ -13,3 +13,7 @@ import ( func ErrDataTypes(id component.ID, from, to pipeline.Signal) error { return fmt.Errorf("connector %q cannot connect from %s to %s: %w", id, from, to, pipeline.ErrSignalNotSupported) } + +func ErrIDMismatch(id component.ID, typ component.Type) error { + return fmt.Errorf("component type mismatch: component ID %q does not have type %q", id, typ) +} diff --git a/exporter/exporter.go b/exporter/exporter.go index c16f3fcadad..6542d9ef802 100644 --- a/exporter/exporter.go +++ b/exporter/exporter.go @@ -5,10 +5,10 @@ package exporter // import "go.opentelemetry.io/collector/exporter" import ( "context" - "fmt" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" + "go.opentelemetry.io/collector/exporter/internal/experr" "go.opentelemetry.io/collector/pipeline" ) @@ -134,7 +134,7 @@ func (f *factory) CreateTraces(ctx context.Context, set Settings, cfg component. } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, experr.ErrIDMismatch(set.ID, f.Type()) } return f.createTracesFunc(ctx, set, cfg) @@ -146,7 +146,7 @@ func (f *factory) CreateMetrics(ctx context.Context, set Settings, cfg component } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, experr.ErrIDMismatch(set.ID, f.Type()) } return f.createMetricsFunc(ctx, set, cfg) @@ -158,7 +158,7 @@ func (f *factory) CreateLogs(ctx context.Context, set Settings, cfg component.Co } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, experr.ErrIDMismatch(set.ID, f.Type()) } return f.createLogsFunc(ctx, set, cfg) diff --git a/exporter/exporter_test.go b/exporter/exporter_test.go index 88e41c7cecb..4fbf0c9c990 100644 --- a/exporter/exporter_test.go +++ b/exporter/exporter_test.go @@ -12,6 +12,7 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer/consumertest" + "go.opentelemetry.io/collector/exporter/internal/experr" "go.opentelemetry.io/collector/pipeline" ) @@ -46,17 +47,26 @@ func TestNewFactoryWithOptions(t *testing.T) { assert.EqualValues(t, testType, f.Type()) assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) + wrongID := component.MustNewID("wrong") + wrongIDErrStr := experr.ErrIDMismatch(wrongID, testType).Error() + assert.Equal(t, component.StabilityLevelDevelopment, f.TracesStability()) _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg) require.NoError(t, err) + _, err = f.CreateTraces(context.Background(), Settings{ID: wrongID}, &defaultCfg) + require.EqualError(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelAlpha, f.MetricsStability()) _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg) require.NoError(t, err) + _, err = f.CreateMetrics(context.Background(), Settings{ID: wrongID}, &defaultCfg) + require.EqualError(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelDeprecated, f.LogsStability()) _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg) - assert.NoError(t, err) + require.NoError(t, err) + _, err = f.CreateLogs(context.Background(), Settings{ID: wrongID}, &defaultCfg) + require.EqualError(t, err, wrongIDErrStr) } var nopInstance = &nop{ diff --git a/exporter/internal/experr/err.go b/exporter/internal/experr/err.go index 6bff64b162d..f8b109d7de7 100644 --- a/exporter/internal/experr/err.go +++ b/exporter/internal/experr/err.go @@ -3,7 +3,12 @@ package experr // import "go.opentelemetry.io/collector/exporter/internal/experr" -import "errors" +import ( + "errors" + "fmt" + + "go.opentelemetry.io/collector/component" +) type shutdownErr struct { err error @@ -25,3 +30,7 @@ func IsShutdownErr(err error) bool { var sdErr shutdownErr return errors.As(err, &sdErr) } + +func ErrIDMismatch(id component.ID, typ component.Type) error { + return fmt.Errorf("component type mismatch: component ID %q does not have type %q", id, typ) +} diff --git a/exporter/xexporter/exporter.go b/exporter/xexporter/exporter.go index 8add9a9aba8..a3010008041 100644 --- a/exporter/xexporter/exporter.go +++ b/exporter/xexporter/exporter.go @@ -9,6 +9,7 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/exporter" + "go.opentelemetry.io/collector/exporter/internal/experr" "go.opentelemetry.io/collector/pipeline" ) @@ -95,6 +96,9 @@ func (f *factory) CreateProfiles(ctx context.Context, set exporter.Settings, cfg return nil, pipeline.ErrSignalNotSupported } + if set.ID.Type() != f.Type() { + return nil, experr.ErrIDMismatch(set.ID, f.Type()) + } return f.createProfilesFunc(ctx, set, cfg) } diff --git a/exporter/xexporter/exporter_test.go b/exporter/xexporter/exporter_test.go index d1929c4c22e..1ac8d0886db 100644 --- a/exporter/xexporter/exporter_test.go +++ b/exporter/xexporter/exporter_test.go @@ -8,12 +8,16 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/exporter" + "go.opentelemetry.io/collector/exporter/internal/experr" ) +var testID = component.MustNewID("test") + func TestNewFactoryWithProfiles(t *testing.T) { testType := component.MustNewType("test") defaultCfg := struct{}{} @@ -26,8 +30,13 @@ func TestNewFactoryWithProfiles(t *testing.T) { assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig()) assert.Equal(t, component.StabilityLevelDevelopment, factory.ProfilesStability()) - _, err := factory.CreateProfiles(context.Background(), exporter.Settings{}, &defaultCfg) - assert.NoError(t, err) + _, err := factory.CreateProfiles(context.Background(), exporter.Settings{ID: testID}, &defaultCfg) + require.NoError(t, err) + + wrongID := component.MustNewID("wrong") + wrongIDErrStr := experr.ErrIDMismatch(wrongID, testType).Error() + _, err = factory.CreateProfiles(context.Background(), exporter.Settings{ID: wrongID}, &defaultCfg) + assert.EqualError(t, err, wrongIDErrStr) } var nopInstance = &nop{ diff --git a/processor/internal/err.go b/processor/internal/err.go new file mode 100644 index 00000000000..aa412bba43c --- /dev/null +++ b/processor/internal/err.go @@ -0,0 +1,14 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package internal // import "go.opentelemetry.io/collector/processor/internal" + +import ( + "fmt" + + "go.opentelemetry.io/collector/component" +) + +func ErrIDMismatch(id component.ID, typ component.Type) error { + return fmt.Errorf("component type mismatch: component ID %q does not have type %q", id, typ) +} diff --git a/processor/processor.go b/processor/processor.go index 8a6dde536a8..c54154fe9f2 100644 --- a/processor/processor.go +++ b/processor/processor.go @@ -5,11 +5,11 @@ package processor // import "go.opentelemetry.io/collector/processor" import ( "context" - "fmt" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/pipeline" + "go.opentelemetry.io/collector/processor/internal" ) // Traces is a processor that can consume traces. @@ -128,7 +128,7 @@ func (f *factory) CreateTraces(ctx context.Context, set Settings, cfg component. } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createTracesFunc(ctx, set, cfg, next) @@ -140,7 +140,7 @@ func (f *factory) CreateMetrics(ctx context.Context, set Settings, cfg component } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createMetricsFunc(ctx, set, cfg, next) @@ -152,7 +152,7 @@ func (f *factory) CreateLogs(ctx context.Context, set Settings, cfg component.Co } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createLogsFunc(ctx, set, cfg, next) diff --git a/processor/processor_test.go b/processor/processor_test.go index c1e0d9bc263..14bd5e6a2e5 100644 --- a/processor/processor_test.go +++ b/processor/processor_test.go @@ -14,6 +14,7 @@ import ( "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/pipeline" + "go.opentelemetry.io/collector/processor/internal" ) var ( @@ -47,17 +48,26 @@ func TestNewFactoryWithOptions(t *testing.T) { assert.EqualValues(t, testType, f.Type()) assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) + wrongID := component.MustNewID("wrong") + wrongIDErrStr := internal.ErrIDMismatch(wrongID, testType).Error() + assert.Equal(t, component.StabilityLevelAlpha, f.TracesStability()) _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) + _, err = f.CreateTraces(context.Background(), Settings{ID: wrongID}, &defaultCfg, consumertest.NewNop()) + require.EqualError(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelBeta, f.MetricsStability()) _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) + _, err = f.CreateMetrics(context.Background(), Settings{ID: wrongID}, &defaultCfg, consumertest.NewNop()) + require.EqualError(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelUnmaintained, f.LogsStability()) _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) - assert.NoError(t, err) + require.NoError(t, err) + _, err = f.CreateLogs(context.Background(), Settings{ID: wrongID}, &defaultCfg, consumertest.NewNop()) + require.EqualError(t, err, wrongIDErrStr) } var nopInstance = &nopProcessor{ diff --git a/processor/xprocessor/processor.go b/processor/xprocessor/processor.go index 0b0dff3e98c..92262e53a13 100644 --- a/processor/xprocessor/processor.go +++ b/processor/xprocessor/processor.go @@ -10,6 +10,7 @@ import ( "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/processor/internal" ) // Factory is a component.Factory interface for processors. @@ -65,6 +66,9 @@ func (f factory) CreateProfiles(ctx context.Context, set processor.Settings, cfg if f.createProfilesFunc == nil { return nil, pipeline.ErrSignalNotSupported } + if set.ID.Type() != f.Type() { + return nil, internal.ErrIDMismatch(set.ID, f.Type()) + } return f.createProfilesFunc(ctx, set, cfg, next) } diff --git a/processor/xprocessor/processor_test.go b/processor/xprocessor/processor_test.go index 79c42578336..ee95f9f9275 100644 --- a/processor/xprocessor/processor_test.go +++ b/processor/xprocessor/processor_test.go @@ -8,13 +8,17 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/processor/internal" ) +var testID = component.MustNewID("test") + func TestNewFactoryWithProfiles(t *testing.T) { testType := component.MustNewType("test") defaultCfg := struct{}{} @@ -27,8 +31,13 @@ func TestNewFactoryWithProfiles(t *testing.T) { assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig()) assert.Equal(t, component.StabilityLevelAlpha, factory.ProfilesStability()) - _, err := factory.CreateProfiles(context.Background(), processor.Settings{}, &defaultCfg, consumertest.NewNop()) - assert.NoError(t, err) + _, err := factory.CreateProfiles(context.Background(), processor.Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) + require.NoError(t, err) + + wrongID := component.MustNewID("wrong") + wrongIDErrStr := internal.ErrIDMismatch(wrongID, testType).Error() + _, err = factory.CreateProfiles(context.Background(), processor.Settings{ID: wrongID}, &defaultCfg, consumertest.NewNop()) + assert.EqualError(t, err, wrongIDErrStr) } var nopInstance = &nopProcessor{ diff --git a/receiver/internal/err.go b/receiver/internal/err.go new file mode 100644 index 00000000000..7969e79afcc --- /dev/null +++ b/receiver/internal/err.go @@ -0,0 +1,14 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package internal // import "go.opentelemetry.io/collector/receiver/internal" + +import ( + "fmt" + + "go.opentelemetry.io/collector/component" +) + +func ErrIDMismatch(id component.ID, typ component.Type) error { + return fmt.Errorf("component type mismatch: component ID %q does not have type %q", id, typ) +} diff --git a/receiver/receiver.go b/receiver/receiver.go index 03ae49fa336..a90a4917430 100644 --- a/receiver/receiver.go +++ b/receiver/receiver.go @@ -5,11 +5,11 @@ package receiver // import "go.opentelemetry.io/collector/receiver" import ( "context" - "fmt" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/pipeline" + "go.opentelemetry.io/collector/receiver/internal" ) // Traces receiver receives traces. @@ -144,7 +144,7 @@ func (f *factory) CreateTraces(ctx context.Context, set Settings, cfg component. } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createTracesFunc(ctx, set, cfg, next) @@ -156,7 +156,7 @@ func (f *factory) CreateMetrics(ctx context.Context, set Settings, cfg component } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createMetricsFunc(ctx, set, cfg, next) @@ -168,7 +168,7 @@ func (f *factory) CreateLogs(ctx context.Context, set Settings, cfg component.Co } if set.ID.Type() != f.Type() { - return nil, fmt.Errorf("component type mismatch: component ID %q does not have type %q", set.ID, f.Type()) + return nil, internal.ErrIDMismatch(set.ID, f.Type()) } return f.createLogsFunc(ctx, set, cfg, next) diff --git a/receiver/receiver_test.go b/receiver/receiver_test.go index aaebc05e4f3..291ff3e8169 100644 --- a/receiver/receiver_test.go +++ b/receiver/receiver_test.go @@ -14,6 +14,7 @@ import ( "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/pipeline" + "go.opentelemetry.io/collector/receiver/internal" ) var ( @@ -47,17 +48,26 @@ func TestNewFactoryWithOptions(t *testing.T) { assert.EqualValues(t, testType, f.Type()) assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) + wrongID := component.MustNewID("wrong") + wrongIDErrStr := internal.ErrIDMismatch(wrongID, testType).Error() + assert.Equal(t, component.StabilityLevelDeprecated, f.TracesStability()) _, err := f.CreateTraces(context.Background(), Settings{ID: testID}, &defaultCfg, nil) require.NoError(t, err) + _, err = f.CreateTraces(context.Background(), Settings{ID: wrongID}, &defaultCfg, nil) + require.EqualError(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelAlpha, f.MetricsStability()) _, err = f.CreateMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, nil) require.NoError(t, err) + _, err = f.CreateMetrics(context.Background(), Settings{ID: wrongID}, &defaultCfg, nil) + require.EqualError(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelStable, f.LogsStability()) _, err = f.CreateLogs(context.Background(), Settings{ID: testID}, &defaultCfg, nil) - assert.NoError(t, err) + require.NoError(t, err) + _, err = f.CreateLogs(context.Background(), Settings{ID: wrongID}, &defaultCfg, nil) + require.EqualError(t, err, wrongIDErrStr) } var nopInstance = &nopReceiver{ diff --git a/receiver/xreceiver/profiles.go b/receiver/xreceiver/profiles.go index 6aa5b3d0614..cc068175d90 100644 --- a/receiver/xreceiver/profiles.go +++ b/receiver/xreceiver/profiles.go @@ -10,6 +10,7 @@ import ( "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/receiver" + "go.opentelemetry.io/collector/receiver/internal" ) // Profiles receiver receives profiles. @@ -67,6 +68,9 @@ func (f *factory) CreateProfiles(ctx context.Context, set receiver.Settings, cfg if f.createProfilesFunc == nil { return nil, pipeline.ErrSignalNotSupported } + if set.ID.Type() != f.Type() { + return nil, internal.ErrIDMismatch(set.ID, f.Type()) + } return f.createProfilesFunc(ctx, set, cfg, next) } diff --git a/receiver/xreceiver/receiver_test.go b/receiver/xreceiver/receiver_test.go index 06ff1f592f9..e649f257190 100644 --- a/receiver/xreceiver/receiver_test.go +++ b/receiver/xreceiver/receiver_test.go @@ -8,13 +8,17 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/receiver" + "go.opentelemetry.io/collector/receiver/internal" ) +var testID = component.MustNewID("test") + func TestNewFactoryWithProfiles(t *testing.T) { testType := component.MustNewType("test") defaultCfg := struct{}{} @@ -27,8 +31,12 @@ func TestNewFactoryWithProfiles(t *testing.T) { assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig()) assert.Equal(t, component.StabilityLevelAlpha, factory.ProfilesStability()) - _, err := factory.CreateProfiles(context.Background(), receiver.Settings{}, &defaultCfg, nil) - assert.NoError(t, err) + _, err := factory.CreateProfiles(context.Background(), receiver.Settings{ID: testID}, &defaultCfg, nil) + require.NoError(t, err) + wrongID := component.MustNewID("wrong") + wrongIDErrStr := internal.ErrIDMismatch(wrongID, testType).Error() + _, err = factory.CreateProfiles(context.Background(), receiver.Settings{ID: wrongID}, &defaultCfg, nil) + assert.EqualError(t, err, wrongIDErrStr) } var nopInstance = &nopReceiver{ From c5822575005c58db552828a292741d3c6a63c086 Mon Sep 17 00:00:00 2001 From: Pablo Baeyens Date: Thu, 27 Feb 2025 13:03:47 +0100 Subject: [PATCH 6/6] Fix test --- connector/connector_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/connector/connector_test.go b/connector/connector_test.go index b544ea1d8d1..1853c9295f8 100644 --- a/connector/connector_test.go +++ b/connector/connector_test.go @@ -70,6 +70,7 @@ func TestNewFactoryWithSameTypes(t *testing.T) { assert.Equal(t, component.StabilityLevelBeta, factory.MetricsToMetricsStability()) _, err = factory.CreateMetricsToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop()) require.NoError(t, err) + _, err = factory.CreateMetricsToMetrics(context.Background(), Settings{ID: wrongID}, &defaultCfg, consumertest.NewNop()) require.ErrorContains(t, err, wrongIDErrStr) assert.Equal(t, component.StabilityLevelUnmaintained, factory.LogsToLogsStability())