From 583dc5f42c25ddce6a236b4096f438cabba67d00 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 26 Mar 2019 23:32:20 -0700 Subject: [PATCH] test: add known_issues test for fs.copyFile() On macOS, fs.copyFile() may not respect file permissions. There is a PR for libuv that should fix this, but until it lands and we can either float a patch or upgrade libuv, have a known_issues test. Ref: https://github.com/nodejs/node/issues/26936 Ref: https://github.com/libuv/libuv/pull/2233 PR-URL: https://github.com/nodejs/node/pull/26939 Refs: https://github.com/nodejs/node/issues/26936 Refs: https://github.com/libuv/libuv/pull/2233 Reviewed-By: Ruben Bridgewater Reviewed-By: Anto Aravinth Reviewed-By: Sakthipriyan Vairamani --- test/known_issues/known_issues.status | 6 +++ .../test-fs-copyfile-respect-permissions.js | 50 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 test/known_issues/test-fs-copyfile-respect-permissions.js diff --git a/test/known_issues/known_issues.status b/test/known_issues/known_issues.status index 4da2df28457e9e..d437ed56cb425c 100644 --- a/test/known_issues/known_issues.status +++ b/test/known_issues/known_issues.status @@ -7,19 +7,25 @@ prefix known_issues [true] # This section applies to all platforms [$system==win32] +test-fs-copyfile-respect-permissions: SKIP [$system==linux] test-vm-timeout-escape-nexttick: PASS,FLAKY 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)); +}