pm2/test/programmatic/api.mocha.js
2017-06-28 16:57:09 +02:00

315 lines
7.7 KiB
JavaScript

process.chdir(__dirname);
var PM2 = require('../..');
var should = require('should');
describe('API checks', function() {
this.timeout(1000);
describe('PM2 API case#1', function() {
before(function(done) {
PM2.delete('all', function() { done() });
});
after(function(done) {
PM2.kill(done);
});
it('should instanciate a new pm2 with old api', function() {
should.exists(PM2.pm2_home);
should(PM2.daemon_mode).be.true();
PM2.cwd.should.eql(process.cwd());
should.exists(PM2.Client);
});
it('should connect to PM2', function(done) {
PM2.connect(done);
});
it('should start a script', function(done) {
PM2.start('./../fixtures/child.js', function(err) {
should(err).be.null();
PM2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(1);
done();
});
});
});
it('should stop app by id', function(done) {
PM2.stop(0, done);
});
it('should start app by id', function(done) {
PM2.restart(0, done);
});
it('should fail if starting same script again', function(done) {
PM2.start('./../fixtures/child.js', function(err) {
should(err).not.be.null();
PM2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(1);
done();
});
});
});
it('should FORCE starting same script again', function(done) {
PM2.start('./../fixtures/child.js', {force :true }, function(err) {
should(err).be.null();
PM2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(2);
done();
});
});
});
it('should delete ALL', function(done) {
PM2.delete('all', function(err) {
should(err).be.null();
PM2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(0);
done();
});
});
});
});
describe('PM2 API case#2 (JSON style)', function() {
before(function(done) {
PM2.delete('all', function() { done() });
});
after(function(done) {
PM2.kill(done);
});
it('should start script in cluster mode, 4 instances', function(done) {
PM2.start({
script : './../fixtures/child.js',
instances : 4,
name : 'http-test'
}, function(err) {
should(err).be.null();
PM2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(4);
done();
});
});
});
it('should stop app', function(done) {
PM2.stop('http-test', function(err, procs) {
should(err).be.null();
procs.length.should.eql(4);
PM2.list(function(err, list) {
should(list.length).eql(4);
list.forEach(function(proc) {
proc.pm2_env.status.should.eql('stopped');
});
done();
});
});
});
it('should restart all apps', function(done) {
PM2.restart('http-test', function(err, procs) {
should(err).be.null();
PM2.list(function(err, list) {
should(list.length).eql(4);
list.forEach(function(proc) {
proc.pm2_env.status.should.eql('online');
});
done();
});
});
});
});
describe('Issue #2337', function() {
before(function(done) {
PM2.delete('all', function() { done() });
});
after(function(done) {
PM2.kill(done);
});
it('should start two app with same name', function(done) {
PM2.start({
script : './../fixtures/child.js',
instances : 2,
exec_mode : 'fork',
name : 'http-test'
}, function(err) {
should(err).be.null();
PM2.list(function(err, list) {
should(err).be.null();
list.forEach(function(proc) {
proc.pm2_env.exec_mode.should.eql('fork_mode');
});
should(list.length).eql(2);
done();
});
});
});
it('should stop first app', function(done) {
PM2.stop(0, done);
});
it('should force start a 3rd script', function(done) {
PM2.start('./../fixtures/child.js', {
force : true,
name : 'toto'
}, function() {
PM2.list(function(err, list) {
list.length.should.eql(3);
done();
});
});
});
});
describe('PM2 auto connect feature', function() {
after(function(done) {
PM2.kill(function() {
done();
});
});
it('should instanciate a new pm2 with old api', function() {
should.exists(PM2.pm2_home);
should(PM2.daemon_mode).be.true();
PM2.cwd.should.eql(process.cwd());
should.exists(PM2.Client);
});
it('should be able to start a script without connect', function(done) {
PM2.start('./../fixtures/child.js', function(err) {
should(err).be.null();
done();
});
});
it('should do random commands', function(done) {
PM2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(1);
PM2.delete('all', function(err) {
should(err).be.null();
PM2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(0);
done();
});
});
});
});
});
describe('Custom PM2 instance', function() {
var pm2;
after(function(done) {
pm2.destroy(done);
});
it('should create new custom PM2 instance', function() {
pm2 = new PM2.custom({
independent : true,
daemon_mode : true
});
should.exists(pm2.pm2_home);
should(pm2.daemon_mode).be.true();
pm2.cwd.should.eql(process.cwd());
should.exists(pm2.Client);
});
it('should be able to start a script without connect', function(done) {
pm2.start('./../fixtures/child.js', function(err) {
should(err).be.null();
done();
});
});
it('should do random commands', function(done) {
pm2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(1);
pm2.delete('all', function(err) {
should(err).be.null();
pm2.list(function(err, list) {
should(err).be.null();
should(list.length).eql(0);
done();
});
});
});
});
});
describe('Should start pm2 in do daemon mode', function() {
var pm2;
after(function(done) {
pm2.destroy(done);
});
it('should create new custom PM2 instance', function() {
pm2 = new PM2.custom({
independent : true,
daemon_mode : false
});
should.exists(pm2.pm2_home);
should(pm2.daemon_mode).be.false();
pm2.cwd.should.eql(process.cwd());
should.exists(pm2.Client);
});
});
describe('Launch modules', function() {
var Modularizer = require('../../lib/API/Modules/Modularizer');
var module = 'pm2-server-monit';
after(function(done) {
Modularizer.uninstall(PM2, module, done);
});
it('Should start up modules', function(done) {
this.timeout(5000);
PM2.connect(true, function(err) {
should(err).be.null();
Modularizer.install(PM2, module, function() {
PM2.stop(module, function() {
should(err).be.null();
PM2.launchModules(function(err) {
should(err).be.null();
PM2.list(function(err, list) {
should(err).be.null();
should(list[0].name).eql(module);
should(list[0].pm2_env.status).eql('online');
done();
});
});
});
});
});
});
});
});