From 77ef94298cfdcb52ec3838037c9dab1f45fb8867 Mon Sep 17 00:00:00 2001 From: Gerhard Stoebich <18708370+Flarna@users.noreply.github.com> Date: Sat, 31 Oct 2020 01:07:39 +0100 Subject: [PATCH] test: correct test-worker-eventlooputil The active worker check compared the time from sending message till response arrived from worker with the complete time the worker was running till it responses to the spin request. If sending back the message is slow for some reason the test fails. Adapt the test to compare the time seen inside the worker with the time read from main thread. PR-URL: https://github.com/nodejs/node/pull/35891 Fixes: https://github.com/nodejs/node/issues/35844 Refs: https://github.com/nodejs/node/pull/35886 Refs: https://github.com/nodejs/node/pull/35664 Reviewed-By: Gireesh Punathil Reviewed-By: Rich Trott Backport-PR-URL: https://github.com/nodejs/node/pull/37165 --- test/parallel/test-worker-eventlooputil.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-worker-eventlooputil.js b/test/parallel/test-worker-eventlooputil.js index 6759bd362cfd05..7e012cb2b02e7a 100644 --- a/test/parallel/test-worker-eventlooputil.js +++ b/test/parallel/test-worker-eventlooputil.js @@ -34,9 +34,10 @@ function workerOnMetricsMsg(msg) { } if (msg.cmd === 'spin') { + const elu = eventLoopUtilization(); const t = now(); while (now() - t < msg.dur); - return this.postMessage(eventLoopUtilization()); + return this.postMessage(eventLoopUtilization(elu)); } } @@ -50,12 +51,13 @@ let workerELU; if (eventLoopUtilization().idle <= 0) return setTimeout(mustCall(r), 5); + mainElu = eventLoopUtilization(); + worker = new Worker(__filename, { argv: [ 'iamalive' ] }); metricsCh = new MessageChannel(); worker.postMessage({ metricsCh: metricsCh.port1 }, [ metricsCh.port1 ]); workerELU = worker.performance.eventLoopUtilization; - mainElu = eventLoopUtilization(); metricsCh.port2.once('message', mustCall(checkWorkerIdle)); metricsCh.port2.postMessage({ cmd: 'elu' }); // Make sure it's still safe to call eventLoopUtilization() after the worker @@ -66,15 +68,10 @@ let workerELU; })); })(); - function checkWorkerIdle(wElu) { - const tmpMainElu = eventLoopUtilization(mainElu); const perfWorkerElu = workerELU(); - const eluDiff = eventLoopUtilization(perfWorkerElu, mainElu); + const tmpMainElu = eventLoopUtilization(mainElu); - assert.strictEqual(idleActive(eluDiff), - (perfWorkerElu.active - mainElu.active) + - (perfWorkerElu.idle - mainElu.idle)); assert.ok(idleActive(wElu) > 0, `${idleActive(wElu)} <= 0`); assert.ok(idleActive(workerELU(wElu)) > 0, `${idleActive(workerELU(wElu))} <= 0`); @@ -104,8 +101,9 @@ function checkWorkerActive() { const w2 = workerELU(w); assert.ok(w2.active >= 50, `${w2.active} < 50`); - assert.ok(idleActive(wElu) > idleActive(w2), - `${idleActive(wElu)} <= ${idleActive(w2)}`); + assert.ok(wElu.active >= 50, `${wElu.active} < 50`); + assert.ok(idleActive(wElu) < idleActive(w2), + `${idleActive(wElu)} >= ${idleActive(w2)}`); metricsCh.port2.postMessage({ cmd: 'close' }); });