pm2/test/programmatic/containerizer.mocha.js
2016-09-12 18:10:52 +02:00

135 lines
4.7 KiB
JavaScript

var Containerizer = require('../../lib/API/Containerizer.js');
var path = require('path');
var fs = require('fs');
var should = require('should');
var Plan = require('../helpers/plan.js');
describe('Containerizer unit tests', function() {
var fixture_path = path.join(__dirname, '../fixtures/containerizer');
var Dockerfile = path.join(fixture_path, 'Dockerfile');
var res_lines_dev = ['## DEVELOPMENT MODE',
'ENV NODE_ENV=development',
'CMD ["rundev", "start", "--auto-exit", "index.js", "--env", "development"]'];
var res_lines_prod = ['## DISTRIBUTION MODE',
'ENV NODE_ENV=production',
'COPY . /var/app',
'CMD ["pm2-docker", "start", "--auto-exit", "index.js", "--env", "production"]'];
after(function(done) {
fs.unlink(Dockerfile, done);
});
it('should generate a dockerfile', function() {
var has_meta = false;
return Containerizer.generateDockerfile(Dockerfile, 'index.js', 'development')
.then(function(meta) {
meta.Dockerfile_path.should.eql(Dockerfile);
fs.statSync(Dockerfile);
var lines = meta.Dockerfile.split('\n');
lines.forEach(function(line, i) {
if (line == '## DEVELOPMENT MODE') {
has_meta = true;
should(lines[i]).eql(res_lines_dev[0]);
should(lines[i + 1]).eql(res_lines_dev[1]);
should(lines[i + 2]).eql(res_lines_dev[2]);
}
});
should(has_meta).be.true();
});
});
it('should switch dockerfile to distribution', function() {
return Containerizer.switchDockerFile(Dockerfile, 'index.js', 'distribution')
.then(function(meta) {
meta.Dockerfile_path.should.eql(Dockerfile);
fs.statSync(Dockerfile);
var lines = meta.Dockerfile.split('\n')
lines.forEach(function(line, i) {
if (line == '## DISTRIBUTION MODE') {
should(lines[i]).eql(res_lines_prod[0]);
should(lines[i + 1]).eql(res_lines_prod[1]);
should(lines[i + 2]).eql(res_lines_prod[2]);
should(lines[i + 3]).eql(res_lines_prod[3]);
}
});
});
});
it('should switch dockerfile to distribution (no touching it)', function() {
return Containerizer.switchDockerFile(Dockerfile, 'index.js', 'distribution')
.then(function(meta) {
meta.Dockerfile_path.should.eql(Dockerfile);
fs.statSync(Dockerfile);
var lines = meta.Dockerfile.split('\n');
lines.forEach(function(line, i) {
if (line == '## DISTRIBUTION MODE') {
should(lines[i]).eql(res_lines_prod[0]);
should(lines[i + 1]).eql(res_lines_prod[1]);
should(lines[i + 2]).eql(res_lines_prod[2]);
should(lines[i + 3]).eql(res_lines_prod[3]);
}
});
});
});
it('should switch dockerfile to development', function() {
return Containerizer.switchDockerFile(Dockerfile, 'index.js', 'development')
.then(function(meta) {
meta.Dockerfile_path.should.eql(Dockerfile);
fs.statSync(Dockerfile);
var lines = meta.Dockerfile.split('\n');
lines.forEach(function(line, i) {
if (line == '## DEVELOPMENT MODE') {
should(lines[i]).eql(res_lines_dev[0]);
should(lines[i + 1]).eql(res_lines_dev[1]);
should(lines[i + 2]).eql(res_lines_dev[2]);
}
});
});
});
it('should switch dockerfile to development (no touching it)', function() {
return Containerizer.switchDockerFile(Dockerfile, 'index.js', 'development')
.then(function(meta) {
meta.Dockerfile_path.should.eql(Dockerfile);
fs.statSync(Dockerfile);
var lines = meta.Dockerfile.split('\n');
lines.forEach(function(line, i) {
if (line == '## DEVELOPMENT MODE') {
should(lines[i]).eql(res_lines_dev[0]);
should(lines[i + 1]).eql(res_lines_dev[1]);
should(lines[i + 2]).eql(res_lines_dev[2]);
}
});
});
});
it('should switch dockerfile to distribution', function() {
return Containerizer.switchDockerFile(Dockerfile, 'index.js', 'distribution')
.then(function(meta) {
meta.Dockerfile_path.should.eql(Dockerfile);
fs.statSync(Dockerfile);
var lines = meta.Dockerfile.split('\n')
lines.forEach(function(line, i) {
if (line == '## DISTRIBUTION MODE') {
should(lines[i]).eql(res_lines_prod[0]);
should(lines[i + 1]).eql(res_lines_prod[1]);
should(lines[i + 2]).eql(res_lines_prod[2]);
should(lines[i + 3]).eql(res_lines_prod[3]);
}
});
});
});
});