rework task API to be two-phase
this lets us avoid this EE based API. we now add and then start explicitly.
This commit is contained in:
@@ -32,64 +32,65 @@ describe('task', function () {
|
||||
after(cleanup);
|
||||
|
||||
it('can run valid task - success', function (done) {
|
||||
let taskId = null;
|
||||
let task = tasks.startTask(tasks._TASK_IDENTITY, [ 'ping' ]);
|
||||
task.on('error', done);
|
||||
task.on('start', (tid) => { taskId = tid; });
|
||||
task.on('finish', function (error, result) {
|
||||
tasks.add(tasks._TASK_IDENTITY, [ 'ping' ], function (error, taskId) {
|
||||
if (error) return done(error);
|
||||
expect(result).to.equal('ping');
|
||||
expect(taskId).to.be.ok();
|
||||
done();
|
||||
|
||||
tasks.startTask(taskId, {}, function (error, result) {
|
||||
if (error) return done(error);
|
||||
expect(result).to.equal('ping');
|
||||
expect(taskId).to.be.ok();
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('can run valid task - error', function (done) {
|
||||
let taskId = null;
|
||||
let task = tasks.startTask(tasks._TASK_ERROR, [ 'ping' ]);
|
||||
task.on('error', done);
|
||||
task.on('start', (tid) => { taskId = tid; });
|
||||
task.on('finish', function (error, result) {
|
||||
expect(error).to.be.ok();
|
||||
expect(error.message).to.be('Failed for arg: ping');
|
||||
expect(result).to.be(null);
|
||||
expect(taskId).to.be.ok();
|
||||
done();
|
||||
tasks.add(tasks._TASK_ERROR, [ 'ping' ], function (error, taskId) {
|
||||
if (error) return done(error);
|
||||
|
||||
tasks.startTask(taskId, {}, function (error, result) {
|
||||
expect(error).to.be.ok();
|
||||
expect(error.message).to.be('Failed for arg: ping');
|
||||
expect(result).to.be(null);
|
||||
expect(taskId).to.be.ok();
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('can get logs of crash', function (done) {
|
||||
let taskId = null;
|
||||
let task = tasks.startTask(tasks._TASK_CRASH, [ 'ping' ]);
|
||||
task.on('error', done);
|
||||
task.on('start', (tid) => { taskId = tid; });
|
||||
task.on('finish', function (error, result) {
|
||||
expect(error).to.be.ok();
|
||||
expect(error.message).to.contain(`Task ${taskId} crashed`);
|
||||
expect(result).to.be(null);
|
||||
expect(taskId).to.be.ok();
|
||||
tasks.add(tasks._TASK_CRASH, [ 'ping' ], function (error, taskId) {
|
||||
if (error) return done(error);
|
||||
|
||||
let logs = fs.readFileSync(`${paths.TASKS_LOG_DIR}/${taskId}.log`, 'utf8');
|
||||
expect(logs).to.contain('Crashing for arg: ping');
|
||||
done();
|
||||
tasks.startTask(taskId, {}, function (error, result) {
|
||||
expect(error).to.be.ok();
|
||||
|
||||
expect(error.message).to.contain(`Task ${taskId} crashed`);
|
||||
expect(result).to.be(null);
|
||||
expect(taskId).to.be.ok();
|
||||
|
||||
let logs = fs.readFileSync(`${paths.TASKS_LOG_DIR}/${taskId}.log`, 'utf8');
|
||||
expect(logs).to.contain('Crashing for arg: ping');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('can stop task', function (done) {
|
||||
let taskId = null;
|
||||
let task = tasks.startTask(tasks._TASK_SLEEP, [ 10000 ]);
|
||||
task.on('error', done);
|
||||
task.on('start', (tid) => {
|
||||
taskId = tid;
|
||||
tasks.stopTask(taskId, () => {});
|
||||
});
|
||||
task.on('finish', function (error, result) {
|
||||
expect(error).to.be.ok();
|
||||
expect(error.message).to.contain('SIGTERM');
|
||||
expect(result).to.be(null);
|
||||
expect(taskId).to.be.ok();
|
||||
done();
|
||||
tasks.add(tasks._TASK_SLEEP, [ 10000 ], function (error, taskId) {
|
||||
if (error) return done(error);
|
||||
|
||||
tasks.startTask(taskId, {}, function (error, result) {
|
||||
expect(error).to.be.ok();
|
||||
expect(error.message).to.contain('SIGTERM');
|
||||
expect(result).to.be(null);
|
||||
expect(taskId).to.be.ok();
|
||||
done();
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
tasks.stopTask(taskId, () => {});
|
||||
}, 100);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user