Skip to content
Permalink
Browse files

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: nodejs/node-v8#115

PR-URL: #30044
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
  • Loading branch information
addaleax authored and targos committed Oct 20, 2019
1 parent 4b57088 commit ecf6ae89f4a4d572dd20b2888420173bcd37986c
Showing with 19 additions and 14 deletions.
  1. +19 −14 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]));
}));
}

0 comments on commit ecf6ae8

Please sign in to comment.
You can’t perform that action at this time.