fix: 统一对话密码锁键为发送方加对方不含 IP

This commit is contained in:
Nixevol
2026-09-30 16:23:25 +08:00
parent b7c8b6ffd6
commit e294b5db71
17 changed files with 449 additions and 32 deletions
+51
View File
@@ -138,3 +138,54 @@ func TestLoginLocksClearEndpoint(t *testing.T) {
t.Fatal("e1 total lock should clear")
}
}
func TestLoginLocksClearEndpointKeepsTalk(t *testing.T) {
locks := NewLoginLocks()
talk := LockKey{Kind: LockTalkPair, EndpointID: "e1", PeerID: "e2"}
target := LockKey{Kind: LockTalkTarget, EndpointID: "e1"}
login := LockKey{Kind: LockLoginEndpoint, EndpointID: "e1"}
for i := 0; i < 10; i++ {
locks.Fail(talk)
locks.Fail(login)
}
for i := 0; i < 50; i++ {
locks.Fail(target)
}
locks.ClearEndpoint("e1")
if locked, _ := locks.Check(login); locked {
t.Fatal("login lock should clear")
}
if locked, _ := locks.Check(talk); !locked {
t.Fatal("talk pair lock must survive ClearEndpoint")
}
if locked, _ := locks.Check(target); !locked {
t.Fatal("talk target lock must survive ClearEndpoint")
}
}
func TestLoginLocksClearAllForEndpoint(t *testing.T) {
locks := NewLoginLocks()
asSender := LockKey{Kind: LockTalkPair, EndpointID: "gone", PeerID: "peer"}
asPeer := LockKey{Kind: LockTalkPair, EndpointID: "other", PeerID: "gone"}
target := LockKey{Kind: LockTalkTarget, EndpointID: "gone"}
login := LockKey{Kind: LockLoginEndpointIP, EndpointID: "gone", IP: "1.1.1.1"}
keep := LockKey{Kind: LockTalkPair, EndpointID: "keep", PeerID: "peer"}
for i := 0; i < 10; i++ {
locks.Fail(asSender)
locks.Fail(asPeer)
locks.Fail(login)
locks.Fail(keep)
}
for i := 0; i < 50; i++ {
locks.Fail(target)
}
locks.ClearAllForEndpoint("gone")
for _, k := range []LockKey{asSender, asPeer, target, login} {
if locked, _ := locks.Check(k); locked {
t.Fatalf("expected %s cleared", lockMapKey(k))
}
}
if locked, _ := locks.Check(keep); !locked {
t.Fatal("unrelated pair should remain")
}
}