Files
traces/modules/distributor/forwarder/forwarder_test.go
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Yuna Verheyden
11eb33e605 Bump the opentelemetry-collector group with 19 updates (#4675)
* Bump the opentelemetry-collector group with 19 updates

Bumps the opentelemetry-collector group with 19 updates:

| Package | From | To |
| --- | --- | --- |
| [go.opentelemetry.io/collector/component](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/confmap](https://github.com/open-telemetry/opentelemetry-collector) | `1.24.0` | `1.25.0` |
| [go.opentelemetry.io/collector/consumer](https://github.com/open-telemetry/opentelemetry-collector) | `1.24.0` | `1.25.0` |
| [go.opentelemetry.io/collector/pdata](https://github.com/open-telemetry/opentelemetry-collector) | `1.24.0` | `1.25.0` |
| [go.opentelemetry.io/collector/client](https://github.com/open-telemetry/opentelemetry-collector) | `1.24.0` | `1.25.0` |
| [go.opentelemetry.io/collector/component/componenttest](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/config/configgrpc](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/config/confighttp](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/config/configtls](https://github.com/open-telemetry/opentelemetry-collector) | `1.24.0` | `1.25.0` |
| [go.opentelemetry.io/collector/exporter](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/exporter/exportertest](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/exporter/otlpexporter](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/exporter/otlphttpexporter](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/extension](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/otelcol](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/pdata/testdata](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/processor](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/receiver](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |
| [go.opentelemetry.io/collector/receiver/otlpreceiver](https://github.com/open-telemetry/opentelemetry-collector) | `0.118.0` | `0.119.0` |


Updates `go.opentelemetry.io/collector/component` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/confmap` from 1.24.0 to 1.25.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.24.0...pdata/v1.25.0)

Updates `go.opentelemetry.io/collector/consumer` from 1.24.0 to 1.25.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.24.0...pdata/v1.25.0)

Updates `go.opentelemetry.io/collector/pdata` from 1.24.0 to 1.25.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.24.0...pdata/v1.25.0)

Updates `go.opentelemetry.io/collector/client` from 1.24.0 to 1.25.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.24.0...pdata/v1.25.0)

Updates `go.opentelemetry.io/collector/component/componenttest` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/config/configgrpc` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/config/confighttp` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/config/configtls` from 1.24.0 to 1.25.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.24.0...pdata/v1.25.0)

Updates `go.opentelemetry.io/collector/exporter` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/exporter/exportertest` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/exporter/otlpexporter` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/exporter/otlphttpexporter` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/extension` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/otelcol` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/pdata/testdata` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/processor` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/receiver` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

Updates `go.opentelemetry.io/collector/receiver/otlpreceiver` from 0.118.0 to 0.119.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.118.0...v0.119.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/collector/component
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/confmap
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/consumer
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/pdata
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/client
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/component/componenttest
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/config/configgrpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/config/confighttp
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/config/configtls
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/exporter
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/exporter/exportertest
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/exporter/otlpexporter
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/exporter/otlphttpexporter
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/extension
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/otelcol
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/pdata/testdata
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/processor
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/receiver
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
- dependency-name: go.opentelemetry.io/collector/receiver/otlpreceiver
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: opentelemetry-collector
...

Signed-off-by: dependabot[bot] <[email protected]>

* Address breaking changes to component.Host interface

* Remove unused code

* linting

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yuna Verheyden <[email protected]>
2025-02-17 14:17:30 +01:00

298 lines
9.2 KiB
Go

package forwarder
import (
"context"
"errors"
"testing"
dslog "github.com/grafana/dskit/log"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/ptrace"
)
type mockCountingForwarder struct {
next Forwarder
forwardTracesCount int
}
func (m *mockCountingForwarder) ForwardTraces(ctx context.Context, traces ptrace.Traces) error {
m.forwardTracesCount++
return m.next.ForwardTraces(ctx, traces)
}
func (m *mockCountingForwarder) Shutdown(ctx context.Context) error {
return m.next.Shutdown(ctx)
}
type mockTraceRecordingForwarder struct {
next Forwarder
traces ptrace.Traces
}
func (m *mockTraceRecordingForwarder) ForwardTraces(ctx context.Context, traces ptrace.Traces) error {
m.traces = traces
return m.next.ForwardTraces(ctx, traces)
}
func (m *mockTraceRecordingForwarder) Shutdown(ctx context.Context) error {
return m.next.Shutdown(ctx)
}
type mockWorkingProcessor struct {
component.Component
consumer.Traces
}
func (m *mockWorkingProcessor) Shutdown(_ context.Context) error {
return nil
}
type mockFailingProcessor struct {
component.Component
consumer.Traces
err error
}
func (m *mockFailingProcessor) Shutdown(_ context.Context) error {
return m.err
}
func TestList_ForwardTraces_ReturnsNoErrorAndCallsForwardTracesOnAllUnderlyingWorkingForwarders(t *testing.T) {
// Given
forwarder1 := &mockCountingForwarder{next: &mockWorkingForwarder{}, forwardTracesCount: 0}
forwarder2 := &mockCountingForwarder{next: &mockWorkingForwarder{}, forwardTracesCount: 0}
forwarder3 := &mockCountingForwarder{next: &mockWorkingForwarder{}, forwardTracesCount: 0}
list := List([]Forwarder{forwarder1, forwarder2, forwarder3})
// When
err := list.ForwardTraces(context.Background(), ptrace.Traces{})
// Then
require.NoError(t, err)
require.Equal(t, 1, forwarder1.forwardTracesCount)
require.Equal(t, 1, forwarder2.forwardTracesCount)
require.Equal(t, 1, forwarder3.forwardTracesCount)
}
func TestList_ForwardTraces_ReturnsErrorAndCallsForwardTracesOnAllUnderlyingForwardersWithSingleFailingForwarder(t *testing.T) {
// Given
forwarder1 := &mockCountingForwarder{next: &mockWorkingForwarder{}, forwardTracesCount: 0}
forwarder2 := &mockCountingForwarder{next: &mockWorkingForwarder{}, forwardTracesCount: 0}
forwarder3 := &mockCountingForwarder{next: &mockFailingForwarder{forwardTracesErr: errors.New("forward batches error")}, forwardTracesCount: 0}
list := List([]Forwarder{forwarder1, forwarder2, forwarder3})
// When
err := list.ForwardTraces(context.Background(), ptrace.Traces{})
// Then
require.Error(t, err)
require.Equal(t, 1, forwarder1.forwardTracesCount)
require.Equal(t, 1, forwarder2.forwardTracesCount)
require.Equal(t, 1, forwarder3.forwardTracesCount)
}
func TestList_ForwardTraces_ReturnsErrorAndCallsForwardTracesOnAllUnderlyingForwardersWithAllFailingForwarder(t *testing.T) {
// Given
forwarder1 := &mockCountingForwarder{next: &mockFailingForwarder{forwardTracesErr: errors.New("1 forward batches error")}, forwardTracesCount: 0}
forwarder2 := &mockCountingForwarder{next: &mockFailingForwarder{forwardTracesErr: errors.New("2 forward batches error")}, forwardTracesCount: 0}
forwarder3 := &mockCountingForwarder{next: &mockFailingForwarder{forwardTracesErr: errors.New("3 forward batches error")}, forwardTracesCount: 0}
list := List([]Forwarder{forwarder1, forwarder2, forwarder3})
// When
err := list.ForwardTraces(context.Background(), ptrace.Traces{})
// Then
require.Error(t, err)
require.ErrorContains(t, err, "1")
require.ErrorContains(t, err, "2")
require.ErrorContains(t, err, "3")
require.Equal(t, 1, forwarder1.forwardTracesCount)
require.Equal(t, 1, forwarder2.forwardTracesCount)
require.Equal(t, 1, forwarder3.forwardTracesCount)
}
func TestList_ForwardTraces_DoesNotPanicWhenNil(t *testing.T) {
// Given
list := List(nil)
// When
panicFunc := func() {
err := list.ForwardTraces(context.Background(), ptrace.Traces{})
require.NoError(t, err)
}
// Then
require.NotPanics(t, panicFunc)
}
func TestFilterForwarder_ForwardTraces_ReturnsNoErrorAndCallsForwardTracesOnUnderlyingForwarderWithNoFilters(t *testing.T) {
// Given
traces := ptrace.NewTraces()
rss := traces.ResourceSpans().AppendEmpty()
ss := rss.ScopeSpans().AppendEmpty()
span := ss.Spans().AppendEmpty()
span.SetTraceID(pcommon.TraceID{1, 2})
f := &mockCountingForwarder{next: &mockWorkingForwarder{}, forwardTracesCount: 0}
cfg := FilterConfig{}
ff, err := NewFilterForwarder(cfg, f, dslog.Level{})
require.NoError(t, err)
// When
err = ff.ForwardTraces(context.Background(), traces)
// Then
require.NoError(t, err)
require.Equal(t, 1, f.forwardTracesCount)
}
func TestFilterForwarder_ForwardTraces_ReturnsNoErrorAndCallsForwardTracesOnUnderlyingForwarderWithFilters(t *testing.T) {
// Given
traces := ptrace.NewTraces()
rss := traces.ResourceSpans().AppendEmpty()
ss := rss.ScopeSpans().AppendEmpty()
ss.Spans().AppendEmpty().SetName("to-filter")
ss.Spans().AppendEmpty().SetName("to-keep")
rf := &mockTraceRecordingForwarder{next: &mockWorkingForwarder{}}
f := &mockCountingForwarder{next: rf, forwardTracesCount: 0}
cfg := FilterConfig{
Traces: TraceFiltersConfig{
SpanConditions: []string{`name == "to-filter"`},
SpanEventConditions: nil,
},
}
ff, err := NewFilterForwarder(cfg, f, dslog.Level{})
require.NoError(t, err)
// When
err = ff.ForwardTraces(context.Background(), traces)
// Then
require.NoError(t, err)
require.Equal(t, 1, f.forwardTracesCount)
require.Equal(t, 1, rf.traces.ResourceSpans().Len())
require.Equal(t, 1, rf.traces.ResourceSpans().At(0).ScopeSpans().Len())
require.Equal(t, 1, rf.traces.ResourceSpans().At(0).ScopeSpans().At(0).Spans().Len())
require.Equal(t, "to-keep", rf.traces.ResourceSpans().At(0).ScopeSpans().At(0).Spans().At(0).Name())
}
func TestFilterForwarder_ForwardTraces_ReturnsNoErrorAndDoesNotCallsForwardTracesOnUnderlyingForwarderWithAllSpansFiltered(t *testing.T) {
// Given
traces := ptrace.NewTraces()
rss := traces.ResourceSpans().AppendEmpty()
ss := rss.ScopeSpans().AppendEmpty()
ss.Spans().AppendEmpty().SetName("to-filter-1")
ss.Spans().AppendEmpty().SetName("to-filter-2")
rf := &mockTraceRecordingForwarder{next: &mockWorkingForwarder{}}
f := &mockCountingForwarder{next: rf, forwardTracesCount: 0}
cfg := FilterConfig{
Traces: TraceFiltersConfig{
SpanConditions: []string{`name == "to-filter-1" or name == "to-filter-2"`},
SpanEventConditions: nil,
},
}
ff, err := NewFilterForwarder(cfg, f, dslog.Level{})
require.NoError(t, err)
// When
err = ff.ForwardTraces(context.Background(), traces)
// Then
require.NoError(t, err)
require.Zero(t, f.forwardTracesCount)
require.Equal(t, ptrace.Traces{}, rf.traces)
}
func TestFilterForwarder_ForwardTraces_ReturnsErrorWithFailingUnderlyingForwarder(t *testing.T) {
// Given
traces := ptrace.NewTraces()
rss := traces.ResourceSpans().AppendEmpty()
ss := rss.ScopeSpans().AppendEmpty()
span := ss.Spans().AppendEmpty()
span.SetTraceID(pcommon.TraceID{1, 2})
forwardTracesErr := errors.New("forward traces error")
f := &mockCountingForwarder{next: &mockFailingForwarder{forwardTracesErr: forwardTracesErr}}
cfg := FilterConfig{
Traces: TraceFiltersConfig{
SpanConditions: []string{`name == "to-filter-1" or name == "to-filter-2"`},
SpanEventConditions: nil,
},
}
ff, err := NewFilterForwarder(cfg, f, dslog.Level{})
require.NoError(t, err)
// When
err = ff.ForwardTraces(context.Background(), traces)
// Then
require.ErrorIs(t, err, forwardTracesErr)
require.Equal(t, 1, f.forwardTracesCount)
}
func TestFilterForwarder_Shutdown_ReturnsNoErrorWithWorkingProcessorAndForwarder(t *testing.T) {
// Given
ff := &FilterForwarder{
filterProcessor: &mockWorkingProcessor{},
next: &mockWorkingForwarder{},
}
// When
err := ff.Shutdown(context.Background())
// Then
require.NoError(t, err)
}
func TestFilterForwarder_Shutdown_ReturnsErrorWithFailingProcessor(t *testing.T) {
// Given
shutdownErr := errors.New("shutdown error")
ff := &FilterForwarder{
filterProcessor: &mockFailingProcessor{err: shutdownErr},
next: &mockWorkingForwarder{},
}
// When
err := ff.Shutdown(context.Background())
// Then
require.ErrorIs(t, err, shutdownErr)
}
func TestFilterForwarder_Shutdown_ReturnsErrorWithFailingForwarder(t *testing.T) {
// Given
shutdownErr := errors.New("shutdown error")
ff := &FilterForwarder{
filterProcessor: &mockWorkingProcessor{},
next: &mockFailingForwarder{shutdownErr: shutdownErr},
}
// When
err := ff.Shutdown(context.Background())
// Then
require.ErrorIs(t, err, shutdownErr)
}
func TestFilterForwarder_Shutdown_ReturnsErrorWithFailingProcessorAndForwarder(t *testing.T) {
// Given
processorShutdownErr := errors.New("processor shutdown error")
forwarderShutdownErr := errors.New("forwarder shutdown error")
ff := &FilterForwarder{
filterProcessor: &mockFailingProcessor{err: processorShutdownErr},
next: &mockFailingForwarder{shutdownErr: forwarderShutdownErr},
}
// When
err := ff.Shutdown(context.Background())
// Then
require.ErrorIs(t, err, processorShutdownErr)
require.ErrorIs(t, err, forwarderShutdownErr)
}