72 lines
2.4 KiB
Go
72 lines
2.4 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")
|
||
|
|
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)
|
||
|
|
}
|
||
|
|
}
|