diff --git a/test/parallel/test-worker-message-not-serializable.js b/test/parallel/test-worker-message-not-serializable.js new file mode 100644 index 00000000000000..3753c7de6cbdf9 --- /dev/null +++ b/test/parallel/test-worker-message-not-serializable.js @@ -0,0 +1,24 @@ +'use strict'; + +// Flags: --expose-internals + +// Check that main thread handles unserializable errors in a worker thread as +// expected. + +const common = require('../common'); + +const assert = require('assert'); + +const { Worker } = require('worker_threads'); + +const worker = new Worker(` + const { internalBinding } = require('internal/test/binding'); + const { getEnvMessagePort } = internalBinding('worker'); + const { messageTypes } = require('internal/worker/io'); + const messagePort = getEnvMessagePort(); + messagePort.postMessage({ type: messageTypes.COULD_NOT_SERIALIZE_ERROR }); +`, { eval: true }); + +worker.on('error', common.mustCall((e) => { + assert.strictEqual(e.code, 'ERR_WORKER_UNSERIALIZABLE_ERROR'); +})); diff --git a/test/parallel/test-worker-message-type-unknown.js b/test/parallel/test-worker-message-type-unknown.js new file mode 100644 index 00000000000000..32f6c2a32bd6b4 --- /dev/null +++ b/test/parallel/test-worker-message-type-unknown.js @@ -0,0 +1,25 @@ +'use strict'; + +// Check that main thread handles an unknown message type from a worker thread +// as expected. + +require('../common'); + +const assert = require('assert'); +const { spawnSync } = require('child_process'); + +const { Worker } = require('worker_threads'); +if (process.argv[2] !== 'spawned') { + const result = spawnSync(process.execPath, + [ '--expose-internals', __filename, 'spawned'], + { encoding: 'utf8' }); + assert.ok(result.stderr.includes('Unknown worker message type FHQWHGADS'), + `Expected error not found in: ${result.stderr}`); +} else { + new Worker(` + const { internalBinding } = require('internal/test/binding'); + const { getEnvMessagePort } = internalBinding('worker'); + const messagePort = getEnvMessagePort(); + messagePort.postMessage({ type: 'FHQWHGADS' }); + `, { eval: true }); +}