interim+500

interim+500

interim+500
This commit is contained in:
mertalev
2025-10-02 15:15:32 -04:00
parent 9f3a9030c7
commit 97185964cb
2 changed files with 23 additions and 17 deletions
+3 -3
View File
@@ -223,7 +223,8 @@ describe('/upload', () => {
}); });
}); });
it('should reject attempt to start upload of existing incomplete asset', async () => { // TODO: find a way to test interim responses
it('should return 500 if existing incomplete asset', async () => {
const content = randomBytes(1024); const content = randomBytes(1024);
const firstRequest = await request(app) const firstRequest = await request(app)
@@ -252,8 +253,7 @@ describe('/upload', () => {
.set('Upload-Length', '1024') .set('Upload-Length', '1024')
.send(); .send();
expect(secondRequest.status).toBe(400); expect(secondRequest.status).toBe(500);
expect(secondRequest.headers['location']).toEqual(firstRequest.headers['location']);
expect(secondRequest.text).toEqual('Incomplete asset already exists'); expect(secondRequest.text).toEqual('Incomplete asset already exists');
}); });
+11 -5
View File
@@ -57,7 +57,12 @@ export class AssetUploadService extends BaseService {
assetData.metadata, assetData.metadata,
); );
} catch (error: any) { } catch (error: any) {
if (isAssetChecksumConstraint(error)) { if (!isAssetChecksumConstraint(error)) {
this.logger.error(`Error creating upload asset record: ${error.message}`);
res.status(500).send('Error creating upload asset record');
return;
}
const duplicate = await this.assetRepository.getUploadAssetIdByChecksum(req.auth.user.id, dto.checksum); const duplicate = await this.assetRepository.getUploadAssetIdByChecksum(req.auth.user.id, dto.checksum);
if (!duplicate) { if (!duplicate) {
res.status(500).send('Error locating duplicate for checksum constraint'); res.status(500).send('Error locating duplicate for checksum constraint');
@@ -67,12 +72,13 @@ export class AssetUploadService extends BaseService {
if (duplicate.status !== AssetStatus.Partial) { if (duplicate.status !== AssetStatus.Partial) {
return this.sendAlreadyCompletedProblem(res); return this.sendAlreadyCompletedProblem(res);
} }
const location = `/api/upload/${duplicate.id}`; const location = `/api/upload/${duplicate.id}`;
res.status(400).setHeader('Location', location).send('Incomplete asset already exists'); if (version <= MAX_RUFH_INTEROP_VERSION) {
return; this.sendInterimResponse(res, location, version);
} }
this.logger.error(`Error creating upload asset record: ${error.message}`); // this is a 5xx to indicate the client should do offset retrieval and resume
res.status(500).send('Error creating upload asset record'); res.status(500).send('Incomplete asset already exists');
return; return;
} }