3 changed files with 188 additions and 102 deletions
@ -1,44 +1,76 @@ |
|||
/*global describe, it, before, beforeEach, after, afterEach, should */ |
|||
|
|||
var JobManager = require('../src/JobManager.js').JobManager; |
|||
var utils = require('../src/utils.js'); |
|||
var range = utils.range; |
|||
|
|||
var wrks = range(400000); |
|||
wrks.forEach( function(v,k){ |
|||
wrks[k] = function(data,cb){ |
|||
var self = this; |
|||
process.nextTick(function(){ |
|||
// console.log( 'I am done: ', v );
|
|||
cb( null, data); |
|||
} ); |
|||
var should = require('should'); |
|||
|
|||
var NO_WORKERS = 5; |
|||
var workers = [], i; |
|||
for ( i = 0; i < NO_WORKERS; i ++) { |
|||
workers[i] = function( data, cb ){ |
|||
console.log(i, ' Processing ', data ); |
|||
setTimeout( function(){ |
|||
console.log( 'Iam ', i, ' Processed ', data ); |
|||
}, i*10 ); |
|||
}; |
|||
wrks[k].id = v; |
|||
}); |
|||
workers[i].name = i; |
|||
} |
|||
var NO_TASKS=100; |
|||
|
|||
var tasks = utils.range( NO_TASKS ); |
|||
|
|||
var TEST_CONCURENCY = 3; |
|||
|
|||
var tStart = 0; |
|||
var getTasks = function(){ |
|||
var i, out=[]; |
|||
for( i = 0; i< 1000; i++, tStart++ ){ |
|||
out[i] = tStart; |
|||
} |
|||
return out; |
|||
}; |
|||
|
|||
var tasks = getTasks(); |
|||
|
|||
var jm = new JobManager({concurrency:3}); |
|||
jm.tasks = tasks; |
|||
jm.workers = wrks; |
|||
jm.onError = function(err, task, worker ){ |
|||
console.log( 'Error...', arguments ); |
|||
}; |
|||
|
|||
jm.work = function(task, worker, cb){ |
|||
// console.log( 'Worker ', worker.id, ' with ', task );
|
|||
return worker( task, cb ); |
|||
}; |
|||
jm.onLoadMore = function( cb ){ |
|||
console.log( 'Loading......'); |
|||
this.tasks = this.tasks.concat( getTasks() ); |
|||
return cb(); |
|||
}; |
|||
jm.start(); |
|||
describe('JobManager', function(){ |
|||
|
|||
describe('Initialization', function(){ |
|||
var jm = new JobManager( { concurrency: TEST_CONCURENCY }); |
|||
jm.work = function( task, worker, cb ){ |
|||
worker( task , cb ); |
|||
}; |
|||
jm.workers = workers; |
|||
jm.tasks = tasks; |
|||
jm.onError = function(err, task, worker ){ |
|||
console.log( 'Error...', arguments ); |
|||
}; |
|||
jm.onLoadMore = function( cb ){ |
|||
console.log( 'Loading......'); |
|||
this.tasks = this.tasks.concat( tasks ); |
|||
return cb(); |
|||
}; |
|||
it('should Initialize properly', function(done){ |
|||
jm.concurrency = jm.workers.length -1; |
|||
jm.updateState(); |
|||
jm.tmpPool.should.have.length(NO_WORKERS); |
|||
jm.concurrency = jm.workers.length +1; |
|||
jm.updateState(); |
|||
jm.tmpPool.should.have.length(NO_WORKERS*2); |
|||
|
|||
jm.tasks.should.have.length( NO_TASKS ); |
|||
jm.workers.should.have.length( NO_WORKERS ); |
|||
jm.runningTasks.should.be.equal(0); |
|||
done(); |
|||
}); |
|||
|
|||
it('getFromPool, returnToPool', function(done){ |
|||
var store = [], i, w; |
|||
for( i =0; i< jm.concurrency; i++ ){ |
|||
w = jm.getFromPool(); |
|||
jm.runningTasks.should.be.equal( i+1); |
|||
should.exist( w ); |
|||
store.push(w); |
|||
} |
|||
for( i =0; i< 6; i++ ){ |
|||
w = jm.getFromPool(); |
|||
jm.runningTasks.should.be.equal( jm.concurrency ); |
|||
should.not.exist( w ); |
|||
} |
|||
store.forEach( function(v, i){ |
|||
jm.returnToPool(v); |
|||
jm.runningTasks.should.be.equal( jm.concurrency-i-1 ); |
|||
}); |
|||
jm.runningTasks.should.be.equal( 0 ); |
|||
done(); |
|||
}); |
|||
}); |
|||
}); |
|||
|
@ -0,0 +1,58 @@ |
|||
var JobManager = require('../src/JobManager.js').JobManager; |
|||
var utils = require('../src/utils.js'); |
|||
var range = utils.range; |
|||
var async = require('async'); |
|||
|
|||
var wrks = range(4); |
|||
wrks.forEach( function(v,k){ |
|||
wrks[k] = function(data,cb){ |
|||
console.log( 'S ', data ); |
|||
setTimeout( function(){ |
|||
console.log( 'E ', data ); |
|||
cb(); |
|||
} , ( 1 ) * 1000 ); |
|||
}; |
|||
wrks[k].id = v; |
|||
}); |
|||
|
|||
var tStart = 0; |
|||
var getTasks = function(){ |
|||
var i, out=[]; |
|||
for( i = 0; i< 50; i++, tStart++ ){ |
|||
out[i] = tStart; |
|||
} |
|||
return out; |
|||
}; |
|||
|
|||
var tasks = getTasks(); |
|||
if(0){ |
|||
console.log( tasks.length ); |
|||
var y = 0; |
|||
async.eachLimit( tasks, 300, function( data, cb ){ |
|||
setTimeout( function(){ |
|||
console.log( data ); |
|||
cb(); |
|||
} , 1); |
|||
}, console.log ); |
|||
|
|||
return; |
|||
} |
|||
|
|||
var jm = new JobManager({concurrency: 6}); |
|||
jm.tasks = tasks; |
|||
jm.workers = wrks; |
|||
jm.onError = function(err, task, worker ){ |
|||
console.log( 'Error...', arguments ); |
|||
}; |
|||
|
|||
jm.work = function(task, worker, cb){ |
|||
// console.log( 'Worker ', worker.id, ' with ', task );
|
|||
return worker( task, cb ); |
|||
}; |
|||
jm.onLoadMore = function( cb ){ |
|||
console.log( 'Loading......'); |
|||
this.tasks = this.tasks.concat( getTasks() ); |
|||
return cb(); |
|||
}; |
|||
// jm.start();
|
|||
jm._start(); |
Loading…
Reference in new issue