From d8f56371a9b993b328e87cf112cb982ab689e22d Mon Sep 17 00:00:00 2001 From: cjihrig Date: Tue, 11 Apr 2017 14:26:36 -0400 Subject: [PATCH] test: add cwd ENOENT known issue test If the current working directory is removed, Node cannot start normally because the module system calls uv_cwd(). Backport-PR-URL: https://github.com/nodejs/node/pull/15479 Refs: https://github.com/nodejs/node/pull/12022 PR-URL: https://github.com/nodejs/node/pull/12343 Reviewed-By: Anna Henningsen Reviewed-By: Rich Trott Reviewed-By: James M Snell --- test/known_issues/test-cwd-enoent-file.js | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 test/known_issues/test-cwd-enoent-file.js diff --git a/test/known_issues/test-cwd-enoent-file.js b/test/known_issues/test-cwd-enoent-file.js new file mode 100644 index 00000000000000..3a5094eb398f04 --- /dev/null +++ b/test/known_issues/test-cwd-enoent-file.js @@ -0,0 +1,34 @@ +'use strict'; +// Refs: https://github.com/nodejs/node/pull/12022 +// If the cwd is deleted, Node cannot run files because the module system +// relies on uv_cwd(). The -e and -p flags still work though. +const common = require('../common'); +const assert = require('assert'); + +if (common.isSunOS || common.isWindows || common.isAix) { + // The current working directory cannot be removed on these platforms. + // Change this to common.skip() when this is no longer a known issue test. + assert.fail('cannot rmdir current working directory'); + return; +} + +const cp = require('child_process'); +const fs = require('fs'); + +if (process.argv[2] === 'child') { + // Do nothing. +} else { + common.refreshTmpDir(); + const dir = fs.mkdtempSync(common.tmpDir + '/'); + process.chdir(dir); + fs.rmdirSync(dir); + assert.throws(process.cwd, + /^Error: ENOENT: no such file or directory, uv_cwd$/); + + const r = cp.spawnSync(process.execPath, [__filename, 'child']); + + assert.strictEqual(r.status, 0); + assert.strictEqual(r.signal, null); + assert.strictEqual(r.stdout.toString().trim(), ''); + assert.strictEqual(r.stderr.toString().trim(), ''); +}