UNPKG

node-resque

Version:

an opinionated implementation of resque in node

104 lines (89 loc) 3.02 kB
var specHelper = require(__dirname + "/../_specHelper.js").specHelper; var should = require('should'); describe('scheduler', function(){ var scheduler; var queue; it("can connect", function(done){ scheduler = new specHelper.NR.scheduler({connection: specHelper.connectionDetails, timeout: specHelper.timeout}, function(){ should.exist(scheduler); done(); }); }); it("can provide an error if connection failed", function(done) { // Only run this test if this is using real redis if(process.env.FAKEREDIS == 'true') { return done(); } // Make a copy of the connectionDetails so we don't overwrite the original one var connectionDetails = { package: specHelper.connectionDetails.package, host: "wronghostname", password: specHelper.connectionDetails.password, port: "wrongport", database: specHelper.connectionDetails.database, namespace: specHelper.connectionDetails.namespace, }; var resolved = false; scheduler = new specHelper.NR.scheduler({connection: connectionDetails, timeout: specHelper.timeout}, function(err){ if(resolved === false){ // new versions of redis will keep retrying in node v0.11x... should.exist(err); resolved = true; done(); } }); }); describe('[with connection]', function() { before(function(done){ specHelper.connect(function(){ scheduler = new specHelper.NR.scheduler({connection: specHelper.connectionDetails, timeout: specHelper.timeout}, function(){ queue = new specHelper.NR.queue({connection: specHelper.connectionDetails, queue: specHelper.queue}, function(){ done(); }); }); }); }); beforeEach(function(done) { specHelper.cleanup(function(){ done(); }); }); after(function(done){ specHelper.cleanup(function(){ done(); }); }); it("can boot", function(done){ scheduler.start(); done(); }); it('can be stopped', function(done){ this.timeout(specHelper.timeout * 3); scheduler.end(function(){ done(); }); }); it("will move enqueued jobs when the time comes", function(done){ queue.enqueueAt(1000 * 10, specHelper.queue, 'someJob', [1,2,3], function(){ scheduler.poll(function(){ specHelper.popFromQueue(function(err, obj){ should.exist(obj); obj = JSON.parse(obj); obj['class'].should.equal('someJob'); obj['args'].should.eql([1,2,3]); done(); }); }); }); }); it("will not move jobs in the future", function(done){ queue.enqueueAt((new Date().getTime() + 10000), specHelper.queue, 'someJob', [1,2,3], function(){ scheduler.poll(function(){ specHelper.popFromQueue(function(err, obj){ should.not.exist(obj); done(); }); }); }); }); }); });