| #!/usr/bin/env node | |
| var assert = require('assert'); | |
| var qjob = require('../qjobs'); | |
| var maxConcurrency = 2; | |
| var q = new qjob({maxConcurrency:maxConcurrency}); | |
| var testExecutedJobs = 0; | |
| var testStartFired = false; | |
| var testEndFired = false; | |
| var testJobsStartFired = 0; | |
| var testJobsEndFired = 0; | |
| var testConcurrency = 0; | |
| var testPause = false; | |
| var testUnpause = false; | |
| var myjob = function(args,next) { | |
| setTimeout(function() { | |
| testExecutedJobs++; | |
| next(); | |
| },50); | |
| } | |
| // Let's add 10 job and add them to the queue | |
| for (var i = 0; i<10; i++) { | |
| q.add(myjob,['test'+i]); | |
| } | |
| q.on('start',function() { | |
| testStartFired = true; | |
| }); | |
| q.on('jobStart',function() { | |
| var running = q.stats()._jobsRunning; | |
| if (running>testConcurrency) testConcurrency = running; | |
| testJobsStartFired++; | |
| if (testJobsStartFired == 5) { | |
| q.pause(true); | |
| } | |
| }); | |
| q.on('jobEnd',function() { | |
| testJobsEndFired++; | |
| }); | |
| q.on('end',function() { | |
| testEndFired = true; | |
| assert.equal(testExecutedJobs, 10); | |
| assert.equal(testJobsStartFired,10); | |
| assert.equal(testJobsEndFired,10); | |
| assert.equal(testConcurrency,maxConcurrency); | |
| assert.ok(testStartFired); | |
| assert.ok(testPause); | |
| assert.ok(testUnpause); | |
| }); | |
| q.on('pause',function(since) { | |
| testPause = true; | |
| if (since>2000) { | |
| q.pause(false); | |
| } | |
| }); | |
| q.on('unpause',function() { | |
| testUnpause = true; | |
| }); | |
| var running = q.stats()._jobsRunning; | |
| assert.equal(testExecutedJobs,0); | |
| assert.equal(testJobsStartFired,0); | |
| assert.equal(testJobsEndFired,0); | |
| assert.equal(running,0); | |
| assert.ok(!testStartFired); | |
| assert.ok(!testEndFired); | |
| assert.ok(!testPause); | |
| assert.ok(!testUnpause); | |
| q.run(); |