Skip to content

Commit

Permalink
fix(session): ensure deep copies are made from policies
Browse files Browse the repository at this point in the history
  • Loading branch information
mbroadst committed Jul 7, 2016
1 parent bb3f113 commit 2cb0797
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/session.js
Expand Up @@ -173,7 +173,7 @@ Session.ErrorReceived = 'errorReceived';
Session.DispositionReceived = 'disposition';

Session.prototype.begin = function(sessionPolicy) {
var sessionParams = u.merge(sessionPolicy.options);
var sessionParams = u.deepCopy(sessionPolicy.options);
u.assertArguments(sessionParams, ['nextOutgoingId', 'incomingWindow', 'outgoingWindow']);

this.policy = sessionPolicy;
Expand All @@ -193,7 +193,7 @@ Session.prototype.begin = function(sessionPolicy) {
};

Session.prototype.createLink = function(linkPolicy) {
var policy = u.merge(linkPolicy),
var policy = u.deepCopy(linkPolicy),
attachOptions = policy.attach || {};

attachOptions.handle = this._nextHandle();
Expand Down
27 changes: 27 additions & 0 deletions test/integration/qpid/client.test.js
@@ -1,6 +1,7 @@
'use strict';
var Promise = require('bluebird'),
AMQPClient = require('../../..').Client,
Policy = require('../../..').Policy,
config = require('./config'),
expect = require('chai').expect;

Expand Down Expand Up @@ -210,5 +211,31 @@ describe('Client', function() {
});
});

it('should make a deep copy session policy', function() {
var clientA = new AMQPClient(Policy.ActiveMQ),
clientB = new AMQPClient(Policy.ActiveMQ);
return Promise.all([ clientA.connect(config.address), clientB.connect(config.address) ])
.then(function() {
expect(clientA._session.policy.options.outgoingWindow).to.eql(100);
expect(clientB._session.policy.options.outgoingWindow).to.eql(100);
expect(Policy.ActiveMQ.session.options.outgoingWindow).to.eql(100);
expect(clientA._session._sessionParams.outgoingWindow).to.eql(100);
expect(clientB._session._sessionParams.outgoingWindow).to.eql(100);
return Promise.all([ clientA.createSender('amq.topic'), clientB.createSender('amq.topic') ]);
})
.spread(function(senderA, senderB) {
return Promise.all([
senderA.send({ test: 'data' }), senderA.send({ test: 'data' }), senderB.send({ test: 'data' })
]);
})
.then(function() {
expect(clientA._session.policy.options.outgoingWindow).to.eql(100);
expect(clientB._session.policy.options.outgoingWindow).to.eql(100);
expect(Policy.ActiveMQ.session.options.outgoingWindow).to.eql(100);
expect(clientA._session._sessionParams.outgoingWindow).to.eql(98);
expect(clientB._session._sessionParams.outgoingWindow).to.eql(99);
});
});

});
});

0 comments on commit 2cb0797

Please sign in to comment.