|
@@ -1,12 +1,12 @@
|
|
|
const sinon = require('sinon')
|
|
const sinon = require('sinon')
|
|
|
const chai = require('chai')
|
|
const chai = require('chai')
|
|
|
const { expect } = chai
|
|
const { expect } = chai
|
|
|
-const modulePath = '../../../app/js/S3PersistorManager.js'
|
|
|
|
|
|
|
+const modulePath = '../../../app/js/S3Persistor.js'
|
|
|
const SandboxedModule = require('sandboxed-module')
|
|
const SandboxedModule = require('sandboxed-module')
|
|
|
|
|
|
|
|
const Errors = require('../../../app/js/Errors')
|
|
const Errors = require('../../../app/js/Errors')
|
|
|
|
|
|
|
|
-describe('S3PersistorManagerTests', function() {
|
|
|
|
|
|
|
+describe('S3PersistorTests', function() {
|
|
|
const defaultS3Key = 'frog'
|
|
const defaultS3Key = 'frog'
|
|
|
const defaultS3Secret = 'prince'
|
|
const defaultS3Secret = 'prince'
|
|
|
const defaultS3Credentials = {
|
|
const defaultS3Credentials = {
|
|
@@ -33,7 +33,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
Meter,
|
|
Meter,
|
|
|
MeteredStream,
|
|
MeteredStream,
|
|
|
ReadStream,
|
|
ReadStream,
|
|
|
- S3PersistorManager,
|
|
|
|
|
|
|
+ S3Persistor,
|
|
|
S3Client,
|
|
S3Client,
|
|
|
S3ReadStream,
|
|
S3ReadStream,
|
|
|
S3NotFoundError,
|
|
S3NotFoundError,
|
|
@@ -115,7 +115,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
}
|
|
}
|
|
|
S3 = sinon.stub().returns(S3Client)
|
|
S3 = sinon.stub().returns(S3Client)
|
|
|
|
|
|
|
|
- S3PersistorManager = SandboxedModule.require(modulePath, {
|
|
|
|
|
|
|
+ S3Persistor = SandboxedModule.require(modulePath, {
|
|
|
requires: {
|
|
requires: {
|
|
|
'aws-sdk/clients/s3': S3,
|
|
'aws-sdk/clients/s3': S3,
|
|
|
'settings-sharelatex': settings,
|
|
'settings-sharelatex': settings,
|
|
@@ -133,7 +133,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
let stream
|
|
let stream
|
|
|
|
|
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(bucket, key)
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('returns a stream', function() {
|
|
it('returns a stream', function() {
|
|
@@ -164,7 +164,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
let stream
|
|
let stream
|
|
|
|
|
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(bucket, key, {
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream(bucket, key, {
|
|
|
start: 5,
|
|
start: 5,
|
|
|
end: 10
|
|
end: 10
|
|
|
})
|
|
})
|
|
@@ -201,7 +201,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
auth_secret: alternativeSecret
|
|
auth_secret: alternativeSecret
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(bucket, key)
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('returns a stream', function() {
|
|
it('returns a stream', function() {
|
|
@@ -220,16 +220,13 @@ describe('S3PersistorManagerTests', function() {
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('caches the credentials', async function() {
|
|
it('caches the credentials', async function() {
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(bucket, key)
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream(bucket, key)
|
|
|
|
|
|
|
|
expect(S3).to.have.been.calledOnceWith(alternativeS3Credentials)
|
|
expect(S3).to.have.been.calledOnceWith(alternativeS3Credentials)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('uses the default credentials for an unknown bucket', async function() {
|
|
it('uses the default credentials for an unknown bucket', async function() {
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(
|
|
|
|
|
- 'anotherBucket',
|
|
|
|
|
- key
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream('anotherBucket', key)
|
|
|
|
|
|
|
|
expect(S3).to.have.been.calledTwice
|
|
expect(S3).to.have.been.calledTwice
|
|
|
expect(S3.firstCall).to.have.been.calledWith(alternativeS3Credentials)
|
|
expect(S3.firstCall).to.have.been.calledWith(alternativeS3Credentials)
|
|
@@ -237,14 +234,8 @@ describe('S3PersistorManagerTests', function() {
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('caches the default credentials', async function() {
|
|
it('caches the default credentials', async function() {
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(
|
|
|
|
|
- 'anotherBucket',
|
|
|
|
|
- key
|
|
|
|
|
- )
|
|
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(
|
|
|
|
|
- 'anotherBucket',
|
|
|
|
|
- key
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream('anotherBucket', key)
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream('anotherBucket', key)
|
|
|
|
|
|
|
|
expect(S3).to.have.been.calledTwice
|
|
expect(S3).to.have.been.calledTwice
|
|
|
expect(S3.firstCall).to.have.been.calledWith(alternativeS3Credentials)
|
|
expect(S3.firstCall).to.have.been.calledWith(alternativeS3Credentials)
|
|
@@ -256,7 +247,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
delete settings.filestore.s3.secret
|
|
delete settings.filestore.s3.secret
|
|
|
|
|
|
|
|
await expect(
|
|
await expect(
|
|
|
- S3PersistorManager.promises.getFileStream('anotherBucket', key)
|
|
|
|
|
|
|
+ S3Persistor.promises.getFileStream('anotherBucket', key)
|
|
|
).to.eventually.be.rejected.and.be.an.instanceOf(Errors.SettingsError)
|
|
).to.eventually.be.rejected.and.be.an.instanceOf(Errors.SettingsError)
|
|
|
})
|
|
})
|
|
|
})
|
|
})
|
|
@@ -268,7 +259,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
S3ReadStream.on = sinon.stub()
|
|
S3ReadStream.on = sinon.stub()
|
|
|
S3ReadStream.on.withArgs('error').yields(S3NotFoundError)
|
|
S3ReadStream.on.withArgs('error').yields(S3NotFoundError)
|
|
|
try {
|
|
try {
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(bucket, key)
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -298,7 +289,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
S3ReadStream.on = sinon.stub()
|
|
S3ReadStream.on = sinon.stub()
|
|
|
S3ReadStream.on.withArgs('error').yields(S3AccessDeniedError)
|
|
S3ReadStream.on.withArgs('error').yields(S3AccessDeniedError)
|
|
|
try {
|
|
try {
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(bucket, key)
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -328,7 +319,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
S3ReadStream.on = sinon.stub()
|
|
S3ReadStream.on = sinon.stub()
|
|
|
S3ReadStream.on.withArgs('error').yields(genericError)
|
|
S3ReadStream.on.withArgs('error').yields(genericError)
|
|
|
try {
|
|
try {
|
|
|
- stream = await S3PersistorManager.promises.getFileStream(bucket, key)
|
|
|
|
|
|
|
+ stream = await S3Persistor.promises.getFileStream(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -357,7 +348,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
let size
|
|
let size
|
|
|
|
|
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- size = await S3PersistorManager.promises.getFileSize(bucket, key)
|
|
|
|
|
|
|
+ size = await S3Persistor.promises.getFileSize(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should return the object size', function() {
|
|
it('should return the object size', function() {
|
|
@@ -380,7 +371,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
promise: sinon.stub().rejects(S3NotFoundError)
|
|
promise: sinon.stub().rejects(S3NotFoundError)
|
|
|
})
|
|
})
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.getFileSize(bucket, key)
|
|
|
|
|
|
|
+ await S3Persistor.promises.getFileSize(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -403,7 +394,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
promise: sinon.stub().rejects(genericError)
|
|
promise: sinon.stub().rejects(genericError)
|
|
|
})
|
|
})
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.getFileSize(bucket, key)
|
|
|
|
|
|
|
+ await S3Persistor.promises.getFileSize(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -422,7 +413,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
describe('sendStream', function() {
|
|
describe('sendStream', function() {
|
|
|
describe('with valid parameters', function() {
|
|
describe('with valid parameters', function() {
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- return S3PersistorManager.promises.sendStream(bucket, key, ReadStream)
|
|
|
|
|
|
|
+ return S3Persistor.promises.sendStream(bucket, key, ReadStream)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should upload the stream', function() {
|
|
it('should upload the stream', function() {
|
|
@@ -449,7 +440,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
promise: sinon.stub().rejects(genericError)
|
|
promise: sinon.stub().rejects(genericError)
|
|
|
})
|
|
})
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.sendStream(bucket, key, ReadStream)
|
|
|
|
|
|
|
+ await S3Persistor.promises.sendStream(bucket, key, ReadStream)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -464,7 +455,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
describe('sendFile', function() {
|
|
describe('sendFile', function() {
|
|
|
describe('with valid parameters', function() {
|
|
describe('with valid parameters', function() {
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- return S3PersistorManager.promises.sendFile(bucket, key, filename)
|
|
|
|
|
|
|
+ return S3Persistor.promises.sendFile(bucket, key, filename)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should create a read stream for the file', function() {
|
|
it('should create a read stream for the file', function() {
|
|
@@ -486,7 +477,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
Fs.createReadStream = sinon.stub().throws(FileNotFoundError)
|
|
Fs.createReadStream = sinon.stub().throws(FileNotFoundError)
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.sendFile(bucket, key, filename)
|
|
|
|
|
|
|
+ await S3Persistor.promises.sendFile(bucket, key, filename)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -507,7 +498,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
Fs.createReadStream = sinon.stub().throws(genericError)
|
|
Fs.createReadStream = sinon.stub().throws(genericError)
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.sendFile(bucket, key, filename)
|
|
|
|
|
|
|
+ await S3Persistor.promises.sendFile(bucket, key, filename)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -526,7 +517,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
describe('copyFile', function() {
|
|
describe('copyFile', function() {
|
|
|
describe('with valid parameters', function() {
|
|
describe('with valid parameters', function() {
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- return S3PersistorManager.promises.copyFile(bucket, key, destKey)
|
|
|
|
|
|
|
+ return S3Persistor.promises.copyFile(bucket, key, destKey)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should copy the object', function() {
|
|
it('should copy the object', function() {
|
|
@@ -546,7 +537,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
promise: sinon.stub().rejects(S3NotFoundError)
|
|
promise: sinon.stub().rejects(S3NotFoundError)
|
|
|
})
|
|
})
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.copyFile(bucket, key, destKey)
|
|
|
|
|
|
|
+ await S3Persistor.promises.copyFile(bucket, key, destKey)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -561,7 +552,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
describe('deleteFile', function() {
|
|
describe('deleteFile', function() {
|
|
|
describe('with valid parameters', function() {
|
|
describe('with valid parameters', function() {
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- return S3PersistorManager.promises.deleteFile(bucket, key)
|
|
|
|
|
|
|
+ return S3Persistor.promises.deleteFile(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should delete the object', function() {
|
|
it('should delete the object', function() {
|
|
@@ -580,7 +571,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
promise: sinon.stub().rejects(S3NotFoundError)
|
|
promise: sinon.stub().rejects(S3NotFoundError)
|
|
|
})
|
|
})
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.deleteFile(bucket, key)
|
|
|
|
|
|
|
+ await S3Persistor.promises.deleteFile(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -595,7 +586,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
describe('deleteDirectory', function() {
|
|
describe('deleteDirectory', function() {
|
|
|
describe('with valid parameters', function() {
|
|
describe('with valid parameters', function() {
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- return S3PersistorManager.promises.deleteDirectory(bucket, key)
|
|
|
|
|
|
|
+ return S3Persistor.promises.deleteDirectory(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should list the objects in the directory', function() {
|
|
it('should list the objects in the directory', function() {
|
|
@@ -621,7 +612,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
S3Client.listObjects = sinon
|
|
S3Client.listObjects = sinon
|
|
|
.stub()
|
|
.stub()
|
|
|
.returns({ promise: sinon.stub().resolves({ Contents: [] }) })
|
|
.returns({ promise: sinon.stub().resolves({ Contents: [] }) })
|
|
|
- return S3PersistorManager.promises.deleteDirectory(bucket, key)
|
|
|
|
|
|
|
+ return S3Persistor.promises.deleteDirectory(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should list the objects in the directory', function() {
|
|
it('should list the objects in the directory', function() {
|
|
@@ -644,7 +635,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
.stub()
|
|
.stub()
|
|
|
.returns({ promise: sinon.stub().rejects(genericError) })
|
|
.returns({ promise: sinon.stub().rejects(genericError) })
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.deleteDirectory(bucket, key)
|
|
|
|
|
|
|
+ await S3Persistor.promises.deleteDirectory(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -671,7 +662,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
.stub()
|
|
.stub()
|
|
|
.returns({ promise: sinon.stub().rejects(genericError) })
|
|
.returns({ promise: sinon.stub().rejects(genericError) })
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.deleteDirectory(bucket, key)
|
|
|
|
|
|
|
+ await S3Persistor.promises.deleteDirectory(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -692,7 +683,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
let size
|
|
let size
|
|
|
|
|
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- size = await S3PersistorManager.promises.directorySize(bucket, key)
|
|
|
|
|
|
|
+ size = await S3Persistor.promises.directorySize(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should list the objects in the directory', function() {
|
|
it('should list the objects in the directory', function() {
|
|
@@ -714,7 +705,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
S3Client.listObjects = sinon
|
|
S3Client.listObjects = sinon
|
|
|
.stub()
|
|
.stub()
|
|
|
.returns({ promise: sinon.stub().resolves({ Contents: [] }) })
|
|
.returns({ promise: sinon.stub().resolves({ Contents: [] }) })
|
|
|
- size = await S3PersistorManager.promises.directorySize(bucket, key)
|
|
|
|
|
|
|
+ size = await S3Persistor.promises.directorySize(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should list the objects in the directory', function() {
|
|
it('should list the objects in the directory', function() {
|
|
@@ -737,7 +728,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
.stub()
|
|
.stub()
|
|
|
.returns({ promise: sinon.stub().rejects(genericError) })
|
|
.returns({ promise: sinon.stub().rejects(genericError) })
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.directorySize(bucket, key)
|
|
|
|
|
|
|
+ await S3Persistor.promises.directorySize(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|
|
@@ -758,10 +749,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
let exists
|
|
let exists
|
|
|
|
|
|
|
|
beforeEach(async function() {
|
|
beforeEach(async function() {
|
|
|
- exists = await S3PersistorManager.promises.checkIfFileExists(
|
|
|
|
|
- bucket,
|
|
|
|
|
- key
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ exists = await S3Persistor.promises.checkIfFileExists(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should get the object header', function() {
|
|
it('should get the object header', function() {
|
|
@@ -783,10 +771,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
S3Client.headObject = sinon
|
|
S3Client.headObject = sinon
|
|
|
.stub()
|
|
.stub()
|
|
|
.returns({ promise: sinon.stub().rejects(S3NotFoundError) })
|
|
.returns({ promise: sinon.stub().rejects(S3NotFoundError) })
|
|
|
- exists = await S3PersistorManager.promises.checkIfFileExists(
|
|
|
|
|
- bucket,
|
|
|
|
|
- key
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ exists = await S3Persistor.promises.checkIfFileExists(bucket, key)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
it('should get the object header', function() {
|
|
it('should get the object header', function() {
|
|
@@ -809,7 +794,7 @@ describe('S3PersistorManagerTests', function() {
|
|
|
.stub()
|
|
.stub()
|
|
|
.returns({ promise: sinon.stub().rejects(genericError) })
|
|
.returns({ promise: sinon.stub().rejects(genericError) })
|
|
|
try {
|
|
try {
|
|
|
- await S3PersistorManager.promises.checkIfFileExists(bucket, key)
|
|
|
|
|
|
|
+ await S3Persistor.promises.checkIfFileExists(bucket, key)
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
|
error = err
|
|
error = err
|
|
|
}
|
|
}
|