Files
2026-06-02 23:14:41 +08:00

111 lines
2.6 KiB
Go

package feishu
import (
"testing"
)
func TestSharedWSGroup_RegisterAndAllPlatforms(t *testing.T) {
// Clean up global state for test isolation.
cleanup := func() {
sharedWSMu.Lock()
defer sharedWSMu.Unlock()
for k := range sharedWSGroups {
delete(sharedWSGroups, k)
}
}
cleanup()
defer cleanup()
p1 := &Platform{appID: "cli_test", domain: "feishu.cn"}
p2 := &Platform{appID: "cli_test", domain: "feishu.cn"}
// Register first platform — should be primary.
g1, isPrimary1 := registerSharedWS(p1)
if !isPrimary1 {
t.Fatal("first platform should be primary")
}
if len(g1.allPlatforms()) != 1 {
t.Fatalf("expected 1 platform, got %d", len(g1.allPlatforms()))
}
// Register second platform — should be secondary, same group.
g2, isPrimary2 := registerSharedWS(p2)
if isPrimary2 {
t.Fatal("second platform should not be primary")
}
if g1 != g2 {
t.Fatal("both platforms should share the same group")
}
if len(g1.allPlatforms()) != 2 {
t.Fatalf("expected 2 platforms, got %d", len(g1.allPlatforms()))
}
}
func TestSharedWSGroup_Unregister(t *testing.T) {
cleanup := func() {
sharedWSMu.Lock()
defer sharedWSMu.Unlock()
for k := range sharedWSGroups {
delete(sharedWSGroups, k)
}
}
cleanup()
defer cleanup()
p1 := &Platform{appID: "cli_test", domain: "feishu.cn"}
p2 := &Platform{appID: "cli_test", domain: "feishu.cn"}
g, _ := registerSharedWS(p1)
registerSharedWS(p2)
// Unregister first — one remains.
remaining := unregisterSharedWS(p1)
if remaining != 1 {
t.Fatalf("expected 1 remaining, got %d", remaining)
}
platforms := g.allPlatforms()
if len(platforms) != 1 || platforms[0] != p2 {
t.Fatal("expected only p2 to remain")
}
// Unregister last — group deleted.
remaining = unregisterSharedWS(p2)
if remaining != 0 {
t.Fatalf("expected 0 remaining, got %d", remaining)
}
sharedWSMu.Lock()
_, exists := sharedWSGroups[sharedWSKey("cli_test", "feishu.cn")]
sharedWSMu.Unlock()
if exists {
t.Fatal("group should be deleted when empty")
}
}
func TestSharedWSGroup_DifferentAppIDs(t *testing.T) {
cleanup := func() {
sharedWSMu.Lock()
defer sharedWSMu.Unlock()
for k := range sharedWSGroups {
delete(sharedWSGroups, k)
}
}
cleanup()
defer cleanup()
p1 := &Platform{appID: "cli_aaa", domain: "feishu.cn"}
p2 := &Platform{appID: "cli_bbb", domain: "feishu.cn"}
g1, isPrimary1 := registerSharedWS(p1)
g2, isPrimary2 := registerSharedWS(p2)
if !isPrimary1 || !isPrimary2 {
t.Fatal("different app_ids should each be primary")
}
if g1 == g2 {
t.Fatal("different app_ids should have separate groups")
}
unregisterSharedWS(p1)
unregisterSharedWS(p2)
}