Skip to content

Commit 57e9f2d

Browse files
fix(NODE-4591): only set loadBalanced on handshake when explicitly set (#3386)
1 parent ffb6f93 commit 57e9f2d

File tree

2 files changed

+66
-5
lines changed

2 files changed

+66
-5
lines changed

src/cmap/connect.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,18 @@ export interface HandshakeDocument extends Document {
214214
client: ClientMetadata;
215215
compression: string[];
216216
saslSupportedMechs?: string;
217-
loadBalanced: boolean;
217+
loadBalanced?: boolean;
218218
}
219219

220-
function prepareHandshakeDocument(authContext: AuthContext, callback: Callback<HandshakeDocument>) {
220+
/**
221+
* @internal
222+
*
223+
* This function is only exposed for testing purposes.
224+
*/
225+
export function prepareHandshakeDocument(
226+
authContext: AuthContext,
227+
callback: Callback<HandshakeDocument>
228+
) {
221229
const options = authContext.options;
222230
const compressors = options.compressors ? options.compressors : [];
223231
const { serverApi } = authContext.connection;
@@ -226,10 +234,13 @@ function prepareHandshakeDocument(authContext: AuthContext, callback: Callback<H
226234
[serverApi?.version ? 'hello' : LEGACY_HELLO_COMMAND]: true,
227235
helloOk: true,
228236
client: options.metadata || makeClientMetadata(options),
229-
compression: compressors,
230-
loadBalanced: options.loadBalanced
237+
compression: compressors
231238
};
232239

240+
if (options.loadBalanced === true) {
241+
handshakeDoc.loadBalanced = true;
242+
}
243+
233244
const credentials = authContext.credentials;
234245
if (credentials) {
235246
if (credentials.mechanism === AuthMechanism.MONGODB_DEFAULT && credentials.username) {

test/unit/cmap/connect.test.js

+51-1
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@ const { expect } = require('chai');
55
const EventEmitter = require('events');
66
const { setTimeout } = require('timers');
77

8-
const { connect } = require('../../../src/cmap/connect');
8+
const {
9+
connect,
10+
prepareHandshakeDocument: prepareHandshakeDocumentCb
11+
} = require('../../../src/cmap/connect');
912
const { MongoCredentials } = require('../../../src/cmap/auth/mongo_credentials');
1013
const { genClusterTime } = require('../../tools/common');
1114
const { MongoNetworkError } = require('../../../src/error');
1215
const { HostAddress, isHello } = require('../../../src/utils');
1316
const { LEGACY_HELLO_COMMAND } = require('../../../src/constants');
17+
const { promisify } = require('util');
1418

1519
describe('Connect Tests', function () {
1620
const test = {};
@@ -112,4 +116,50 @@ describe('Connect Tests', function () {
112116
done();
113117
});
114118
}).skipReason = 'TODO(NODE-2941): stop using 240.0.0.1 in tests';
119+
120+
context('prepareHandshakeDocument', () => {
121+
const prepareHandshakeDocument = promisify(prepareHandshakeDocumentCb);
122+
123+
context('loadBalanced option', () => {
124+
context('when loadBalanced is not set as an option', () => {
125+
it('does not set loadBalanced on the handshake document', async () => {
126+
const options = {};
127+
const authContext = {
128+
connection: {},
129+
options
130+
};
131+
const handshakeDocument = await prepareHandshakeDocument(authContext);
132+
expect(handshakeDocument).not.to.have.property('loadBalanced');
133+
});
134+
});
135+
136+
context('when loadBalanced is set to false', () => {
137+
it('does not set loadBalanced on the handshake document', async () => {
138+
const options = {
139+
loadBalanced: false
140+
};
141+
const authContext = {
142+
connection: {},
143+
options
144+
};
145+
const handshakeDocument = await prepareHandshakeDocument(authContext);
146+
expect(handshakeDocument).not.to.have.property('loadBalanced');
147+
});
148+
});
149+
150+
context('when loadBalanced is set to true', () => {
151+
it('does set loadBalanced on the handshake document', async () => {
152+
const options = {
153+
loadBalanced: true
154+
};
155+
const authContext = {
156+
connection: {},
157+
options
158+
};
159+
const handshakeDocument = await prepareHandshakeDocument(authContext);
160+
expect(handshakeDocument).to.have.property('loadBalanced', true);
161+
});
162+
});
163+
});
164+
});
115165
});

0 commit comments

Comments
 (0)