package app import ( "context" "strings" "testing" "time" "data-terminal-cloud/internal/cache" "data-terminal-cloud/internal/config" "data-terminal-cloud/internal/ratelimit" ) func TestCallbacksApplicationStartsAndShutsDown(t *testing.T) { t.Setenv("APP_ENV", "test") t.Setenv("HTTP_ADDR", "127.0.0.1:0") t.Setenv("DATABASE_URL", "postgres://voice:voice_dev_only@localhost:55432/voice_platform?sslmode=disable") t.Setenv("REDIS_ADDR", "localhost:56379") t.Setenv("SHUTDOWN_TIMEOUT", "1s") t.Setenv("DEPENDENCY_TIMEOUT", "1s") ctx, cancel := context.WithTimeout(context.Background(), 300*time.Millisecond) defer cancel() if err := Run(ctx, "callbacks"); err != nil { t.Fatalf("callbacks lifecycle: %v", err) } } func TestApplicationRejectsInvalidConfiguration(t *testing.T) { t.Setenv("REDIS_DB", "not-an-integer") if err := Run(context.Background(), "callbacks"); err == nil || !strings.Contains(err.Error(), "load configuration") { t.Fatalf("invalid configuration error=%v", err) } } func TestLoggerLevelsAndRateLimiterAdapter(t *testing.T) { for _, level := range []string{"debug", "info", "warn", "error"} { logger := newLogger(config.Config{ServiceName: "app-integration", LogLevel: level}) if logger == nil { t.Fatalf("nil logger for level %s", level) } } redisClient := cache.Open("localhost:56379", "", 0) defer redisClient.Close() limiter, err := ratelimit.NewPolicies(redisClient, "app-integration", map[string]ratelimit.Policy{"network": {RatePerSecond: 100, Burst: 2}}) if err != nil { t.Fatal(err) } result, err := (rateLimiterAdapter{limiter: limiter}).Allow(context.Background(), "network", "synthetic-client") if err != nil || !result.Allowed || result.Remaining < 0 { t.Fatalf("rate limit result=%+v err=%v", result, err) } } func TestExternalProbeChecksIncludeManagedContentSafetyWithoutCallingIt(t *testing.T) { cfg := config.Config{ ServiceName: "worker", ContentSafetyProvider: "managed_http", ContentSafetyEndpoint: "https://content-safety.example.com/v1/classify", } checks, err := externalProbeChecks(cfg) if err != nil { t.Fatal(err) } if len(checks) != 1 || checks["content_safety_tls"] == nil { t.Fatalf("unexpected external probes: %+v", checks) } cfg.ContentSafetyProvider = "local" checks, err = externalProbeChecks(cfg) if err != nil || len(checks) != 0 { t.Fatalf("local content safety must not create an external probe: checks=%+v err=%v", checks, err) } }