| Index: node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/graceful-fs/test/max-open.js
|
| diff --git a/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/graceful-fs/test/max-open.js b/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/graceful-fs/test/max-open.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..44d52679b9bf522da61fbdffe0a1245f95529819
|
| --- /dev/null
|
| +++ b/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/graceful-fs/test/max-open.js
|
| @@ -0,0 +1,69 @@
|
| +var test = require('tap').test
|
| +var fs = require('../')
|
| +
|
| +test('open lots of stuff', function (t) {
|
| + // Get around EBADF from libuv by making sure that stderr is opened
|
| + // Otherwise Darwin will refuse to give us a FD for stderr!
|
| + process.stderr.write('')
|
| +
|
| + // How many parallel open()'s to do
|
| + var n = 1024
|
| + var opens = 0
|
| + var fds = []
|
| + var going = true
|
| + var closing = false
|
| + var doneCalled = 0
|
| +
|
| + for (var i = 0; i < n; i++) {
|
| + go()
|
| + }
|
| +
|
| + function go() {
|
| + opens++
|
| + fs.open(__filename, 'r', function (er, fd) {
|
| + if (er) throw er
|
| + fds.push(fd)
|
| + if (going) go()
|
| + })
|
| + }
|
| +
|
| + // should hit ulimit pretty fast
|
| + setTimeout(function () {
|
| + going = false
|
| + t.equal(opens - fds.length, n)
|
| + done()
|
| + }, 100)
|
| +
|
| +
|
| + function done () {
|
| + if (closing) return
|
| + doneCalled++
|
| +
|
| + if (fds.length === 0) {
|
| + //console.error('done called %d times', doneCalled)
|
| + // First because of the timeout
|
| + // Then to close the fd's opened afterwards
|
| + // Then this time, to complete.
|
| + // Might take multiple passes, depending on CPU speed
|
| + // and ulimit, but at least 3 in every case.
|
| + t.ok(doneCalled >= 3)
|
| + return t.end()
|
| + }
|
| +
|
| + closing = true
|
| + setTimeout(function () {
|
| + // console.error('do closing again')
|
| + closing = false
|
| + done()
|
| + }, 100)
|
| +
|
| + // console.error('closing time')
|
| + var closes = fds.slice(0)
|
| + fds.length = 0
|
| + closes.forEach(function (fd) {
|
| + fs.close(fd, function (er) {
|
| + if (er) throw er
|
| + })
|
| + })
|
| + }
|
| +})
|
|
|