dendrite/syncapi/sync/requestpool_test.go
2022-03-31 08:11:16 +02:00

105 lines
2.2 KiB
Go

package sync
import (
"sync"
"testing"
"time"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/userapi/api"
"github.com/nats-io/nats.go"
)
type dummyPublisher struct {
count int
}
func (d *dummyPublisher) PublishMsg(m *nats.Msg, opts ...nats.PubOpt) (*nats.PubAck, error) {
d.count++
return nil, nil
}
func TestRequestPool_updatePresence(t *testing.T) {
type args struct {
presence string
device *api.Device
sleep time.Duration
}
publisher := &dummyPublisher{}
syncMap := sync.Map{}
tests := []struct {
name string
args args
wantIncrease bool
}{
{
name: "new presence is published",
wantIncrease: true,
args: args{
device: &api.Device{UserID: "dummy"},
},
},
{
name: "presence not published, no change",
args: args{
device: &api.Device{UserID: "dummy"},
},
},
{
name: "new presence is published dummy2",
wantIncrease: true,
args: args{
device: &api.Device{UserID: "dummy2"},
presence: "online",
},
},
{
name: "different presence is published dummy2",
wantIncrease: true,
args: args{
device: &api.Device{UserID: "dummy2"},
presence: "unavailable",
},
},
{
name: "same presence is not published dummy2",
args: args{
device: &api.Device{UserID: "dummy2"},
presence: "unavailable",
sleep: time.Millisecond * 150,
},
},
{
name: "same presence is published after being deleted",
wantIncrease: true,
args: args{
device: &api.Device{UserID: "dummy2"},
presence: "unavailable",
},
},
}
rp := &RequestPool{
presence: syncMap,
jetstream: publisher,
cfg: &config.SyncAPI{
Matrix: &config.Global{
JetStream: config.JetStream{
TopicPrefix: "Dendrite",
},
},
},
}
go rp.cleanPresence(time.Millisecond * 50)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
beforeCount := publisher.count
rp.updatePresence(tt.args.presence, tt.args.device)
if tt.wantIncrease && publisher.count <= beforeCount {
t.Fatalf("expected count to increase: %d <= %d", publisher.count, beforeCount)
}
time.Sleep(tt.args.sleep)
})
}
}