Ctrl K
ComunidadGuías…

coderd/nats/server_internal_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package nats

import (
	"testing"

	"github.com/stretchr/testify/require"

	"cdr.dev/slog/v3"
	"github.com/coder/coder/v2/testutil"
)

func TestServerLogger(t *testing.T) {
	t.Parallel()

	for _, tc := range []struct {
		name  string
		log   func(serverLogger, string, ...any)
		level slog.Level
	}{
		{name: "Notice", log: serverLogger.Noticef, level: slog.LevelInfo},
		{name: "Warn", log: serverLogger.Warnf, level: slog.LevelWarn},
		{name: "Fatal", log: serverLogger.Fatalf, level: slog.LevelCritical},
		{name: "Error", log: serverLogger.Errorf, level: slog.LevelError},
		{name: "Debug", log: serverLogger.Debugf, level: slog.LevelDebug},
		{name: "Trace", log: serverLogger.Tracef, level: slog.LevelDebug},
	} {
		t.Run(tc.name, func(t *testing.T) {
			t.Parallel()

			sink := testutil.NewFakeSink(t)
			logger := serverLogger{logger: sink.Logger().Named("nats").With(slog.F("replica", "test"))}
			tc.log(logger, "connection %s: %d pending", "client", 42)

			entries := sink.Entries()
			require.Len(t, entries, 1)
			require.Equal(t, tc.level, entries[0].Level)
			require.Equal(t, "connection client: 42 pending", entries[0].Message)
			require.Equal(t, []string{"nats"}, entries[0].LoggerNames)
			require.Equal(t, slog.Map{slog.F("replica", "test")}, entries[0].Fields)
		})
	}
}

func TestEmbeddedServerLogging(t *testing.T) {
	t.Parallel()

	sink := testutil.NewFakeSink(t)
	ps, err := New(t.Context(), sink.Logger(slog.LevelDebug).Named("nats"), defaultTestOptions())
	require.NoError(t, err)
	t.Cleanup(func() { _ = ps.Close() })

	startup := sink.Entries(func(e slog.SinkEntry) bool {
		return e.Message == "Starting nats-server"
	})
	require.Len(t, startup, 1, "logger must be installed before the server starts")
	require.Equal(t, slog.LevelDebug, startup[0].Level)
	require.Equal(t, []string{"nats", "server"}, startup[0].LoggerNames)

	ps.Server.Debugf("debug %s", "message")
	debug := sink.Entries(func(e slog.SinkEntry) bool {
		return e.Message == "debug message"
	})

	require.Len(t, debug, 1)

	ps.Server.Tracef("trace %s", "payload")
	require.Empty(t, sink.Entries(func(e slog.SinkEntry) bool {
		return e.Message == "trace payload"
	}), "protocol tracing must remain disabled")
}