MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestUnblockPendingWithUnusedRange

Function TestUnblockPendingWithUnusedRange

db/change_cache_test.go:3148–3204  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

3146}
3147
3148func TestUnblockPendingWithUnusedRange(t *testing.T) {
3149 base.LongRunningTest(t)
3150
3151 base.SetUpTestLogging(t, base.LevelDebug, base.KeyAll)
3152
3153 opts := DefaultCacheOptions()
3154 opts.CachePendingSeqMaxWait = 20 * time.Minute
3155 opts.CacheSkippedSeqMaxWait = 20 * time.Minute
3156 opts.CachePendingSeqMaxNum = DefaultCachePendingSeqMaxNum
3157 db, ctx := setupTestDBWithCacheOptions(t, opts)
3158 defer db.Close(ctx)
3159 collection, ctx := GetSingleDatabaseCollectionWithUser(ctx, t, db)
3160
3161 // init change cache
3162 _, err := db.changeCache.GetChanges(ctx, channels.NewID("channelA", collection.GetCollectionID()), getChangesOptionsWithZeroSeq(t))
3163 require.NoError(t, err)
3164
3165 docID := fmt.Sprintf("doc_%d", 1)
3166 highEntry := &LogEntry{
3167 Channels: channels.ChannelMap{
3168 "channelA": nil,
3169 },
3170 Sequence: 20,
3171 DocID: docID,
3172 RevID: "1-abcdefabcdefabcdef",
3173 CollectionID: collection.GetCollectionID(),
3174 Version: 123,
3175 SourceID: "sourceA",
3176 TimeReceived: channels.NewFeedTimestampFromNow(),
3177 }
3178 _ = db.changeCache.processEntry(ctx, highEntry)
3179
3180 // assert that pending list is populated with above entry
3181 require.EventuallyWithT(t, func(c *assert.CollectT) {
3182 db.changeCache.updateStats(ctx)
3183 assert.Equal(c, int64(1), db.DbStats.CacheStats.PendingSeqLen.Value())
3184 assert.Equal(c, uint64(1), db.changeCache.nextSequence)
3185 }, time.Second*10, time.Millisecond*100)
3186
3187 // process unused sequence range
3188 db.changeCache.releaseUnusedSequenceRange(ctx, 1, 19, channels.NewFeedTimestampFromNow())
3189
3190 // assert on cache stats after range processed
3191 require.EventuallyWithT(t, func(c *assert.CollectT) {
3192 db.changeCache.updateStats(ctx)
3193 db.UpdateCalculatedStats(ctx)
3194 assert.Equal(c, int64(20), db.DbStats.CacheStats.HighSeqCached.Value())
3195 assert.Equal(c, uint64(21), db.changeCache.nextSequence)
3196 }, time.Second*10, time.Millisecond*100)
3197
3198 entries, err := db.changeCache.GetChanges(ctx, channels.NewID("channelA", collection.GetCollectionID()), getChangesOptionsWithZeroSeq(t))
3199 require.NoError(t, err)
3200
3201 assert.Len(t, entries, 1)
3202 assert.Equal(t, docID, entries[0].DocID)
3203 assert.Equal(t, uint64(20), entries[0].Sequence)
3204}
3205

Callers

nothing calls this directly

Calls 15

LongRunningTestFunction · 0.92
SetUpTestLoggingFunction · 0.92
NewIDFunction · 0.92
NewFeedTimestampFromNowFunction · 0.92
DefaultCacheOptionsFunction · 0.85
processEntryMethod · 0.80
updateStatsMethod · 0.80
UpdateCalculatedStatsMethod · 0.80

Tested by

no test coverage detected