package auth import ( "strings" "testing" ) // 随机密码只允许使用去混淆字符集,且长度精确可控。 func TestRandomPasswordCharsetAndLength(t *testing.T) { const alphabet = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789" for i := 0; i < 50; i++ { pwd, err := RandomPassword(16) if err != nil { t.Fatalf("生成随机密码: %v", err) } if len(pwd) != 16 { t.Fatalf("密码长度应为 16,得到 %d", len(pwd)) } for _, r := range pwd { if !strings.ContainsRune(alphabet, r) { t.Fatalf("密码含字符集外字符 %q: %s", r, pwd) } } } } // bcrypt 只取前 72 字节,超出必须显式拒绝而不是静默截断。 func TestMaxPasswordBytesMatchesBcrypt(t *testing.T) { if MaxPasswordBytes != 72 { t.Fatalf("MaxPasswordBytes 应为 bcrypt 的 72 字节上限,得到 %d", MaxPasswordBytes) } } // 写限流默认值:30 太低,现场一次批量导入跑完就整批 429,因此提到 120。 // 登录限流是防爆破的,性质不同,保持 5 不变。 func TestDefaultRateLimits(t *testing.T) { if DefaultWritePerMinute != 120 { t.Fatalf("写限流默认值应为 120 次/分钟/用户,得到 %d", DefaultWritePerMinute) } if DefaultLoginPerMinute != 5 { t.Fatalf("登录限流默认值应保持 5 次/分钟/IP,得到 %d", DefaultLoginPerMinute) } }