From 6dbe6bde565dc4589a6984d7acb177a5e69deda6 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Sun, 9 Feb 2020 14:42:57 +0100 Subject: [PATCH] test: fix flaky parallel/test-repl-history-navigation test Two scenarios should be tested: 1. The completion is triggered and the result is printed before the next invocation. 2. The completion is triggered multiple times right after each other without waiting for the result. In that case only the last result should be printed. The first scenario did not need a timeout while the latter did not need a timeout for the second invocation. PR-URL: https://github.com/nodejs/node/pull/31708 Fixes: https://github.com/nodejs/node/issues/31094 Reviewed-By: Denys Otrishko Reviewed-By: James M Snell --- test/parallel/test-repl-history-navigation.js | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/test/parallel/test-repl-history-navigation.js b/test/parallel/test-repl-history-navigation.js index c4ca7f8147b021..8eda8e3ceceeef 100644 --- a/test/parallel/test-repl-history-navigation.js +++ b/test/parallel/test-repl-history-navigation.js @@ -18,7 +18,6 @@ const defaultHistoryPath = path.join(tmpdir.path, '.node_repl_history'); // Create an input stream specialized for testing an array of actions class ActionStream extends stream.Stream { run(data) { - let reallyWait = true; const _iter = data[Symbol.iterator](); const doAction = () => { const next = _iter.next(); @@ -34,12 +33,7 @@ class ActionStream extends stream.Stream { } else { this.emit('data', `${action}`); } - if (action === WAIT && reallyWait) { - setTimeout(doAction, common.platformTimeout(50)); - reallyWait = false; - } else { - setImmediate(doAction); - } + setImmediate(doAction); }; doAction(); } @@ -67,6 +61,8 @@ const WAIT = '€'; const prev = process.features.inspector; +let completions = 0; + const tests = [ { // Creates few history to navigate for env: { NODE_REPL_HISTORY: defaultHistoryPath }, @@ -435,12 +431,11 @@ const tests = [ env: { NODE_REPL_HISTORY: defaultHistoryPath }, completer(line, callback) { if (line.endsWith(WAIT)) { - setTimeout( - callback, - common.platformTimeout(40), - null, - [[`${WAIT}WOW`], line] - ); + if (completions++ === 0) { + callback(null, [[`${WAIT}WOW`], line]); + } else { + setTimeout(callback, 1000, null, [[`${WAIT}WOW`], line]).unref(); + } } else { callback(null, [[' Always visible'], line]); }