From ae92c5bc1a944bbb07179ce5e813d93c0d34d6f5 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 20 Oct 2019 14:29:02 +0200 Subject: [PATCH] test: expand Worker test for non-shared ArrayBuffer This test would be broken by V8 7.9 due to the changed `ArrayBuffer` backing store management (the same way that V8 7.8 broke this for `SharedArrayBuffer`s). While working on a solution, it would be good to already have this test in Node.js to avoid unnecessary accidental breakage. Refs: https://github.com/nodejs/node-v8/issues/115 --- ...er-sharedarraybuffer-from-worker-thread.js | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/test/parallel/test-worker-sharedarraybuffer-from-worker-thread.js b/test/parallel/test-worker-sharedarraybuffer-from-worker-thread.js index 56dfe2ec41ab3a..ce8410f6dd3d75 100644 --- a/test/parallel/test-worker-sharedarraybuffer-from-worker-thread.js +++ b/test/parallel/test-worker-sharedarraybuffer-from-worker-thread.js @@ -5,19 +5,24 @@ const assert = require('assert'); const { Worker } = require('worker_threads'); // Regression test for https://github.com/nodejs/node/issues/28777 -// Make sure that SharedArrayBuffers created in Worker threads are accessible -// after the creating thread ended. +// Make sure that SharedArrayBuffers and transferred ArrayBuffers created in +// Worker threads are accessible after the creating thread ended. -const w = new Worker(` -const { parentPort } = require('worker_threads'); -const sharedArrayBuffer = new SharedArrayBuffer(4); -parentPort.postMessage(sharedArrayBuffer); -`, { eval: true }); +for (const ctor of ['ArrayBuffer', 'SharedArrayBuffer']) { + const w = new Worker(` + const { parentPort } = require('worker_threads'); + const arrayBuffer = new ${ctor}(4); + parentPort.postMessage( + arrayBuffer, + '${ctor}' === 'SharedArrayBuffer' ? [] : [arrayBuffer]); + `, { eval: true }); -let sharedArrayBuffer; -w.once('message', common.mustCall((message) => sharedArrayBuffer = message)); -w.once('exit', common.mustCall(() => { - const uint8array = new Uint8Array(sharedArrayBuffer); - uint8array[0] = 42; - assert.deepStrictEqual(uint8array, new Uint8Array([42, 0, 0, 0])); -})); + let arrayBuffer; + w.once('message', common.mustCall((message) => arrayBuffer = message)); + w.once('exit', common.mustCall(() => { + assert.strictEqual(arrayBuffer.constructor.name, ctor); + const uint8array = new Uint8Array(arrayBuffer); + uint8array[0] = 42; + assert.deepStrictEqual(uint8array, new Uint8Array([42, 0, 0, 0])); + })); +}