test: improve statwatcher async_hooks test
Modify the `fs.watchFile()` async hooks test to be more accurate; currently, it relies on undocumented methods and the fact that they use `MakeCallback()` even though there is always a JS stack below. PR-URL: https://github.com/nodejs/node/pull/21244 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
This commit is contained in:
parent
2a08925896
commit
65b2e4b6fa
@ -1,21 +1,29 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const common = require('../common');
|
const common = require('../common');
|
||||||
const commonPath = require.resolve('../common');
|
const tmpdir = require('../common/tmpdir');
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const initHooks = require('./init-hooks');
|
const initHooks = require('./init-hooks');
|
||||||
const { checkInvocations } = require('./hook-checks');
|
const { checkInvocations } = require('./hook-checks');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
if (!common.isMainThread)
|
if (!common.isMainThread)
|
||||||
common.skip('Worker bootstrapping works differently -> different async IDs');
|
common.skip('Worker bootstrapping works differently -> different async IDs');
|
||||||
|
|
||||||
|
tmpdir.refresh();
|
||||||
|
|
||||||
|
const file1 = path.join(tmpdir.path, 'file1');
|
||||||
|
const file2 = path.join(tmpdir.path, 'file2');
|
||||||
|
fs.writeFileSync(file1, 'foo');
|
||||||
|
fs.writeFileSync(file2, 'bar');
|
||||||
|
|
||||||
const hooks = initHooks();
|
const hooks = initHooks();
|
||||||
hooks.enable();
|
hooks.enable();
|
||||||
|
|
||||||
function onchange() {}
|
function onchange() {}
|
||||||
// install first file watcher
|
// install first file watcher
|
||||||
fs.watchFile(__filename, onchange);
|
const w1 = fs.watchFile(file1, { interval: 10 }, onchange);
|
||||||
|
|
||||||
let as = hooks.activitiesOfTypes('STATWATCHER');
|
let as = hooks.activitiesOfTypes('STATWATCHER');
|
||||||
assert.strictEqual(as.length, 1);
|
assert.strictEqual(as.length, 1);
|
||||||
@ -28,7 +36,7 @@ checkInvocations(statwatcher1, { init: 1 },
|
|||||||
'watcher1: when started to watch file');
|
'watcher1: when started to watch file');
|
||||||
|
|
||||||
// install second file watcher
|
// install second file watcher
|
||||||
fs.watchFile(commonPath, onchange);
|
const w2 = fs.watchFile(file2, { interval: 10 }, onchange);
|
||||||
as = hooks.activitiesOfTypes('STATWATCHER');
|
as = hooks.activitiesOfTypes('STATWATCHER');
|
||||||
assert.strictEqual(as.length, 2);
|
assert.strictEqual(as.length, 2);
|
||||||
|
|
||||||
@ -41,19 +49,29 @@ checkInvocations(statwatcher1, { init: 1 },
|
|||||||
checkInvocations(statwatcher2, { init: 1 },
|
checkInvocations(statwatcher2, { init: 1 },
|
||||||
'watcher2: when started to watch second file');
|
'watcher2: when started to watch second file');
|
||||||
|
|
||||||
// remove first file watcher
|
setTimeout(() => fs.writeFileSync(file1, 'foo++'),
|
||||||
fs.unwatchFile(__filename);
|
common.platformTimeout(100));
|
||||||
checkInvocations(statwatcher1, { init: 1, before: 1, after: 1 },
|
w1.once('change', common.mustCall(() => {
|
||||||
|
setImmediate(() => {
|
||||||
|
checkInvocations(statwatcher1, { init: 1, before: 1, after: 1 },
|
||||||
'watcher1: when unwatched first file');
|
'watcher1: when unwatched first file');
|
||||||
checkInvocations(statwatcher2, { init: 1 },
|
checkInvocations(statwatcher2, { init: 1 },
|
||||||
'watcher2: when unwatched first file');
|
'watcher2: when unwatched first file');
|
||||||
|
|
||||||
// remove second file watcher
|
setTimeout(() => fs.writeFileSync(file2, 'bar++'),
|
||||||
fs.unwatchFile(commonPath);
|
common.platformTimeout(100));
|
||||||
checkInvocations(statwatcher1, { init: 1, before: 1, after: 1 },
|
w2.once('change', common.mustCall(() => {
|
||||||
|
setImmediate(() => {
|
||||||
|
checkInvocations(statwatcher1, { init: 1, before: 1, after: 1 },
|
||||||
'watcher1: when unwatched second file');
|
'watcher1: when unwatched second file');
|
||||||
checkInvocations(statwatcher2, { init: 1, before: 1, after: 1 },
|
checkInvocations(statwatcher2, { init: 1, before: 1, after: 1 },
|
||||||
'watcher2: when unwatched second file');
|
'watcher2: when unwatched second file');
|
||||||
|
fs.unwatchFile(file1);
|
||||||
|
fs.unwatchFile(file2);
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
process.on('exit', onexit);
|
process.on('exit', onexit);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user