briareus
Version:
Briareus assists with Feature Branch deploys to ECS
105 lines (91 loc) • 3.45 kB
JavaScript
const expect = require('expect.js');
const AWS = require('aws-sdk-mock');
const helpers = require('../../helpers');
const fixtures = require('../fixtures/ecs-task-definitions');
const CreateBuildEcsTaskDefinition = require('../../../lib/service/actions/create-build-ecs-task-definition');
describe('Action:CreateBuildEcsTaskDefinition', function () {
afterEach(helpers.afterEach);
it('should create the build ecs task definition', function (done) {
let taskDefinitionArn = 'arn:task-definition:44'
let payload = {
name: 'briareus-variant',
slug: 'my-branch',
taskDefinition: fixtures['standard'],
image: 'app:123',
awsAccountId: '987',
endpoint: {
host: 'x.bugcrowd.engineering'
},
variantsLogGroup: 'ecs.briareus-variants',
assets: {
ssmParameters: {
a: {
id: 'app/DB_PASSWORD',
arn: 'arn:parameter:/briareus/x/app/DB_PASSWORD',
path: '/briareus/x/app/DB_PASSWORD',
name: 'DB_PASSWORD',
container: 'app',
},
b: {
id: 'worker/DB_PASSWORD',
arn: 'arn:parameter:/briareus/x/worker/DB_PASSWORD',
path: '/briareus/x/worker/DB_PASSWORD',
name: 'DB_PASSWORD',
container: 'worker',
},
}
},
envs: [
{
id: `app/HOST`,
scope: 'y',
container: 'app',
name: 'HOST',
value: '${endpoint.host}'
},
{
id: `app/AWS_ACCOUNT_ID`,
scope: 'y',
container: 'app',
name: 'AWS_ACCOUNT_ID',
value: '${aws_account_id}'
}
]
};
AWS.mock('ECS', 'registerTaskDefinition', function (params, cb) {
expect(params.family).to.equal(payload.name);
let appContainer = params.containerDefinitions[0];
expect(appContainer.image).to.equal(payload.image);
let appSecrets = appContainer.secrets;
expect(appSecrets.length).to.equal(1);
expect(appSecrets).to.eql([
{
name: 'DB_PASSWORD',
valueFrom: payload.assets.ssmParameters.a.arn
}
]);
// Ensure env vars are set
expect(appContainer.environment[0].name).to.equal('HOST');
expect(appContainer.environment[0].value).to.equal(payload.endpoint.host);
expect(appContainer.environment[1].name).to.equal('AWS_ACCOUNT_ID');
expect(appContainer.environment[1].value).to.equal(payload.awsAccountId);
// Ensure Logging configuration is set
expect(appContainer.logConfiguration.logDriver).to.equal('awslogs');
expect(appContainer.logConfiguration.options['awslogs-region']).to.equal('us-east-1');
expect(appContainer.logConfiguration.options['awslogs-group']).to.equal(payload.variantsLogGroup);
expect(appContainer.logConfiguration.options['awslogs-stream-prefix']).to.equal(payload.slug);
cb(null, {
taskDefinition: {
taskDefinitionArn: taskDefinitionArn
}
});
});
CreateBuildEcsTaskDefinition({}, payload, (err, patches) => {
expect(err).to.equal(null);
expect(patches[0]).to.eql({ op: 'add', path: '/assets/buildTaskDefinition', value: { arn: taskDefinitionArn } });
expect(patches[1]).to.eql({ op: 'add', path: '/assets/taskDefinitions/-', value: { arn: taskDefinitionArn } });
done();
})
});
});