From e663156a28e8dc0c0b1824fc0a0a4f2d54da013c 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-bootstrap-modules.js | 1 + test/parallel/test-worker-eventlooputil.js | 18 ++++++++---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-bootstrap-modules.js b/test/parallel/test-bootstrap-modules.js index e6bf26ee0ab016..cb5c3d009df929 100644 --- a/test/parallel/test-bootstrap-modules.js +++ b/test/parallel/test-bootstrap-modules.js @@ -22,6 +22,7 @@ const expectedModules = new Set([ 'Internal Binding module_wrap', 'Internal Binding native_module', 'Internal Binding options', + 'Internal Binding performance', 'Internal Binding process_methods', 'Internal Binding report', 'Internal Binding string_decoder', 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' }); });