69 lines
2.2 KiB
Go
69 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/tinode/chat/server/store/types"
|
|
)
|
|
|
|
func TestHandleP2PPermissionsRefreshReloadsLoadedTopic(t *testing.T) {
|
|
helper := TopicTestHelper{}
|
|
helper.setUp(t, 2, types.TopicCatP2P, "p2p-test", true)
|
|
defer helper.tearDown()
|
|
|
|
uid := helper.uids[0]
|
|
stale := types.ModeCP2P &^ types.ModeWrite
|
|
pud := helper.topic.perUser[uid]
|
|
pud.modeWant = stale
|
|
pud.modeGiven = stale
|
|
helper.topic.perUser[uid] = pud
|
|
helper.ss.EXPECT().Get(types.TenantID(1), "p2p-test", uid, true).Return(&types.Subscription{
|
|
TenantID: 1, User: uid.String(), Topic: "p2p-test",
|
|
ModeWant: types.ModeCP2P, ModeGiven: types.ModeCP2P,
|
|
}, nil)
|
|
|
|
payload, err := json.Marshal(p2pPermissionsPayload{UserIDs: []string{uid.UserId()}})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
helper.topic.handleServerMsg(&ServerComMessage{
|
|
TenantID: 1,
|
|
Info: &MsgServerInfo{What: "p2p", Event: p2pPermissionsRefreshedEvent, Payload: payload},
|
|
})
|
|
helper.finish()
|
|
|
|
got := helper.topic.perUser[uid]
|
|
if !got.modeWant.IsWriter() || !got.modeGiven.IsWriter() {
|
|
t.Fatalf("permissions were not refreshed: want=%s given=%s", got.modeWant, got.modeGiven)
|
|
}
|
|
}
|
|
|
|
func TestP2PPublishReloadsStalePermissions(t *testing.T) {
|
|
helper := TopicTestHelper{}
|
|
helper.setUp(t, 2, types.TopicCatP2P, "p2p-test", true)
|
|
defer helper.tearDown()
|
|
|
|
uid := helper.uids[0]
|
|
stale := types.ModeCP2P &^ types.ModeWrite
|
|
pud := helper.topic.perUser[uid]
|
|
pud.modeWant = stale
|
|
pud.modeGiven = stale
|
|
helper.topic.perUser[uid] = pud
|
|
helper.ss.EXPECT().Get(types.TenantID(1), "p2p-test", uid, true).Return(&types.Subscription{
|
|
TenantID: 1, User: uid.String(), Topic: "p2p-test",
|
|
ModeWant: types.ModeCP2P, ModeGiven: types.ModeCP2P,
|
|
}, nil)
|
|
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).
|
|
Return(&types.MessageSaveResult{SeqId: 1, MarkedReadBySender: true}, nil)
|
|
|
|
err := helper.topic.saveAndBroadcastMessage(&ClientComMessage{
|
|
Id: "pub-1", Original: "p2p-test", Timestamp: types.TimeNow(), sess: helper.sessions[0],
|
|
}, uid, true, nil, nil, "test")
|
|
helper.finish()
|
|
if err != nil {
|
|
t.Fatalf("publish failed after permission reload: %v", err)
|
|
}
|
|
}
|