package ws import ( "testing" "time" ) func TestBroadcastToSessionRestrictsRecipients(t *testing.T) { hub := NewHub() go hub.Run() sessionID := uint(12) agentID := uint(7) assignedAgent := &Client{TenantID: 1, UserID: agentID, Role: "agent", Kind: "agent", Send: make(chan []byte, 1)} otherAgent := &Client{TenantID: 1, UserID: 8, Role: "agent", Kind: "agent", Send: make(chan []byte, 1)} supervisor := &Client{TenantID: 1, UserID: 9, Role: "supervisor", Kind: "agent", Send: make(chan []byte, 1)} visitor := &Client{TenantID: 1, Kind: "visitor", SessionID: &sessionID, Send: make(chan []byte, 1)} otherSessionID := uint(13) otherVisitor := &Client{TenantID: 1, Kind: "visitor", SessionID: &otherSessionID, Send: make(chan []byte, 1)} otherTenant := &Client{TenantID: 2, UserID: 7, Role: "agent", Kind: "agent", Send: make(chan []byte, 1)} for _, client := range []*Client{assignedAgent, otherAgent, supervisor, visitor, otherVisitor, otherTenant} { hub.register <- client } hub.BroadcastToSession(1, sessionID, &agentID, []byte(`{"type":"message"}`)) for _, client := range []*Client{assignedAgent, supervisor, visitor} { select { case <-client.Send: case <-time.After(time.Second): t.Fatalf("应收到会话消息的客户端未收到:%+v", client) } } for _, client := range []*Client{otherAgent, otherVisitor, otherTenant} { select { case <-client.Send: t.Fatalf("不应收到会话消息的客户端收到消息:%+v", client) default: } } }