HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/tana/frontend/node_modules/globule/node_modules/graceful-fs/test/ulimit.js
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()
    }
  } }
})