node/test/parallel/test-fs-watch-recursive-linux-parallel-remove.js
Matteo Collina 7430638df8
fs: do not crash if the watched file is removed while setting up watch
Signed-off-by: Matteo Collina <hello@matteocollina.com>
PR-URL: https://github.com/nodejs/node/pull/53452
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
2024-06-17 14:28:12 +00:00

34 lines
980 B
JavaScript

'use strict';
const common = require('../common');
if (!common.isLinux)
common.skip('This test can run only on Linux');
// Test that the watcher do not crash if the file "disappears" while
// watch is being set up.
const path = require('node:path');
const fs = require('node:fs');
const { spawn } = require('node:child_process');
const tmpdir = require('../common/tmpdir');
const testDir = tmpdir.path;
tmpdir.refresh();
const watcher = fs.watch(testDir, { recursive: true });
watcher.on('change', function(event, filename) {
// This console.log makes the error happen
// do not remove
console.log(filename, event);
});
const testFile = path.join(testDir, 'a');
const child = spawn(process.argv[0], ['-e', `const fs = require('node:fs'); for (let i = 0; i < 10000; i++) { const fd = fs.openSync('${testFile}', 'w'); fs.writeSync(fd, Buffer.from('hello')); fs.rmSync('${testFile}') }`], {
stdio: 'inherit'
});
child.on('exit', function() {
watcher.close();
});