test: handle unknown message type in worker threads

Check that main thread handles an unknown message type from a worker
thread as expected.

PR-URL: https://github.com/nodejs/node/pull/27995
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
Rich Trott 2019-05-31 17:46:14 +02:00
parent 04053c4124
commit e8f3119190
2 changed files with 33 additions and 9 deletions

View File

@ -6,20 +6,19 @@
// expected.
const common = require('../common');
common.skipIfWorker();
const assert = require('assert');
const { Worker, isMainThread } = require('worker_threads');
if (isMainThread) {
const worker = new Worker(__filename);
worker.on('error', common.mustCall((e) => {
assert.strictEqual(e.code, 'ERR_WORKER_UNSERIALIZABLE_ERROR');
}));
} else {
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');
}));

View File

@ -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 });
}