package observability
import (
"context"
"log/slog"
"net/http"
"net/http/httptest"
"sync"
"testing"
"time"
"tangled.org/core/spindle/config"
)
func TestInitLoggingDisabled(t *testing.T) {
ctx := context.Background()
cfg := config.Logging{
Endpoint: "",
}
handler, shutdown, err := InitLogging(ctx, cfg)
if err != nil {
t.Fatalf("InitLogging returned error: %v", err)
}
if handler != nil {
t.Error("expected handler to be nil when logging is disabled")
}
if shutdown == nil {
t.Error("expected shutdown to be a no-op function, not nil")
}
if err := shutdown(ctx); err != nil {
t.Errorf("no-op shutdown returned error: %v", err)
}
}
func TestInitLoggingEnabled(t *testing.T) {
var mu sync.Mutex
var logReceived bool
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/otlp/v1/logs" {
mu.Lock()
logReceived = true
mu.Unlock()
w.WriteHeader(http.StatusOK)
}
}))
defer server.Close()
ctx := context.Background()
endpoint := server.Listener.Addr().String()
cfg := config.Logging{
Endpoint: endpoint,
ServiceName: "spindle-test-service",
Insecure: true,
}
handler, shutdown, err := InitLogging(ctx, cfg)
if err != nil {
t.Fatalf("InitLogging returned error: %v", err)
}
if handler == nil {
t.Fatal("expected handler to be non-nil when logging is enabled")
}
logger := slog.New(handler)
logger.Info("hello from test log exporter")
shutdownCtx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
if err := shutdown(shutdownCtx); err != nil {
t.Errorf("shutdown returned error: %v", err)
}
mu.Lock()
received := logReceived
mu.Unlock()
if !received {
t.Error("expected mock collector to receive the log request on /otlp/v1/logs")
}
}