| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | 
							- var test = require('tap').test
 
- // simulated ulimit
 
- // this is like graceful-fs, but in reverse
 
- var fs_ = require('fs')
 
- var fs = require('../graceful-fs.js')
 
- var files = fs.readdirSync(__dirname)
 
- // Ok, no more actual file reading!
 
- var fds = 0
 
- var nextFd = 60
 
- var limit = 8
 
- fs_.open = function (path, flags, mode, cb) {
 
-   process.nextTick(function() {
 
-     ++fds
 
-     if (fds >= limit) {
 
-       --fds
 
-       var er = new Error('EMFILE Curses!')
 
-       er.code = 'EMFILE'
 
-       er.path = path
 
-       return cb(er)
 
-     } else {
 
-       cb(null, nextFd++)
 
-     }
 
-   })
 
- }
 
- fs_.openSync = function (path, flags, mode) {
 
-   if (fds >= limit) {
 
-     var er = new Error('EMFILE Curses!')
 
-     er.code = 'EMFILE'
 
-     er.path = path
 
-     throw er
 
-   } else {
 
-     ++fds
 
-     return nextFd++
 
-   }
 
- }
 
- fs_.close = function (fd, cb) {
 
-   process.nextTick(function () {
 
-     --fds
 
-     cb()
 
-   })
 
- }
 
- fs_.closeSync = function (fd) {
 
-   --fds
 
- }
 
- fs_.readdir = function (path, cb) {
 
-   process.nextTick(function() {
 
-     if (fds >= limit) {
 
-       var er = new Error('EMFILE Curses!')
 
-       er.code = 'EMFILE'
 
-       er.path = path
 
-       return cb(er)
 
-     } else {
 
-       ++fds
 
-       process.nextTick(function () {
 
-         --fds
 
-         cb(null, [__filename, "some-other-file.js"])
 
-       })
 
-     }
 
-   })
 
- }
 
- fs_.readdirSync = function (path) {
 
-   if (fds >= limit) {
 
-     var er = new Error('EMFILE Curses!')
 
-     er.code = 'EMFILE'
 
-     er.path = path
 
-     throw er
 
-   } else {
 
-     return [__filename, "some-other-file.js"]
 
-   }
 
- }
 
- test('open emfile autoreduce', function (t) {
 
-   fs.MIN_MAX_OPEN = 4
 
-   t.equal(fs.MAX_OPEN, 1024)
 
-   var max = 12
 
-   for (var i = 0; i < max; i++) {
 
-     fs.open(__filename, 'r', next(i))
 
-   }
 
-   var phase = 0
 
-   var expect =
 
-       [ [ 0, 60, null, 1024, 4, 12, 1 ],
 
-         [ 1, 61, null, 1024, 4, 12, 2 ],
 
-         [ 2, 62, null, 1024, 4, 12, 3 ],
 
-         [ 3, 63, null, 1024, 4, 12, 4 ],
 
-         [ 4, 64, null, 1024, 4, 12, 5 ],
 
-         [ 5, 65, null, 1024, 4, 12, 6 ],
 
-         [ 6, 66, null, 1024, 4, 12, 7 ],
 
-         [ 7, 67, null, 6, 4, 5, 1 ],
 
-         [ 8, 68, null, 6, 4, 5, 2 ],
 
-         [ 9, 69, null, 6, 4, 5, 3 ],
 
-         [ 10, 70, null, 6, 4, 5, 4 ],
 
-         [ 11, 71, null, 6, 4, 5, 5 ] ]
 
-   var actual = []
 
-   function next (i) { return function (er, fd) {
 
-     if (er)
 
-       throw er
 
-     actual.push([i, fd, er, fs.MAX_OPEN, fs.MIN_MAX_OPEN, fs._curOpen, fds])
 
-     if (i === max - 1) {
 
-       t.same(actual, expect)
 
-       t.ok(fs.MAX_OPEN < limit)
 
-       t.end()
 
-     }
 
-     fs.close(fd)
 
-   } }
 
- })
 
- test('readdir emfile autoreduce', function (t) {
 
-   fs.MAX_OPEN = 1024
 
-   var max = 12
 
-   for (var i = 0; i < max; i ++) {
 
-     fs.readdir(__dirname, next(i))
 
-   }
 
-   var expect =
 
-       [ [0,[__filename,"some-other-file.js"],null,7,4,7,7],
 
-         [1,[__filename,"some-other-file.js"],null,7,4,7,6],
 
-         [2,[__filename,"some-other-file.js"],null,7,4,7,5],
 
-         [3,[__filename,"some-other-file.js"],null,7,4,7,4],
 
-         [4,[__filename,"some-other-file.js"],null,7,4,7,3],
 
-         [5,[__filename,"some-other-file.js"],null,7,4,6,2],
 
-         [6,[__filename,"some-other-file.js"],null,7,4,5,1],
 
-         [7,[__filename,"some-other-file.js"],null,7,4,4,0],
 
-         [8,[__filename,"some-other-file.js"],null,7,4,3,3],
 
-         [9,[__filename,"some-other-file.js"],null,7,4,2,2],
 
-         [10,[__filename,"some-other-file.js"],null,7,4,1,1],
 
-         [11,[__filename,"some-other-file.js"],null,7,4,0,0] ]
 
-   var actual = []
 
-   function next (i) { return function (er, files) {
 
-     if (er)
 
-       throw er
 
-     var line = [i, files, er, fs.MAX_OPEN, fs.MIN_MAX_OPEN, fs._curOpen, fds ]
 
-     actual.push(line)
 
-     if (i === max - 1) {
 
-       t.ok(fs.MAX_OPEN < limit)
 
-       t.same(actual, expect)
 
-       t.end()
 
-     }
 
-   } }
 
- })
 
 
  |