|
1 | 1 | 'use strict'; |
2 | | -var common = require('../common'); |
3 | | -var assert = require('assert'); |
4 | | -var spawn = require('child_process').spawn; |
5 | | -var fs = require('fs'); |
| 2 | +const common = require('../common'); |
| 3 | +const assert = require('assert'); |
| 4 | +const child_process = require('child_process'); |
| 5 | +const fs = require('fs'); |
6 | 6 |
|
7 | 7 | if (common.isWindows) { |
8 | 8 | console.log('1..0 # Skipped: no RLIMIT_NOFILE on Windows'); |
9 | 9 | return; |
10 | 10 | } |
11 | 11 |
|
12 | | -var openFds = []; |
| 12 | +const ulimit = Number(child_process.execSync('ulimit -Hn')); |
| 13 | +if (ulimit > 64 || Number.isNaN(ulimit)) { |
| 14 | + // Sorry about this nonsense. It can be replaced if |
| 15 | + // https://github.com/nodejs/node-v0.x-archive/pull/2143#issuecomment-2847886 |
| 16 | + // ever happens. |
| 17 | + const result = child_process.spawnSync( |
| 18 | + '/bin/sh', |
| 19 | + ['-c', `ulimit -n 64 && '${process.execPath}' '${__filename}'`] |
| 20 | + ); |
| 21 | + assert.strictEqual(result.stdout.toString(), ''); |
| 22 | + assert.strictEqual(result.stderr.toString(), ''); |
| 23 | + assert.strictEqual(result.status, 0); |
| 24 | + assert.strictEqual(result.error, undefined); |
| 25 | + return; |
| 26 | +} |
| 27 | + |
| 28 | +const openFds = []; |
13 | 29 |
|
14 | 30 | for (;;) { |
15 | 31 | try { |
16 | 32 | openFds.push(fs.openSync(__filename, 'r')); |
17 | 33 | } catch (err) { |
18 | | - assert(err.code === 'EMFILE' || err.code === 'ENFILE'); |
| 34 | + assert(err.code === 'EMFILE'); |
19 | 35 | break; |
20 | 36 | } |
21 | 37 | } |
22 | 38 |
|
23 | 39 | // Should emit an error, not throw. |
24 | | -var proc = spawn(process.execPath, ['-e', '0']); |
| 40 | +const proc = child_process.spawn(process.execPath, ['-e', '0']); |
25 | 41 |
|
26 | 42 | proc.on('error', common.mustCall(function(err) { |
27 | | - assert(err.code === 'EMFILE' || err.code === 'ENFILE'); |
| 43 | + assert.strictEqual(err.code, 'EMFILE'); |
28 | 44 | })); |
29 | 45 |
|
30 | 46 | proc.on('exit', function() { |
|
0 commit comments