Skip to content

Commit

Permalink
test: add known_issues test for fs.copyFile()
Browse files Browse the repository at this point in the history
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: #26936
Ref: libuv/libuv#2233

PR-URL: #26939
Refs: #26936
Refs: libuv/libuv#2233
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
  • Loading branch information
Trott authored and MylesBorins committed May 16, 2019
1 parent d22b913 commit 583dc5f
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
6 changes: 6 additions & 0 deletions test/known_issues/known_issues.status
Original file line number Diff line number Diff line change
Expand Up @@ -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
50 changes: 50 additions & 0 deletions test/known_issues/test-fs-copyfile-respect-permissions.js
Original file line number Diff line number Diff line change
@@ -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));
}

0 comments on commit 583dc5f

Please sign in to comment.