Files
story/internal/app/app_integration_test.go
T

73 lines
2.5 KiB
Go

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")
t.Setenv("PLATFORM_HEALTH_CALLBACK_SECRET", strings.Repeat("h", 32))
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)
}
}