Ensure subsequent updates to delta don't mutate previously retrieved deltas
(t *testing.T)
| 784 | |
| 785 | // Ensure subsequent updates to delta don't mutate previously retrieved deltas |
| 786 | func 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 | |
| 825 | func TestUpdateDeltaRevCacheMemoryStat(t *testing.T) { |
| 826 | testCases := []struct { |
nothing calls this directly
no test coverage detected