Skip to content

Commit

Permalink
Merge remote-tracking branch 'sethtml/connect_options'
Browse files Browse the repository at this point in the history
  • Loading branch information
christkv committed Jul 20, 2011
2 parents 3143e73 + 3dba69a commit ed30054
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 3 deletions.
15 changes: 12 additions & 3 deletions lib/mongodb/db.js
Expand Up @@ -686,7 +686,14 @@ Db.prototype.executeCommand = function(db_command, options, callback) {
**/
Db.DEFAULT_URL = 'mongo://localhost:27017/default';

exports.connect = function(url, callback) {
exports.connect = function(url, options, callback) {
var args = Array.prototype.slice.call(arguments, 1);
callback = args.pop();
options = args.length ? args.shift() : null;
options = options || {};
var serverOptions = options.server || {};
var dbOptions = options.db || {};

config = require('url').parse(url || Db.DEFAULT_URL);

if (!config['protocol'].match(/^mongo/))
Expand All @@ -700,7 +707,9 @@ exports.connect = function(url, callback) {
var auth = config['auth'].split(':', 2);
}

var db = new Db(dbname, new Server(host, port, {}), {});
server = new Server(host, port, serverOptions);

var db = new Db(dbname, server, dbOptions);
db.open(function(err, db){
if(!err && auth){
db.authenticate(auth[0], auth[1], function(err, success){
Expand All @@ -715,4 +724,4 @@ exports.connect = function(url, callback) {
callback(err, db);
}
});
}
}
92 changes: 92 additions & 0 deletions test/connect_test.js
@@ -0,0 +1,92 @@
var mongodb = process.env['TEST_NATIVE'] != null ? require('../lib/mongodb').native() : require('../lib/mongodb').pure();

var testCase = require('../deps/nodeunit').testCase,
debug = require('util').debug
inspect = require('util').inspect,
nodeunit = require('../deps/nodeunit'),
Db = mongodb.Db,
Cursor = mongodb.Cursor,
connect = mongodb.connect,
Script = require('vm'),
Collection = mongodb.Collection,
Server = mongodb.Server,
Step = require("../deps/step/lib/step");

var MONGODB = 'integration_tests';
var clientUrl = 'mongo://localhost:27017/' + MONGODB;

function connectionTester(test, testName) {
return function(err, db) {
test.equal(err, null);
db.collection(testName, function(err, collection) {
test.equal(err, null);
var doc = {foo:123};
collection.insert({foo:123}, {safe:true}, function(err, docs) {
test.equal(err, null);
db.dropDatabase(function(err, done) {
test.equal(err, null);
test.ok(done);
test.done();
});
});
});
};
};

exports.testConnectNoOptions = function(test) {
connect(clientUrl, connectionTester(test, 'testConnectNoOptions'));
};

exports.testConnectDbOptions = function(test) {
connect(clientUrl,
{ db: {native_parser: (process.env['TEST_NATIVE'] != null)} },
connectionTester(test, 'testConnectDbOptions'));
};

exports.testConnectServerOptions = function(test) {
connect(clientUrl,
{ server: {auto_reconnect: true, poolSize: 4} },
connectionTester(test, 'testConnectServerOptions'));
};

exports.testConnectAllOptions = function(test) {
connect(clientUrl,
{ server: {auto_reconnect: true, poolSize: 4},
db: {native_parser: (process.env['TEST_NATIVE'] != null)} },
connectionTester(test, 'testConnectAllOptions'));
};

exports.testConnectGoodAuth = function(test) {
var user = 'testConnectGoodAuth', password = 'password';
// First add a user.
connect(clientUrl, function(err, db) {
test.equal(err, null);
db.addUser(user, password, function(err, result) {
test.equal(err, null);
db.close();
restOfTest();
});
});
function restOfTest() {
var url = 'mongo://' + user + ':' + password + '@localhost:27017/' + MONGODB;
connect(url, connectionTester(test, 'testConnectGoodAuth'));
}
};

exports.testConnectBadAuth = function(test) {
var url = 'mongo://slithy:toves@localhost:27017/' + MONGODB;
connect(url, function(err, db) {
test.ok(err);
test.equal(db, null);
test.done();
});
};

exports.testConnectBadUrl = function(test) {
test.throws(function() {
connect('mango://localhost:27017/' + MONGODB, function(err, db) {
test.ok(false, 'Bad URL!');
});
});
test.done();
};

0 comments on commit ed30054

Please sign in to comment.