From ce3e3e54327185754b728b8ff51083019ee6ef6c Mon Sep 17 00:00:00 2001 From: "minquan.chen" Date: Sat, 13 Jan 2024 13:16:06 +0800 Subject: [PATCH 1/3] [chore] move carbon exporter to generated lifecycle tests --- .../generated_component_test.go | 107 ++++++++++++++++++ exporter/carbonexporter/go.mod | 1 + exporter/carbonexporter/metadata.yaml | 4 + 3 files changed, 112 insertions(+) create mode 100644 exporter/carbonexporter/generated_component_test.go diff --git a/exporter/carbonexporter/generated_component_test.go b/exporter/carbonexporter/generated_component_test.go new file mode 100644 index 0000000000000..b793f2a61aa8e --- /dev/null +++ b/exporter/carbonexporter/generated_component_test.go @@ -0,0 +1,107 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package carbonexporter + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componenttest" + + "go.opentelemetry.io/collector/exporter" + "go.opentelemetry.io/collector/exporter/exportertest" + + "go.opentelemetry.io/collector/confmap/confmaptest" + + "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata" +) + +// assertNoErrorHost implements a component.Host that asserts that there were no errors. +type assertNoErrorHost struct { + component.Host + *testing.T +} + +var _ component.Host = (*assertNoErrorHost)(nil) + +// newAssertNoErrorHost returns a new instance of assertNoErrorHost. +func newAssertNoErrorHost(t *testing.T) component.Host { + return &assertNoErrorHost{ + componenttest.NewNopHost(), + t, + } +} + +func (aneh *assertNoErrorHost) ReportFatalError(err error) { + assert.NoError(aneh, err) +} + +func TestComponentLifecycle(t *testing.T) { + factory := NewFactory() + + tests := []struct { + name string + createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) + }{ + + { + name: "metrics", + createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) { + return factory.CreateMetricsExporter(ctx, set, cfg) + }, + }, + } + + cm, err := confmaptest.LoadConf("metadata.yaml") + require.NoError(t, err) + cfg := factory.CreateDefaultConfig() + sub, err := cm.Sub("tests::config") + require.NoError(t, err) + require.NoError(t, component.UnmarshalConfig(sub, cfg)) + + for _, test := range tests { + t.Run(test.name+"-shutdown", func(t *testing.T) { + c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg) + require.NoError(t, err) + err = c.Shutdown(context.Background()) + require.NoError(t, err) + }) + + t.Run(test.name+"-lifecycle", func(t *testing.T) { + + c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg) + require.NoError(t, err) + host := newAssertNoErrorHost(t) + err = c.Start(context.Background(), host) + require.NoError(t, err) + assert.NotPanics(t, func() { + switch e := c.(type) { + case exporter.Logs: + logs := testdata.GenerateLogsManyLogRecordsSameResource(2) + if !e.Capabilities().MutatesData { + logs.MarkReadOnly() + } + err = e.ConsumeLogs(context.Background(), logs) + case exporter.Metrics: + metrics := testdata.GenerateMetricsTwoMetrics() + if !e.Capabilities().MutatesData { + metrics.MarkReadOnly() + } + err = e.ConsumeMetrics(context.Background(), metrics) + case exporter.Traces: + traces := testdata.GenerateTracesTwoSpansSameResource() + if !e.Capabilities().MutatesData { + traces.MarkReadOnly() + } + err = e.ConsumeTraces(context.Background(), traces) + } + }) + + err = c.Shutdown(context.Background()) + require.NoError(t, err) + }) + } +} diff --git a/exporter/carbonexporter/go.mod b/exporter/carbonexporter/go.mod index 57716f12d7452..339ae4050cef3 100644 --- a/exporter/carbonexporter/go.mod +++ b/exporter/carbonexporter/go.mod @@ -5,6 +5,7 @@ go 1.21 require ( github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.95.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.95.0 + github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.95.0 github.com/stretchr/testify v1.8.4 go.opentelemetry.io/collector/component v0.95.0 go.opentelemetry.io/collector/config/confignet v0.95.0 diff --git a/exporter/carbonexporter/metadata.yaml b/exporter/carbonexporter/metadata.yaml index 2985110e616b6..bb5b5245e2a8d 100644 --- a/exporter/carbonexporter/metadata.yaml +++ b/exporter/carbonexporter/metadata.yaml @@ -7,3 +7,7 @@ status: distributions: [contrib, observiq, sumo] codeowners: active: [aboguszewski-sumo] + +tests: + config: + expect_consumer_error: true \ No newline at end of file From 66661bc974d0c74d3f0ce088c11dbb889419bd0b Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Wed, 31 Jan 2024 13:46:26 -0800 Subject: [PATCH 2/3] regenerate --- .../carbonexporter/generated_component_test.go | 17 ++--------------- exporter/carbonexporter/go.mod | 2 +- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/exporter/carbonexporter/generated_component_test.go b/exporter/carbonexporter/generated_component_test.go index b793f2a61aa8e..6866984142701 100644 --- a/exporter/carbonexporter/generated_component_test.go +++ b/exporter/carbonexporter/generated_component_test.go @@ -6,7 +6,6 @@ import ( "context" "testing" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" @@ -27,18 +26,6 @@ type assertNoErrorHost struct { var _ component.Host = (*assertNoErrorHost)(nil) -// newAssertNoErrorHost returns a new instance of assertNoErrorHost. -func newAssertNoErrorHost(t *testing.T) component.Host { - return &assertNoErrorHost{ - componenttest.NewNopHost(), - t, - } -} - -func (aneh *assertNoErrorHost) ReportFatalError(err error) { - assert.NoError(aneh, err) -} - func TestComponentLifecycle(t *testing.T) { factory := NewFactory() @@ -74,10 +61,10 @@ func TestComponentLifecycle(t *testing.T) { c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg) require.NoError(t, err) - host := newAssertNoErrorHost(t) + host := componenttest.NewNopHost() err = c.Start(context.Background(), host) require.NoError(t, err) - assert.NotPanics(t, func() { + require.NotPanics(t, func() { switch e := c.(type) { case exporter.Logs: logs := testdata.GenerateLogsManyLogRecordsSameResource(2) diff --git a/exporter/carbonexporter/go.mod b/exporter/carbonexporter/go.mod index 339ae4050cef3..39b9f7fdf7ba9 100644 --- a/exporter/carbonexporter/go.mod +++ b/exporter/carbonexporter/go.mod @@ -4,8 +4,8 @@ go 1.21 require ( github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.95.0 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.95.0 github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.95.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.95.0 github.com/stretchr/testify v1.8.4 go.opentelemetry.io/collector/component v0.95.0 go.opentelemetry.io/collector/config/confignet v0.95.0 From c6ebdffac48167dbf7c91cfad39b5bf2cff76b46 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Thu, 29 Feb 2024 23:05:29 -0800 Subject: [PATCH 3/3] regenerate --- .../generated_component_test.go | 56 ++++++++++++++----- exporter/carbonexporter/go.mod | 1 - 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/exporter/carbonexporter/generated_component_test.go b/exporter/carbonexporter/generated_component_test.go index 6866984142701..2c8cc789f51e6 100644 --- a/exporter/carbonexporter/generated_component_test.go +++ b/exporter/carbonexporter/generated_component_test.go @@ -5,6 +5,7 @@ package carbonexporter import ( "context" "testing" + "time" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" @@ -14,18 +15,12 @@ import ( "go.opentelemetry.io/collector/exporter/exportertest" "go.opentelemetry.io/collector/confmap/confmaptest" - - "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata" + "go.opentelemetry.io/collector/pdata/pcommon" + "go.opentelemetry.io/collector/pdata/plog" + "go.opentelemetry.io/collector/pdata/pmetric" + "go.opentelemetry.io/collector/pdata/ptrace" ) -// assertNoErrorHost implements a component.Host that asserts that there were no errors. -type assertNoErrorHost struct { - component.Host - *testing.T -} - -var _ component.Host = (*assertNoErrorHost)(nil) - func TestComponentLifecycle(t *testing.T) { factory := NewFactory() @@ -67,19 +62,19 @@ func TestComponentLifecycle(t *testing.T) { require.NotPanics(t, func() { switch e := c.(type) { case exporter.Logs: - logs := testdata.GenerateLogsManyLogRecordsSameResource(2) + logs := generateLifecycleTestLogs() if !e.Capabilities().MutatesData { logs.MarkReadOnly() } err = e.ConsumeLogs(context.Background(), logs) case exporter.Metrics: - metrics := testdata.GenerateMetricsTwoMetrics() + metrics := generateLifecycleTestMetrics() if !e.Capabilities().MutatesData { metrics.MarkReadOnly() } err = e.ConsumeMetrics(context.Background(), metrics) case exporter.Traces: - traces := testdata.GenerateTracesTwoSpansSameResource() + traces := generateLifecycleTestTraces() if !e.Capabilities().MutatesData { traces.MarkReadOnly() } @@ -92,3 +87,38 @@ func TestComponentLifecycle(t *testing.T) { }) } } + +func generateLifecycleTestLogs() plog.Logs { + logs := plog.NewLogs() + rl := logs.ResourceLogs().AppendEmpty() + rl.Resource().Attributes().PutStr("resource", "R1") + l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty() + l.Body().SetStr("test log message") + l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now())) + return logs +} + +func generateLifecycleTestMetrics() pmetric.Metrics { + metrics := pmetric.NewMetrics() + rm := metrics.ResourceMetrics().AppendEmpty() + rm.Resource().Attributes().PutStr("resource", "R1") + m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty() + m.SetName("test_metric") + dp := m.SetEmptyGauge().DataPoints().AppendEmpty() + dp.Attributes().PutStr("test_attr", "value_1") + dp.SetIntValue(123) + dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now())) + return metrics +} + +func generateLifecycleTestTraces() ptrace.Traces { + traces := ptrace.NewTraces() + rs := traces.ResourceSpans().AppendEmpty() + rs.Resource().Attributes().PutStr("resource", "R1") + span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty() + span.Attributes().PutStr("test_attr", "value_1") + span.SetName("test_span") + span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second))) + span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now())) + return traces +} diff --git a/exporter/carbonexporter/go.mod b/exporter/carbonexporter/go.mod index 39b9f7fdf7ba9..57716f12d7452 100644 --- a/exporter/carbonexporter/go.mod +++ b/exporter/carbonexporter/go.mod @@ -4,7 +4,6 @@ go 1.21 require ( github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.95.0 - github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.95.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.95.0 github.com/stretchr/testify v1.8.4 go.opentelemetry.io/collector/component v0.95.0