test: fix flaky test-worker-message-port-transfer-self

Look at the status of the `MessagePort` rather than
relying on a timeout.

PR-URL: https://github.com/nodejs/node/pull/22658
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
Anna Henningsen 2018-09-02 17:30:45 +02:00
parent caf8e7a49d
commit b3eb3a19ad
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9

View File

@ -3,6 +3,7 @@
const common = require('../common');
const assert = require('assert');
const util = require('util');
const { MessageChannel } = require('worker_threads');
const { port1, port2 } = new MessageChannel();
@ -25,9 +26,22 @@ assert.throws(common.mustCall(() => {
// The failed transfer should not affect the ports in anyway.
port2.onmessage = common.mustCall((message) => {
assert.strictEqual(message, 2);
assert(util.inspect(port1).includes('active: true'), util.inspect(port1));
assert(util.inspect(port2).includes('active: true'), util.inspect(port2));
port1.close();
setTimeout(common.mustNotCall('The communication channel is still open'),
common.platformTimeout(1000)).unref();
tick(10, () => {
assert(util.inspect(port1).includes('active: false'), util.inspect(port1));
assert(util.inspect(port2).includes('active: false'), util.inspect(port2));
});
});
port1.postMessage(2);
function tick(n, cb) {
if (n > 0)
setImmediate(() => tick(n - 1, cb));
else
cb();
}