fox-send/test/aws.storage.test.js

140 lines
4.1 KiB
JavaScript

const assert = require('assert');
const sinon = require('sinon');
const proxyquire = require('proxyquire');
const conf = require('../server/config.js');
conf.notLocalHost = true;
let redisStub = {};
let exists = sinon.stub();
let hget = sinon.stub();
let hmset = sinon.stub();
let expire = sinon.stub();
let del = sinon.stub();
redisStub.createClient = function() {
return {
on: sinon.spy(),
exists: exists,
hget: hget,
hmset: hmset,
expire: expire,
del: del
}
}
let fsStub = {};
fsStub.statSync = sinon.stub();
fsStub.createReadStream = sinon.stub();
fsStub.createWriteStream = sinon.stub();
fsStub.unlinkSync = sinon.stub();
let logStub = {};
logStub.info = sinon.stub();
logStub.error = sinon.stub();
let s3Stub = {};
s3Stub.headObject = sinon.stub();
s3Stub.getObject = sinon.stub();
s3Stub.upload = sinon.stub();
s3Stub.deleteObject = sinon.stub();
let awsStub = {
S3: function() {
return s3Stub;
}
}
const storage = proxyquire('../server/storage', {
'redis': redisStub,
'fs': fsStub,
'./log.js': function() { return logStub },
'aws-sdk': awsStub
});
describe('Testing Length using aws', function() {
it('Filesize returns properly if id exists', function() {
s3Stub.headObject.callsArgWith(1, null, {ContentLength: 1});
return storage.length('123')
.then(reply => assert(reply === 1))
.catch(err => assert.fail())
})
it('Filesize fails if the id does not exist', function() {
s3Stub.headObject.callsArgWith(1, new Error(), null);
return storage.length('123')
.then(reply => assert.fail())
.catch(err => assert(1))
})
});
describe('Testing Get using aws', function() {
it('Should not error out when the file exists', function() {
s3Stub.getObject.returns({
createReadStream: function() { return 1; }
});
assert(storage.get('123') === 1);
})
it('Should error when the file does not exist', function() {
s3Stub.getObject.returns({
createReadStream: function() { return null; }
});
assert(storage.get('123') === null);
})
});
describe('Testing Set using aws', function() {
it('Should pass when the file is successfully uploaded and no bitly key', function() {
conf.bitly_key = null;
s3Stub.upload.callsArgWith(1, null, {});
return storage.set('123', {}, 'Filename.moz', 'url.com')
.then(reply => assert(reply.url === 'url.com' && reply.uuid !== null))
.catch(err => assert.fail());
})
it('Should fail if there was an error during uploading', function() {
s3Stub.upload.callsArgWith(1, new Error(), null);
return storage.set('123', {}, 'Filename.moz', 'url.com')
.then(reply => assert.fail())
.catch(err => assert(1));
})
});
describe('Testing Delete from aws', function() {
it('Returns successfully if the id is deleted off aws', function() {
hget.callsArgWith(2, null, 'delete_token');
s3Stub.deleteObject.callsArgWith(1, null, {});
return storage.delete('file_id', 'delete_token')
.then(reply => assert(1), err => assert.fail())
})
it('Delete fails if id exists locally but does not in aws', function() {
hget.callsArgWith(2, null, 'delete_token');
s3Stub.deleteObject.callsArgWith(1, new Error(), {});
return storage.delete('file_id', 'delete_token')
.then(reply => assert.fail(), err => assert(1))
})
it('Delete fails if the delete token does not match', function() {
hget.callsArgWith(2, null, {});
return storage.delete('Filename.moz', 'delete_token')
.then(reply => assert.fail())
.catch(reply => assert(1))
})
});
describe('Testing Forced Delete from aws', function() {
it('Deletes properly if id exists', function() {
s3Stub.deleteObject.callsArgWith(1, null, {});
return storage.forceDelete('file_id', 'delete_token')
.then(reply => assert(1), err => assert.fail());
})
it('Deletes fails if id does not exist', function() {
s3Stub.deleteObject.callsArgWith(1, new Error(), {});
return storage.forceDelete('file_id')
.then(reply => assert.fail(), err => assert(1))
})
})