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

Function TestActiveOnlyCacheUpdate

db/changes_test.go:404–463  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

402}
403
404func TestActiveOnlyCacheUpdate(t *testing.T) {
405
406 db, ctx := setupTestDB(t)
407 defer db.Close(ctx)
408 collection, ctx := GetSingleDatabaseCollectionWithUser(ctx, t, db)
409
410 base.SetUpTestLogging(t, base.LevelInfo, base.KeyChanges, base.KeyCache)
411 // Create 10 documents
412 revId := ""
413 var err error
414 for i := 1; i <= 10; i++ {
415 key := fmt.Sprintf("%s_%d", t.Name(), i)
416 body := Body{"foo": "bar"}
417 revId, _, err = collection.Put(ctx, key, body)
418 require.NoError(t, err, "Couldn't create document")
419 }
420
421 // Tombstone 5 documents
422 for i := 2; i <= 6; i++ {
423 key := fmt.Sprintf("%s_%d", t.Name(), i)
424 _, _, err = collection.DeleteDoc(ctx, key, DocVersion{RevTreeID: revId})
425 require.NoError(t, err, "Couldn't delete document")
426 }
427
428 waitErr := collection.WaitForPendingChanges(base.TestCtx(t))
429 assert.NoError(t, waitErr)
430
431 changesOptions := ChangesOptions{
432 Since: SequenceID{Seq: 0},
433 ActiveOnly: true,
434 ChangesCtx: base.TestCtx(t),
435 }
436
437 initQueryCount := db.DbStats.Cache().ViewQueries.Value()
438
439 // Get changes with active_only=true
440 activeChanges := getChanges(t, collection, base.SetOf("*"), changesOptions)
441 require.Len(t, activeChanges, 5)
442
443 // Ensure the test is triggering a query, and not serving from DCP-generated cache
444 postChangesQueryCount := db.DbStats.Cache().ViewQueries.Value()
445 assert.Equal(t, initQueryCount+1, postChangesQueryCount)
446
447 // Get changes with active_only=false, validate that triggers a new query
448 changesOptions.ActiveOnly = false
449 allChanges := getChanges(t, collection, base.SetOf("*"), changesOptions)
450 require.Len(t, allChanges, 10)
451
452 postChangesQueryCount = db.DbStats.Cache().ViewQueries.Value()
453 assert.Equal(t, initQueryCount+2, postChangesQueryCount)
454
455 // Get changes with active_only=false again, verify results are served from the cache
456 changesOptions.ActiveOnly = false
457 allChanges = getChanges(t, collection, base.SetOf("*"), changesOptions)
458 require.Len(t, allChanges, 10)
459
460 postChangesQueryCount = db.DbStats.Cache().ViewQueries.Value()
461 assert.Equal(t, initQueryCount+2, postChangesQueryCount)

Callers

nothing calls this directly

Calls 15

SetUpTestLoggingFunction · 0.92
TestCtxFunction · 0.92
SetOfFunction · 0.92
setupTestDBFunction · 0.85
getChangesFunction · 0.85
CacheMethod · 0.80
CloseMethod · 0.65
NameMethod · 0.65
PutMethod · 0.65
LenMethod · 0.65
DeleteDocMethod · 0.45

Tested by

no test coverage detected