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:
Girish Ramakrishnan
2019-08-27 22:39:59 -07:00
parent c6be0b290b
commit b30ff1f55a
7 changed files with 231 additions and 211 deletions

View File

@@ -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);
});
});
});