it("kills running process on trigger", function (done) { var subprocessId = Math.random(); var log = logginator({}); var action = new DaemonAction(id, spec); var wasKilled = false; function subprocessKiller() { wasKilled = true; } action.trigger(log, { execute: function () { return subprocessId; }, get: function () { return undefined; } }); action.trigger(log, { execute: function () { assert(false); }, get: function (id) { assert.equal(subprocessId, id); return { kill: subprocessKiller }; } }); assert(wasKilled); done(); });
it("handles missing config", function (done) { var log = logginator({}); var app = core(log, {}); var expressApp = express(); github(log, app, expressApp); expressApp.on('listening', function () { var address = expressApp.address(); }); // Would bind to 127.0.0.1, but that makes address() return null var httpServer = expressApp.listen(0); var port = httpServer.address().port; request({ url: "http://127.0.0.1:" + port + "/github", method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: querystring.stringify({ payload: JSON.stringify(examplePostData) }) }, function (err, res, body) { assert.equal(err, null); assert.equal(Math.floor(res.statusCode / 100), 2); done(); }); });
it("starts first time", function (done) { var log = logginator({}); var action = new DaemonAction(id, spec); var wasExecuted = false; action.trigger(log, { execute: function () { wasExecuted = true; }, get: function () { return undefined; } }); assert(wasExecuted); done(); });
it("can schedule multiple", function (done) { // This test unfortunately requires one second to run, due to a hardcoded // timer value inside the github subsystem module. The solution is to make // this interval configurable, or to employ some kind of virtual time. var outstandingCallbacks = 3; function decrementOutstanding() { if (!--outstandingCallbacks) done(); } var log = logginator({}); var app = core(log, {}); app.actionManager.push({ id: "test-action-1", trigger: decrementOutstanding }); app.actionManager.push({ id: "test-action-2", trigger: decrementOutstanding }); var expressApp = express(); github(log, app, expressApp, { "https://github.com/octokitty/testing": [ "test-action-1", "test-action-2" ] }); expressApp.on('listening', function () { var address = expressApp.address(); }); // Would bind to 127.0.0.1, but that makes address() return null var httpServer = expressApp.listen(0); var port = httpServer.address().port; request({ url: "http://127.0.0.1:" + port + "/github", method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: querystring.stringify({ payload: JSON.stringify(examplePostData) }) }, function (err, res, body) { assert.equal(err, null); assert.equal(Math.floor(res.statusCode / 100), 2); decrementOutstanding(); }); });
it("handles correct input", function (done) { var outstandingCallbacks = 2; function decrementOutstanding() { if (!--outstandingCallbacks) done(); } var log = logginator({}); var app = core(log, {}); app.actionManager.push({ id: "test-action", trigger: decrementOutstanding }); var expressApp = express(); github(log, app, expressApp, { "https://github.com/octokitty/testing": "test-action" }); expressApp.on('listening', function () { var address = expressApp.address(); }); // Would bind to 127.0.0.1, but that makes address() return null var httpServer = expressApp.listen(0); var port = httpServer.address().port; request({ url: "http://127.0.0.1:" + port + "/github", method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: querystring.stringify({ payload: JSON.stringify(examplePostData) }) }, function (err, res, body) { assert.equal(err, null); assert.equal(Math.floor(res.statusCode / 100), 2); decrementOutstanding(); }); });
it("restarts after successful kill", function (done) { var subprocessId = Math.random(); var log = logginator({}); var action = new DaemonAction(id, spec); var wasRestarted = false; var wasKilled = false; var killedCallback; function subprocessKiller(log, callback) { wasKilled = true; killedCallback = callback; } action.trigger(log, { execute: function () { return subprocessId; }, get: function () { return undefined; } }); action.trigger(log, { execute: function () { assert(wasKilled); wasRestarted = true; }, get: function (id) { assert.equal(subprocessId, id); return { kill: subprocessKiller }; } }); assert(wasKilled); assert(!wasRestarted); killedCallback(); assert(wasRestarted); done(); });