Files
im_server/server/cluster_gob_test.go
T

76 lines
2.2 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",
"items": []map[string]any{{"type": "member", "id": "usr123"}},
"action": types.KVMap{"type": "group_profile", "target_id": "grpTest"},
"rows": []types.KVMap{{"type": "member", "id": "usr123"}},
"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)
}
}