package store import "testing" // streamKey 必须按 channel 分命名空间,token 与 exec 流互不串扰。 func TestStreamKey_ChannelIsolation(t *testing.T) { tok := streamKey(ChannelToken, "task_1") ex := streamKey(ChannelExec, "task_1") if tok == ex { t.Fatalf("同任务的 token/exec 流 key 不应相同: %q", tok) } if tok != "sundynix:stream:task_1" { t.Errorf("token key=%q", tok) } if ex != "sundynix:exec:task_1" { t.Errorf("exec key=%q", ex) } } // 登录失败计数 key 独立命名空间,且阈值/窗口是合理防撞库值。 func TestLoginFailKey(t *testing.T) { if k := loginFailKey("a@b.com"); k != "sundynix:loginfail:a@b.com" { t.Fatalf("key=%q", k) } if loginFailThreshold < 3 || loginFailThreshold > 10 { t.Fatalf("阈值应在 3–10 合理区间,得 %d", loginFailThreshold) } if loginFailWindow < 5*60*1e9 { t.Fatal("锁定窗口不该太短") } }