@@ -350,6 +350,32 @@ func (s *GatewayOpsTestSuite) TestXdcrCheckDocument() {
350350 }, grpc .PerRPCCredentials (s .basicRpcCreds ))
351351 requireRpcSuccess (s .T (), resp , err )
352352 })
353+
354+ s .Run ("VbUuidMismatch" , func () {
355+ docId := s .randomDocId ()
356+
357+ // we just make up a cas for testing purposes
358+ var docCreateCas uint64 = 1234
359+
360+ // we just make up a vbuuid that won't match
361+ var vbuuidMismatch uint64 = 99999
362+
363+ _ , err := xdcrClient .CheckDocument (context .Background (), & internal_xdcr_v1.CheckDocumentRequest {
364+ BucketName : s .bucketName ,
365+ ScopeName : s .scopeName ,
366+ CollectionName : s .collectionName ,
367+ Key : docId ,
368+ StoreCas : docCreateCas ,
369+ ContentFlags : TEST_CONTENT_FLAGS ,
370+ ExpiryTime : nil , // no expiry
371+ Revno : 1 ,
372+ VbUuid : & vbuuidMismatch ,
373+ }, grpc .PerRPCCredentials (s .basicRpcCreds ))
374+ assertRpcStatus (s .T (), err , codes .Aborted )
375+ assertRpcErrorDetails (s .T (), err , func (d * epb.ErrorInfo ) {
376+ assert .Equal (s .T (), "VBUUID_MISMATCH" , d .Reason )
377+ })
378+ })
353379 })
354380
355381 s .Run ("Set" , func () {
@@ -404,6 +430,36 @@ func (s *GatewayOpsTestSuite) TestXdcrCheckDocument() {
404430 })
405431 })
406432
433+ s .Run ("VbUuidMismatch" , func () {
434+ docId := s .testDocId ()
435+ // we just make up a vbuuid that won't match
436+ var vbuuidMismatch uint64 = 99999
437+
438+ getResp , err := xdcrClient .GetDocument (context .Background (), & internal_xdcr_v1.GetDocumentRequest {
439+ BucketName : s .bucketName ,
440+ ScopeName : s .scopeName ,
441+ CollectionName : s .collectionName ,
442+ Key : docId ,
443+ }, grpc .PerRPCCredentials (s .basicRpcCreds ))
444+ requireRpcSuccess (s .T (), getResp , err )
445+
446+ _ , err = xdcrClient .CheckDocument (context .Background (), & internal_xdcr_v1.CheckDocumentRequest {
447+ BucketName : s .bucketName ,
448+ ScopeName : s .scopeName ,
449+ CollectionName : s .collectionName ,
450+ Key : docId ,
451+ StoreCas : getResp .Cas + 10 ,
452+ ContentFlags : TEST_CONTENT_FLAGS ,
453+ ExpiryTime : nil , // no expiry
454+ Revno : getResp .Revno + 10 ,
455+ VbUuid : & vbuuidMismatch ,
456+ }, grpc .PerRPCCredentials (s .basicRpcCreds ))
457+ assertRpcStatus (s .T (), err , codes .Aborted )
458+ assertRpcErrorDetails (s .T (), err , func (d * epb.ErrorInfo ) {
459+ assert .Equal (s .T (), "VBUUID_MISMATCH" , d .Reason )
460+ })
461+ })
462+
407463 s .Run ("Xattr" , func () {
408464 s .Run ("Both" , func () {
409465 docId := s .randomDocId ()
@@ -569,6 +625,36 @@ func (s *GatewayOpsTestSuite) TestXdcrCheckDocument() {
569625 requireRpcSuccess (s .T (), delResp , err )
570626 })
571627
628+ s .Run ("VbUuidMismatch" , func () {
629+ docId := s .testDocId ()
630+ // we just make up a vbuuid that won't match
631+ var vbuuidMismatch uint64 = 99999
632+
633+ getResp , err := xdcrClient .GetDocument (context .Background (), & internal_xdcr_v1.GetDocumentRequest {
634+ BucketName : s .bucketName ,
635+ ScopeName : s .scopeName ,
636+ CollectionName : s .collectionName ,
637+ Key : docId ,
638+ IncludeContent : false ,
639+ }, grpc .PerRPCCredentials (s .basicRpcCreds ))
640+ requireRpcSuccess (s .T (), getResp , err )
641+
642+ _ , err = xdcrClient .CheckDocument (context .Background (), & internal_xdcr_v1.CheckDocumentRequest {
643+ BucketName : s .bucketName ,
644+ ScopeName : s .scopeName ,
645+ CollectionName : s .collectionName ,
646+ Key : docId ,
647+ StoreCas : getResp .Cas + 10 ,
648+ Revno : getResp .Revno + 10 ,
649+ IsDeleted : true ,
650+ VbUuid : & vbuuidMismatch ,
651+ }, grpc .PerRPCCredentials (s .basicRpcCreds ))
652+ assertRpcStatus (s .T (), err , codes .Aborted )
653+ assertRpcErrorDetails (s .T (), err , func (d * epb.ErrorInfo ) {
654+ assert .Equal (s .T (), "VBUUID_MISMATCH" , d .Reason )
655+ })
656+ })
657+
572658 s .Run ("LwwFail" , func () {
573659 docId := s .testDocId ()
574660
0 commit comments