73 lines
2.0 KiB
Go
73 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/gob"
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/tinode/chat/server/store/types"
|
|
)
|
|
|
|
func TestClusterGobRegistersSystemMessagePayloadTypes(t *testing.T) {
|
|
registerClusterGobTypes()
|
|
|
|
msg := &ClusterRoute{
|
|
SrvMsg: &ServerComMessage{
|
|
TenantID: types.TenantID(10001),
|
|
RcptTo: "grpTest",
|
|
Data: &MsgServerData{
|
|
Topic: "grpTest",
|
|
Timestamp: time.Now().UTC().Round(time.Millisecond),
|
|
SeqId: 1,
|
|
Head: map[string]any{
|
|
"x-im-type": "system_action",
|
|
"x-im-template": "group_member_joined",
|
|
},
|
|
Content: map[string]any{
|
|
"text": "成员加入了群聊",
|
|
"template": "group_member_joined",
|
|
"actors": []imSystemMessageActor{{
|
|
UserID: "usr123",
|
|
Click: map[string]any{"type": "user_profile", "target_id": "usr123"},
|
|
}},
|
|
"actions": []imSystemMessageAction{{
|
|
Type: "group_profile",
|
|
Label: "查看群聊",
|
|
TargetID: "grpTest",
|
|
}},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
if err := gob.NewEncoder(&buf).Encode(msg); err != nil {
|
|
t.Fatalf("encode cluster route with system message payload: %v", err)
|
|
}
|
|
|
|
var decoded ClusterRoute
|
|
if err := gob.NewDecoder(&buf).Decode(&decoded); err != nil {
|
|
t.Fatalf("decode cluster route with system message payload: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestClusterRouteLeaveIgnoresStaleLocalProxyOwner(t *testing.T) {
|
|
cluster := &Cluster{
|
|
thisNodeName: "node-a",
|
|
nodes: map[string]*ClusterNode{},
|
|
}
|
|
cluster.rehash([]string{"node-a"})
|
|
|
|
err := cluster.routeToTopicMaster(ProxyReqLeave, nil, "grpStaleProxy", &Session{tenantID: types.TenantID(10001)})
|
|
if !errors.Is(err, errClusterTopicOwnerUnavailable) {
|
|
t.Fatalf("expected stale proxy leave to return owner unavailable, got %v", err)
|
|
}
|
|
|
|
err = cluster.topicProxyGone(types.TenantID(10001), "grpStaleProxy")
|
|
if !errors.Is(err, errClusterTopicOwnerUnavailable) {
|
|
t.Fatalf("expected stale proxy shutdown to return owner unavailable, got %v", err)
|
|
}
|
|
}
|