@@ -222,6 +222,45 @@ func TestCompleteUploadKeepsLegacyUploadAfterTransientStorageError(t *testing.T)
222222 require .NoError (t , err )
223223}
224224
225+ func TestCompleteUploadKeepsUploadAfterTransientIndexedInspectionError (t * testing.T ) {
226+ ctx , client , filesystem := newTestServiceDeps (t )
227+ adapter := & storageCallTrackingAdapter {Adapter : filesystem , inspectIndexedErr : errInjectedStorageFailure }
228+ service := NewService (Options {DB : client , Storage : adapter })
229+ scope := writableScope ()
230+
231+ upload , err := service .CreateUpload (ctx , "key" , "version" , scope )
232+ require .NoError (t , err )
233+ require .NoError (t , service .UploadPart (ctx , upload .UploadID , bytes .NewBufferString ("data" )))
234+
235+ _ , err = service .CompleteUpload (ctx , "key" , "version" , scope )
236+ require .ErrorIs (t , err , errInjectedStorageFailure )
237+ _ , err = client .Upload .Get (ctx , upload .UploadID )
238+ require .NoError (t , err )
239+ }
240+
241+ func TestCompleteUploadRejectsAndDeletesOverLimitRestoredSession (t * testing.T ) {
242+ ctx , client , filesystem := newTestServiceDeps (t )
243+ service := NewService (Options {DB : client , Storage : filesystem })
244+ scope := writableScope ()
245+ const uploadID = int64 (42 )
246+ client .Upload .Create ().
247+ SetID (uploadID ).
248+ SetKey ("restored-key" ).
249+ SetVersion ("version" ).
250+ SetScope (scope .Scopes [0 ].Scope ).
251+ SetRepoId (scope .RepoID ).
252+ SetCreatedAt (time .Now ().UnixMilli ()).
253+ SetFinishedPartUploadCount (storage .MaxIndexedObjects + 1 ).
254+ SetCommittedPartCount (storage .MaxIndexedObjects + 1 ).
255+ SetFolderName ("restored-upload" ).
256+ SaveX (ctx )
257+
258+ _ , err := service .CompleteUpload (ctx , "restored-key" , "version" , scope )
259+ require .ErrorIs (t , err , ErrPartCountMismatch )
260+ _ , err = client .Upload .Get (ctx , uploadID )
261+ require .True (t , ent .IsNotFound (err ))
262+ }
263+
225264func TestCompleteUploadRejectsBlocksWithoutCommittedBlockList (t * testing.T ) {
226265 ctx , client , filesystem := newTestServiceDeps (t )
227266 service := NewService (Options {DB : client , Storage : filesystem })
@@ -1287,6 +1326,7 @@ type storageCallTrackingAdapter struct {
12871326 downloadCalls int
12881327 objectExistsCalls []string
12891328 countErr error
1329+ inspectIndexedErr error
12901330}
12911331
12921332func (s * storageCallTrackingAdapter ) CountFilesInFolder (ctx context.Context , folderName string ) (int , error ) {
@@ -1302,6 +1342,13 @@ func (s *storageCallTrackingAdapter) CreateDownloadStream(ctx context.Context, o
13021342 return s .Adapter .CreateDownloadStream (ctx , objectName )
13031343}
13041344
1345+ func (s * storageCallTrackingAdapter ) InspectIndexedFolder (ctx context.Context , folderName string , expectedObjects int ) (int64 , error ) {
1346+ if s .inspectIndexedErr != nil {
1347+ return 0 , s .inspectIndexedErr
1348+ }
1349+ return s .Adapter .InspectIndexedFolder (ctx , folderName , expectedObjects )
1350+ }
1351+
13051352func (s * storageCallTrackingAdapter ) ObjectExists (ctx context.Context , objectName string ) (bool , error ) {
13061353 s .objectExistsCalls = append (s .objectExistsCalls , objectName )
13071354 return s .Adapter .ObjectExists (ctx , objectName )
0 commit comments