Files
1da69f7208 [exporterhelper] Use configoptional.Optional for exporterhelper QueueBatchConfig (#14155)
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description

<!-- Issue number if applicable -->

Uses `configoptional.Optional` for `exporterhelper.QueueBatchConfig`.

#### Link to tracking issue

Updates #14021

---------

Co-authored-by: Evan Bradley <[email protected]>
Co-authored-by: Joshua MacDonald <[email protected]>
2025-12-03 10:12:16 +00:00

62 lines
2.2 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package internal
import (
"context"
"errors"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
"go.uber.org/zap/zaptest/observer"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/configoptional"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/queuebatch"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/requesttest"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/sender"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/pipeline"
)
func TestNewQueueSenderFailedRequestDropped(t *testing.T) {
qSet := queuebatch.AllSettings[request.Request]{
Signal: pipeline.SignalMetrics,
ID: component.NewID(exportertest.NopType),
Telemetry: componenttest.NewNopTelemetrySettings(),
}
logger, observed := observer.New(zap.ErrorLevel)
qSet.Telemetry.Logger = zap.New(logger)
qCfg := NewDefaultQueueConfig()
be, err := NewQueueSender(
qSet, qCfg, "", sender.NewSender(func(context.Context, request.Request) error { return errors.New("some error") }))
require.NoError(t, err)
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
require.NoError(t, be.Send(context.Background(), &requesttest.FakeRequest{Items: 2}))
require.NoError(t, be.Shutdown(context.Background()))
assert.Len(t, observed.All(), 1)
assert.Equal(t, "Exporting failed. Dropping data.", observed.All()[0].Message)
}
func TestQueueConfig_Validate(t *testing.T) {
qCfg := NewDefaultQueueConfig()
require.NoError(t, qCfg.Validate())
qCfg.NumConsumers = 0
require.EqualError(t, qCfg.Validate(), "`num_consumers` must be positive")
qCfg = NewDefaultQueueConfig()
qCfg.QueueSize = 0
require.EqualError(t, qCfg.Validate(), "`queue_size` must be positive")
// Confirm Validate doesn't return error with invalid config when feature is disabled
noCfg := configoptional.None[queuebatch.Config]()
assert.NoError(t, noCfg.Validate())
}