pm2/test/programmatic/programmatic.js
2017-02-03 16:19:28 +01:00

434 lines
11 KiB
JavaScript

/**
* PM2 programmatic API tests
*/
//process.env.NODE_ENV ='test';
var PM2 = require('../..');
var should = require('should');
var path = require('path');
describe('PM2 programmatic calls', function() {
this.timeout(10000);
var proc1 = null;
var procs = [];
var bus = null;
var pm2 = new PM2.custom({
cwd : __dirname + '/../fixtures',
independent : true
});
after(function(done) {
pm2.destroy(done);
});
before(function(done) {
pm2.connect(function() {
pm2.launchBus(function(err, _bus) {
bus = _bus;
pm2.delete('all', function(err, ret) {
done();
});
});
});
});
describe('General methods', function() {
it('should start a script', function(done) {
pm2.start({
script : './child.js',
name : 'child',
instances : 1
}, function(err, data) {
proc1 = data[0];
should(err).be.null()
done();
});
});
it('should get id', function(done) {
pm2.getProcessIdByName('child', function(err, data) {
data[0].should.eql(0);
should(err).be.null()
setTimeout(done, 300);
});
});
it('should get node.js version application running', function(done) {
pm2.describe('child', function(err, data) {
should(err).be.null()
data[0].pm2_env.node_version.should.eql(process.versions.node);
done();
});
});
it('should start a script and force to launch it', function(done) {
pm2.start({
script : './child.js',
force : true,
name : 'toto',
instances : 1
}, function(err, data) {
should(err).be.null()
data.length.should.eql(1);
done();
});
});
it('should start a script in a specified cwd', function(done) {
var target_cwd = path.join(__dirname, '/../fixtures/');
pm2.start({
script : './cron.js',
cwd: target_cwd,
instances : 1
}, function(err, data) {
should(err).be.null();
proc1 = data[0];
proc1.pm2_env.cwd.should.eql(target_cwd);
should(err).be.null()
done();
});
});
it('should notice error if wrong file passed', function(done) {
pm2.start('./UNKNOWN_SCRIPT.js', {
force : true,
name : 'tota',
instances : 3
}, function(err, data) {
console.log(err)
should.exists(err);
done();
});
});
it('should start a script and force to launch it', function(done) {
pm2.start('./child.js', {
force : true,
name : 'tota',
instances : 6
}, function(err, data) {
should(err).be.null()
data.length.should.eql(6);
done();
});
});
it('should get pm2 version', function(done) {
pm2.getVersion(function(err, data) {
should(err).be.null()
should.exists(data);
done();
});
});
it('should list processes', function(done) {
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(9);
done();
});
});
it('should delete one process', function(done) {
pm2.delete(proc1.pm2_env.pm_id, function(err, ret) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(8);
done();
});
});
});
it('should save/dump all processes', function(done) {
pm2.dump(function(err, ret) {
should(err).be.null()
done();
});
});
it('should delete processes', function(done) {
this.timeout(5000);
pm2.delete('all', function(err, ret) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(0);
done();
});
});
});
it('should resurrect processes', function(done) {
pm2.resurrect(function(err, ret) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(8);
done();
});
});
});
it('should ping pm2', function(done) {
pm2.ping(function(err, ret) {
should(err).be.null()
done();
});
});
it('should launch pm2 web API', function(done) {
pm2.web(function(err, ret) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(9);
done();
});
});
});
it('should reload all', function(done) {
pm2.reload('all', function(err, ret) {
should(err).be.null()
done();
});
});
it('should reload only one application', function(done) {
pm2.reload('tota', function(err, ret) {
should(err).be.null()
pm2.describe('tota', function(err, proc) {
should(err).be.null()
procs = proc;
proc[0].pm2_env.restart_time.should.eql(2);
done();
});
});
});
it('should describe all process with name', function(done) {
pm2.describe('tota', function(err, proc) {
should(err).be.null()
proc.length.should.eql(6);
done();
});
});
});
describe('Restart methods', function() {
it('should restart all', function(done) {
pm2.restart('all', function(err, ret) {
should(err).be.null()
pm2.describe('tota', function(err, proc) {
should(err).be.null()
proc.length.should.eql(6);
proc[0].pm2_env.restart_time.should.eql(3);
done();
});
});
});
it('should restart process by name', function(done) {
pm2.restart('tota', function(err, ret) {
should(err).be.null()
pm2.describe('tota', function(err, proc) {
should(err).be.null()
proc.length.should.eql(6);
proc[0].pm2_env.restart_time.should.eql(4);
done();
});
});
});
it('should restart process by id', function(done) {
pm2.restart(procs[0].pm2_env.pm_id, function(err, ret) {
should(err).be.null()
pm2.describe(procs[0].pm2_env.pm_id, function(err, proc) {
should(err).be.null()
proc.length.should.eql(1);
proc[0].pm2_env.restart_time.should.eql(5);
done();
});
});
});
});
describe('Stop methods', function() {
it('should stop process name', function(done) {
pm2.stop(procs[0].pm2_env.name, function(err, ret) {
should(err).be.null()
pm2.describe(procs[0].pm2_env.name, function(err, procs) {
should(err).be.null()
procs[0].pm2_env.status.should.eql('stopped');
done();
});
});
});
it('should stop process id', function(done) {
pm2.stop(procs[1].pm2_env.pm_id, function(err, ret) {
should(err).be.null()
pm2.describe(procs[1].pm2_env.pm_id, function(err, procs) {
should(err).be.null()
procs[0].pm2_env.status.should.eql('stopped');
done();
});
});
});
it('should stop process all', function(done) {
pm2.stop('all', function(err, ret) {
should(err).be.null()
pm2.describe(procs[0].pm2_env.pm_id, function(err, procs) {
should(err).be.null()
procs[0].pm2_env.status.should.eql('stopped');
done();
});
});
});
});
describe('start OR restart', function() {
beforeEach(function(done) {
pm2.delete('all', function(err, ret) {
done();
});
});
it('should start a JSON object in cluster mode', function(done) {
pm2.start({
script : './echo.js',
instances : 4,
exec_mode : 'cluster'
}, function(err, dt) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(4);
ret[0].pm2_env.exec_mode.should.eql('cluster_mode');
done();
});
});
});
it('should start a JSON object in fork mode', function(done) {
pm2.start({
script : './echo.js',
instances : 4,
exec_mode : 'fork'
}, function(err, dt) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(4);
ret[0].pm2_env.exec_mode.should.eql('fork_mode');
done();
});
});
});
it('should start a JSON file', function(done) {
pm2.start('./all2.json', function(err, dt) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(4);
done();
});
});
});
});
describe('start OR restart', function() {
before(function(done) {
pm2.delete('all', function(err, ret) {
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(0);
done();
});
});
});
it('should start', function(done) {
pm2._startJson('./all2.json', {}, 'restartProcessId', function(err, data) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.length.should.eql(4);
done();
});
});
});
it('should NOW restart action', function(done) {
pm2._startJson('./all2.json', {}, 'restartProcessId', function(err, data) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null()
ret.forEach(function(app) {
app.pm2_env.restart_time.should.eql(1);
});
done();
});
});
});
it('should reset status', function(done) {
pm2.delete('all', function(err, ret) {
done();
});
});
it('should start with specific environment variables depending on the env type', function(done) {
pm2._startJson('../fixtures/all2.json', {
env : 'production'
}, 'restartProcessId', function(err, data) {
should(err).be.null()
pm2.list(function(err, ret) {
should(err).be.null();
ret[0].pm2_env['NODE_ENV'].should.eql('production');
ret[0].pm2_env['TOTO'].should.eql('heymoto');
done();
});
});
});
});
describe('Connect / Disconnect', function() {
it('should disconnect', function() {
pm2.disconnect();
});
it('should connect', function(done) {
pm2.connect(function() {
done();
});
});
it('should disconnect with callback', function(done) {
pm2.disconnect(function() {
done();
});
});
it('should connect', function(done) {
pm2.connect(function() {
done();
});
});
});
});