@@ -457,6 +457,70 @@ func TestIsServerless(t *testing.T) {
457
457
}
458
458
}
459
459
460
+ func TestUncachedOldRevisionChannel (t * testing.T ) {
461
+ db , ctx := setupTestDB (t )
462
+ defer db .Close (ctx )
463
+ collection := GetSingleDatabaseCollectionWithUser (t , db )
464
+ collection .ChannelMapper = channels .NewChannelMapper (ctx , channels .DocChannelsSyncFunction , db .Options .JavascriptTimeout )
465
+
466
+ auth := db .Authenticator (base .TestCtx (t ))
467
+
468
+ userAlice , err := auth .NewUser ("alice" , "pass" , base .SetOf ("ABC" ))
469
+ require .NoError (t , err , "Error creating user" )
470
+
471
+ collection .user = userAlice
472
+
473
+ // Create the first revision of doc1.
474
+ rev1Body := Body {
475
+ "k1" : "v1" ,
476
+ "channels" : []string {"ABC" },
477
+ }
478
+ rev1ID , _ , err := collection .Put (ctx , "doc1" , rev1Body )
479
+ require .NoError (t , err , "Error creating doc" )
480
+
481
+ rev2Body := Body {
482
+ "k2" : "v2" ,
483
+ "channels" : []string {"ABC" },
484
+ BodyRev : rev1ID ,
485
+ }
486
+ rev2ID , _ , err := collection .Put (ctx , "doc1" , rev2Body )
487
+ require .NoError (t , err , "Error creating doc" )
488
+
489
+ rev3Body := Body {
490
+ "k3" : "v3" ,
491
+ "channels" : []string {"ABC" },
492
+ BodyRev : rev2ID ,
493
+ }
494
+ rev3ID , _ , err := collection .Put (ctx , "doc1" , rev3Body )
495
+ require .NoError (t , err , "Error creating doc" )
496
+ require .NotEmpty (t , rev3ID , "Error creating doc" )
497
+
498
+ body , err := collection .Get1xRevBody (ctx , "doc1" , rev2ID , true , nil )
499
+ require .NoError (t , err , "Error getting 1x rev body" )
500
+
501
+ // old rev was cached so still retains channel information
502
+ _ , rev1Digest := ParseRevID (ctx , rev1ID )
503
+ _ , rev2Digest := ParseRevID (ctx , rev2ID )
504
+ bodyExpected := Body {
505
+ "k2" : "v2" ,
506
+ "channels" : []string {"ABC" },
507
+ BodyRevisions : Revisions {
508
+ RevisionsStart : 2 ,
509
+ RevisionsIds : []string {rev2Digest , rev1Digest },
510
+ },
511
+ BodyId : "doc1" ,
512
+ BodyRev : rev2ID ,
513
+ }
514
+ require .Equal (t , bodyExpected , body )
515
+
516
+ // Flush the revision cache to force load from backup revision
517
+ collection .FlushRevisionCacheForTest ()
518
+
519
+ // 404 because we lost the non-leaf channel information after cache flush
520
+ _ , _ , _ , _ , _ , _ , _ , _ , err = collection .Get1xRevAndChannels (ctx , "doc1" , rev2ID , false )
521
+ assertHTTPError (t , err , 404 )
522
+ }
523
+
460
524
// Test removal handling for unavailable multi-channel revisions.
461
525
func TestGetRemovalMultiChannel (t * testing.T ) {
462
526
db , ctx := setupTestDB (t )
0 commit comments