@@ -3868,61 +3868,103 @@ func Test_invalidateAllPrincipalsCache(t *testing.T) {
38683868}
38693869
38703870func Test_resyncDocument (t * testing.T ) {
3871- if ! base .TestUseXattrs () {
3872- t .Skip ("Walrus doesn't support xattr" )
3873- }
38743871 db , ctx := setupTestDB (t )
38753872 defer db .Close (ctx )
38763873
38773874 db .Options .EnableXattr = true
38783875 collection , ctx := GetSingleDatabaseCollectionWithUser (ctx , t , db )
38793876
3880- syncFn := `
3877+ testCases := []struct {
3878+ name string
3879+ useHLV bool
3880+ }{
3881+ {
3882+ name : "pre 4.0" ,
3883+ useHLV : false ,
3884+ },
3885+ {
3886+ name : "has hlv" ,
3887+ useHLV : true ,
3888+ },
3889+ }
3890+
3891+ for _ , tc := range testCases {
3892+ t .Run (tc .name , func (t * testing.T ) {
3893+ startingSyncFnCount := int (db .DbStats .Database ().SyncFunctionCount .Value ())
3894+ syncFn := `
38813895 function sync(doc, oldDoc){
38823896 channel("channel." + "ABC");
38833897 }
38843898`
3885- _ , err := collection .UpdateSyncFun (ctx , syncFn )
3886- require .NoError (t , err )
3899+ _ , err := collection .UpdateSyncFun (ctx , syncFn )
3900+ require .NoError (t , err )
38873901
3888- docID := uuid .NewString ()
3902+ docID := uuid .NewString ()
38893903
3890- updateBody := make (map [string ]any )
3891- updateBody ["val" ] = "value"
3892- _ , doc , err := collection .Put (ctx , docID , updateBody )
3893- require .NoError (t , err )
3894- assert .NotNil (t , doc )
3904+ updateBody := make (map [string ]any )
3905+ updateBody ["val" ] = "value"
3906+ if tc .useHLV {
3907+ _ , _ , err := collection .Put (ctx , docID , updateBody )
3908+ require .NoError (t , err )
3909+ } else {
3910+ collection .CreateDocNoHLV (t , ctx , docID , updateBody )
3911+ }
38953912
3896- syncFn = `
3913+ syncFn = `
38973914 function sync(doc, oldDoc){
38983915 channel("channel." + "ABC12332423234");
38993916 }
39003917 `
3901- _ , err = collection .UpdateSyncFun (ctx , syncFn )
3902- require .NoError (t , err )
3903-
3904- _ , _ , err = collection .resyncDocument (ctx , docID , realDocID (docID ), false , []uint64 {10 })
3905- require .NoError (t , err )
3906- err = collection .WaitForPendingChanges (ctx )
3907- require .NoError (t , err )
3918+ _ , err = collection .UpdateSyncFun (ctx , syncFn )
3919+ require .NoError (t , err )
39083920
3909- syncData , err := collection .GetDocSyncData (ctx , docID )
3910- assert .NoError (t , err )
3921+ preResyncDoc , err := collection .GetDocument (ctx , docID , DocUnmarshalAll )
3922+ require .NoError (t , err )
3923+ if ! tc .useHLV {
3924+ require .Nil (t , preResyncDoc .HLV )
3925+ }
3926+ _ , _ , err = collection .ResyncDocument (ctx , docID , realDocID (docID ), false , []uint64 {10 })
3927+ require .NoError (t , err )
3928+ err = collection .WaitForPendingChanges (ctx )
3929+ require .NoError (t , err )
39113930
3912- assert .Len (t , syncData .ChannelSet , 2 )
3913- assert .Len (t , syncData .Channels , 2 )
3914- found := false
3931+ postResyncDoc , _ , err := collection .getDocWithXattrs (ctx , docID , collection .syncGlobalSyncMouRevSeqNoAndUserXattrKeys (), DocUnmarshalAll )
3932+ assert .NoError (t , err )
39153933
3916- for _ , chSet := range syncData .ChannelSet {
3917- if chSet .Name == "channel.ABC12332423234" {
3918- found = true
3919- break
3920- }
3921- }
3934+ assert .Len (t , postResyncDoc .ChannelSet , 2 )
3935+ assert .Len (t , postResyncDoc .Channels , 2 )
3936+ found := false
39223937
3923- assert .True (t , found )
3924- assert .Equal (t , 2 , int (db .DbStats .Database ().SyncFunctionCount .Value ()))
3938+ for _ , chSet := range postResyncDoc .ChannelSet {
3939+ if chSet .Name == "channel.ABC12332423234" {
3940+ found = true
3941+ break
3942+ }
3943+ }
3944+ assert .True (t , found )
39253945
3946+ require .NoError (t , err )
3947+ if tc .useHLV {
3948+ require .NotNil (t , postResyncDoc .HLV )
3949+ require .Equal (t , Version {
3950+ SourceID : db .EncodedSourceID ,
3951+ Value : preResyncDoc .Cas ,
3952+ }, Version {
3953+ SourceID : postResyncDoc .HLV .SourceID ,
3954+ Value : postResyncDoc .HLV .Version ,
3955+ })
3956+ } else {
3957+ require .Nil (t , postResyncDoc .HLV )
3958+ }
3959+ require .NotNil (t , postResyncDoc .MetadataOnlyUpdate )
3960+ require .Equal (t , MetadataOnlyUpdate {
3961+ HexCAS : base .CasToString (postResyncDoc .Cas ),
3962+ PreviousHexCAS : base .CasToString (preResyncDoc .Cas ),
3963+ PreviousRevSeqNo : preResyncDoc .RevSeqNo ,
3964+ }, * postResyncDoc .MetadataOnlyUpdate )
3965+ assert .Equal (t , startingSyncFnCount + 2 , int (db .DbStats .Database ().SyncFunctionCount .Value ()))
3966+ })
3967+ }
39263968}
39273969
39283970func Test_getUpdatedDocument (t * testing.T ) {
0 commit comments