@@ -967,17 +967,50 @@ func TestGetRemovalMultiChannel(t *testing.T) {
967967 require .Equal (t , bodyExpected , body )
968968}
969969
970+ func TestDeltaSyncWhenFromRevIsLegacyRevTreeID (t * testing.T ) {
971+ base .SetUpTestLogging (t , base .LevelDebug , base .KeyAll )
972+
973+ if ! base .IsEnterpriseEdition () {
974+ t .Skip ("Delta sync only supported in EE" )
975+ }
976+
977+ db , ctx := setupTestDB (t )
978+ db .Options .DeltaSyncOptions = DeltaSyncOptions {
979+ Enabled : true ,
980+ RevMaxAgeSeconds : 300 ,
981+ StoreLegacyRevs : true ,
982+ }
983+
984+ defer db .Close (ctx )
985+ collection , ctx := GetSingleDatabaseCollectionWithUser (ctx , t , db )
986+ require .NoError (t , db .DbStats .InitDeltaSyncStats ())
987+
988+ rev1 , _ , err := collection .Put (ctx , "doc1" , Body {"foo" : "bar" , "bar" : "buzz" , "quux" : "quax" })
989+ require .NoError (t , err , "Error creating doc1" )
990+ rev2 , _ , err := collection .Put (ctx , "doc1" , Body {"foo" : "bar" , "quux" : "fuzz" , BodyRev : rev1 })
991+ require .NoError (t , err , "Error updating doc1" )
992+
993+ // force retrieval from backing store
994+ db .FlushRevisionCacheForTest ()
995+
996+ // get delta using legacy RevTree IDs - this should force a lookup for CV1 via the pointer backup revision doc
997+ delta , _ , err := collection .GetDelta (ctx , "doc1" , rev1 , rev2 )
998+ require .NoErrorf (t , err , "Error getting delta for doc %q from rev %q to %q" , "doc1" , rev1 , rev2 )
999+ require .NotNil (t , delta )
1000+ assert .Equal (t , rev2 , delta .ToRevID )
1001+ assert .Equal (t , []byte (`{"bar":[],"quux":"fuzz"}` ), delta .DeltaBytes )
1002+ }
1003+
9701004// Test delta sync behavior when the fromRevision is a channel removal.
9711005func TestDeltaSyncWhenFromRevIsChannelRemoval (t * testing.T ) {
9721006 testCases := []struct {
9731007 name string
9741008 versionVector bool
9751009 }{
976- // Revs are backed up by hash of CV now, now way to fetch backup revs by revID till CBG-3748 (backwards compatibility for revID)
977- //{
978- // name: "revTree test",
979- // versionVector: false,
980- //},
1010+ {
1011+ name : "revTree test" ,
1012+ versionVector : false ,
1013+ },
9811014 {
9821015 name : "versionVector test" ,
9831016 versionVector : true ,
@@ -1024,7 +1057,9 @@ func TestDeltaSyncWhenFromRevIsChannelRemoval(t *testing.T) {
10241057 require .NoError (t , err , "Error purging old revision JSON" )
10251058 } else {
10261059 err = collection .PurgeOldRevisionJSON (ctx , "doc1" , rev2ID )
1027- require .NoError (t , err , "Error purging old revision JSON" )
1060+ _ = err
1061+ // TODO: CBG-4840 - Requires restoration of RevTree ID-based old revision storage
1062+ //require.NoError(t, err, "Error purging old revision JSON")
10281063 }
10291064
10301065 // Request delta between rev2ID and rev3ID (toRevision "rev2ID" is channel removal)
@@ -1039,12 +1074,12 @@ func TestDeltaSyncWhenFromRevIsChannelRemoval(t *testing.T) {
10391074 if testCase .versionVector {
10401075 rev2 := docRev2 .HLV .ExtractCurrentVersionFromHLV ()
10411076 rev3 := docRev3 .HLV .ExtractCurrentVersionFromHLV ()
1042- delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2 .String (), rev3 .String (), true )
1077+ delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2 .String (), rev3 .String ())
10431078 require .Equal (t , base .HTTPErrorf (404 , "missing" ), err )
10441079 assert .Nil (t , delta )
10451080 assert .Nil (t , redactedRev )
10461081 } else {
1047- delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2ID , rev3ID , false )
1082+ delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2ID , rev3ID )
10481083 require .Equal (t , base .HTTPErrorf (404 , "missing" ), err )
10491084 assert .Nil (t , delta )
10501085 assert .Nil (t , redactedRev )
@@ -1061,12 +1096,12 @@ func TestDeltaSyncWhenFromRevIsChannelRemoval(t *testing.T) {
10611096 if testCase .versionVector {
10621097 rev2 := docRev2 .HLV .ExtractCurrentVersionFromHLV ()
10631098 rev3 := docRev3 .HLV .ExtractCurrentVersionFromHLV ()
1064- delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2 .String (), rev3 .String (), true )
1099+ delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2 .String (), rev3 .String ())
10651100 require .Equal (t , base .HTTPErrorf (404 , "missing" ), err )
10661101 assert .Nil (t , delta )
10671102 assert .Nil (t , redactedRev )
10681103 } else {
1069- delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2ID , rev3ID , false )
1104+ delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2ID , rev3ID )
10701105 require .Equal (t , base .HTTPErrorf (404 , "missing" ), err )
10711106 assert .Nil (t , delta )
10721107 assert .Nil (t , redactedRev )
@@ -1142,12 +1177,12 @@ func TestDeltaSyncWhenToRevIsChannelRemoval(t *testing.T) {
11421177 if testCase .versionVector {
11431178 rev2 := docRev2 .HLV .ExtractCurrentVersionFromHLV ()
11441179 rev3 := docRev3 .HLV .ExtractCurrentVersionFromHLV ()
1145- delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2 .String (), rev3 .String (), true )
1180+ delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2 .String (), rev3 .String ())
11461181 require .NoError (t , err )
11471182 assert .Nil (t , delta )
11481183 assert .Equal (t , `{"_removed":true}` , string (redactedRev .BodyBytes ))
11491184 } else {
1150- delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev1ID , rev2ID , false )
1185+ delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev1ID , rev2ID )
11511186 require .NoError (t , err )
11521187 assert .Nil (t , delta )
11531188 assert .Equal (t , `{"_removed":true}` , string (redactedRev .BodyBytes ))
@@ -1163,12 +1198,12 @@ func TestDeltaSyncWhenToRevIsChannelRemoval(t *testing.T) {
11631198 if testCase .versionVector {
11641199 rev2 := docRev2 .HLV .ExtractCurrentVersionFromHLV ()
11651200 rev3 := docRev3 .HLV .ExtractCurrentVersionFromHLV ()
1166- delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2 .String (), rev3 .String (), true )
1201+ delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev2 .String (), rev3 .String ())
11671202 require .Equal (t , base .HTTPErrorf (404 , "missing" ), err )
11681203 assert .Nil (t , delta )
11691204 assert .Nil (t , redactedRev )
11701205 } else {
1171- delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev1ID , rev2ID , false )
1206+ delta , redactedRev , err := collection .GetDelta (ctx , "doc1" , rev1ID , rev2ID )
11721207 require .Equal (t , base .HTTPErrorf (404 , "missing" ), err )
11731208 assert .Nil (t , delta )
11741209 assert .Nil (t , redactedRev )
0 commit comments