Skip to content
This repository was archived by the owner on Feb 4, 2022. It is now read-only.

Commit 426a95e

Browse files
committed
fix(uri_parser): ensure default port is 27017
NODE-1597
1 parent dd4eb9a commit 426a95e

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

lib/uri_parser.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ function parseConnectionString(uri, options, callback) {
274274

275275
const result = {
276276
host: parsedHost.hostname,
277-
port: parsedHost.port ? parseInt(parsedHost.port) : null
277+
port: parsedHost.port ? parseInt(parsedHost.port) : 27017
278278
};
279279

280280
if (result.port === 0) {

test/tests/unit/connection_string_spec_tests.js

+19-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
const parseConnectionString = require('../../../lib/uri_parser');
44
const fs = require('fs');
55
const f = require('util').format;
6-
const expect = require('chai').expect;
76
const punycode = require('punycode');
87
const MongoParseError = require('../../../lib/error').MongoParseError;
8+
const chai = require('chai');
9+
const expect = chai.expect;
10+
chai.use(require('chai-subset'));
911

1012
// NOTE: These are cases we could never check for unless we write out own
1113
// url parser. The node parser simply won't let these through, so we
@@ -22,6 +24,14 @@ const skipTests = [
2224
];
2325

2426
describe('Connection String (spec)', function() {
27+
it('should provide a default port if one is not provided', function(done) {
28+
parseConnectionString('mongodb://hostname', function(err, result) {
29+
expect(err).to.not.exist;
30+
expect(result.hosts[0].port).to.equal(27017);
31+
done();
32+
});
33+
});
34+
2535
const testFiles = fs
2636
.readdirSync(f('%s/../spec/connection-string', __dirname))
2737
.filter(x => x.indexOf('.json') !== -1)
@@ -63,7 +73,14 @@ describe('Connection String (spec)', function() {
6373
return host;
6474
});
6575

66-
expect(result.hosts).to.eql(test.hosts);
76+
// remove values that require no validation
77+
test.hosts.forEach(host => {
78+
Object.keys(host).forEach(key => {
79+
if (host[key] == null) delete host[key];
80+
});
81+
});
82+
83+
expect(result.hosts).to.containSubset(test.hosts);
6784
expect(result.auth).to.eql(test.auth);
6885
expect(result.options).to.eql(test.options);
6986
}

0 commit comments

Comments
 (0)