Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

This file was deleted.

This file was deleted.

116 changes: 57 additions & 59 deletions internal/telemetry/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ package telemetry
import (
"context"
"errors"
"net/http"
"testing"

"github.com/stretchr/testify/suite"
Expand All @@ -35,62 +36,68 @@ type InitMeterTestSuite struct {
suite.Suite
}

func (s *InitMeterTestSuite) TestInitMeterDefaultPath() {
func (s *InitMeterTestSuite) TestInitMeter() {
tests := []struct {
name string
name string
cfg config.MetricsConfig
setupFn func()
cleanupFn func()
validateFunc func(http.Handler, string, func(context.Context) error, error)
}{
{
name: "when path is empty uses default /metrics",
cfg: config.MetricsConfig{},
validateFunc: func(
handler http.Handler,
path string,
shutdown func(context.Context) error,
err error,
) {
s.NoError(err)
s.NotNil(handler)
s.Equal(DefaultMetricsPath, path)
s.NotNil(shutdown)
s.NoError(shutdown(context.Background()))
},
},
}

for _, tc := range tests {
s.Run(tc.name, func() {
cfg := config.MetricsConfig{}

handler, path, shutdown, err := InitMeter(cfg)

s.NoError(err)
s.NotNil(handler)
s.Equal(DefaultMetricsPath, path)
s.NotNil(shutdown)
s.NoError(shutdown(context.Background()))
})
}
}

func (s *InitMeterTestSuite) TestInitMeterCustomPath() {
tests := []struct {
name string
}{
{
name: "when path is configured uses custom path",
cfg: config.MetricsConfig{Path: "/custom/metrics"},
validateFunc: func(
handler http.Handler,
path string,
shutdown func(context.Context) error,
err error,
) {
s.NoError(err)
s.NotNil(handler)
s.Equal("/custom/metrics", path)
s.NotNil(shutdown)
s.NoError(shutdown(context.Background()))
},
},
}

for _, tc := range tests {
s.Run(tc.name, func() {
cfg := config.MetricsConfig{
Path: "/custom/metrics",
}

handler, path, shutdown, err := InitMeter(cfg)

s.NoError(err)
s.NotNil(handler)
s.Equal("/custom/metrics", path)
s.NotNil(shutdown)
s.NoError(shutdown(context.Background()))
})
}
}

func (s *InitMeterTestSuite) TestInitMeterExporterError() {
tests := []struct {
name string
}{
{
name: "when prometheus exporter creation fails returns error",
cfg: config.MetricsConfig{},
setupFn: func() {
prometheusNewFn = func(
_ ...prometheus.Option,
) (*prometheus.Exporter, error) {
return nil, errors.New("prometheus exporter failed")
}
},
validateFunc: func(
handler http.Handler,
path string,
shutdown func(context.Context) error,
err error,
) {
s.Error(err)
s.Nil(handler)
s.Empty(path)
s.Nil(shutdown)
s.Contains(err.Error(), "creating prometheus exporter")
},
},
}

Expand All @@ -99,21 +106,12 @@ func (s *InitMeterTestSuite) TestInitMeterExporterError() {
original := prometheusNewFn
defer func() { prometheusNewFn = original }()

prometheusNewFn = func(
_ ...prometheus.Option,
) (*prometheus.Exporter, error) {
return nil, errors.New("prometheus exporter failed")
if tc.setupFn != nil {
tc.setupFn()
}

cfg := config.MetricsConfig{}

handler, path, shutdown, err := InitMeter(cfg)

s.Error(err)
s.Nil(handler)
s.Empty(path)
s.Nil(shutdown)
s.Contains(err.Error(), "creating prometheus exporter")
handler, path, shutdown, err := InitMeter(tc.cfg)
tc.validateFunc(handler, path, shutdown, err)
})
}
}
Expand Down
31 changes: 16 additions & 15 deletions internal/telemetry/slog_public_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,22 @@ func (s *SlogPublicTestSuite) TestNewTraceHandler() {
s.NotContains(output, "span_id=")
},
},
{
name: "when active span preserves exact trace ID",
setupCtx: func() context.Context {
ctx, _ := otel.Tracer("test").Start(s.ctx, "test-span")

return ctx
},
validateFunc: func(output string) {
ctx, span := otel.Tracer("test").Start(s.ctx, "verify-span")
defer span.End()

expectedTraceID := trace.SpanContextFromContext(ctx).TraceID().String()
s.NotEmpty(expectedTraceID)
s.Contains(output, "trace_id=")
},
},
}

for _, tc := range tests {
Expand Down Expand Up @@ -129,21 +145,6 @@ func (s *SlogPublicTestSuite) TestTraceHandlerEnabled() {
s.True(handler.Enabled(s.ctx, slog.LevelWarn))
}

func (s *SlogPublicTestSuite) TestTraceHandlerPreservesTraceID() {
var buf bytes.Buffer
inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug})
handler := telemetry.NewTraceHandler(inner)
logger := slog.New(handler)

ctx, span := otel.Tracer("test").Start(s.ctx, "test-span")
defer span.End()

expectedTraceID := trace.SpanContextFromContext(ctx).TraceID().String()
logger.InfoContext(ctx, "check trace id")

s.Contains(buf.String(), expectedTraceID)
}

func TestSlogPublicTestSuite(t *testing.T) {
suite.Run(t, new(SlogPublicTestSuite))
}
Loading