tests.recurring = function recurring(test) { test.expect(8) var called = 0, now = Date.now(); qb.on('error', test.done) .can('joomla', function (task, done) { test.ok(now <= task.received && task.received < Date.now(), 'received is not in the right band ' + now + ' < ' + task.received + ' < ' + Date.now()) test.ok(now + (called++) * 75 < Date.now(), 'processing time too early n: ' + called + ' recieved: ' + task.received + ' now: ' + Date.now()) done(); }) .pre('push', qbPkg.mdw.setTimestamp('received')) .on('finish', function (type, task, next) { if (called === 3) { qb.queue('joomla').recurring.remove('xxrecur123', task.every, function (err) { test.ifError(err) setTimeout(test.done, 100) }) } next() }) .start() .on('ready', function () { qb.push('joomla', {foo:'bar', every: 75, id: 'xxrecur123'}, test.ifError); }); }
tests.setTimestamp = function setTimestamp (test) { var called = false; qb.on('error', test.done) .can('foobar', function (task, done) { test.ok(task.pushtime > Date.now() - 1000 && task.pushtime < Date.now()); test.ok(task.timestamp > Date.now() - 100 && task.timestamp <= Date.now(), 'Timestamp isnt close enough ('+task.timestamp+') to now ('+Date.now()+')'); called = true; done(); }) .pre('push') .use(qbPkg.mdw.setTimestamp('pushtime')) .pre('process') .use(qbPkg.mdw.setTimestamp()) .on('finish', function (type, task, next) { test.equal(called, true); setImmediate(test.done); }) .start() .on('ready', function () { qb.push('foobar', {foo: 'bar'}, test.ifError); }) }
tests.retryer = function retry(test) { var i = 0 qb.on('error', test.done) .can('serve', function (task, done) { test.equal(task.retry, i++ ? i-1 : undefined) done(new Error('yolo')) }) .on('fail', qbPkg.mdw.retry(qb, 'serve', 2)) .on('fail', function (type, task, next) { test.equal(task.retry, 2) setTimeout(test.done, 30) }) .start() .on('ready', function () { qb.push('serve', {yolo:'yolo'}) }) }
tests.deferred = function deferred(test) { var called = false; qb.on('error', test.done) .can('after', function (task, done) { test.ok(task.received + 50 < Date.now(), 'processing time too early recieved: ' + task.received + ' now: ' + Date.now()); called = true; done(); }) .pre('push', qbPkg.mdw.setTimestamp('received')) .on('finish', function (type, task, next) { test.ok(called); setImmediate(test.done); }) .start() .on('ready', function () { qb.push('after', {foo:'bar', when: Date.now() + 100}); }); }
var options = config.qb; options.redis = redis.createClient(); // Setup var qb = QB.init(options) // Services provided .can('email-to-list', 10 /* max concurrent callbacks */, services.emailToList /* callback func */) .can('add-email-to-list', 50 /* max concurrent callbacks */, services.addEmailToList /* callback func */) // Communication .speaks(require('qb-http'), config.http) .speaks(require('qb-messageq'), config.messageq) // Middleware .pre('push').use(QB.mdw.setTimestamp('received')) .pre('process').use(QB.mdw.setTimestamp('process')) .pre('finish') .use(function (type, task, next) { // custom middleware task.processing_time = Date.now() - task.process; next(); }) // .use(function (type, task, next) { // console.log('Finished processing a task in ' + type + ' at ' + task.process + ' in ' + task.processing_time + 'ms'); // }) .on('fail', function (type, task, next) { qb.log.error('FAIL: Type %s: %s', type, task.error); }) .on('process').use(endWhenIShould) // Start!