175 lines
3.9 KiB
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)
|
|
})
|
|
}
|
|
}
|