@bugcrowd/briareus
Version:
Briareus assists with Feature Branch deploys to ECS
115 lines (92 loc) • 2.83 kB
JavaScript
const path = require('path');
const async = require('async');
const AWS = require('aws-sdk');
const AWS_Mock = require('aws-sdk-mock');
const request = require('request');
const mrDNA = require('mr-dna');
const sinon = require('sinon');
const serviceFixtures = require('./service/fixtures');
const logger = require('../lib/service/logger');
AWS_Mock.setSDK(path.resolve('node_modules/aws-sdk'));
AWS.config.update({
region: 'us-east-1'
});
afterEach(() => {
sinon.restore();
})
let helpers = module.exports = {
afterEach: () => AWS_Mock.restore(),
service: () => {
const Service = require('../lib/service');
before(function (cb) {
async.series([
(done) => {
helpers.service = Service();
helpers.service.start(done);
}
], cb);
});
beforeEach(helpers.dynamodbClean);
after(function (cb) {
helpers.service.destroy(cb);
});
},
fakeCtx() {
return {
logData: {},
log: {
debug: logger.debug.bind(logger)
}
}
},
makeUrl(path) {
return 'http://' + helpers.service.config.get('ip') + ':' + helpers.service.config.get('port') + path;
},
makeAPIRequest(options, cb) {
let headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
};
headers['Authorization'] = 'Basic ' + new Buffer('buildkite:' + helpers.service.config.get('apiToken')).toString('base64');
options = {
method: 'GET',
headers: headers,
...options
};
options.uri = helpers.makeUrl(options.path);
delete options.path;
if (options.data) {
options.body = JSON.stringify(options.data);
delete options.data;
}
return request(options, function (err, res, body) {
if (err) return cb(err);
if (body && res.headers['content-type'] && res.headers['content-type'].indexOf('application/json') > -1) {
body = JSON.parse(body);
}
return cb(err, res, body);
});
},
dynamodbClean(cb) {
let dynamodb = new AWS.DynamoDB(helpers.service.config.get('aws.dynamodb'));
async.waterfall([
(next) => {
dynamodb.listTables({}, (err, data) => {
if (err) return next(err);
if (data.TableNames.indexOf(helpers.service.config.get('dynamodb.table')) === -1) return next();
dynamodb.deleteTable({ TableName: helpers.service.config.get('dynamodb.table') }, (err, data) => {
return next(err);
});
});
},
(next) => {
let params = mrDNA.generateCreateTableInput(serviceFixtures.dynamodbTableDescribe);
dynamodb.createTable(params, (err, data) => next(err));
},
(next) => {
dynamodb.batchWriteItem(serviceFixtures.briareusDeploymentItems, next);
}
], cb);
},
}