111 lines
2.6 KiB
Go
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)
|
|
}
|