Skip to content

Commit

Permalink
test: improve test coverage of fs.ReadStream with FileHandle
Browse files Browse the repository at this point in the history
PR-URL: #40018
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Zijian Liu <lxxyxzj@gmail.com>
  • Loading branch information
aduh95 authored and nodejs-github-bot committed Oct 9, 2021
1 parent eb65871 commit 1d84e91
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 15 deletions.
44 changes: 31 additions & 13 deletions test/parallel/test-fs-read-stream-file-handle.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ const tmpdir = require('../common/tmpdir');
const file = path.join(tmpdir.path, 'read_stream_filehandle_test.txt');
const input = 'hello world';

let output = '';
tmpdir.refresh();
fs.writeFileSync(file, input);

fs.promises.open(file, 'r').then(common.mustCall((handle) => {
fs.promises.open(file, 'r').then((handle) => {
handle.on('close', common.mustCall());
const stream = fs.createReadStream(null, { fd: handle });

let output = '';
stream.on('data', common.mustCallAtLeast((data) => {
output += data;
}));
Expand All @@ -24,42 +24,60 @@ fs.promises.open(file, 'r').then(common.mustCall((handle) => {
}));

stream.on('close', common.mustCall());
}));
}).then(common.mustCall());

fs.promises.open(file, 'r').then(common.mustCall((handle) => {
fs.promises.open(file, 'r').then((handle) => {
handle.on('close', common.mustCall());
const stream = fs.createReadStream(null, { fd: handle });
stream.on('data', common.mustNotCall());
stream.on('close', common.mustCall());

handle.close();
}));
return handle.close();
}).then(common.mustCall());

fs.promises.open(file, 'r').then(common.mustCall((handle) => {
fs.promises.open(file, 'r').then((handle) => {
handle.on('close', common.mustCall());
const stream = fs.createReadStream(null, { fd: handle });
stream.on('close', common.mustCall());

stream.on('data', common.mustCall(() => {
handle.close();
}));
}));
}).then(common.mustCall());

fs.promises.open(file, 'r').then(common.mustCall((handle) => {
fs.promises.open(file, 'r').then((handle) => {
handle.on('close', common.mustCall());
const stream = fs.createReadStream(null, { fd: handle });
stream.on('close', common.mustCall());

stream.close();
}));
}).then(common.mustCall());

fs.promises.open(file, 'r').then(common.mustCall((handle) => {
fs.promises.open(file, 'r').then((handle) => {
assert.throws(() => {
fs.createReadStream(null, { fd: handle, fs });
}, {
code: 'ERR_METHOD_NOT_IMPLEMENTED',
name: 'Error',
message: 'The FileHandle with fs method is not implemented'
});
handle.close();
}));
return handle.close();
}).then(common.mustCall());

fs.promises.open(file, 'r').then((handle) => {
const { read: originalReadFunction } = handle;
handle.read = common.mustCallAtLeast(function read() {
return Reflect.apply(originalReadFunction, this, arguments);
});

const stream = fs.createReadStream(null, { fd: handle });

let output = '';
stream.on('data', common.mustCallAtLeast((data) => {
output += data;
}));

stream.on('end', common.mustCall(() => {
assert.strictEqual(output, input);
}));
}).then(common.mustCall());
27 changes: 25 additions & 2 deletions test/parallel/test-fs-write-stream-file-handle.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const input = 'hello world';

tmpdir.refresh();

fs.promises.open(file, 'w+').then(common.mustCall((handle) => {
fs.promises.open(file, 'w+').then((handle) => {
handle.on('close', common.mustCall());
const stream = fs.createWriteStream(null, { fd: handle });

Expand All @@ -18,4 +18,27 @@ fs.promises.open(file, 'w+').then(common.mustCall((handle) => {
const output = fs.readFileSync(file, 'utf-8');
assert.strictEqual(output, input);
}));
}));
}).then(common.mustCall());

fs.promises.open(file, 'w+').then((handle) => {
let calls = 0;
const {
write: originalWriteFunction,
writev: originalWritevFunction
} = handle;
handle.write = function write() {
calls++;
return Reflect.apply(originalWriteFunction, this, arguments);
};
handle.writev = function writev() {
calls++;
return Reflect.apply(originalWritevFunction, this, arguments);
};
const stream = fs.createWriteStream(null, { fd: handle });

stream.end(input);
stream.on('close', common.mustCall(() => {
assert(calls > 0, 'expected at least one call to fileHandle.write or ' +
'fileHandle.writev, got 0');
}));
}).then(common.mustCall());

0 comments on commit 1d84e91

Please sign in to comment.