racq
Version:
Rackspace Cloud Queues API wrapper
131 lines (120 loc) • 3.67 kB
JavaScript
;
var util = require('util'),
should = require('should'),
dbg = require('debug'),
debug = dbg('messages'),
statistics = dbg('messages:statistics'),
common = require('./common');
describe('Message operations', function() {
var queueName = common.getRandomQueueName(),
q = common.initializeQueue(),
message = {
ttl: 60,
body: {myProperty: 'myValue'}
},
msgId, msgIds = [];
before(function(done) {
q.authenticate(function(error) {
if(!error) {
q.createQueue(queueName, done);
debug('queue %s created', queueName);
}
});
});
it('should post message to queue ' + queueName, function(done) {
q.postMessages(queueName, message, done);
});
it('should get messages from queue ' + queueName, function(done) {
var options = {
limit: 1,
echo: true
};
q.getMessages(queueName, options, function(error, result) {
debug(util.inspect(result, true, 3));
should.not.exist(error);
should.exist(result);
result.messages[0].body.myProperty.should.eql(message.body.myProperty);
msgId = result.messages[0].id;
done();
});
});
it('should get the message from queue ' + queueName, function(done) {
debug(msgId);
q.getMessagesById(queueName, msgId, function(error, result) {
should.not.exist(error);
should.exist(result);
result.body.myProperty.should.eql(message.body.myProperty);
done();
});
});
it('should delete message from queue ' + queueName, function(done) {
debug(msgId);
q.deleteMessages(queueName, msgId, done);
});
it('should post 20 messages to queue ' + queueName + ' and get them in groups of 5 messages', function(done) {
var async = require('async');
async.series([
function postMessages(callback) {
//prepare 20 messages, with 5 min ttl, in 2 arrays of 10 (maximum per one postMessages call)
var msgs1 = common.generateMessages(10, 1, 300),
msgs2 = common.generateMessages(10, 11, 300);
//send the 2 arrays simultanously
async.parallel([
function(cb) {
q.postMessages(queueName, msgs1, cb);
},
function(cb) {
q.postMessages(queueName, msgs2, cb);
}
], callback);
},
function getMessages(callback) {
var next = 1,
messageCount = 0,
sum = 0;
async.doWhilst(
function getMessages(cb) {
var options = {
limit: 5,
echo: true,
marker: next
};
q.getMessages(queueName, options, function(error, result) {
if(error) {
return cb(error);
}
else {
//debug(util.inspect(result, true, 3));
result.messages.forEach(function(message) {
messageCount++;
sum += parseInt(message.body.number);
msgIds.push(message.id);
});
next = result.marker;
debug('sum: %s, next marker: %s', sum, next);
return cb(null);
}
});
},
function test() {
//stop when we got the 20 messages
return next !== '21';
},
function evaluate() {
//success means we got all 20 messages and summed their values (1 + 2 + ... + 20 == 210)
callback(messageCount === 20 && sum === 210 ? null : new Error('message count/sum does not match'));
}
);
}
],
done);
});
it('should bulk delete 20 messages from queue ' + queueName, function(done) {
q.deleteMessages(queueName, msgIds.join(','), done);
});
after(function(done) {
q.deleteQueue(queueName, done);
debug('queue %s deleted', queueName);
statistics('Statistics:', q.getStatistics());
});
});