diff --git a/lib/groupService.js b/lib/groupService.js index 6306a70..d579a94 100644 --- a/lib/groupService.js +++ b/lib/groupService.js @@ -84,30 +84,31 @@ function getGroup(req, res) { }); } -function getElementsHandler(db) { - return function (name, callback) { - db.smembers(name, callback); - } +function getElementsHandler(name, callback) { + var db = dbCluster.getTransactionDb(name); + db.smembers(name, callback); } function addQueuesFromGroup(req, res, next) { - var db = dbCluster.getTransactionDb(req.params.groupName); if (req.body && req.body.groups) { - async.map(req.body.groups, getElementsHandler(db), function (error, results) { - if (req.body.queue) { + async.map(req.body.groups, getElementsHandler, + function(error, results) { + + if (!req.body.queue) { + req.body.queue = []; + } + var processedResults = []; - for (var i = 0; i < results[0].length; i++) { - processedResults.push({ - id: results[0][i] - }); + for (var j = 0; j < results.length; j++) { + for (var i = 0; i < results[j].length; i++) { + req.body.queue.push({ + id: results[j][i] + }); + } } - req.body.queue = req.body.queue.concat(processedResults); - } else { - req.body.queue = results[0]; - } - next(); + next(); }); } else { next(); diff --git a/test/unit/bugsTest.js b/test/unit/bugsTest.js index dd31143..123a264 100644 --- a/test/unit/bugsTest.js +++ b/test/unit/bugsTest.js @@ -5,23 +5,23 @@ var utils = require('./../utils.js'); var agent = require('../../.'); -describe('Bugs', function() { +describe('Bugs', function () { - before(function(done){ - agent.start(done); - }); + before(function (done) { + agent.start(done); + }); - after(function(done) { - utils.cleanBBDD(function() { - agent.stop(done); - } ); + after(function (done) { + utils.cleanBBDD(function () { + agent.stop(done); }); + }); - beforeEach(function(done) { + beforeEach(function (done) { utils.cleanBBDD(done); }); - it('should return empty data (priority is not considered)', function(done) { + it('should return empty data (priority is not considered)', function (done) { var transID = 'fake'; var modifiedData = { @@ -30,40 +30,40 @@ describe('Bugs', function() { async.series([ - function(callback) { + function (callback) { - utils.putTransaction(transID, modifiedData, function(err, response, data) { + utils.putTransaction(transID, modifiedData, function (err, response, data) { - should.not.exist(err); - response.statusCode.should.be.equal(200); - data.data.should.be.equal('empty data'); + should.not.exist(err); + response.statusCode.should.be.equal(200); + data.data.should.be.equal('empty data'); - callback(); - }); - }, + callback(); + }); + }, - function(callback) { + function (callback) { - utils.getTransState(transID, function(err, response, data) { + utils.getTransState(transID, function (err, response, data) { - should.not.exist(err); - response.statusCode.should.be.equal(200); - should.not.exist(data.data); + should.not.exist(err); + response.statusCode.should.be.equal(200); + should.not.exist(data.data); - callback(); - }); - } + callback(); + }); + } ], done); }); - it('should return errors (does not exist [id])', function(done) { + it('should return errors (does not exist [id])', function (done) { var transID = 'false'; - var modifyTrans = function(payload, cb) { + var modifyTrans = function (payload, cb) { - utils.putTransaction(transID, {expirationDate: 2147483645}, function(err, response, data) { + utils.putTransaction(transID, {expirationDate: 2147483645}, function (err, response, data) { should.not.exist(err); response.statusCode.should.be.equal(400); @@ -73,9 +73,9 @@ describe('Bugs', function() { }); } - var checkState = function(cb) { + var checkState = function (cb) { - utils.getTransState(transID, function(err, response, data) { + utils.getTransState(transID, function (err, response, data) { should.not.exist(err); response.statusCode.should.be.equal(200); @@ -86,23 +86,25 @@ describe('Bugs', function() { } async.series([ - modifyTrans.bind({}, {expirationDate: 2147483645}), - checkState, - modifyTrans.bind({}, {payload: 'hello'}), - checkState - ], done); + modifyTrans.bind({}, {expirationDate: 2147483645}), + checkState, + modifyTrans.bind({}, {payload: 'hello'}), + checkState + ], done); }); - it('Invalid Content-Type creating a transaction', function(done) { + it('Invalid Content-Type creating a transaction', function (done) { - var trans = utils.createTransaction('Message', 'H', [ { 'id': 'q1' } ]); + var trans = utils.createTransaction('Message', 'H', [ + { 'id': 'q1' } + ]); var heads = {}; var options = { host: config.hostname, port: config.port, path: '/trans/', method: 'POST', headers: heads}; var transParsed = JSON.stringify(trans); - utils.makeRequest(options, transParsed, function(error, response, data) { + utils.makeRequest(options, transParsed, function (error, response, data) { response.statusCode.should.be.equal(400); should.not.exist(error); @@ -116,13 +118,16 @@ describe('Bugs', function() { }); - it('Invalid Content-Type modifying a transaction', function(done) { + it('Invalid Content-Type modifying a transaction', function (done) { - var QUEUES = [ { 'id': 'q1' }, { 'id': 'q2' } ]; - var trans = utils.createTransaction('Test', 'H', QUEUES, Math.round(new Date().getTime() / 1000 + 2), + var QUEUES = [ + { 'id': 'q1' }, + { 'id': 'q2' } + ]; + var trans = utils.createTransaction('Test', 'H', QUEUES, Math.round(new Date().getTime() / 1000 + 2), 'http://telefonica.com'); - utils.pushTransaction(trans, function(error, response, data) { + utils.pushTransaction(trans, function (error, response, data) { response.statusCode.should.be.equal(200); should.not.exist(error); @@ -140,7 +145,7 @@ describe('Bugs', function() { path: '/trans/' + id, method: 'PUT', headers: heads}; var contentModifiedParsed = JSON.stringify(contentModified); - utils.makeRequest(options, contentModifiedParsed, function(error, response, data) { + utils.makeRequest(options, contentModifiedParsed, function (error, response, data) { response.statusCode.should.be.equal(400); should.not.exist(error); @@ -154,12 +159,14 @@ describe('Bugs', function() { }); }); - it('Queue state in a transaction should be \'Delivered\' when the queue has been popped', function(done) { + it('Queue state in a transaction should be \'Delivered\' when the queue has been popped', function (done) { var QUEUE_ID = 'q0', MESSAGE = 'MESSAGE 1', transID; - var transaction = utils.createTransaction(MESSAGE, 'H', [ { 'id': QUEUE_ID } ]); + var transaction = utils.createTransaction(MESSAGE, 'H', [ + { 'id': QUEUE_ID } + ]); - utils.pushTransaction(transaction, function(error, response, data) { + utils.pushTransaction(transaction, function (error, response, data) { response.statusCode.should.be.equal(200); should.not.exist(error); @@ -167,11 +174,11 @@ describe('Bugs', function() { //Check queue state before pop - checkState(transID, 'Pending', function() { + checkState(transID, 'Pending', function () { //Pop - popQueue(function() { + popQueue(function () { //Check queue state after pop - checkState(transID, 'Delivered', function() { + checkState(transID, 'Delivered', function () { done(); }); }); @@ -180,7 +187,7 @@ describe('Bugs', function() { function popQueue(cb) { - utils.pop(QUEUE_ID, function(error, response, data) { + utils.pop(QUEUE_ID, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -197,7 +204,7 @@ describe('Bugs', function() { function checkState(id, expectedState, cb) { - utils.getTransState(id, expectedState, function(error, response, data) { + utils.getTransState(id, expectedState, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); diff --git a/test/unit/callbackTest.js b/test/unit/callbackTest.js index 496fe72..25691c8 100644 --- a/test/unit/callbackTest.js +++ b/test/unit/callbackTest.js @@ -12,23 +12,22 @@ var PAYLOAD = 'TEST MESSAGE'; var QUEUES = ['q1', 'q2']; - function createServer(timeOut, onConnected, cb) { var messages = []; - setTimeout(function() { + setTimeout(function () { cb(null, messages); }, timeOut); - return http.createServer(function(req, res) { + return http.createServer(function (req, res) { var content = '', headers = req.headers, method = req.method; - req.on('data', function(chunk) { + req.on('data', function (chunk) { content += chunk; }); - req.on('end', function() { + req.on('end', function () { res.writeHead(200, headers); res.end(content); @@ -39,7 +38,7 @@ function createServer(timeOut, onConnected, cb) { }).listen(CALLBACK_PORT, onConnected); }; -describe('Callback Test', function() { +describe('Callback Test', function () { var id, srv, trans; @@ -56,22 +55,25 @@ describe('Callback Test', function() { } }; - before(function(done){ + before(function (done) { agent.start(done); }); - after(function(done) { - utils.cleanBBDD(function() { + after(function (done) { + utils.cleanBBDD(function () { agent.stop(done); }); }); - beforeEach(function(done) { + beforeEach(function (done) { - trans = utils.createTransaction(PAYLOAD, 'H', [ { 'id': QUEUES[0] },{ 'id': QUEUES[1] } ], null, CALLBACK); + trans = utils.createTransaction(PAYLOAD, 'H', [ + { 'id': QUEUES[0] }, + { 'id': QUEUES[1] } + ], null, CALLBACK); - utils.cleanBBDD(function() { - utils.pushTransaction(trans, function(error, response, data) { + utils.cleanBBDD(function () { + utils.pushTransaction(trans, function (error, response, data) { response.statusCode.should.be.equal(200); should.not.exist(error); @@ -84,18 +86,18 @@ describe('Callback Test', function() { }); }); - afterEach(function(done) { + afterEach(function (done) { srv.close(); utils.cleanBBDD(done); }); - it('Callback should be called on pop', function(done) { + it('Callback should be called on pop', function (done) { this.timeout(TIMEOUT * 2); - var pop = function() { + var pop = function () { for (var i = 0; i < QUEUES.length; i++) { - utils.pop(QUEUES[i], function(error, response, data) { + utils.pop(QUEUES[i], function (error, response, data) { data.should.have.property('ok', true); data.should.have.property('data'); @@ -108,18 +110,18 @@ describe('Callback Test', function() { } }; - srv = createServer(TIMEOUT, pop, function(err, messages) { + srv = createServer(TIMEOUT, pop, function (err, messages) { checkReceivedMessages(messages); done(); }); }); - it('Callback should not be called on peek', function(done) { + it('Callback should not be called on peek', function (done) { this.timeout(TIMEOUT * 2); - var peek = function() { + var peek = function () { for (var i = 0; i < QUEUES.length; i++) { - utils.peek(QUEUES[i], function(error, response, data) { + utils.peek(QUEUES[i], function (error, response, data) { data.should.have.property('ok', true); data.should.have.property('data'); @@ -132,19 +134,19 @@ describe('Callback Test', function() { } }; - srv = createServer(TIMEOUT, peek, function(err, messages) { + srv = createServer(TIMEOUT, peek, function (err, messages) { messages.length.should.be.equal(0); done(); }); }); - it('Callback should be called on subscription', function(done) { + it('Callback should be called on subscription', function (done) { this.timeout(TIMEOUT * 2); - var subscribe = function() { + var subscribe = function () { for (var i = 0; i < QUEUES.length; i++) { - utils.subscribe(1, QUEUES[i], function(error, messages) { + utils.subscribe(1, QUEUES[i], function (error, messages) { should.not.exist(error); messages.length.should.be.equal(1); @@ -158,7 +160,7 @@ describe('Callback Test', function() { } }; - srv = createServer(TIMEOUT, subscribe, function(err, messages) { + srv = createServer(TIMEOUT, subscribe, function (err, messages) { checkReceivedMessages(messages); //FIXME: Maybe a transaction should be inserted to unlock the blocking pop done(); @@ -166,39 +168,42 @@ describe('Callback Test', function() { }); }); -describe('Callback test on blocked request', function() { +describe('Callback test on blocked request', function () { var id, srv; - before(function(done){ + before(function (done) { agent.start(done); }); - after(function(done) { + after(function (done) { agent.stop(done); }); - afterEach(function(done) { + afterEach(function (done) { srv.close(); utils.cleanBBDD(done); }); - it('Callback should be called only once', function(done) { + it('Callback should be called only once', function (done) { this.timeout(5000); //Pop queue - var pop = function() { - var req = utils.popTimeout(QUEUES[0], 2000, function() { }); + var pop = function () { + var req = utils.popTimeout(QUEUES[0], 2000, function () { + }); //Timeout is required to ensure that the petition is received by PopBox - setTimeout(function() { + setTimeout(function () { //Cancel petition req.abort(); - var trans = utils.createTransaction(PAYLOAD, 'H', [ { 'id': QUEUES[0] } ], null, CALLBACK); + var trans = utils.createTransaction(PAYLOAD, 'H', [ + { 'id': QUEUES[0] } + ], null, CALLBACK); - utils.pushTransaction(trans, function(error, response, data) { + utils.pushTransaction(trans, function (error, response, data) { response.statusCode.should.be.equal(200); should.not.exist(error); @@ -206,7 +211,7 @@ describe('Callback test on blocked request', function() { data.should.have.property('data'); id = data.data; - utils.popTimeout(QUEUES[0], 1, function(error2P, response2P, data2P) { + utils.popTimeout(QUEUES[0], 1, function (error2P, response2P, data2P) { should.not.exist(error2P); @@ -226,7 +231,7 @@ describe('Callback test on blocked request', function() { }, 500); }; - srv = createServer(TIMEOUT, pop, function(err, messages) { + srv = createServer(TIMEOUT, pop, function (err, messages) { messages.length.should.be.equal(1); diff --git a/test/unit/groupsTest.js b/test/unit/groupsTest.js index d3d0288..5c15b2c 100644 --- a/test/unit/groupsTest.js +++ b/test/unit/groupsTest.js @@ -133,12 +133,37 @@ describe('Groups', function () { describe('When a message is posted to a group', function () { var publish; + var groupName = 'group2'; + var queues = ['A2', 'B2']; + + function checkQueue(transId, queue, done) { + var checkQueue = { + url: 'http://' + HOST + ':' + PORT + '/queue/' + queue + '/pop', + method: 'POST' + } + + request(checkQueue, function (error, response, body) { + response.statusCode.should.equal(200); + + var parsedBody = JSON.parse(body); + should.exist(parsedBody.data); + parsedBody.data.length.should.equal(1); + parsedBody.data.should.include(publish.json.payload); + parsedBody.transactions.length.should.equal(1); + parsedBody.transactions.should.include(transId); + + done(); + }); + } beforeEach(function (done) { var createGroup = { url: 'http://' + HOST + ':' + PORT + '/group', method: 'POST', - json: {} + json: { + name: groupName, + queues: queues + } }; publish = { @@ -148,42 +173,55 @@ describe('Groups', function () { 'payload': 'Published message', 'priority': 'H', 'callback': 'http://foo.bar', - 'queue': [ - ], 'groups': [ 'group2' ] } }; - createGroup.json.name = 'group1'; - createGroup.json.queues = ['A1', 'B1'] request(createGroup, function (error, response, body) { - createGroup.json.name = 'group2'; - createGroup.json.queues = ['A2', 'B2'] - request(createGroup, function (error, response, body) { - done(); - }); + done(); }); }); it('should publish to all the inboxes associated to the group', function (done) { request(publish, function (error, response, body) { + response.statusCode.should.equal(200); - var checkQueue = { - url: 'http://' + HOST + ':' + PORT + '/queue/B2/pop', - method: 'POST' + var transId = body.data; + var tests = []; + + for (var i = 0; i < queues.length; i++) { + tests.push(checkQueue.bind({}, transId, queues[i])); } - request(checkQueue, function (error, response, body) { - response.statusCode.should.equal(200); + async.parallel(tests, done); + + }); + }); + + + it('should publish to all the inboxes associated to the group and in the selected queues', function (done) { + var newQueue = 'C2'; + + publish.json.queue = [ + { id: newQueue } + ]; + request(publish, function (error, response, body) { + + response.statusCode.should.equal(200); + + var transId = body.data; + var tests = []; + + tests.push(checkQueue.bind({}, transId, newQueue)); + for (var i = 0; i < queues.length; i++) { + tests.push(checkQueue.bind({}, transId, queues[i])); + } + + async.parallel(tests, done); - var parsedBody = JSON.parse(body); - should.exist(parsedBody.data); - parsedBody.data.length.should.equal(1); - done(); - }); }); }); }); diff --git a/test/unit/inboxTest.js b/test/unit/inboxTest.js index 1e54a67..dcf6ffc 100755 --- a/test/unit/inboxTest.js +++ b/test/unit/inboxTest.js @@ -4,10 +4,10 @@ var http = require('http'); var utils = require('./../utils'); var agent = require('../../.'); -describe('Inbox', function() { +describe('Inbox', function () { - var insertTrans = function(trans, cb) { - utils.pushTransaction(trans, function(error, response, data) { + var insertTrans = function (trans, cb) { + utils.pushTransaction(trans, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -17,29 +17,32 @@ describe('Inbox', function() { }); } - beforeEach(function(done) { + beforeEach(function (done) { utils.cleanBBDD(done); }); - before(function(done){ - agent.start(done); + before(function (done) { + agent.start(done); }); - after(function(done) { - utils.cleanBBDD(function() { - agent.stop(done); - } ); + after(function (done) { + utils.cleanBBDD(function () { + agent.stop(done); + }); }); - it('Should return all the transactions', function(done) { + it('Should return all the transactions', function (done) { var MESSAGE_INDEX = 'Test ', N_TRANS = 2, - QUEUES = [ { 'id': 'q1' }, { 'id': 'q2' }], + QUEUES = [ + { 'id': 'q1' }, + { 'id': 'q2' } + ], insertTransFuncs = [], popQueueAndTestFuncs = []; - var popQueueAndTest = function(queue, cb) { - utils.pop(queue, function(error, response, data) { + var popQueueAndTest = function (queue, cb) { + utils.pop(queue, function (error, response, data) { should.not.exist(error); @@ -67,15 +70,15 @@ describe('Inbox', function() { //Insert two transactions in the queues async.series(insertTransFuncs, - function() { + function () { //Pop queues once the transactions have been pushed. Queues are tested to have the correct content async.parallel(popQueueAndTestFuncs, done); }); }); - it('Should return the high priority transaction', function(done) { + it('Should return the high priority transaction', function (done) { - var QUEUE = { 'id': 'q1' }, insertTransFuncs = []; + var QUEUE = { 'id': 'q1' }, insertTransFuncs = []; var transLow = utils.createTransaction('Low Priority', 'L', [ QUEUE ]); var transHigh = utils.createTransaction('High Priority', 'H', [ QUEUE ]); @@ -85,30 +88,30 @@ describe('Inbox', function() { async.parallel(insertTransFuncs, - function() { - utils.pop(QUEUE.id, 1, function(error, response, data) { - should.not.exist(error); + function () { + utils.pop(QUEUE.id, 1, function (error, response, data) { + should.not.exist(error); - data.should.not.have.property('error'); - data.should.have.property('ok'); - data.should.have.property('data'); - data.data.length.should.be.equal(1); - (data.data.pop()).should.be.equal('High Priority'); + data.should.not.have.property('error'); + data.should.have.property('ok'); + data.should.have.property('data'); + data.data.length.should.be.equal(1); + (data.data.pop()).should.be.equal('High Priority'); - done(); + done(); + }); }); - }); }); - it('Should return empty message - Transaction is expired', function(done) { + it('Should return empty message - Transaction is expired', function (done) { this.timeout(10000); - var QUEUE = { 'id': 'q1' }, insertTransFuncs = [], id; + var QUEUE = { 'id': 'q1' }, insertTransFuncs = [], id; var trans = utils.createTransaction('Low Priority', 'L', [ QUEUE ]); trans.expirationDate = Math.round(new Date().getTime() / 1000) - 5; - utils.pushTransaction(trans, function(error, response, data) { + utils.pushTransaction(trans, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -116,7 +119,7 @@ describe('Inbox', function() { id = data.data; - utils.pop(QUEUE.id, function(error, response, data) { + utils.pop(QUEUE.id, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -126,7 +129,7 @@ describe('Inbox', function() { if (data.transactions.length === 1) { //Garbage collector is disabled data.transactions.should.include(id); - data.data.length.should.be.equal(1); + data.data.length.should.be.equal(1); should.not.exist(data.data.pop()); } else { //Garbage collection is enabled data.transactions.length.should.be.equal(0); @@ -140,25 +143,26 @@ describe('Inbox', function() { }); }); - it('Transaction should be popped on the second pop', function(done) { + it('Transaction should be popped on the second pop', function (done) { this.timeout(5000); - var QUEUE = { 'id': 'q1' }; + var QUEUE = { 'id': 'q1' }; var MESSAGE = 'LOW PRIORITY MESSAGE!'; var trans = utils.createTransaction(MESSAGE, 'L', [ QUEUE ]); //Pop queue q0 - var req = utils.popTimeout(QUEUE.id, 2000, function() { }); + var req = utils.popTimeout(QUEUE.id, 2000, function () { + }); //Timeout is required to ensure that the petition is received by PopBox - setTimeout(function() { + setTimeout(function () { //Cancel petition req.abort(); //Insert the transaction when pop finish - insertTrans(trans, function(err, id) { + insertTrans(trans, function (err, id) { - utils.popTimeout(QUEUE.id, 1, function(error2P, response2P, data2P) { + utils.popTimeout(QUEUE.id, 1, function (error2P, response2P, data2P) { should.not.exist(error2P); @@ -179,17 +183,17 @@ describe('Inbox', function() { }, 500); }); - var testTimeOut = function(timeToInsert, timeToWait, done) { + var testTimeOut = function (timeToInsert, timeToWait, done) { 'use strict'; var MESSAGE = 'Test timeout'; - var QUEUE = { 'id': 'q1' } + var QUEUE = { 'id': 'q1' } var trans = utils.createTransaction('Test timeout', 'L', [ QUEUE ]); async.parallel([ - function(cb) { - utils.popTimeout(QUEUE.id, timeToWait, function(error, response, data) { + function (cb) { + utils.popTimeout(QUEUE.id, timeToWait, function (error, response, data) { should.not.exist(error); data.should.not.have.property('error'); @@ -207,20 +211,20 @@ describe('Inbox', function() { }); }, - function(cb) { - setTimeout(function() { + function (cb) { + setTimeout(function () { insertTrans(trans, cb); }, timeToInsert * 1000); } ], done); }; - it('Should return empty data (timeout)', function(done) { + it('Should return empty data (timeout)', function (done) { this.timeout(5000); //Mocha timeout testTimeOut(3, 1, done); }); - it('Should not return empty data (timeout)', function(done) { + it('Should not return empty data (timeout)', function (done) { this.timeout(5000); //Mocha timeout testTimeOut(1, 3, done); }); diff --git a/test/unit/invalidContent.js b/test/unit/invalidContent.js index 8f8d3d7..3d8e034 100644 --- a/test/unit/invalidContent.js +++ b/test/unit/invalidContent.js @@ -3,23 +3,23 @@ var async = require('async'); var utils = require('./../utils.js'); var agent = require('../../.'); -describe('Invalid Data in JSON', function() { +describe('Invalid Data in JSON', function () { - before(function(done){ - agent.start(done); + before(function (done) { + agent.start(done); }); - after(function(done) { - utils.cleanBBDD(function() { + after(function (done) { + utils.cleanBBDD(function () { agent.stop(done); }); }); - var executeTest = function(trans, expectedErrors, done) { + var executeTest = function (trans, expectedErrors, done) { 'use strict'; - utils.pushTransaction(trans, function(error, response, data) { + utils.pushTransaction(trans, function (error, response, data) { response.statusCode.should.be.equal(400); should.not.exist(error); @@ -34,45 +34,59 @@ describe('Invalid Data in JSON', function() { }); } - it('Invalid Priority', function(done) { - var trans = utils.createTransaction('Message', 'M', [{ 'id': 'q1' }, { 'id': 'q2' }]); + it('Invalid Priority', function (done) { + var trans = utils.createTransaction('Message', 'M', [ + { 'id': 'q1' }, + { 'id': 'q2' } + ]); executeTest(trans, ['invalid priority'], done); }); - it('Undefined Priority', function(done) { - var trans = utils.createTransaction('Message', 'H', [{ 'id': 'q1' }, { 'id': 'q2' }]); + it('Undefined Priority', function (done) { + var trans = utils.createTransaction('Message', 'H', [ + { 'id': 'q1' }, + { 'id': 'q2' } + ]); delete trans.priority; executeTest(trans, ['undefined priority'], done); }); - it('Undefined Priority and Payload', function(done) { - var trans = utils.createTransaction('Message', 'H', [{ 'id': 'q1' }, { 'id': 'q2' }]); + it('Undefined Priority and Payload', function (done) { + var trans = utils.createTransaction('Message', 'H', [ + { 'id': 'q1' }, + { 'id': 'q2' } + ]); delete trans.payload delete trans.priority; executeTest(trans, ['undefined priority', 'undefined payload'], done); }); - it('Invalid queue', function(done) { + it('Invalid queue', function (done) { var trans = utils.createTransaction('Message', 'H', { 'id': 'q1' }); executeTest(trans, ['invalid queue type'], done); }); - it('Undefined queue', function(done) { - var trans = utils.createTransaction('Message', 'H', [{ 'id': 'q1' }]); + it('Undefined queue', function (done) { + var trans = utils.createTransaction('Message', 'H', [ + { 'id': 'q1' } + ]); delete trans.queue; executeTest(trans, ['undefined queue'], done); }); - it('Invalid Queue Element', function(done) { + it('Invalid Queue Element', function (done) { - var trans = utils.createTransaction('Message', 'H', [{ 'identifier': 'q1' }, { 'id': 'q2' }]); + var trans = utils.createTransaction('Message', 'H', [ + { 'identifier': 'q1' }, + { 'id': 'q2' } + ]); executeTest(trans, ['invalid queue element'], done); }); - it('too many queues', function(done) { + it('too many queues', function (done) { var queues = []; - for (var i = 0; i < 10001; i++){ + for (var i = 0; i < 10001; i++) { queues.push({id: 'q' + i}); } @@ -80,31 +94,42 @@ describe('Invalid Data in JSON', function() { executeTest(trans, ['too many queues: maximum 10000'], done); }); - it('Undefined Payload', function(done) { - var trans = utils.createTransaction('Message', 'H', [{ 'id': 'q1' }, { 'id': 'q2' }]); + it('Undefined Payload', function (done) { + var trans = utils.createTransaction('Message', 'H', [ + { 'id': 'q1' }, + { 'id': 'q2' } + ]); delete trans.payload; executeTest(trans, ['undefined payload'], done); }); - it('Payload is too big', function(done) { + it('Payload is too big', function (done) { var payload = ''; - while(payload.length < 1024 * 1024 + 5) { + while (payload.length < 1024 * 1024 + 5) { payload += 'a'; } - var trans = utils.createTransaction(payload, 'H', [{ 'id': 'q1' }, { 'id': 'q2' }]); + var trans = utils.createTransaction(payload, 'H', [ + { 'id': 'q1' }, + { 'id': 'q2' } + ]); executeTest(trans, ['payload greater than 1048576'], done); }); - it('Invalid Expiration Date (it isn\'t a number)', function(done) { - var trans = utils.createTransaction('MSG', 'H', [{ 'id': 'q1' }, { 'id': 'q2' }], 'tef', 'http://foo.bar'); + it('Invalid Expiration Date (it isn\'t a number)', function (done) { + var trans = utils.createTransaction('MSG', 'H', [ + { 'id': 'q1' }, + { 'id': 'q2' } + ], 'tef', 'http://foo.bar'); executeTest(trans, ['expirationDate is not a number'], done); }); - it('Invalid Expiration Date (out of range)', function(done) { + it('Invalid Expiration Date (out of range)', function (done) { var expDate = 2147483647 + 5000; - var trans = utils.createTransaction('MSG', 'H', [{ 'id': 'q1' }], expDate, 'http://foo.bar'); + var trans = utils.createTransaction('MSG', 'H', [ + { 'id': 'q1' } + ], expDate, 'http://foo.bar'); executeTest(trans, ['expirationDate out of range'], done); }); }); diff --git a/test/unit/peekTest.js b/test/unit/peekTest.js index adbc696..117e782 100644 --- a/test/unit/peekTest.js +++ b/test/unit/peekTest.js @@ -8,19 +8,19 @@ var N_TRANS = 5; var QUEUE_NAME = 'peekQueue'; var MESSAGE_INDEX = 'Message '; -var checkTrans = function(ids, transactionsReceived) { +var checkTrans = function (ids, transactionsReceived) { 'use strict' transactionsReceived.length.should.be.equal(ids.length); - for (var i = 0; i < ids.length; i++){ + for (var i = 0; i < ids.length; i++) { transactionsReceived.should.include(ids[i]); } } -var retrieveAllTranstactions = function(ids, done) { +var retrieveAllTranstactions = function (ids, done) { 'use strict'; - utils.peek(QUEUE_NAME, function(error, response, data) { + utils.peek(QUEUE_NAME, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -35,7 +35,7 @@ var retrieveAllTranstactions = function(ids, done) { for (var i = 0; i < N_TRANS; i++) { data.data.should.include(MESSAGE_INDEX + i); - utils.getTransState(ids[i], 'Pending', function(error, response, data) { + utils.getTransState(ids[i], 'Pending', function (error, response, data) { should.not.exist(error); data.should.have.property('queues'); @@ -51,10 +51,10 @@ var retrieveAllTranstactions = function(ids, done) { }); }; -var retrieveSomeTransactions = function(ids, done) { +var retrieveSomeTransactions = function (ids, done) { 'use strict'; - utils.peek(QUEUE_NAME, function(error, response, data) { + utils.peek(QUEUE_NAME, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -73,9 +73,9 @@ var retrieveSomeTransactions = function(ids, done) { }); }; -var afterAll = function(done) { +var afterAll = function (done) { - utils.getQueueState(QUEUE_NAME, function(error, response, data) { + utils.getQueueState(QUEUE_NAME, function (error, response, data) { //Test that pop date hasn't be modified should.not.exist(data.lastPop); //Test that the queue has the 5 transactions @@ -86,20 +86,22 @@ var afterAll = function(done) { }); }; -describe('Peek from High Priority Queue', function() { +describe('Peek from High Priority Queue', function () { var ids = new Array(N_TRANS); - before(function(done) { + before(function (done) { - agent.start(function() { - utils.cleanBBDD(function(){ + agent.start(function () { + utils.cleanBBDD(function () { var completed = 0; for (var i = 0; i < N_TRANS; i++) { - var trans = utils.createTransaction(MESSAGE_INDEX + i, 'H', [{ 'id': QUEUE_NAME }]); - utils.pushTransaction(trans, function(err, response, data) { + var trans = utils.createTransaction(MESSAGE_INDEX + i, 'H', [ + { 'id': QUEUE_NAME } + ]); + utils.pushTransaction(trans, function (err, response, data) { should.not.exist(err); data.should.have.property('data'); @@ -115,19 +117,19 @@ describe('Peek from High Priority Queue', function() { }); }); - after(function(done) { - afterAll(function() { + after(function (done) { + afterAll(function () { agent.stop(done); }); }); it('Should retrieve all the messages and trans' + - ' state should not change', function(done) { + ' state should not change', function (done) { retrieveAllTranstactions(ids, done); }); - it('Should retrieve 3 messages', function(done) { + it('Should retrieve 3 messages', function (done) { var idsToRetrive = []; for (var i = 0; i < 3; i++) { idsToRetrive.push(ids[i]); @@ -138,20 +140,22 @@ describe('Peek from High Priority Queue', function() { }); -describe('Peek from Low Priority Queue', function() { +describe('Peek from Low Priority Queue', function () { var ids = new Array(N_TRANS); - before(function(done) { + before(function (done) { - agent.start(function() { - utils.cleanBBDD(function() { + agent.start(function () { + utils.cleanBBDD(function () { var completed = 0; for (var i = 0; i < N_TRANS; i++) { - var trans = utils.createTransaction(MESSAGE_INDEX + i, 'L', [{ 'id': QUEUE_NAME }]); - utils.pushTransaction(trans, function(err, response, data) { + var trans = utils.createTransaction(MESSAGE_INDEX + i, 'L', [ + { 'id': QUEUE_NAME } + ]); + utils.pushTransaction(trans, function (err, response, data) { data.should.have.property('data'); ids[completed] = data.data; @@ -166,18 +170,18 @@ describe('Peek from Low Priority Queue', function() { }); }); - after(function(done) { - afterAll(function() { + after(function (done) { + afterAll(function () { agent.stop(done); }); }); it('Should retrieve all the messages and trans' + - ' state should not change', function(done) { + ' state should not change', function (done) { retrieveAllTranstactions(ids, done); }); - it('Should retrieve 4 messages', function(done) { + it('Should retrieve 4 messages', function (done) { var idsToRetrive = []; for (var i = 0; i < 4; i++) { idsToRetrive.push(ids[i]); @@ -188,21 +192,21 @@ describe('Peek from Low Priority Queue', function() { }); -describe('Peek from High and Low Priority Queue', function() { +describe('Peek from High and Low Priority Queue', function () { var ids = []; var idsH = []; var idsL = []; - before(function(done) { + before(function (done) { - agent.start(function() { - utils.cleanBBDD(function() { + agent.start(function () { + utils.cleanBBDD(function () { var pushTransFuncs = []; - var pushTrans = function(trans, cb) { - utils.pushTransaction(trans, function(err, response, data) { + var pushTrans = function (trans, cb) { + utils.pushTransaction(trans, function (err, response, data) { data.should.have.property('data'); ids.push(data.data); @@ -219,7 +223,9 @@ describe('Peek from High and Low Priority Queue', function() { } for (var i = 0; i < N_TRANS; i++) { - var trans = utils.createTransaction(MESSAGE_INDEX + i, (i % 2 === 0) ? 'H' : 'L', [{ 'id': QUEUE_NAME }]); + var trans = utils.createTransaction(MESSAGE_INDEX + i, (i % 2 === 0) ? 'H' : 'L', [ + { 'id': QUEUE_NAME } + ]); pushTransFuncs.push(pushTrans.bind({}, trans)); } @@ -228,22 +234,22 @@ describe('Peek from High and Low Priority Queue', function() { }); }); - after(function(done) { - afterAll(function() { + after(function (done) { + afterAll(function () { agent.stop(done); }); }); it('Should retrieve all the messages and trans' + - ' state should not change', function(done) { + ' state should not change', function (done) { retrieveAllTranstactions(ids, done); }); - it('Should retrieve all the messages with high priority', function(done) { + it('Should retrieve all the messages with high priority', function (done) { var N_PETS = 3; - utils.peek(QUEUE_NAME, N_PETS, function(error, response, data) { + utils.peek(QUEUE_NAME, N_PETS, function (error, response, data) { response.statusCode.should.be.equal(200); data.should.have.property('data'); @@ -261,11 +267,11 @@ describe('Peek from High and Low Priority Queue', function() { }); it('Should retrieve all the messages with high priority' + - ' and some with low priority', function(done) { + ' and some with low priority', function (done) { var N_PETS = 4; - utils.peek(QUEUE_NAME, N_PETS, function(error, response, data) { + utils.peek(QUEUE_NAME, N_PETS, function (error, response, data) { response.statusCode.should.be.equal(200); data.should.have.property('data'); @@ -274,7 +280,7 @@ describe('Peek from High and Low Priority Queue', function() { data.should.have.property('transactions'); var idsToCheck = idsH, j = 0; - while(idsToCheck.length !== N_PETS) { + while (idsToCheck.length !== N_PETS) { idsToCheck.push(idsL[j++]); } @@ -290,11 +296,11 @@ describe('Peek from High and Low Priority Queue', function() { }); it('Should retrieve all the messages even if max is higher' + - ' that the number of transactions in the queue', function(done) { + ' that the number of transactions in the queue', function (done) { var N_PETS = 8; - utils.peek(QUEUE_NAME, N_PETS, function(error, response, data) { + utils.peek(QUEUE_NAME, N_PETS, function (error, response, data) { response.statusCode.should.be.equal(200); data.should.have.property('data'); @@ -313,23 +319,23 @@ describe('Peek from High and Low Priority Queue', function() { }); }); -describe('Peek - Generic tests', function() { +describe('Peek - Generic tests', function () { - before(function(done) { - agent.start(function() { + before(function (done) { + agent.start(function () { utils.cleanBBDD(done); }); }); - after(function(done) { + after(function (done) { agent.stop(done); }); - it('Should return an empty response immediately when the queue is empty', function(done) { + it('Should return an empty response immediately when the queue is empty', function (done) { this.timeout(1000); - utils.peek(QUEUE_NAME, function(error, response, data) { + utils.peek(QUEUE_NAME, function (error, response, data) { response.statusCode.should.be.equal(200); data.should.have.property('data'); data.data.length.should.be.equal(0); @@ -338,13 +344,13 @@ describe('Peek - Generic tests', function() { }); }); - it('Should return empty message - Transaction is expired', function(done) { + it('Should return empty message - Transaction is expired', function (done) { - var QUEUE = { 'id': 'q1' }, insertTransFuncs = [], id; + var QUEUE = { 'id': 'q1' }, insertTransFuncs = [], id; var trans = utils.createTransaction('Low Priority', 'L', [ QUEUE ]); trans.expirationDate = Math.round(new Date().getTime() / 1000) - 5; - utils.pushTransaction(trans, function(error, response, data) { + utils.pushTransaction(trans, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -352,7 +358,7 @@ describe('Peek - Generic tests', function() { id = data.data; - utils.peek(QUEUE.id, function(error, response, data) { + utils.peek(QUEUE.id, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -362,7 +368,7 @@ describe('Peek - Generic tests', function() { data.should.have.property('data'); if (data.transactions.length === 1) { //Garbage collector is disabled data.transactions.should.include(id); - data.data.length.should.be.equal(1); + data.data.length.should.be.equal(1); should.not.exist(data.data.pop()); } else { //Garbage collector is enabled data.transactions.length.should.be.equal(0); diff --git a/test/unit/provisionTest.js b/test/unit/provisionTest.js index 853b256..014781e 100644 --- a/test/unit/provisionTest.js +++ b/test/unit/provisionTest.js @@ -4,30 +4,33 @@ var utils = require('./../utils.js'); var agent = require('../../.'); -describe('Provision', function() { +describe('Provision', function () { var id; var payload = "{\"spanish\": \"prueba1\", \"english\": \"test1\", \"to\": \"Mr Lopez\"}"; var callback = 'http://foo.bar'; var priority = 'H'; - var queues = [ { 'id': 'q1' }, { 'id': 'q2' } ] + var queues = [ + { 'id': 'q1' }, + { 'id': 'q2' } + ] - before(function(done){ + before(function (done) { agent.start(done); }); - after(function(done) { - utils.cleanBBDD(function() { - agent.stop(done); - }); + after(function (done) { + utils.cleanBBDD(function () { + agent.stop(done); }); + }); - beforeEach(function(done) { + beforeEach(function (done) { - var trans = utils.createTransaction(payload, priority, queues, Math.round(new Date().getTime() / 1000 + 2), + var trans = utils.createTransaction(payload, priority, queues, Math.round(new Date().getTime() / 1000 + 2), callback); - utils.pushTransaction(trans, function(error, response, data) { + utils.pushTransaction(trans, function (error, response, data) { response.statusCode.should.be.equal(200); should.not.exist(error); @@ -40,26 +43,26 @@ describe('Provision', function() { }); }); - afterEach(function(done) { + afterEach(function (done) { utils.cleanBBDD(done); }); - it('Should return an empty response for expired transactions', function(done) { + it('Should return an empty response for expired transactions', function (done) { this.timeout(10000); //Mocha timeout //Transaction expires in two seconds, so in three seconds it will be expired - setTimeout(function() { - utils.getTransState(id, function(error, response, data) { + setTimeout(function () { + utils.getTransState(id, function (error, response, data) { data.should.eql({}); done(); }); }, 5000); }); - it('should retrieve the original transation', function(done) { + it('should retrieve the original transation', function (done) { - utils.getTransState(id, function(error, response, data) { + utils.getTransState(id, function (error, response, data) { data.should.have.property('payload'); data.should.have.property('callback'); data.should.have.property('priority'); @@ -72,17 +75,17 @@ describe('Provision', function() { }); }); - it('should retrieve an empty response for an non-existent transaction', function(done) { + it('should retrieve an empty response for an non-existent transaction', function (done) { - utils.getTransState('fake_trans', function(error, response, data) { + utils.getTransState('fake_trans', function (error, response, data) { data.should.eql({}); done(); }); }); - it('transaction should be in two queues with \'Pending\' state', function(done) { + it('transaction should be in two queues with \'Pending\' state', function (done) { - utils.getTransState(id, 'Pending', function(error, response, data) { + utils.getTransState(id, 'Pending', function (error, response, data) { data.should.have.property('queues'); diff --git a/test/unit/putTest.js b/test/unit/putTest.js index 8c59faf..e58b448 100644 --- a/test/unit/putTest.js +++ b/test/unit/putTest.js @@ -3,17 +3,16 @@ var async = require('async'); var utils = require('./../utils'); var agent = require('../../.'); -describe('PUT', function() { +describe('PUT', function () { var id, trans; - var modifyTransAndCheckStatus = function(modifiedData, errors, expectedPayload, expectedCallback, - expectedTimeOut, done) { + var modifyTransAndCheckStatus = function (modifiedData, errors, expectedPayload, expectedCallback, expectedTimeOut, done) { async.series([ - function(callback) { - utils.putTransaction(id, modifiedData, function(error, response, data) { + function (callback) { + utils.putTransaction(id, modifiedData, function (error, response, data) { should.not.exist(error); @@ -29,9 +28,9 @@ describe('PUT', function() { }); }, - function(callback) { + function (callback) { - utils.getTransState(id, function(error, response, data) { + utils.getTransState(id, function (error, response, data) { response.statusCode.should.be.equal(200); data.should.have.property('payload'); @@ -49,14 +48,17 @@ describe('PUT', function() { ], done); } - beforeEach(function(done) { + beforeEach(function (done) { var payload = "{\"spanish\": \"prueba1\", \"english\":'\"test1\", \"to\": \"Mr Lopez\"}"; - trans = utils.createTransaction(payload, 'H', [ { 'id': 'q1' }, { 'id': 'q2' } ], + trans = utils.createTransaction(payload, 'H', [ + { 'id': 'q1' }, + { 'id': 'q2' } + ], Math.round(new Date().getTime() / 1000 + 2), 'http://foo.bar'); - utils.pushTransaction(trans, function(error, response, data) { + utils.pushTransaction(trans, function (error, response, data) { should.not.exist(error); data.should.have.property('data'); id = data.data; @@ -64,20 +66,20 @@ describe('PUT', function() { }); }); - before(function(done){ + before(function (done) { agent.start(done); }); - after(function(done) { - utils.cleanBBDD(function() { + after(function (done) { + utils.cleanBBDD(function () { agent.stop(done); }); }); - it('should change payload, callback and expirationDate', function(done) { + it('should change payload, callback and expirationDate', function (done) { var modifiedData = { - 'payload': 'MESSAGE1', + 'payload': 'MESSAGE1', 'callback': 'www.fi.upm.es', 'expirationDate': 1447483646 }; @@ -87,11 +89,11 @@ describe('PUT', function() { }); - it('should not change priority', function(done) { + it('should not change priority', function (done) { var modifiedData = { - 'payload': 'MESSAGE2', + 'payload': 'MESSAGE2', 'priority': 'L', 'expirationDate': 1447483646 }; diff --git a/test/unit/queueState.js b/test/unit/queueState.js index 82ba7a4..ca60d2c 100644 --- a/test/unit/queueState.js +++ b/test/unit/queueState.js @@ -5,8 +5,8 @@ var agent = require('../../.'); var queueID = 'q1'; -var checkState = function(expectedState, cb) { - utils.getQueueState('q1', function(err, response, data) { +var checkState = function (expectedState, cb) { + utils.getQueueState('q1', function (err, response, data) { should.not.exist(err); response.statusCode.should.be.equal(200); @@ -19,38 +19,40 @@ var checkState = function(expectedState, cb) { }); } -var pushTrans = function() { - var trans = utils.createTransaction('MESSAGE', 'L', [ {id: queueID} ]); - utils.pushTransaction(trans, function(err, response, data) { +var pushTrans = function () { + var trans = utils.createTransaction('MESSAGE', 'L', [ + {id: queueID} + ]); + utils.pushTransaction(trans, function (err, response, data) { should.not.exist(err); response.statusCode.should.be.equal(200); }); } -describe('Queue State', function() { +describe('Queue State', function () { - before(function(done){ + before(function (done) { agent.start(done); }); - after(function(done) { - utils.cleanBBDD(function() { + after(function (done) { + utils.cleanBBDD(function () { agent.stop(done); }); }); - beforeEach(function(done) { + beforeEach(function (done) { utils.cleanBBDD(done); }); - it ('Blocked is false when subscription or pop operations have not been called', function(done) { + it('Blocked is false when subscription or pop operations have not been called', function (done) { checkState(false, done); }); - it('Blocked is true when pop operations is being processed and false when is completed (trans is pushed)', function(done) { + it('Blocked is true when pop operations is being processed and false when is completed (trans is pushed)', function (done) { this.timeout(5000); - utils.pop(queueID, function(err, response, data) { + utils.pop(queueID, function (err, response, data) { should.not.exist(err); response.statusCode.should.be.equal(200); @@ -60,17 +62,17 @@ describe('Queue State', function() { checkState(false, done); }); - setTimeout(function() { + setTimeout(function () { checkState(true, pushTrans); }, 1000); }); - it('Blocked is true until the last pop ends', function(done) { + it('Blocked is true until the last pop ends', function (done) { this.timeout(5000); var firstPop = true; - var checkPop = function(err, response, data) { + var checkPop = function (err, response, data) { should.not.exist(err); response.statusCode.should.be.equal(200); @@ -92,15 +94,15 @@ describe('Queue State', function() { utils.pop(queueID, checkPop); utils.pop(queueID, checkPop); - setTimeout(function() { + setTimeout(function () { checkState(true, pushTrans); }, 1000) }); - it('Blocked is true when pop operations is being processed and false when is completed (timeout)', function(done) { + it('Blocked is true when pop operations is being processed and false when is completed (timeout)', function (done) { this.timeout(5000); - utils.popTimeout(queueID, 2, function(err, response, data) { + utils.popTimeout(queueID, 2, function (err, response, data) { should.not.exist(err); response.statusCode.should.be.equal(200); @@ -113,10 +115,10 @@ describe('Queue State', function() { setTimeout(checkState.bind({}, true), 1000); }); - it('Blocked on subscription and unblocked when subscription ends', function(done) { + it('Blocked on subscription and unblocked when subscription ends', function (done) { this.timeout(5000); - utils.subscribe(1, queueID, function(err, messages) { + utils.subscribe(1, queueID, function (err, messages) { should.not.exist(err); var msg = messages.pop(); @@ -127,18 +129,18 @@ describe('Queue State', function() { setTimeout(checkState.bind({}, false, done), 100); }); - setTimeout(function() { + setTimeout(function () { checkState(true, pushTrans); }, 1000); }); - it('Blocked until the last subscription ends', function(done) { + it('Blocked until the last subscription ends', function (done) { this.timeout(5000); var firstSubscription = true; - var checkSubscription = function(err, messages) { + var checkSubscription = function (err, messages) { should.not.exist(err); var msg = messages.pop(); @@ -160,7 +162,7 @@ describe('Queue State', function() { utils.subscribe(1, queueID, checkSubscription); utils.subscribe(1, queueID, checkSubscription); - setTimeout(function() { + setTimeout(function () { checkState(true, pushTrans); }, 1000) }); diff --git a/test/unit/secureQueues.js b/test/unit/secureQueues.js index 4684989..c23402a 100644 --- a/test/unit/secureQueues.js +++ b/test/unit/secureQueues.js @@ -42,15 +42,15 @@ var httpReq = function (options, content, cb) { delete options.headers['content-type']; } - var req = https.request(options, function(res) { + var req = https.request(options, function (res) { var content = ''; - res.on('data', function(chunk) { + res.on('data', function (chunk) { content += chunk; }); - res.on('end', function() { + res.on('end', function () { cb(null, res, content); }); }); @@ -62,50 +62,50 @@ var httpReq = function (options, content, cb) { req.end(); } -var postQueue = function(content, cb) { +var postQueue = function (content, cb) { var options = getOptions('POST', '/queue'); httpReq(options, content, cb); } -var pushTrans = function(trans, cb) { +var pushTrans = function (trans, cb) { var options = getOptions('POST', '/trans/'); httpReq(options, trans, cb); } -var get = function(queue, username, password, cb) { +var get = function (queue, username, password, cb) { var options = getOptions('GET', '/queue/' + queue, username, password); httpReq(options, cb); }; -var peek = function(queue, username, password, cb) { +var peek = function (queue, username, password, cb) { var options = getOptions('GET', '/queue/' + queue + '/peek', username, password); httpReq(options, cb); } -var pop = function(queue, username, password, cb) { +var pop = function (queue, username, password, cb) { var options = getOptions('POST', '/queue/' + queue + '/pop', username, password); httpReq(options, cb); } -var subscribe = function(nPets, queue, username, password, cb) { +var subscribe = function (nPets, queue, username, password, cb) { 'use strict'; var options = getOptions('POST', '/queue/' + queue + '/subscribe', username, password); delete options.headers['content-type']; - var req = https.request(options, function(res) { + var req = https.request(options, function (res) { var messages = []; res.setEncoding('utf8'); var content = ''; - res.on('data', function(chunk) { + res.on('data', function (chunk) { try { messages.push(JSON.parse(String(chunk))); - if (messages.length === nPets){ + if (messages.length === nPets) { req.abort(); } @@ -114,7 +114,7 @@ var subscribe = function(nPets, queue, username, password, cb) { } }); - res.on('end', function() { + res.on('end', function () { if (messages.length > 0) { cb(null, messages); } else { @@ -126,32 +126,34 @@ var subscribe = function(nPets, queue, username, password, cb) { req.end(); }; -describe('Secure Queues - GET', function() { +describe('Secure Queues - GET', function () { - before(function(done){ + before(function (done) { agent.start(done); }); - after(function(done) { - utils.cleanBBDD(function() { + after(function (done) { + utils.cleanBBDD(function () { agent.stop(done); }); }); - beforeEach(function(done) { - utils.cleanBBDD(function() { + beforeEach(function (done) { + utils.cleanBBDD(function () { //Create Queue var queue = { queue: QUEUE_ID, user: USERNAME, password: PASSWORD }; - postQueue(queue, function(err, res, data) { + postQueue(queue, function (err, res, data) { res.statusCode.should.be.equal(200); var data = JSON.parse(data); data.should.have.property('ok', true); //Feed the queue - var trans = utils.createTransaction(MESSAGE, 'L', [ {id: QUEUE_ID} ]); - pushTrans(trans, function(err, res, data) { + var trans = utils.createTransaction(MESSAGE, 'L', [ + {id: QUEUE_ID} + ]); + pushTrans(trans, function (err, res, data) { res.statusCode.should.be.equal(200); @@ -164,9 +166,9 @@ describe('Secure Queues - GET', function() { }); }); - it('Error is returned when an existing queue is recreated', function(done) { + it('Error is returned when an existing queue is recreated', function (done) { var queue = { queue: QUEUE_ID, user: 'usename2', password: 'password2' }; - postQueue(queue, function(err, res, data) { + postQueue(queue, function (err, res, data) { res.statusCode.should.be.equal(403); @@ -178,9 +180,9 @@ describe('Secure Queues - GET', function() { }) }); - it('GET non-existent secure queue', function(done) { + it('GET non-existent secure queue', function (done) { - get('newQueue', USERNAME, PASSWORD, function(err, res, data) { + get('newQueue', USERNAME, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(500); data.should.be.equal('ERROR: Secure Queue does not exist'); @@ -190,9 +192,9 @@ describe('Secure Queues - GET', function() { }); - it('GET queue - correct credentials', function(done) { + it('GET queue - correct credentials', function (done) { - get(QUEUE_ID, USERNAME, PASSWORD, function(err, res, data) { + get(QUEUE_ID, USERNAME, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(200); @@ -203,9 +205,9 @@ describe('Secure Queues - GET', function() { }); }); - it('GET queue - invalid pass', function(done) { + it('GET queue - invalid pass', function (done) { - get(QUEUE_ID, USERNAME, 'invalid' , function(err, res, data) { + get(QUEUE_ID, USERNAME, 'invalid', function (err, res, data) { res.statusCode.should.be.equal(401); data.should.be.equal('Unauthorized'); @@ -214,10 +216,10 @@ describe('Secure Queues - GET', function() { }); }); - it('GET queue - invalid username', function(done) { + it('GET queue - invalid username', function (done) { var user = 'invalid'; - get(QUEUE_ID, user, PASSWORD, function(err, res, data) { + get(QUEUE_ID, user, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(401); data.should.be.equal('Unauthorized'); @@ -226,9 +228,9 @@ describe('Secure Queues - GET', function() { }); }); - it ('PEEK non-existent secure queue', function(done) { + it('PEEK non-existent secure queue', function (done) { - peek('newQueue', USERNAME, PASSWORD, function(err, res, data) { + peek('newQueue', USERNAME, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(500); data.should.be.equal('ERROR: Secure Queue does not exist'); @@ -237,9 +239,9 @@ describe('Secure Queues - GET', function() { }); }); - it('PEEK queue - correct credentials', function(done) { + it('PEEK queue - correct credentials', function (done) { - peek(QUEUE_ID, USERNAME, PASSWORD, function(err, res, data) { + peek(QUEUE_ID, USERNAME, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(200); @@ -257,9 +259,9 @@ describe('Secure Queues - GET', function() { }); }); - it('PEEK queue - invalid pass', function(done) { + it('PEEK queue - invalid pass', function (done) { - peek(QUEUE_ID, USERNAME, 'invalid' , function(err, res, data) { + peek(QUEUE_ID, USERNAME, 'invalid', function (err, res, data) { res.statusCode.should.be.equal(401); data.should.be.equal('Unauthorized'); @@ -268,10 +270,10 @@ describe('Secure Queues - GET', function() { }); }); - it('PEEK queue - invalid username', function(done) { + it('PEEK queue - invalid username', function (done) { var user = 'invalid'; - peek(QUEUE_ID, user, PASSWORD, function(err, res, data) { + peek(QUEUE_ID, user, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(401); data.should.be.equal('Unauthorized'); @@ -280,9 +282,9 @@ describe('Secure Queues - GET', function() { }); }); - it ('POP non-existent secure queue', function(done) { + it('POP non-existent secure queue', function (done) { - pop('newQueue', USERNAME, PASSWORD, function(err, res, data) { + pop('newQueue', USERNAME, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(500); data.should.be.equal('ERROR: Secure Queue does not exist'); @@ -291,9 +293,9 @@ describe('Secure Queues - GET', function() { }); }); - it('POP queue - correct credentials', function(done) { + it('POP queue - correct credentials', function (done) { - pop(QUEUE_ID, USERNAME, PASSWORD, function(err, res, data) { + pop(QUEUE_ID, USERNAME, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(200); @@ -311,29 +313,29 @@ describe('Secure Queues - GET', function() { }); }); - it('POP queue - admin credentials', function(done) { + it('POP queue - admin credentials', function (done) { - pop(QUEUE_ID, "popbox", "itscool", function(err, res, data) { + pop(QUEUE_ID, "popbox", "itscool", function (err, res, data) { - res.statusCode.should.be.equal(200); + res.statusCode.should.be.equal(200); - var data = JSON.parse(data); - data.should.have.property('ok', true); + var data = JSON.parse(data); + data.should.have.property('ok', true); - data.should.have.property('data'); - data.data.should.include(MESSAGE); - data.data.length.should.be.equal(1); + data.should.have.property('data'); + data.data.should.include(MESSAGE); + data.data.length.should.be.equal(1); - data.transactions.should.include(transID); - data.transactions.length.should.be.equal(1); + data.transactions.should.include(transID); + data.transactions.length.should.be.equal(1); - done(); - }); + done(); }); + }); - it('POP queue - invalid pass', function(done) { + it('POP queue - invalid pass', function (done) { - pop(QUEUE_ID, USERNAME, 'invalid' , function(err, res, data) { + pop(QUEUE_ID, USERNAME, 'invalid', function (err, res, data) { res.statusCode.should.be.equal(401); data.should.be.equal('Unauthorized'); @@ -342,10 +344,10 @@ describe('Secure Queues - GET', function() { }); }); - it('POP queue - invalid username', function(done) { + it('POP queue - invalid username', function (done) { var user = 'invalid'; - pop(QUEUE_ID, user, PASSWORD, function(err, res, data) { + pop(QUEUE_ID, user, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(401); data.should.be.equal('Unauthorized'); @@ -354,9 +356,9 @@ describe('Secure Queues - GET', function() { }); }); - it ('SUBSCRIBE non-existent secure queue', function(done) { + it('SUBSCRIBE non-existent secure queue', function (done) { - subscribe(1, 'newQueue', USERNAME, PASSWORD, function(err, res, data) { + subscribe(1, 'newQueue', USERNAME, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(500); data.should.be.equal('ERROR: Secure Queue does not exist'); @@ -365,9 +367,9 @@ describe('Secure Queues - GET', function() { }); }); - it('SUBSCRIBE queue - correct credentials', function(done) { + it('SUBSCRIBE queue - correct credentials', function (done) { - subscribe(1, QUEUE_ID, USERNAME, PASSWORD, function(err, messages) { + subscribe(1, QUEUE_ID, USERNAME, PASSWORD, function (err, messages) { var message = messages.pop(); message.should.have.property('ok', true); @@ -382,27 +384,27 @@ describe('Secure Queues - GET', function() { done(); }); }); - it('SUBSCRIBE queue - admin credentials', function(done) { + it('SUBSCRIBE queue - admin credentials', function (done) { - subscribe(1, QUEUE_ID, "popbox", "itscool", function(err, messages) { + subscribe(1, QUEUE_ID, "popbox", "itscool", function (err, messages) { - var message = messages.pop(); - message.should.have.property('ok', true); + var message = messages.pop(); + message.should.have.property('ok', true); - message.should.have.property('data'); - message.data.should.include(MESSAGE); - message.data.length.should.be.equal(1); + message.should.have.property('data'); + message.data.should.include(MESSAGE); + message.data.length.should.be.equal(1); - message.transactions.should.include(transID); - message.transactions.length.should.be.equal(1); + message.transactions.should.include(transID); + message.transactions.length.should.be.equal(1); - done(); - }); + done(); }); + }); - it('SUBSCRIBE queue - invalid pass', function(done) { + it('SUBSCRIBE queue - invalid pass', function (done) { - subscribe(1, QUEUE_ID, USERNAME, 'invalid' , function(err, res, data) { + subscribe(1, QUEUE_ID, USERNAME, 'invalid', function (err, res, data) { res.statusCode.should.be.equal(401); data.should.be.equal('Unauthorized'); @@ -411,10 +413,10 @@ describe('Secure Queues - GET', function() { }); }); - it('SUBSCRIBE queue - invalid username', function(done) { + it('SUBSCRIBE queue - invalid username', function (done) { var user = 'invalid'; - subscribe(1, QUEUE_ID, user, PASSWORD, function(err, res, data) { + subscribe(1, QUEUE_ID, user, PASSWORD, function (err, res, data) { res.statusCode.should.be.equal(401); data.should.be.equal('Unauthorized'); diff --git a/test/unit/subscriptionTest.js b/test/unit/subscriptionTest.js index a642792..8dd86c2 100644 --- a/test/unit/subscriptionTest.js +++ b/test/unit/subscriptionTest.js @@ -3,11 +3,13 @@ var http = require('http'); var utils = require('./../utils.js'); var agent = require('../../.'); -var pushTransaction = function(queue, message, cb) { +var pushTransaction = function (queue, message, cb) { 'use strict'; - var transaction = utils.createTransaction(message, 'H', [{'id': queue}]); - utils.pushTransaction(transaction, function(error, response, data) { + var transaction = utils.createTransaction(message, 'H', [ + {'id': queue} + ]); + utils.pushTransaction(transaction, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -20,7 +22,7 @@ var pushTransaction = function(queue, message, cb) { function checkState(id, payload, queueID, expectedState, cb) { 'use strict'; - utils.getTransState(id, expectedState, function(error, response, data) { + utils.getTransState(id, expectedState, function (error, response, data) { should.not.exist(error); response.statusCode.should.be.equal(200); @@ -39,40 +41,40 @@ function checkState(id, payload, queueID, expectedState, cb) { }); }; -describe('Subscription Test', function() { +describe('Subscription Test', function () { - beforeEach(function(done) { + beforeEach(function (done) { utils.cleanBBDD(done); }); - before(function(done){ + before(function (done) { agent.start(done); }); - after(function(done) { - utils.cleanBBDD(function() { + after(function (done) { + utils.cleanBBDD(function () { agent.stop(done); }); }); - var normalSubscription = function(subscriber, done) { + var normalSubscription = function (subscriber, done) { var QUEUE_ID = 'subsQ', MESSAGE_PREFIX = 'message', N_PETS = 3, transactionIDList = []; //Subscribe to the queue - subscriber(N_PETS, QUEUE_ID, function(err, messages) { + subscriber(N_PETS, QUEUE_ID, function (err, messages) { var interval; should.not.exist(err); - var payloads = messages.map(function(msg) { + var payloads = messages.map(function (msg) { return msg && msg.data[0]; }); - var transactions = messages.map(function(msg) { + var transactions = messages.map(function (msg) { return msg && msg.transactions[0]; }); @@ -81,7 +83,7 @@ describe('Subscription Test', function() { } //It's necessary wait request to finish to check returned transactions - var testTransactionList = function() { + var testTransactionList = function () { if (transactionIDList.length === N_PETS) { clearInterval(interval); @@ -101,20 +103,20 @@ describe('Subscription Test', function() { //Insert transactions for (var i = 0; i < N_PETS; i++) { - pushTransaction(QUEUE_ID, MESSAGE_PREFIX + i, function(err, data) { + pushTransaction(QUEUE_ID, MESSAGE_PREFIX + i, function (err, data) { transactionIDList.push(data); }) } }; - var repush = function(subscriber, done) { + var repush = function (subscriber, done) { var QUEUE_ID = 'subsQ', MESSAGE = 'message', MESSAGE_PENDING = 'busy', transactionID, transactionIDPending; //Subscribe to the queue - subscriber(1, QUEUE_ID, function(err, messages) { + subscriber(1, QUEUE_ID, function (err, messages) { should.not.exist(err); @@ -127,15 +129,15 @@ describe('Subscription Test', function() { message['transactions'].should.include(transactionID); //Insert a new transaction - pushTransaction(QUEUE_ID, MESSAGE_PENDING, function(err, data) { + pushTransaction(QUEUE_ID, MESSAGE_PENDING, function (err, data) { transactionIDPending = data; //Check if the transaction is still queued //Timeout is needed because transaction needs to be repushed into the queue - setTimeout(function() { - checkState(transactionIDPending, MESSAGE_PENDING, QUEUE_ID, 'Pending', function() { - subscriber(1, QUEUE_ID, function(err, messages) { + setTimeout(function () { + checkState(transactionIDPending, MESSAGE_PENDING, QUEUE_ID, 'Pending', function () { + subscriber(1, QUEUE_ID, function (err, messages) { should.not.exist(err); var message = messages[0]; @@ -146,7 +148,7 @@ describe('Subscription Test', function() { message['transactions'].length.should.be.equal(1); message['transactions'].should.include(transactionIDPending); - checkState(transactionIDPending, MESSAGE_PENDING, QUEUE_ID, 'Delivered', function() { + checkState(transactionIDPending, MESSAGE_PENDING, QUEUE_ID, 'Delivered', function () { done(); }); }); @@ -156,33 +158,33 @@ describe('Subscription Test', function() { }); //Insert transaction - pushTransaction(QUEUE_ID, MESSAGE, function(err, data) { + pushTransaction(QUEUE_ID, MESSAGE, function (err, data) { transactionID = data; }); } - describe('HTTP', function() { + describe('HTTP', function () { - it('Should receive all transaction in less than two seconds', function(done) { + it('Should receive all transaction in less than two seconds', function (done) { normalSubscription(utils.subscribe, done); }); - it('When connection is closed, no transactions can be missed', function(done) { + it('When connection is closed, no transactions can be missed', function (done) { repush(utils.subscribe, done); }); }); - describe('Socket IO', function() { + describe('Socket IO', function () { - var subscriber = function(N_PETS, QUEUE_ID, cb) { + var subscriber = function (N_PETS, QUEUE_ID, cb) { var messages = []; var iosocket = require('socket.io-client').connect('http://localhost:3001', {'force new connection': true}); - iosocket.on('connect', function(data) { + iosocket.on('connect', function (data) { iosocket.emit('subscribe', QUEUE_ID); }); - iosocket.on('data', function(data) { + iosocket.on('data', function (data) { messages.push(data); if (messages.length === N_PETS) { iosocket.disconnect(); @@ -191,11 +193,11 @@ describe('Subscription Test', function() { }); } - it('Should receive all transaction in less than two seconds', function(done) { + it('Should receive all transaction in less than two seconds', function (done) { normalSubscription(subscriber, done); }); - it('When connection is closed, no transactions can be missed', function(done) { + it('When connection is closed, no transactions can be missed', function (done) { repush(subscriber, done); }); diff --git a/utils/ack.js b/utils/ack.js new file mode 100644 index 0000000..1f31692 --- /dev/null +++ b/utils/ack.js @@ -0,0 +1,41 @@ +#!/usr/bin/env node + +'use strict'; + +var program = require('commander'), + request = require('request'), + util = require('util'), + i, + url, + trans; + +program + .version('0.0.1') + .option('-H, --host [hostname]', 'host, \'localhost\' by default', 'localhost') + .option('-P, --port [number]', 'port, 3001 by default', 3001, parseInt) + .option('-Q, --queue [id]', 'queue', "Q1") + .option('-T, --trans [list]', 'list of transactions separated by comma', list) + .option('-X, --secure', 'use HTTPS', false) + .parse(process.argv); +url = util.format('%s://%s:%d/queue/%s/ack', program.secure ? 'https' : 'http', program.host, program.port, program.queue); +trans = { + 'transactions': program.trans +}; + +console.log('url\n', url); +console.log('trans\n', trans); +request.post({url: url, json: trans}, function (err, res, body) { + if (err) { + console.log('error\n', err); + } else { + console.log('statusCode\n', res.statusCode); + console.log('headers\n', res.headers); + console.log('body\n', body); + } +}); +function range(val) { + return val.split('..').map(Number); +} +function list(val) { + return val.split(','); +} diff --git a/utils/createSecure.js b/utils/createSecure.js new file mode 100755 index 0000000..b65cf49 --- /dev/null +++ b/utils/createSecure.js @@ -0,0 +1,42 @@ +#!/usr/bin/env node + +'use strict'; + +var program = require('commander'), + request = require('request'), + util = require('util'), + i, + url, + data; + +program + .version('0.0.1') + .option('-H, --host [hostname]', 'host, \'localhost\' by default', 'localhost') + .option('-P, --port [number]', 'port, 3002 by default', 3002, parseInt) + .option('-Q, --queue [id]', 'queue', "Q1") + .option('-U, --user [id:passwd]', 'username', 'popbox:itscool') + .parse(process.argv); +url = util.format('https://%s:%d/queue', program.host, program.port); +data = { + queue: program.queue, + user: program.user.split(":")[0], + password: program.user.split(":")[1] +}; +console.log('url\n', url); +console.log('data\n', data); +request.post({url: url, json: data}, function (err, res, body) { + if (err) { + console.log('error\n', err); + } + else { + console.log('statusCode\n', res.statusCode); + console.log('headers\n', res.headers); + console.log('body\n', body); + } +}); +function range(val) { + return val.split('..').map(Number); +} +function list(val) { + return val.split(','); +} diff --git a/utils/group.js b/utils/group.js new file mode 100755 index 0000000..2502891 --- /dev/null +++ b/utils/group.js @@ -0,0 +1,41 @@ +#!/usr/bin/env node + +'use strict'; + +var program = require('commander'), + request = require('request'), + util = require('util'), + i, + url, + trans; + +program + .version('0.0.1') + .option('-H, --host [hostname]', 'host, \'localhost\' by default', 'localhost') + .option('-P, --port [number]', 'port, 3001 by default', 3001, parseInt) + .option('-Q, --queues [list]', 'list of queues separated by comma', list, ["Q1"]) + .option('-G, --group [id]', 'group to be created', ["G1"]) + .option('-X, --secure', 'use HTTPS', false) + .parse(process.argv); +url = util.format('%s://%s:%d/group', program.secure ? 'https' : 'http', program.host, program.port); +trans = { + 'name': program.group, + 'queues': program.queues}; +console.log('url\n', url); +console.log('data\n', trans); +request.post({url: url, json: trans}, function (err, res, body) { + if (err) { + console.log('error\n', err); + } + else { + console.log('statusCode\n', res.statusCode); + console.log('headers\n', res.headers); + console.log('body\n', body); + } +}); +function range(val) { + return val.split('..').map(Number); +} +function list(val) { + return val.split(','); +} diff --git a/utils/pop.js b/utils/pop.js new file mode 100755 index 0000000..391a70c --- /dev/null +++ b/utils/pop.js @@ -0,0 +1,69 @@ +#!/usr/bin/env node + +'use strict'; + +var program = require('commander'), + http = require('http'), + https = require('https'), + qs = require('querystring'), + util = require('util'), + action, + i, + options, + protocol, + path, + query; + +program + .version('0.0.1') + .option('-H, --host [hostname]', 'host, \'localhost\' by default', 'localhost') + .option('-P, --port [number]', 'port, 3001 by default', 3001, parseInt) + .option('-Q, --queue [id]', 'queue', "Q1") + .option('-R, --reliable', 'reliable extraction', false) + .option('-S, --subscribe', 'subscribe', false) + .option('-T, --timeout [secs]', 'timeout') + .option('-A, --timeoutACK [secs', 'ACK timeout') + .option('-U, --user [id:passwd]', 'username', 'popbox:itscool') + .option('-X, --secure', 'use HTTPS', false) + .parse(process.argv); +action = program.subscribe ? 'subscribe' : 'pop'; +protocol = http; +if (program.reliable) { + action += 'rel'; +} +path = util.format('/queue/%s/%s', program.queue, action); +if (program.timeout) { + query = { timeout: program.timeout} +} +if (program.timeoutACK) { + query = query || {}; + query.timeoutACK = program.timeoutACK; +} +if (query) { + path += '?' + qs.stringify(query); +} +console.log('path\n', path); +options = {method: 'POST', host: program.host, port: program.port, path: path}; +if (program.secure) { + protocol = https; + options.auth = program.user; +} +protocol.request(options,function (res) { + console.log('statusCode\n', res.statusCode); + console.log('headers\n', res.headers); + console.log('body'); + res.setEncoding('utf8'); + res.on('data', function (data) { + console.log(data); + }); + res.on('err', function (err) { + console.err('error\n', err); + }); +}).end(); + +function range(val) { + return val.split('..').map(Number); +} +function list(val) { + return val.split(','); +} diff --git a/utils/provision.js b/utils/provision.js new file mode 100755 index 0000000..6c77b80 --- /dev/null +++ b/utils/provision.js @@ -0,0 +1,57 @@ +#!/usr/bin/env node + +'use strict'; + +var program = require('commander'), + request = require('request'), + util = require('util'), + i, + url, + trans; + +program + .version('0.0.1') + .option('-H, --host [hostname]', 'host, \'localhost\' by default', 'localhost') + .option('-P, --port [number]', 'port, 3001 by default', 3001, parseInt) + .option('-M, --message [text]', 'message', '¡hola!\n') + .option('-Q, --queues [list]', 'list of queues separated by comma', list, ["Q1"]) + .option('-G, --groups [list]', 'list of groups separated by comma', list) + .option('-C, --callback [url]', 'callback URL') + .option('-E, --expiration [url]', 'expiration delay') + .option('-X, --secure', 'use HTTPS', false) + .parse(process.argv); +url = util.format('%s://%s:%d/trans', program.secure ? 'https' : 'http', program.host, program.port); +trans = { + 'payload': program.message, + 'priority': 'H', + 'queue': []}; +if (program.expiration) { + trans.expirationDelay = program.expiration; +} +if (program.groups) { + trans.groups = program.groups; +} +if (program.callback) { + trans.callback = program.callback; +} +for (i = 0; i < program.queues.length; i++) { + trans.queue.push({id: program.queues[i]}); +} +console.log('url\n', url); +console.log('trans\n', trans); +request.post({url: url, json: trans}, function (err, res, body) { + if (err) { + console.log('error\n', err); + } + else { + console.log('statusCode\n', res.statusCode); + console.log('headers\n', res.headers); + console.log('body\n', body); + } +}); +function range(val) { + return val.split('..').map(Number); +} +function list(val) { + return val.split(','); +} diff --git a/utils/trans_info.js b/utils/trans_info.js new file mode 100755 index 0000000..ba5a15d --- /dev/null +++ b/utils/trans_info.js @@ -0,0 +1,43 @@ +#!/usr/bin/env node + +'use strict'; + +var program = require('commander'), + request = require('request'), + util = require('util'), + i, + url, + trans; + +program + .version('0.0.1') + .option('-H, --host [hostname]', 'host, \'localhost\' by default', 'localhost') + .option('-P, --port [number]', 'port, 3001 by default', 3001, parseInt) + .option('-T, --trans [id]', 'transaction') + .option('-X, --secure', 'use HTTPS', false) + .parse(process.argv); +url = util.format('%s://%s:%d/trans/%s', program.secure ? 'https' : 'http', program.host, program.port, program.trans); +reqAux(url, function () { + reqAux(url + '/state', function () { + }); +}); +function reqAux(url, done) { + console.log('url\n', url); + request.get({url: url, headers: {'Accept': 'application/json'}}, function (err, res, body) { + if (err) { + console.log('error\n', err); + } + else { + console.log('statusCode\n', res.statusCode); + console.log('headers\n', res.headers); + console.log('body\n', body); + } + done(err); + }); +} +function range(val) { + return val.split('..').map(Number); +} +function list(val) { + return val.split(','); +}