(t *testing.T)
| 3146 | } |
| 3147 | |
| 3148 | func 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 |
nothing calls this directly
no test coverage detected