fix p2p permission refresh during load tests
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user