mirror of
https://github.com/matrix-org/sliding-sync.git
synced 2025-03-10 13:37:11 +00:00
Interface out store functions from UserCache to make tests happier
This commit is contained in:
parent
c0b8fa05b8
commit
62b3662e29
@ -753,6 +753,16 @@ func (s *Storage) LatestEventsInRooms(userID string, roomIDs []string, to int64,
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (s *Storage) GetClosestPrevBatch(roomID string, eventNID int64) (prevBatch string) {
|
||||
var err error
|
||||
sqlutil.WithTransaction(s.DB, func(txn *sqlx.Tx) error {
|
||||
// discard the error, we don't care if we fail as it's best effort
|
||||
prevBatch, err = s.EventsTable.SelectClosestPrevBatch(txn, roomID, eventNID)
|
||||
return err
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// visibleEventNIDsBetweenForRooms determines which events a given user has permission to see.
|
||||
// It accepts a nid range [from, to]. For each given room, it calculates the NID range
|
||||
// [A1, B1] within [from, to] in which the user has permission to see events.
|
||||
|
@ -7,10 +7,8 @@ import (
|
||||
"sync"
|
||||
|
||||
"github.com/getsentry/sentry-go"
|
||||
"github.com/jmoiron/sqlx"
|
||||
|
||||
"github.com/matrix-org/sliding-sync/internal"
|
||||
"github.com/matrix-org/sliding-sync/sqlutil"
|
||||
"github.com/matrix-org/sliding-sync/state"
|
||||
"github.com/tidwall/gjson"
|
||||
"github.com/tidwall/sjson"
|
||||
@ -177,6 +175,12 @@ type UserCacheListener interface {
|
||||
OnUpdate(ctx context.Context, up Update)
|
||||
}
|
||||
|
||||
// Subset of store functions used by the user cache
|
||||
type UserCacheStore interface {
|
||||
LatestEventsInRooms(userID string, roomIDs []string, to int64, limit int) (map[string]*state.LatestEvents, error)
|
||||
GetClosestPrevBatch(roomID string, eventNID int64) (prevBatch string)
|
||||
}
|
||||
|
||||
// Tracks data specific to a given user. Specifically, this is the map of room ID to UserRoomData.
|
||||
// This data is user-scoped, not global or connection scoped.
|
||||
type UserCache struct {
|
||||
@ -187,14 +191,14 @@ type UserCache struct {
|
||||
listeners map[int]UserCacheListener
|
||||
listenersMu *sync.RWMutex
|
||||
id int
|
||||
store *state.Storage
|
||||
store UserCacheStore
|
||||
globalCache *GlobalCache
|
||||
txnIDs TransactionIDFetcher
|
||||
ignoredUsers map[string]struct{}
|
||||
ignoredUsersMu *sync.RWMutex
|
||||
}
|
||||
|
||||
func NewUserCache(userID string, globalCache *GlobalCache, store *state.Storage, txnIDs TransactionIDFetcher) *UserCache {
|
||||
func NewUserCache(userID string, globalCache *GlobalCache, store UserCacheStore, txnIDs TransactionIDFetcher) *UserCache {
|
||||
// see SyncLiveHandler.userCache for the initialisation proper, which works by
|
||||
// firing off a bunch of OnBlahBlah callbacks.
|
||||
uc := &UserCache{
|
||||
@ -419,12 +423,7 @@ func (c *UserCache) Invites() map[string]UserRoomData {
|
||||
|
||||
// AttemptToFetchPrevBatch tries to find a prev_batch value for the given event. This may not always succeed.
|
||||
func (c *UserCache) AttemptToFetchPrevBatch(roomID string, firstTimelineEvent *EventData) (prevBatch string) {
|
||||
var err error
|
||||
sqlutil.WithTransaction(c.store.DB, func(txn *sqlx.Tx) error {
|
||||
prevBatch, err = c.store.EventsTable.SelectClosestPrevBatch(txn, roomID, firstTimelineEvent.NID)
|
||||
return err
|
||||
})
|
||||
return
|
||||
return c.store.GetClosestPrevBatch(roomID, firstTimelineEvent.NID)
|
||||
}
|
||||
|
||||
// AnnotateWithTransactionIDs should be called just prior to returning events to the client. This
|
||||
|
@ -4,11 +4,12 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/matrix-org/sliding-sync/state"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/matrix-org/sliding-sync/state"
|
||||
|
||||
"github.com/matrix-org/gomatrixserverlib/spec"
|
||||
"github.com/matrix-org/sliding-sync/internal"
|
||||
"github.com/matrix-org/sliding-sync/sync3"
|
||||
@ -26,6 +27,15 @@ func (h *NopExtensionHandler) Handle(ctx context.Context, req extensions.Request
|
||||
func (h *NopExtensionHandler) HandleLiveUpdate(ctx context.Context, update caches.Update, req extensions.Request, res *extensions.Response, extCtx extensions.Context) {
|
||||
}
|
||||
|
||||
type NopUserCacheStore struct{}
|
||||
|
||||
func (s *NopUserCacheStore) GetClosestPrevBatch(roomID string, eventNID int64) (prevBatch string) {
|
||||
return
|
||||
}
|
||||
func (s *NopUserCacheStore) LatestEventsInRooms(userID string, roomIDs []string, to int64, limit int) (map[string]*state.LatestEvents, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
type NopJoinTracker struct{}
|
||||
|
||||
func (t *NopJoinTracker) IsUserJoined(userID, roomID string) bool {
|
||||
@ -96,7 +106,7 @@ func TestConnStateInitial(t *testing.T) {
|
||||
roomC.RoomID: {NID: 780, Timestamp: 789},
|
||||
}, nil, nil
|
||||
}
|
||||
userCache := caches.NewUserCache(userID, globalCache, nil, &NopTransactionFetcher{})
|
||||
userCache := caches.NewUserCache(userID, globalCache, &NopUserCacheStore{}, &NopTransactionFetcher{})
|
||||
dispatcher.Register(context.Background(), userCache.UserID, userCache)
|
||||
dispatcher.Register(context.Background(), sync3.DispatcherAllUsers, globalCache)
|
||||
userCache.LazyLoadTimelinesOverride = func(loadPos int64, roomIDs []string, maxTimelineEvents int) map[string]state.LatestEvents {
|
||||
@ -269,7 +279,7 @@ func TestConnStateMultipleRanges(t *testing.T) {
|
||||
}
|
||||
return 1, roomMetadata, joinTimings, nil, nil
|
||||
}
|
||||
userCache := caches.NewUserCache(userID, globalCache, nil, &NopTransactionFetcher{})
|
||||
userCache := caches.NewUserCache(userID, globalCache, &NopUserCacheStore{}, &NopTransactionFetcher{})
|
||||
userCache.LazyLoadTimelinesOverride = mockLazyRoomOverride
|
||||
dispatcher.Register(context.Background(), userCache.UserID, userCache)
|
||||
dispatcher.Register(context.Background(), sync3.DispatcherAllUsers, globalCache)
|
||||
@ -448,7 +458,7 @@ func TestBumpToOutsideRange(t *testing.T) {
|
||||
}, nil, nil
|
||||
|
||||
}
|
||||
userCache := caches.NewUserCache(userID, globalCache, nil, &NopTransactionFetcher{})
|
||||
userCache := caches.NewUserCache(userID, globalCache, &NopUserCacheStore{}, &NopTransactionFetcher{})
|
||||
userCache.LazyLoadTimelinesOverride = mockLazyRoomOverride
|
||||
dispatcher.Register(context.Background(), userCache.UserID, userCache)
|
||||
dispatcher.Register(context.Background(), sync3.DispatcherAllUsers, globalCache)
|
||||
@ -551,7 +561,7 @@ func TestConnStateRoomSubscriptions(t *testing.T) {
|
||||
roomD.RoomID: {NID: 4, Timestamp: 4},
|
||||
}, nil, nil
|
||||
}
|
||||
userCache := caches.NewUserCache(userID, globalCache, nil, &NopTransactionFetcher{})
|
||||
userCache := caches.NewUserCache(userID, globalCache, &NopUserCacheStore{}, &NopTransactionFetcher{})
|
||||
userCache.LazyLoadTimelinesOverride = func(loadPos int64, roomIDs []string, maxTimelineEvents int) map[string]state.LatestEvents {
|
||||
result := make(map[string]state.LatestEvents)
|
||||
for _, roomID := range roomIDs {
|
||||
|
Loading…
x
Reference in New Issue
Block a user