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 strict';
require('../common');
const common = require('../common');
const fixtures = require('../common/fixtures');
const assert = require('assert');
const fs = require('fs');
@ -29,72 +29,95 @@ const existingFile = fixtures.path('exit.js');
const existingFile2 = fixtures.path('create-file.js');
const existingDir = fixtures.path('empty');
const existingDir2 = fixtures.path('keys');
const uv = process.binding('uv');
// ASYNC_CALL
fs.stat(fn, function(err) {
fs.stat(fn, common.mustCall((err) => {
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) {
assert.ok(err.message.includes(fn));
});
fs.lstat(fn, common.mustCall((err) => {
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));
});
}));
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(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(existingFile2));
});
}));
fs.unlink(fn, function(err) {
fs.unlink(fn, common.mustCall((err) => {
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));
});
}));
fs.rename(existingDir, existingDir2, function(err) {
fs.rename(existingDir, existingDir2, common.mustCall((err) => {
assert.ok(err.message.includes(existingDir));
assert.ok(err.message.includes(existingDir2));
});
}));
fs.rmdir(fn, function(err) {
fs.rmdir(fn, common.mustCall((err) => {
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));
});
}));
fs.rmdir(existingFile, function(err) {
fs.rmdir(existingFile, common.mustCall((err) => {
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));
});
}));
fs.open(fn, 'r', 0o666, function(err) {
fs.open(fn, 'r', 0o666, common.mustCall((err) => {
assert.ok(err.message.includes(fn));
});
}));
fs.readFile(fn, function(err) {
fs.readFile(fn, common.mustCall((err) => {
assert.ok(err.message.includes(fn));
});
}));
// Sync
@ -106,7 +129,13 @@ try {
fs.statSync(fn);
} catch (err) {
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 {
@ -130,7 +159,26 @@ try {
fs.lstatSync(fn);
} catch (err) {
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 {
@ -224,9 +272,4 @@ try {
assert.ok(err.message.includes(fn));
}
process.on('exit', function() {
assert.strictEqual(
expected, errors.length,
`Test fs sync exceptions raised, got ${errors.length} expected ${expected}`
);
});
assert.strictEqual(expected, errors.length);