test: verify errors thrown from fs stat APIs

PR-URL: https://github.com/nodejs/node/pull/17914
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Joyee Cheung 2017-12-28 23:59:53 +08:00
parent 8c00a809bc
commit 5eccbb09fa
No known key found for this signature in database
GPG Key ID: F586868AAD831D0C

View File

@ -20,7 +20,7 @@
// USE OR OTHER DEALINGS IN THE SOFTWARE. // USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict'; 'use strict';
require('../common'); const common = require('../common');
const fixtures = require('../common/fixtures'); const fixtures = require('../common/fixtures');
const assert = require('assert'); const assert = require('assert');
const fs = require('fs'); const fs = require('fs');
@ -29,72 +29,95 @@ const existingFile = fixtures.path('exit.js');
const existingFile2 = fixtures.path('create-file.js'); const existingFile2 = fixtures.path('create-file.js');
const existingDir = fixtures.path('empty'); const existingDir = fixtures.path('empty');
const existingDir2 = fixtures.path('keys'); const existingDir2 = fixtures.path('keys');
const uv = process.binding('uv');
// ASYNC_CALL // ASYNC_CALL
fs.stat(fn, function(err) { fs.stat(fn, common.mustCall((err) => {
assert.strictEqual(fn, err.path); assert.strictEqual(fn, err.path);
assert.ok(err.message.includes(fn)); assert.strictEqual(
}); err.message,
`ENOENT: no such file or directory, stat '${fn}'`);
assert.strictEqual(err.errno, uv.UV_ENOENT);
assert.strictEqual(err.code, 'ENOENT');
assert.strictEqual(err.syscall, 'stat');
}));
fs.lstat(fn, function(err) { fs.lstat(fn, common.mustCall((err) => {
assert.ok(err.message.includes(fn)); assert.strictEqual(fn, err.path);
}); assert.strictEqual(
err.message,
`ENOENT: no such file or directory, lstat '${fn}'`);
assert.strictEqual(err.errno, uv.UV_ENOENT);
assert.strictEqual(err.code, 'ENOENT');
assert.strictEqual(err.syscall, 'lstat');
}));
fs.readlink(fn, function(err) { {
assert.ok(err.message.includes(fn)); const fd = fs.openSync(existingFile, 'r');
}); fs.closeSync(fd);
fs.fstat(fd, common.mustCall((err) => {
assert.strictEqual(err.message, 'EBADF: bad file descriptor, fstat');
assert.strictEqual(err.errno, uv.UV_EBADF);
assert.strictEqual(err.code, 'EBADF');
assert.strictEqual(err.syscall, 'fstat');
}));
}
fs.link(fn, 'foo', function(err) { fs.readlink(fn, common.mustCall((err) => {
assert.ok(err.message.includes(fn)); assert.ok(err.message.includes(fn));
}); }));
fs.link(existingFile, existingFile2, function(err) { fs.link(fn, 'foo', common.mustCall((err) => {
assert.ok(err.message.includes(fn));
}));
fs.link(existingFile, existingFile2, common.mustCall((err) => {
assert.ok(err.message.includes(existingFile)); assert.ok(err.message.includes(existingFile));
assert.ok(err.message.includes(existingFile2)); assert.ok(err.message.includes(existingFile2));
}); }));
fs.symlink(existingFile, existingFile2, function(err) { fs.symlink(existingFile, existingFile2, common.mustCall((err) => {
assert.ok(err.message.includes(existingFile)); assert.ok(err.message.includes(existingFile));
assert.ok(err.message.includes(existingFile2)); assert.ok(err.message.includes(existingFile2));
}); }));
fs.unlink(fn, function(err) { fs.unlink(fn, common.mustCall((err) => {
assert.ok(err.message.includes(fn)); assert.ok(err.message.includes(fn));
}); }));
fs.rename(fn, 'foo', function(err) { fs.rename(fn, 'foo', common.mustCall((err) => {
assert.ok(err.message.includes(fn)); assert.ok(err.message.includes(fn));
}); }));
fs.rename(existingDir, existingDir2, function(err) { fs.rename(existingDir, existingDir2, common.mustCall((err) => {
assert.ok(err.message.includes(existingDir)); assert.ok(err.message.includes(existingDir));
assert.ok(err.message.includes(existingDir2)); assert.ok(err.message.includes(existingDir2));
}); }));
fs.rmdir(fn, function(err) { fs.rmdir(fn, common.mustCall((err) => {
assert.ok(err.message.includes(fn)); assert.ok(err.message.includes(fn));
}); }));
fs.mkdir(existingFile, 0o666, function(err) { fs.mkdir(existingFile, 0o666, common.mustCall((err) => {
assert.ok(err.message.includes(existingFile)); assert.ok(err.message.includes(existingFile));
}); }));
fs.rmdir(existingFile, function(err) { fs.rmdir(existingFile, common.mustCall((err) => {
assert.ok(err.message.includes(existingFile)); assert.ok(err.message.includes(existingFile));
}); }));
fs.chmod(fn, 0o666, function(err) { fs.chmod(fn, 0o666, common.mustCall((err) => {
assert.ok(err.message.includes(fn)); assert.ok(err.message.includes(fn));
}); }));
fs.open(fn, 'r', 0o666, function(err) { fs.open(fn, 'r', 0o666, common.mustCall((err) => {
assert.ok(err.message.includes(fn)); assert.ok(err.message.includes(fn));
}); }));
fs.readFile(fn, function(err) { fs.readFile(fn, common.mustCall((err) => {
assert.ok(err.message.includes(fn)); assert.ok(err.message.includes(fn));
}); }));
// Sync // Sync
@ -106,7 +129,13 @@ try {
fs.statSync(fn); fs.statSync(fn);
} catch (err) { } catch (err) {
errors.push('stat'); errors.push('stat');
assert.ok(err.message.includes(fn)); assert.strictEqual(fn, err.path);
assert.strictEqual(
err.message,
`ENOENT: no such file or directory, stat '${fn}'`);
assert.strictEqual(err.errno, uv.UV_ENOENT);
assert.strictEqual(err.code, 'ENOENT');
assert.strictEqual(err.syscall, 'stat');
} }
try { try {
@ -130,7 +159,26 @@ try {
fs.lstatSync(fn); fs.lstatSync(fn);
} catch (err) { } catch (err) {
errors.push('lstat'); errors.push('lstat');
assert.ok(err.message.includes(fn)); assert.strictEqual(fn, err.path);
assert.strictEqual(
err.message,
`ENOENT: no such file or directory, lstat '${fn}'`);
assert.strictEqual(err.errno, uv.UV_ENOENT);
assert.strictEqual(err.code, 'ENOENT');
assert.strictEqual(err.syscall, 'lstat');
}
try {
++expected;
const fd = fs.openSync(existingFile, 'r');
fs.closeSync(fd);
fs.fstatSync(fd);
} catch (err) {
errors.push('fstat');
assert.strictEqual(err.message, 'EBADF: bad file descriptor, fstat');
assert.strictEqual(err.errno, uv.UV_EBADF);
assert.strictEqual(err.code, 'EBADF');
assert.strictEqual(err.syscall, 'fstat');
} }
try { try {
@ -224,9 +272,4 @@ try {
assert.ok(err.message.includes(fn)); assert.ok(err.message.includes(fn));
} }
process.on('exit', function() { assert.strictEqual(expected, errors.length);
assert.strictEqual(
expected, errors.length,
`Test fs sync exceptions raised, got ${errors.length} expected ${expected}`
);
});