package auth import ( "testing" "time" ) // TargetLoginLatency ist der Zielwert aus IAM-02 Akzeptanzkriterium 4: der // bcrypt-Vergleich allein darf die Login-Latenz nicht dominieren. 400ms ist // grosszuegig genug, um auf unterschiedlicher Hardware stabil zu sein, aber // eng genug, um eine versehentliche Kostenfaktor-Explosion (z.B. 16 statt 12) // zuverlaessig aufzudecken. const TargetLoginLatency = 400 * time.Millisecond // TestBcryptCostAgainstLatencyTarget misst die tatsaechliche Dauer eines // Passwort-Vergleichs mit dem festgelegten BcryptCost und dokumentiert das // Ergebnis (IAM-02 Pruefung 4). func TestBcryptCostAgainstLatencyTarget(t *testing.T) { hash, err := HashPassword("benchmark-passwort") if err != nil { t.Fatalf("hash: %v", err) } start := time.Now() if !VerifyPassword(hash, "benchmark-passwort") { t.Fatal("verifikation haette erfolgreich sein muessen") } elapsed := time.Since(start) t.Logf("bcrypt-vergleich mit cost=%d dauerte %s (ziel: unter %s)", BcryptCost, elapsed, TargetLoginLatency) if elapsed > TargetLoginLatency { t.Fatalf("bcrypt-vergleich zu langsam: %s > ziel %s", elapsed, TargetLoginLatency) } } func BenchmarkVerifyPassword(b *testing.B) { hash, _ := HashPassword("benchmark-passwort") b.ResetTimer() for i := 0; i < b.N; i++ { VerifyPassword(hash, "benchmark-passwort") } }