Skip to content

Commit

Permalink
feat(QpidJavaPolicy): add policy for qpid java broker
Browse files Browse the repository at this point in the history
The main difference here is in address parsing, where the java
broker supports an ActiveMQ/JBoss format for vhosts
  • Loading branch information
mbroadst committed Oct 11, 2015
1 parent ff9b22f commit 14c3913
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 14 deletions.
20 changes: 9 additions & 11 deletions lib/index.js
@@ -1,10 +1,5 @@
'use strict';
var DefaultPolicy = require('./policies/default_policy'),
EventHubPolicy = require('./policies/event_hub_policy'),
ServiceBusQueuePolicy = require('./policies/service_bus_queue_policy'),
ServiceBusTopicPolicy = require('./policies/service_bus_topic_policy'),
translator = require('./adapters/translate_encoder'),

pu = require('./policies/policy_utilities'),
u = require('./utilities');

Expand All @@ -14,17 +9,20 @@ module.exports = {
Errors: require('./errors'),
Policy: {
Default: DefaultPolicy,
EventHub: EventHubPolicy,
ServiceBusQueue: ServiceBusQueuePolicy,
ServiceBusTopic: ServiceBusTopicPolicy,
EventHub: require('./policies/event_hub_policy'),
ServiceBusQueue: require('./policies/service_bus_queue_policy'),
ServiceBusTopic: require('./policies/service_bus_topic_policy'),
QpidJava: require('./policies/qpid_java_policy'),
Utils: pu,
merge: function(newPolicy, base) {
return u.deepMerge(newPolicy, base || DefaultPolicy);
}
},

/**
* translator, which allows you to translate from node-amqp-encoder'd values into the
* internal types used in this library. (e.g. [ 'symbol', 'symval' ] => Symbol('symval') ).
* translator, which allows you to translate from node-amqp-encoder'd
* values into the internal types used in this library. (e.g.
* [ 'symbol', 'symval' ] => Symbol('symval') ).
*/
translator: translator
translator: require('./adapters/translate_encoder')
};
20 changes: 20 additions & 0 deletions lib/policies/qpid_java_policy.js
@@ -0,0 +1,20 @@
'use strict';

var u = require('../utilities'),
DefaultPolicy = require('./default_policy');

module.exports = u.deepMerge({
defaultSubjects: false,
parseAddress: function(address) {
var result = DefaultPolicy.parseAddress(address);

// accept vhosts
if (result.path !== '/') {
var pathParts = result.path.substr(1).split('/');
result.vhost = pathParts[0];
result.path = pathParts.slice(1).join('/');
}

return result;
}
}, DefaultPolicy);
23 changes: 20 additions & 3 deletions test/unit/address.test.js
@@ -1,5 +1,6 @@
"use strict";
var defaultPolicy = require('../../lib/policies/default_policy'),
var DefaultPolicy = require('../../lib/policies/default_policy'),
QpidJavaPolicy = require('../../lib/policies/qpid_java_policy'),
expect = require('chai').expect;

describe('Address', function() {
Expand Down Expand Up @@ -66,7 +67,7 @@ describe('Address', function() {
}
].forEach(function(testCase) {
it('should match ' + testCase.description, function() {
expect(defaultPolicy.parseAddress(testCase.address))
expect(DefaultPolicy.parseAddress(testCase.address))
.to.eql(testCase.expected);
});
});
Expand All @@ -77,10 +78,26 @@ describe('Address', function() {
].forEach(function(testCase, idx) {
it('should throw error on invalid address (' + (idx+1) + ')', function() {
expect(function() {
defaultPolicy.parseAddress(testCase.address);
DefaultPolicy.parseAddress(testCase.address);
}).to.throw(Error, null, testCase.error);
});
});
});

describe('Qpid Java', function() {
it('should parse vhosts', function() {
var address = 'amqps://username:password@192.168.1.1:1234/some-vhost/topic/and/more';
expect(QpidJavaPolicy.parseAddress(address)).to.eql({
host: "192.168.1.1",
pass: "password",
path: "topic/and/more",
port: 1234,
protocol: "amqps",
rootUri: "amqps://username:password@192.168.1.1:1234",
user: "username",
vhost: "some-vhost"
});
});
});

});

0 comments on commit 14c3913

Please sign in to comment.