'use strict';
const job = require('../parts/jobs/job.js'),
res = require('../parts/jobs/resource.js'),
log = require('../utils/log.js')('job:ipcTest');
/** Class for testing resource handling for jobs **/
class TestResource extends res.Resource {
/**
* Open resource
* @returns {Promise} promise
**/
open() {
this.a = 0;
return new Promise((resolve) => {
log.d('open');
setTimeout(() => {
this.opened();
resolve();
}, 2000);
});
}
/**
* Close resource
* @returns {Promise} promise
**/
close() {
return new Promise((resolve) => {
log.d('close');
setTimeout(() => {
this.closed();
resolve();
}, 2000);
});
}
/**
* Check if resource is used
* @returns {Promise} promise
**/
checkActive() {
return new Promise((resolve) => {
log.d('checkActive');
setTimeout(() => {
resolve(this.a++ > 0 ? false : true);
}, 2000);
});
}
}
/** Class for testing ipc jobs **/
class Test extends job.IPCJob {
/**
* Create resource
* @returns {Resource} resourse
**/
createResource() {
return new TestResource();
}
/**
* Create between processes
* @returns {Promise} promise
**/
divide() {
return new Promise((resolve) => {
log.d('dividing ', this._json);
setTimeout(() => {
resolve([{
smth: 1,
size: 40
}], [{
smth: 1,
size: 50
}]);
}, 500);
});
}
/**
* Run the job
* @param {Db} db connection
* @param {done} done callback
* @param {function} progress to report progress of the job
*/
run(db, done, progress) {
log.d('running ', this._json);
log.d('resource is ', typeof this.resource);
log.d('resource is open? ', this.resource.isOpen);
log.d('resource is active? ', this.resource.isAssigned);
if (this.done < 10) {
setTimeout(() => {
progress(this._json.size, 10, 'ten');
}, 1000);
}
if (this.done < 20) {
setTimeout(() => {
progress(this._json.size, 20, 'twenty');
// a = b;
}, 5000);
}
if (this.done < 30) {
setTimeout(() => {
progress(this._json.size, 30, 'thirty');
}, 6000);
}
setTimeout(() => {
progress(100, 100, 'sixty');
done();
}, 60000);
setTimeout(() => {
log.d('after done resource is ', typeof this.resource);
done('Big fat error');
db.collection('jobs').findOne({_id: this._json._id}, (err, obj) => {
log.d('after done job findOne ', err, obj);
});
}, 120000);
}
}
module.exports = Test;