diff --git a/test/known_issues/known_issues.status b/test/known_issues/known_issues.status index 3463f0a0ecfc6a..d7e0b546d43ff8 100644 --- a/test/known_issues/known_issues.status +++ b/test/known_issues/known_issues.status @@ -7,18 +7,24 @@ prefix known_issues [true] # This section applies to all platforms [$system==win32] +test-fs-copyfile-respect-permissions: SKIP [$system==linux] test-vm-timeout-escape-promise: PASS,FLAKY +test-fs-copyfile-respect-permissions: SKIP [$system==macos] [$system==solaris] +test-fs-copyfile-respect-permissions: SKIP [$system==freebsd] +test-fs-copyfile-respect-permissions: SKIP [$system==aix] +test-fs-copyfile-respect-permissions: SKIP [$arch==arm] # https://github.com/nodejs/node/issues/24120 test-vm-timeout-escape-nexttick: PASS,FLAKY +test-fs-copyfile-respect-permissions: SKIP diff --git a/test/known_issues/test-fs-copyfile-respect-permissions.js b/test/known_issues/test-fs-copyfile-respect-permissions.js new file mode 100644 index 00000000000000..0ebc5fbfc1dbed --- /dev/null +++ b/test/known_issues/test-fs-copyfile-respect-permissions.js @@ -0,0 +1,50 @@ +'use strict'; + +// Test that fs.copyFile() respects file permissions. +// Ref: https://github.com/nodejs/node/issues/26936 + +const common = require('../common'); + +const tmpdir = require('../common/tmpdir'); +tmpdir.refresh(); + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); + +let n = 0; + +function beforeEach() { + n++; + const source = path.join(tmpdir.path, `source${n}`); + const dest = path.join(tmpdir.path, `dest${n}`); + fs.writeFileSync(source, 'source'); + fs.writeFileSync(dest, 'dest'); + fs.chmodSync(dest, '444'); + + const check = (err) => { + assert.strictEqual(err.code, 'EACCESS'); + assert.strictEqual(fs.readFileSync(dest, 'utf8'), 'dest'); + }; + + return { source, dest, check }; +} + +// Test synchronous API. +{ + const { source, dest, check } = beforeEach(); + assert.throws(() => { fs.copyFileSync(source, dest); }, check); +} + +// Test promises API. +{ + const { source, dest, check } = beforeEach(); + assert.throws(async () => { await fs.promises.copyFile(source, dest); }, + check); +} + +// Test callback API. +{ + const { source, dest, check } = beforeEach(); + fs.copyFile(source, dest, common.mustCall(check)); +}