@@ -3180,3 +3180,58 @@ func TestGCSBlobStorageOverwriteObjects(t *testing.T) {
3180
3180
assert .NoError (t , err , rn )
3181
3181
}
3182
3182
}
3183
+
3184
+ func TestGCSBlobStorageReadAfterTTL (t * testing.T ) {
3185
+ te := testenv .GetTestEnv (t )
3186
+ te .SetAuthenticator (testauth .NewTestAuthenticator (emptyUserMap ))
3187
+ clock := clockwork .NewFakeClock ()
3188
+ ctx := getAnonContext (t , te )
3189
+
3190
+ var minGCSFileSize int64 = 1
3191
+ var gcsTTLDays int64 = 1
3192
+
3193
+ mockGCS := mockgcs .New (clock )
3194
+ mockGCS .SetBucketCustomTimeTTL (ctx , gcsTTLDays )
3195
+ fileStorer := filestore .New (filestore .WithGCSBlobstore (mockGCS , "app-name" ))
3196
+ options := & pebble_cache.Options {
3197
+ RootDirectory : testfs .MakeTempDir (t ),
3198
+ MaxSizeBytes : int64 (1_000_000 ), // 1MB
3199
+ Clock : clock ,
3200
+ FileStorer : fileStorer ,
3201
+ MaxInlineFileSizeBytes : 1 ,
3202
+ MinGCSFileSizeBytes : & minGCSFileSize ,
3203
+ GCSTTLDays : & gcsTTLDays ,
3204
+ }
3205
+ pc , err := pebble_cache .NewPebbleCache (te , options )
3206
+ if err != nil {
3207
+ t .Fatal (err )
3208
+ }
3209
+
3210
+ require .NoError (t , pc .Start ())
3211
+ defer pc .Stop ()
3212
+
3213
+ sampleData := make (map [* rspb.ResourceName ][]byte )
3214
+ for i := 0 ; i < 10 ; i ++ {
3215
+ rn , buf := testdigest .RandomCASResourceBuf (t , 100 )
3216
+ sampleData [rn ] = buf
3217
+
3218
+ rn , buf = testdigest .RandomACResourceBuf (t , 100 )
3219
+ sampleData [rn ] = buf
3220
+ }
3221
+
3222
+ // Write some data.
3223
+ var written []* rspb.ResourceName
3224
+ for rn , buf := range sampleData {
3225
+ require .NoError (t , pc .Set (ctx , rn , buf ))
3226
+ written = append (written , rn )
3227
+ }
3228
+
3229
+ // Advance the clock past the TTL
3230
+ clock .Advance (25 * time .Hour )
3231
+
3232
+ // Ensure nothing is found via Get/Read.
3233
+ for _ , rn := range written {
3234
+ _ , err := pc .Get (ctx , rn )
3235
+ require .True (t , status .IsNotFoundError (err ), err )
3236
+ }
3237
+ }
0 commit comments