From eecb92c9da1c2766fc1fd4d00d2b28af5a24b13a Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 18 Jul 2020 08:51:53 -0700 Subject: [PATCH] test: fix flaky test-watch-file PR-URL: https://github.com/nodejs/node/pull/34420 Reviewed-By: Anna Henningsen Reviewed-By: Myles Borins --- test/pummel/test-watch-file.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/test/pummel/test-watch-file.js b/test/pummel/test-watch-file.js index 9bac9004835c59..bbbbf396d72227 100644 --- a/test/pummel/test-watch-file.js +++ b/test/pummel/test-watch-file.js @@ -34,8 +34,11 @@ fs.closeSync(fs.openSync(f, 'w')); let changes = 0; function watchFile() { fs.watchFile(f, (curr, prev) => { + // Make sure there is at least one watch event that shows a changed mtime. + if (curr.mtime <= prev.mtime) { + return; + } changes++; - assert.notDeepStrictEqual(curr.mtime, prev.mtime); fs.unwatchFile(f); watchFile(); fs.unwatchFile(f); @@ -44,10 +47,17 @@ function watchFile() { watchFile(); +function changeFile() { + const fd = fs.openSync(f, 'w+'); + fs.writeSync(fd, 'xyz\n'); + fs.closeSync(fd); +} -const fd = fs.openSync(f, 'w+'); -fs.writeSync(fd, 'xyz\n'); -fs.closeSync(fd); +changeFile(); +const interval = setInterval(changeFile, 1000); +// Use unref() here so fs.watchFile() watcher is the only thing keeping the +// event loop open. +interval.unref(); process.on('exit', function() { assert.ok(changes > 0);