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

Function TestRevisionImmutableDelta

db/revision_cache_test.go:786–823  ·  view source on GitHub ↗

Ensure subsequent updates to delta don't mutate previously retrieved deltas

(t *testing.T)

Source from the content-addressed store, hash-verified

784
785// Ensure subsequent updates to delta don't mutate previously retrieved deltas
786func TestRevisionImmutableDelta(t *testing.T) {
787 cacheHitCounter, cacheMissCounter, getDocumentCounter, getRevisionCounter, cacheNumItems, memoryBytesCounted := base.SgwIntStat{}, base.SgwIntStat{}, base.SgwIntStat{}, base.SgwIntStat{}, base.SgwIntStat{}, base.SgwIntStat{}
788 backingStoreMap := CreateTestSingleBackingStoreMap(&testBackingStore{nil, &getDocumentCounter, &getRevisionCounter}, testCollectionID)
789 cacheOptions := &RevisionCacheOptions{
790 MaxItemCount: 10,
791 MaxBytes: 0,
792 }
793 cache := NewLRURevisionCache(cacheOptions, backingStoreMap, &cacheHitCounter, &cacheMissCounter, &cacheNumItems, &memoryBytesCounted)
794
795 firstDelta := []byte("delta")
796 secondDelta := []byte("modified delta")
797
798 // Trigger load into cache
799 _, err := cache.GetWithRev(base.TestCtx(t), "doc1", "1-abc", testCollectionID, RevCacheIncludeDelta)
800 assert.NoError(t, err, "Error adding to cache")
801 cache.UpdateDelta(base.TestCtx(t), "doc1", "1-abc", testCollectionID, RevisionDelta{ToRevID: "rev2", DeltaBytes: firstDelta})
802
803 // Retrieve from cache
804 retrievedRev, err := cache.GetWithRev(base.TestCtx(t), "doc1", "1-abc", testCollectionID, RevCacheIncludeDelta)
805 assert.NoError(t, err, "Error retrieving from cache")
806 assert.Equal(t, "rev2", retrievedRev.Delta.ToRevID)
807 assert.Equal(t, firstDelta, retrievedRev.Delta.DeltaBytes)
808
809 // Update delta again, validate data in retrievedRev isn't mutated
810 cache.UpdateDelta(base.TestCtx(t), "doc1", "1-abc", testCollectionID, RevisionDelta{ToRevID: "rev3", DeltaBytes: secondDelta})
811 assert.Equal(t, "rev2", retrievedRev.Delta.ToRevID)
812 assert.Equal(t, firstDelta, retrievedRev.Delta.DeltaBytes)
813
814 // Retrieve again, validate delta is correct
815 updatedRev, err := cache.GetWithRev(base.TestCtx(t), "doc1", "1-abc", testCollectionID, RevCacheIncludeDelta)
816 assert.NoError(t, err, "Error retrieving from cache")
817 assert.Equal(t, "rev3", updatedRev.Delta.ToRevID)
818 assert.Equal(t, secondDelta, updatedRev.Delta.DeltaBytes)
819
820 assert.Equal(t, "rev2", retrievedRev.Delta.ToRevID)
821 assert.Equal(t, firstDelta, retrievedRev.Delta.DeltaBytes)
822
823}
824
825func TestUpdateDeltaRevCacheMemoryStat(t *testing.T) {
826 testCases := []struct {

Callers

nothing calls this directly

Calls 6

GetWithRevMethod · 0.95
UpdateDeltaMethod · 0.95
TestCtxFunction · 0.92
NewLRURevisionCacheFunction · 0.85
EqualMethod · 0.45

Tested by

no test coverage detected