Skip to content

Instantly share code, notes, and snippets.

@agdolla
Created October 9, 2012 09:12
Show Gist options
  • Save agdolla/3857562 to your computer and use it in GitHub Desktop.
Save agdolla/3857562 to your computer and use it in GitHub Desktop.
nodeunit does not return
var q = require('q')
, mongodb = require('mongodb')
, Db = mongodb.Db
, Server = mongodb.Server;
var server = 'localhost';
var port = 27017;
var dbconnections = [];
var sem = require('semaphore')(1);
function closedbconnections() {
var i;
for (i = 0; i < dbconnections.length; i++) {
db = dbconnections[i];
console.log(db.databaseName);
try { db.close(); } catch (ex) { console.log(ex); }
}
console.log('closed ' + i + ' connections');
dbconnections = [];
}
function listDatabases() {
var defer = q.defer();
getAuthenticatedDb('admin', 'admin', 'unittest')
.then(function (db) {
db.command({ 'listDatabases': 1 }, function (err, result) {
if (err) { console.log(err); defer.reject(err); }
else { defer.resolve(result.databases); }
})
});
return defer.promise;
}
function dbShouldNotExists(name) {
var defer = q.defer();
listDatabases()
.then(function (dbz) {
dbz.forEach(function (db) {
if (db.name == name) {
defer.reject(db);
return;
}
});
defer.resolve();
})
.fail(function () {
console.log('listdatabases failed');
defer.reject();
});
return defer.promise;
}
function getDb(name) {
var defer = q.defer();
sem.take(function () {
dbconnection = new Db(name, new Server(server, port, { 'poolSize': 1}), { safe: false });
dbconnection.open(function (err, db) {
sem.leave();
if (err) {
console.log(err);
defer.reject(err);
}
else {
dbconnections.push(dbconnection);
defer.resolve(db);
}
});
});
return defer.promise;
}
function getAuthenticatedDb(name, username, pwd) {
var defer = q.defer();
getDb(name)
.then(function(db) {
db.authenticate(username, pwd, function (err, result) {
if (err) {
defer.reject(err);
}
else {
defer.resolve(db);
}
});
});
return defer.promise;
}
exports.Test = {
'dropdbs': function (test) {
test.expect(1);
q.all([
dbShouldNotExists('test1'),
dbShouldNotExists('test2'),
dbShouldNotExists('test3')
])
.then(function () {
test.ok(true, '');
return true;
})
.fail(function (reason) {
console.log(reason);
})
.then(function () {
closedbconnections();
test.done();
});
}
}
var q = require('q')
, mongodb = require('mongodb')
, Db = mongodb.Db
, Server = mongodb.Server;
var server = 'localhost';
var port = 27017;
var dbconnections = [];
function closedbconnections() {
var i;
for (i = 0; i < dbconnections.length; i++) {
db = dbconnections[i];
console.log(db.databaseName);
try { db.close(); } catch (ex) { console.log(ex); }
}
console.log('closed ' + i + ' connections');
dbconnections = [];
}
function listDatabases() {
var defer = q.defer();
getAuthenticatedDb('admin', 'admin', 'unittest')
.then(function (db) {
db.command({ 'listDatabases': 1 }, function (err, result) {
if (err) { console.log(err); defer.reject(err); }
else { defer.resolve(result.databases); }
})
});
return defer.promise;
}
function dbShouldNotExists(name) {
var defer = q.defer();
listDatabases()
.then(function (dbz) {
dbz.forEach(function (db) {
if (db.name == name) {
defer.reject(db);
return;
}
});
defer.resolve();
})
.fail(function () {
console.log('listdatabases failed');
defer.reject();
});
return defer.promise;
}
function getDb(name) {
var defer = q.defer();
dbconnection = new Db(name, new Server(server, port, { 'poolSize': 1}), { safe: false });
dbconnection.open(function (err, db) {
if (err) {
console.log(err);
defer.reject(err);
}
else {
dbconnections.push(dbconnection);
defer.resolve(db);
}
});
return defer.promise;
}
function getAuthenticatedDb(name, username, pwd) {
var defer = q.defer();
getDb(name)
.then(function(db) {
db.authenticate(username, pwd, function (err, result) {
if (err) {
defer.reject(err);
}
else {
defer.resolve(db);
}
});
});
return defer.promise;
}
exports.Test = {
'dropdbs': function (test) {
test.expect(1);
q.all([
dbShouldNotExists('test1'),
dbShouldNotExists('test2'),
dbShouldNotExists('test3')
])
.then(function () {
test.ok(true, '');
return true;
})
.fail(function (reason) {
console.log(reason);
})
.then(function () {
closedbconnections();
test.done();
});
}
}
var reporter = require('nodeunit').reporters.default;
exports['mongotests'] = require('./mongotests.js');
reporter.run(exports, null, function () {});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment