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

Function TestUnusedSequencesInSyncData

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

Source from the content-addressed store, hash-verified

1466}
1467
1468func TestUnusedSequencesInSyncData(t *testing.T) {
1469 if !base.TestUseXattrs() {
1470 t.Skip("This test requires xattrs because it writes directly to the xattr")
1471 }
1472
1473 base.SetUpTestLogging(t, base.LevelDebug, base.KeyChanges, base.KeyCache)
1474
1475 db, ctx := setupTestDB(t)
1476 defer db.Close(ctx)
1477 collection, ctx := GetSingleDatabaseCollectionWithUser(ctx, t, db)
1478 docID := t.Name()
1479
1480 // add a doc and wait for it to be cached
1481 body := Body{"val": "one"}
1482 _, _, err := collection.Put(ctx, docID, body)
1483 require.NoError(t, err)
1484 err = db.changeCache.waitForSequence(ctx, 1, base.DefaultWaitForSequence)
1485 require.NoError(t, err)
1486
1487 // grab doc and alter sync data as it had some unused sequences allocated ot it
1488 xattrs, cas, err := collection.dataStore.GetXattrs(ctx, docID, []string{base.SyncXattrName})
1489 require.NoError(t, err)
1490
1491 var retrievedXattr map[string]interface{}
1492 require.NoError(t, base.JSONUnmarshal(xattrs[base.SyncXattrName], &retrievedXattr))
1493 retrievedXattr["sequence"] = uint64(6)
1494 retrievedXattr["unused_sequences"] = []uint64{2, 3, 4, 5}
1495 newXattrVal := map[string][]byte{
1496 base.SyncXattrName: base.MustJSONMarshal(t, retrievedXattr),
1497 }
1498 _, err = collection.dataStore.UpdateXattrs(ctx, docID, 0, cas, newXattrVal, nil)
1499 require.NoError(t, err)
1500
1501 // assert that sequence 6 is seen over caching feed
1502 err = db.changeCache.waitForSequence(ctx, 6, base.DefaultWaitForSequence)
1503 require.NoError(t, err)
1504
1505 // assert that only 2 sequences have been cached (unused sequences are not cached)
1506 db.UpdateCalculatedStats(ctx)
1507 assert.Equal(t, int64(6), db.DbStats.Cache().HighSeqCached.Value())
1508 assert.Equal(t, int64(2), db.DbStats.Database().DCPCachingCount.Value())
1509}
1510
1511// Trigger initialization of empty cache, then write and validate a subsequent changes request returns expected data.
1512func TestInitializeEmptyCache(t *testing.T) {

Callers

nothing calls this directly

Calls 15

TestUseXattrsFunction · 0.92
SetUpTestLoggingFunction · 0.92
JSONUnmarshalFunction · 0.92
MustJSONMarshalFunction · 0.92
setupTestDBFunction · 0.85
waitForSequenceMethod · 0.80
UpdateCalculatedStatsMethod · 0.80
CacheMethod · 0.80
CloseMethod · 0.65
NameMethod · 0.65
PutMethod · 0.65

Tested by

no test coverage detected