EMFILE test done

pull/2/head
Louis Chatriot 9 years ago
parent 61fbf77d18
commit 1335d31c47
  1. 2
      test/persistence.test.js
  2. 41
      test_lac/openFds.test.js

@ -872,7 +872,7 @@ describe('Persistence', function () {
}); });
}); });
it.only("Cannot cause EMFILE errors by opening too many file descriptors", function (done) { it("Cannot cause EMFILE errors by opening too many file descriptors", function (done) {
child_process.execFile('test_lac/openFdsLaunch.sh', function (err, stdout, stderr) { child_process.execFile('test_lac/openFdsLaunch.sh', function (err, stdout, stderr) {
if (err) { return done(err); } if (err) { return done(err); }

@ -1,8 +1,10 @@
var fs = require('fs') var fs = require('fs')
, child_process = require('child_process') , child_process = require('child_process')
, async = require('async') , async = require('async')
, N = 64 // One file descriptor too many , Nedb = require('../lib/datastore')
, i =0 , db = new Nedb({ filename: './workspace/openfds.db', autoload: true })
, N = 64 // Half the allowed file descriptors
, i, fds
; ;
function multipleOpen (filename, N, callback) { function multipleOpen (filename, N, callback) {
@ -10,23 +12,56 @@ function multipleOpen (filename, N, callback) {
, function (cb) { , function (cb) {
fs.open(filename, 'r', function (err, fd) { fs.open(filename, 'r', function (err, fd) {
i += 1; i += 1;
if (fd) { fds.push(fd); }
return cb(err); return cb(err);
}); });
} }
, callback); , callback);
} }
async.waterfall([ async.waterfall([
// Check that ulimit has been set to the correct value
function (cb) { function (cb) {
i = 0;
fds = [];
multipleOpen('./test_lac/openFdsTestFile', 2 * N + 1, function (err) { multipleOpen('./test_lac/openFdsTestFile', 2 * N + 1, function (err) {
if (!err) { console.log("No error occured while opening a file too many times"); } if (!err) { console.log("No error occured while opening a file too many times"); }
fds.forEach(function (fd) { fs.closeSync(fd); });
return cb(); return cb();
}) })
} }
, function (cb) { , function (cb) {
i = 0;
fds = [];
multipleOpen('./test_lac/openFdsTestFile2', N, function (err) { multipleOpen('./test_lac/openFdsTestFile2', N, function (err) {
if (err) { console.log('An unexpected error occured when opening file not too many times: ' + err); } if (err) { console.log('An unexpected error occured when opening file not too many times: ' + err); }
fds.forEach(function (fd) { fs.closeSync(fd); });
return cb();
}) })
} }
// Then actually test NeDB persistence
, function () {
db.remove({}, { multi: true }, function (err) {
if (err) { console.log(err); }
db.insert({ hello: 'world' }, function (err) {
if (err) { console.log(err); }
i = 0;
async.whilst( function () { return i < 2 * N + 1; }
, function (cb) {
db.persistence.persistCachedDatabase(function (err) {
if (err) { return cb(err); }
i += 1;
return cb();
});
}
, function (err) {
if (err) { console.log("Got unexpected error during one peresistence operation: " + err); }
}
);
});
});
}
]); ]);

Loading…
Cancel
Save