diff --git a/libraries/object-persistor/src/GcsPersistor.js b/libraries/object-persistor/src/GcsPersistor.js index 90c02ee886..94b77ba8b8 100644 --- a/libraries/object-persistor/src/GcsPersistor.js +++ b/libraries/object-persistor/src/GcsPersistor.js @@ -180,7 +180,7 @@ module.exports = class GcsPersistor extends AbstractPersistor { .bucket(bucketName) .file(key) .getMetadata() - return metadata.size + return parseInt(metadata.size, 10) } catch (err) { throw PersistorHelper.wrapError( err, @@ -289,7 +289,10 @@ module.exports = class GcsPersistor extends AbstractPersistor { ) } - return files.reduce((acc, file) => Number(file.metadata.size) + acc, 0) + return files.reduce( + (acc, file) => parseInt(file.metadata.size, 10) + acc, + 0 + ) } async checkIfObjectExists(bucketName, key) { diff --git a/libraries/object-persistor/test/unit/GcsPersistorTests.js b/libraries/object-persistor/test/unit/GcsPersistorTests.js index f9b31fa72b..4d16bd4ca5 100644 --- a/libraries/object-persistor/test/unit/GcsPersistorTests.js +++ b/libraries/object-persistor/test/unit/GcsPersistorTests.js @@ -45,11 +45,11 @@ describe('GcsPersistorTests', function () { files = [ { - metadata: { size: 11, md5Hash: '/////wAAAAD/////AAAAAA==' }, + metadata: { size: '11', md5Hash: '/////wAAAAD/////AAAAAA==' }, delete: sinon.stub(), }, { - metadata: { size: 22, md5Hash: '/////wAAAAD/////AAAAAA==' }, + metadata: { size: '22', md5Hash: '/////wAAAAD/////AAAAAA==' }, delete: sinon.stub(), }, ] @@ -302,7 +302,7 @@ describe('GcsPersistorTests', function () { }) it('should return the object size', function () { - expect(size).to.equal(files[0].metadata.size) + expect(size).to.equal(11) }) it('should pass the bucket and key to GCS', function () { diff --git a/services/filestore/test/acceptance/js/FilestoreTests.js b/services/filestore/test/acceptance/js/FilestoreTests.js index af67afe20b..6984be4caf 100644 --- a/services/filestore/test/acceptance/js/FilestoreTests.js +++ b/services/filestore/test/acceptance/js/FilestoreTests.js @@ -1354,6 +1354,25 @@ describe('Filestore', function () { }) }) + describe('getObjectSize', function () { + it('should return a number', async function () { + const buf = Buffer.from('hello') + const fileId = new ObjectId().toString() + const fileUrl = `${filestoreUrl}/project/${projectId}/file/${fileId}` + const res = await fetch(fileUrl, { + method: 'POST', + body: Stream.Readable.from([buf]), + }) + if (!res.ok) throw new Error(res.statusText) + expect( + await app.persistor.getObjectSize( + Settings.filestore.stores.user_files, + `${projectId}/${fileId}` + ) + ).to.equal(buf.byteLength) + }) + }) + describe('checkIfObjectExists', function () { it('should return false when the object does not exist', async function () { expect(