opentelemetry-collector/service/telemetry/factory_test.go

175 lines
3.9 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package telemetry
import (
"context"
"strconv"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
config "go.opentelemetry.io/contrib/otelconf/v0.3.0"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/featuregate"
)
func TestDefaultConfig(t *testing.T) {
tests := []struct {
expected string
gate bool
}{
{
expected: "localhost",
gate: true,
},
{
expected: "",
gate: false,
},
}
for _, tt := range tests {
t.Run("UseLocalHostAsDefaultMetricsAddress/"+strconv.FormatBool(tt.gate), func(t *testing.T) {
prev := useLocalHostAsDefaultMetricsAddressFeatureGate.IsEnabled()
require.NoError(t, featuregate.GlobalRegistry().Set(useLocalHostAsDefaultMetricsAddressFeatureGate.ID(), tt.gate))
defer func() {
// Restore previous value.
require.NoError(t, featuregate.GlobalRegistry().Set(useLocalHostAsDefaultMetricsAddressFeatureGate.ID(), prev))
}()
cfg := NewFactory().CreateDefaultConfig()
require.Len(t, cfg.(*Config).Metrics.Readers, 1)
assert.Equal(t, tt.expected, *cfg.(*Config).Metrics.Readers[0].Pull.Exporter.Prometheus.Host)
assert.Equal(t, 8888, *cfg.(*Config).Metrics.Readers[0].Pull.Exporter.Prometheus.Port)
})
}
}
func TestTelemetryConfiguration(t *testing.T) {
tests := []struct {
name string
cfg *Config
success bool
}{
{
name: "Valid config",
cfg: &Config{
Logs: LogsConfig{
Level: zapcore.DebugLevel,
Encoding: "console",
},
Metrics: MetricsConfig{
Level: configtelemetry.LevelBasic,
MeterProvider: config.MeterProvider{
Readers: []config.MetricReader{
{
Pull: &config.PullMetricReader{Exporter: config.PullMetricExporter{Prometheus: &config.Prometheus{
Host: ptr("127.0.0.1"),
Port: ptr(3333),
}}},
},
},
},
},
},
success: true,
},
{
name: "Invalid config",
cfg: &Config{
Logs: LogsConfig{
Level: zapcore.DebugLevel,
},
Metrics: MetricsConfig{
Level: configtelemetry.LevelBasic,
MeterProvider: config.MeterProvider{
Readers: []config.MetricReader{
{
Pull: &config.PullMetricReader{Exporter: config.PullMetricExporter{Prometheus: &config.Prometheus{
Host: ptr("127.0.0.1"),
Port: ptr(3333),
}}},
},
},
},
},
},
success: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
f := NewFactory()
set := Settings{ZapOptions: []zap.Option{}}
logger, _, err := f.CreateLogger(context.Background(), set, tt.cfg)
if tt.success {
require.NoError(t, err)
assert.NotNil(t, logger)
} else {
require.Error(t, err)
assert.Nil(t, logger)
}
})
}
}
func TestSampledLogger(t *testing.T) {
tests := []struct {
name string
cfg *Config
}{
{
name: "Default sampling",
cfg: &Config{
Logs: LogsConfig{
Encoding: "console",
},
},
},
{
name: "Custom sampling",
cfg: &Config{
Logs: LogsConfig{
Level: zapcore.DebugLevel,
Encoding: "console",
Sampling: &LogsSamplingConfig{
Enabled: true,
Tick: 1 * time.Second,
Initial: 100,
Thereafter: 100,
},
},
},
},
{
name: "Disable sampling",
cfg: &Config{
Logs: LogsConfig{
Level: zapcore.DebugLevel,
Encoding: "console",
Sampling: &LogsSamplingConfig{
Enabled: false,
},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
f := NewFactory()
ctx := context.Background()
set := Settings{ZapOptions: []zap.Option{}}
logger, _, err := f.CreateLogger(ctx, set, tt.cfg)
require.NoError(t, err)
assert.NotNil(t, logger)
})
}
}