package main import ( "context" "io" "log/slog" "strings" "testing" "time" ) func TestRunValidatesConfiguration(t *testing.T) { logger := slog.New(slog.NewJSONHandler(io.Discard, nil)) t.Setenv("MOCK_PROVIDER_DUPLICATE_CALLBACKS", "invalid") if err := run(context.Background(), logger); err == nil || !strings.Contains(err.Error(), "duplicate callback") { t.Fatalf("duplicate validation error=%v", err) } t.Setenv("MOCK_PROVIDER_DUPLICATE_CALLBACKS", "2") t.Setenv("MOCK_PROVIDER_START_DELAY", "invalid") if err := run(context.Background(), logger); err == nil || !strings.Contains(err.Error(), "start delay") { t.Fatalf("delay validation error=%v", err) } } func TestRunStartsAndShutsDown(t *testing.T) { logger := slog.New(slog.NewJSONHandler(io.Discard, nil)) t.Setenv("HTTP_ADDR", "127.0.0.1:0") t.Setenv("MOCK_PROVIDER_START_DELAY", "1ms") t.Setenv("MOCK_PROVIDER_DUPLICATE_CALLBACKS", "1") ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) defer cancel() if err := run(ctx, logger); err != nil { t.Fatalf("provider lifecycle: %v", err) } } func TestEnvUsesValueAndFallback(t *testing.T) { t.Setenv("MOCK_PROVIDER_TEST_VALUE", "configured") if got := env("MOCK_PROVIDER_TEST_VALUE", "fallback"); got != "configured" { t.Fatalf("value=%q", got) } if got := env("MOCK_PROVIDER_MISSING_VALUE", "fallback"); got != "fallback" { t.Fatalf("fallback=%q", got) } }